将串行从 Raspberry 传递到 Arduino USB HID

Posted

技术标签:

【中文标题】将串行从 Raspberry 传递到 Arduino USB HID【英文标题】:Passing serial from Raspberry to Arduino USB HID 【发布时间】:2019-03-23 19:20:23 【问题描述】:

我正在尝试将数据从 RPi 上的 tkinter 应用程序传递到设置为 USB HID 设备的 Arduino Leonardo,然后使用 keyboard.write() 从 arduino 传递到计算机,但并非所有数据都结束了在接收计算机上。

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

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

这是运行在树莓派上的代码:

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】:

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

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

希望这会有所帮助!

http://www.asciitable.com/

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

【讨论】:

波特率设置为 2400 成功了!谢谢!将查看链接以减少代码:)

以上是关于将串行从 Raspberry 传递到 Arduino USB HID的主要内容,如果未能解决你的问题,请参考以下文章

Raspberry pi不会使用minicom或python将串行数据发送到arduino

如何通过 Apache Web 服务器控制 Raspberry Pi 的串行 GPIO 引脚

串行读取循环不好

Raspberry Pi 卡住串行输出端口写入 Xbee

Raspberry Pi 和 Arduino 之间的简单 2 路串行通信

从 Unity 向 Raspberry 发送数据