通过串行向 Arduino 发送 Numpy 数组?

2012用户

我正在尝试发送浮点数的 Numpy 数组(每个数组有 3 个成员),例如:

[-1.73921636 -0.47675802 -0.2068679 ]

通过串口到arduino。

看起来我对解决这个问题知之甚少!我在Python 中使用这些代码行

import serial
arduino=serial.Serial('com4',9600)

while 1:  
     array = function(x,y,z);
     data=bytearray(array)
     arduino.write(data)
     time.sleep(.5)

当然我不能使用 Arduino 串行监视器,所以我使用 16x2 LCD 来查看我从 python 接收到的内容。我看到的只是随机字符(通常是日语!)我认为解码 numpy 数组有问题,因为如果我把它放在arduino.write(data).

Arduino代码:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

char inputBuffer[32];

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  Serial.begin(9600);
  lcd.begin();
  lcd.backlight();
}

void loop() {
  if (Serial.available()) {

    lcd.clear();
    delay(200);

    if (Serial.available() > 0) {
      //lcd.print("                ");
      Serial.readBytesUntil('\n', inputBuffer, 32);
      //Serial.read();
      lcd.setCursor(0, 0);
      lcd.print(inputBuffer);
      memset(inputBuffer, 0, sizeof(inputBuffer));
    }
  }
}
卡尼

当您bytearray在 python 中调用时,它会将 numpy 数组转换为字节数组。例如,data = bytearray(np.array([-1.73921636, -0.47675802, -0.2068679]))为您提供一个包含 24 个元素的字节数组(numpy 数组中的每个元素都是一个 double,每个元素有 8 个字节)。

当您在 Arduino 上阅读此内容时,您需要在执行任何有用的操作之前再次将此字节数组转换为双精度数。union将对此有用。我没有 LCD 来验证这一点,但类似的东西应该正确地将字节读取为双精度。

unsigned char inputBuffer[32];

union {float f; unsigned char b[8];} num1;
union {float f; unsigned char b[8];} num2;
union {float f; unsigned char b[8];} num3;

void loop() {
    if (Serial.available()) {

        lcd.clear();
        delay(200);

        if (Serial.available() > 0) {
            Serial.readBytesUntil('\n', inputBuffer, 32);

            for (int i = 0; i < 8; i++) {
                num1.b[i] = inputBuffer[i];
                num2.b[i] = inputBuffer[8 + i];
                num3.b[i] = inputBuffer[16 + i];
            }

        // you can call the read float numbers using num1.f, num2.f, ...
        // other operations to write to the LCD go here
    }
}

此外,您可能需要考虑在消息末尾发送CRC 校验和以确保安全。当您发送字节流时,丢失一个字节会导致非常奇怪的数字。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过处理从串行发送长数组到arduino

来自分类Dev

你如何通过java向arduino发送串行文本

来自分类Dev

通过串行发送数据数组

来自分类Dev

通过套接字发送numpy数组

来自分类Dev

随时向Arduino发送数据

来自分类Dev

Arduino未通过蓝牙向Android发送消息

来自分类Dev

无法通过 Android 应用程序向 Arduino 发送字符

来自分类Dev

使用联合通过SPI从arduino向另一个arduino发送花车

来自分类Dev

可以通过串行连接发送字符串以使用c ++和arduino打开swtch吗?

来自分类Dev

通过串行将 32 位整数从 python 脚本发送到 arduino 以用于驱动 RGB 条

来自分类Dev

AS3向arduino发送长消息?

来自分类Dev

Arduino通过多维数组

来自分类Dev

通过ajax发送数组

来自分类Dev

在Arduino上使用RF24Network发送字符数组

来自分类Dev

将串行通信(Ubuntu,Python)发送到Arduino

来自分类Dev

重新组装从 Arduino 发送到 Python 的串行数据

来自分类Dev

向/从char *转换float数组并通过网络发送

来自分类Dev

奇数大小的numpy数组发送/接收

来自分类Dev

奇数大小的numpy数组发送/接收

来自分类Dev

使用系统执行Python脚本,然后serial.write()通过串行发送数据并崩溃-Raspberry Pi和Arduino

来自分类Dev

如何通过esp8266 wifi模块从arduino uno向网页发送数据?

来自分类Dev

通过MQTT将图像作为numpy数组发送到AWS IoT Core

来自分类Dev

从Java向Arduino发送字符串(简单示例)

来自分类Dev

如何向arduino发送Firmata命令以打开图钉

来自分类Dev

Arduino API和Json向Azure发送信息

来自分类Dev

Arduino API和Json向Azure发送信息

来自分类Dev

通过AJAX发送数组数据

来自分类Dev

通过Alamofire发送json数组

来自分类Dev

通过Ajax发送JS数组

Related 相关文章

热门标签

归档