将串行信号从Raspberry传递到Arduino USB HID

时间:2019-03-23 19:20:23

标签: python tkinter arduino raspberry-pi usb-hid

我正在尝试将数据从RPi上的tkinter应用传递到设置为USB HID设备的Arduino Leonardo,然后使用keyboard.write()从arduino传递到计算机,但不是所有数据最终到达接收计算机。

我已经在Pi上运行了tkinter应用,Pi被连接到称重传感器和超声波传感器,以记录包裹的重量和尺寸。这些值放置在tkinter树视图中。 一切正常。我已经将Pi通过串行(GPIO)连接到Arduino Leonardo,arduino设置为USB HID设备。我希望将pi上树状视图中的值传递到arduino,然后通过(USB HID)传递到连接的计算机。我几乎可以正常工作了,但是并不是所有数据都通过了,它会在几个字符后停止。我需要将TAB和INSERT传递到接收计算机,所以我要从Raspberry发送“ T”和“ I”字符串,然后将其“转换”为arduino上的HEX值。

串行和USB HID对我来说都是新手,所以我不确定是否正确设置了它...有什么想法吗?

这是在Raspberry Pi上运行的代码:

x = kolliTree.get_children()
    if x:
       count = len(x) 
       for i in x:
           a = str(kolliTree.item(i)["values"][0])
           dX = str(kolliTree.item(i)["values"][1])
           dY = str(kolliTree.item(i)["values"][2])
           dZ = str(kolliTree.item(i)["values"][3])
           w = str(kolliTree.item(i)["values"][4])
           kolli = ["T", a, "T", dX, "T", dY, "T", dZ, "T", w, "T", "I"]
           for i in kolli:
               leonardo.write(i.encode("latin1"))

这是arduino上的循环:

void loop() {

  if (Serial1.available() > 0) {
    byte inChar = Serial1.read();
    if (inChar == 84) {
      Keyboard.write(0xB3);
    }
    else if (inChar == 73) {
      Keyboard.write(0xD1);
    }
    else {
      Keyboard.write(inChar);
    }
    delay(10);

1 个答案:

答案 0 :(得分:0)

尝试向Pi发送一些ASCII字符,以节省使用标签页并插入命令的步骤。 Arduino和大多数语言都内置了将数值转换为ASCII字符的函数。您可以根据下面的链接分配一个常量整数,然后调用它,就像下面的第二个链接一样。

如果某些数据通过,但不是全部通过,请仔细检查您的波特率。还要检查值是否通过它们周围的任何填充传递,例如前端或后端的空格。尝试在接收端强制进行数据类型转换,以确保在期望字符串时不会接收到int可能很有用(例如)。

希望这会有所帮助!

http://www.asciitable.com/

https://www.instructables.com/id/Converting-integer-to-character/