【问题标题】:redirect serial port output as bash command with Xbee and RPI使用 Xbee 和 RPI 将串行端口输出重定向为 bash 命令
【发布时间】:2018-12-16 17:49:39
【问题描述】:

我的设置很复杂,我想我有一条明确的路要走,但是如果您发现更好的方法来完成我在 Xbee 上使用终端窗口的最终状态,请告诉我。我的用例是 RPI #1 具有互联网连接,但 RPI #2 没有,我想通过 Xbee 上的 RPI #1 完全控制和访问 RPI #2。

  1. 我有 x2 Raspberry Pi 3B+ 并且正在使用 x2 Xbee Pro S3B 模块通过 Xbee USB 开发扩展板在 RPI 之间进行通信。 Xbees 在 RPI 上显示为 /dev/ttyUSB0。我想将 Xbees 用作 RPI 的传输层,就像 802.11/15 或普通的旧以太网将在 bash 的无头情况下使用。 Xbees 以 115200 波特率运行,并通过 X-CTU 工具命名和设置。我对高速数据没有任何幻想,但想在 RPI #1 上“看到”RPI #2 终端,就像使用传统传输层完成 SSH 时一样。
  2. 我能够在透明模式下使用 Xbees,并通过 Screen、Minicom、“echo "text here" > /dev/ttyUSB0”和“cat
  3. 我为 Xbee 找到了几个工具,但不想连接 GPIO 引脚并采用那种方法;我想将 Xbees 用作简单的交通工具,仅此而已。如何将 /dev/ttyUSB0 中的文本作为命令传递给 bash,并查看结果?由于没有更直接的方法,我正在考虑使用 crontabs 和一个可擦除并重写的可执行文件来完成此任务,但觉得这是最后一种非常无效的方法。
  4. 是否有一些我缺少的工具已经可以做到这一点?我可以同时通过串行端口“筛选”命令行和串行 I/O 吗? 我找到了 pyserial,它可以允许 TCP 绑定到 /dev/ttyUSB0 端口,但不确定这是否是正确的方法。截至目前,我的代码就像

RPI #1:

    echo "ls" > /dev/ttyUSB0

RPI #2:

    cat < /dev/ttyUSB0

【问题讨论】:

  • 为什么不使用已经在内核中的标准usbnet设备?
  • 简化这个开始。获取 2 根 TTL 电平的 FTDI USB 串行电缆,将它们之间的 TX/RX 和 RTS/CTS 交叉,在它们之间连接接地但不连接 Vcc。现在您已经有了一个通过 USB 的串行零调制解调器接口,您可以在 minicom 中进行测试。让它工作,然后考虑放入配对的 XBee 模块以传递该数据。
  • 感谢您的及时回复先生们。我花了一些时间尝试你的解决方案,直到我意识到它们让我陷入了我已经陷入的同样困境。感谢你的努力。

标签: bash raspberry-pi serial-port pyserial xbee


【解决方案1】:

我能够从本地(尽管是远程)XBee 主机的命令行向远程(辅助,离线)Xbee 主机发送和接收命令。当我开始研究串行设备如何打开登录终端并使用 getty 工具时,我找到了答案。这是我使用透明模式的设置说明,我仍在尝试让 python-xbee 和其他工具工作以允许相同的概念,但通过 API 模式。请注意,以下说明是 95% 的解决方案,但应该让普通用户走上坚实的道路。我不是以下步骤格式的原作者,但我找到了每个步骤并通过其他各种问答论坛将它们组合起来以得出解决方案:

首先,获取Digi Xbee X-CTU软件(不安装在Raspberry或Odroid等ARM设备上): 西安交通大学: 从以下 Digi.com 链接安装,但导航到相应的软件 FTP 链接:

https://www.digi.com/support/productdetail?pid=3352&type=drivers

Linux 64 位:ftp://ftp1.digi.com/support/utilities/40002881_R.run

Linux 32 位:ftp://ftp1.digi.com/support/utilities/40002880_R.run

Windows:ftp://ftp1.digi.com/support/utilities/40003026_T.exe

Mac:ftp://ftp1.digi.com/support/utilities/40003026_T.exe

通过安装 X-CTU:

sudo wget ftp://ftp1.digi.com/support/utilities/40002880_R.run
sudo mv 40002881_R.run xctu_64bit.run
sudo chmod +x xctu_64bit.run  
sudo ./xctu_64bit.run

查找 X-Bee 设备

确保 Xbee 没有插入集线器,电源会太少,可通过以下错误识别,YMMV:

dmesg | grep ttyUSB0 

并返回错误:[228.800021] ftdi_sio ttyUSB0:未能获得调制解调器状态:-32

lsusb -v -d 0403:6001

sudo nano /boot/cmdline.txt

将控制台 tty 设备从 AMA 更改为 USB,然后对于允许远程端观看启动过程的 kgdboc,根据需要添加/匹配

console=ttyUSB0,115200 kgdboc=ttyUSB0,115200

sudo nano /etc/inittab

如果存在,请确保取消注释(删除 #),将 tty 从 AMA 更改为 USB

T0:23:respawn:/sbin/agetty -L ttyUSB0 115200 vt100

在 Ubuntu x86 系统上,通过 X-CTU 使用

sudo ./XCTU.desktop

将固件更新到最新版本 目前 Pro S3B 为 8075,然后在每个设备上将波特率设置为 115200 附近的其他 xbee 可以通过 X-CTU 使用本地 xbee 进行更新,然后将 api 模式设置为“带转义的 api 模式”。请注意,除非您对 API 模式的工作有深入的了解,否则应该使用透明模式。我从透明模式开始演示以下工作,但后来转到 API 模式以获得增强的发送接收控制功能(在撰写本文时等待工作版本)。
对将在网络上使用的所有设备执行相同的步骤;本地设备完成后,如果可见(足够接近),则可以更新其他远程设备。

关闭 X-CTU 并将当前用户添加到拨出组通过:

sudo usermod -a -G dialout root

然后重启:

通过以下方式设置 Minicom:

sudo aptitude install minicom
minicom -s
serial port setup   
a, set to /dev/ttyUSB0, then hit enter
e, set baud rate to 115200, then hit enter
hit enter again to close the window and arrive at the configuration page of minicom
select to save as dfl, followed by enter
then move to exit, and hit return
test connection to a locally connected device via
three plus symbols without hitting return
if it replies “ok” in a few seconds or less, all is well

或屏幕:

screen /dev/ttyUSB0

同样,如果您看到登录提示,则表示您已连接。请注意,屏幕可能是大多数用户的最佳选择;它具有易用性的内在品质(与 Minicom 相比),轻松处理低带宽连接,并且即使与远程主机断开连接也能保持活动状态。 ctl+a 然后k会断开连接。

安装 Coreutils 以添加比 Minicom 更多的选项(也建议使用屏幕):

sudo aptitude install coreutils && screen
stty -F /dev/ttyUSB0 -a

这将检查串行端口的功能和设置

与您的设备通信:

请注意,您可以在插入了 X-Bee 的本地计算机上与您的网络进行交互,或者在您通过 Internet 进行 SSH 连接的远程设备上与您的网络进行交互,只要它连接了 X-Bee。另外,请注意以下对 rc.local 的设置在重新启动后没有保留我的设置;这是一个进展中的工作。我手动设置它们,直到我完成自动化。 此外,我手动将 rc.local 添加到 RPI,其操作方法在某处:

sudo systemctl stop serial-getty@ttyAMA0.service
sudo systemctl disable serial-getty@ttyAMA0.service
sudo systemctl enable serial-getty@ttyUSB0.service

sudo nano /etc/rc.local
add the below before exit 0

stty 行是两次,因为已经注意到第一个实例将报告的波特率更改为 9600,第二个实例更改为 115200。如果您手动执行此操作,请执行“停止”然后重新执行启动命令以收到提示。这可以自动化;我将使用进程监视器更新这篇文章。

stty -F /dev/ttyUSB0 speed 115200 cs8 -cstopb -parenb raw
stty -F /dev/ttyUSB0 speed 115200 cs8 -cstopb -parenb raw
sudo systemctl start serial-getty@ttyUSB0.service

然后,使用 Minicom、Screen 或“cat”和“watch”查看发送的消息。使用 Minicom 时,您将通过上述说明收到登录提示。如前所述,我仍在努力让 API 模式顺利运行,但至少我知道我有连接,并且可以通过透明模式通过命令行远程执行基本命令和控制,包括运行命令行程序和命令。透明模式不提供任何增强的射频传播校正技术,因此我希望让 API 模式正常工作; RSSI 值和纠错会很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2012-03-16
    • 2012-11-15
    • 1970-01-01
    • 2013-05-31
    相关资源
    最近更新 更多