使用Xbee和RPI将串行端口输出重定向为bash命令

时间:2018-07-09 05:43:44

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

我的设置很复杂,我想我还有一个明确的方法,但是如果您看到一种更好的方法来实现在Xbee上使用终端窗口的最终状态,请告诉我。我的用例是RPI#1具有Internet连接,但RPI#2没有,我想通过Xbee通过RPI#1完全控制和访问RPI#2。

  1. 我有x2 Raspberry Pi 3B +,并且正在使用x2 Xbee Pro S3B模块通过Xbee USB Development Shields在RPI之间进行通信。 Xbees在RPI上显示为/ dev / ttyUSB0。我想将Xbees用作RPI的传输层,很像802.11 / 15或普通的旧式以太网在bash肆无忌situation的情况下使用。 Xbee以115200波特率运行,并通过X-CTU工具进行命名和设置。我对高速数据没有任何幻想,但是想“看到” RPI#1上的RPI#2终端,就像使用传统传输层完成SSH一样。
  2. 我能够在透明模式下使用Xbee,并通过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

1 个答案:

答案 0 :(得分:0)

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

首先,获取Digi Xbee X-CTU软件(未安装在Raspberry或Odroid等ARM设备上):     XCTU:         通过以下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     可以通过X-CTU使用本地xbee更新附近的其他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,您就可以在插入X-Bee的本地计算机上与网络交互,或者在通过SSH SSH的远程设备上与网络交互。另外,请注意,重新启动后,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。如果您手动执行此操作,请执行“停止”,然后重新执行start命令以收到提示。这可以是自动化的;我将使用过程监视器来更新此帖子。

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模式下平稳运行,但是至少我知道我具有连接能力,并且可以使用透明模式通过命令行远程执行基本命令和控制,包括运行命令行程序和命令。透明模式没有提供任何增强的RF传播校正技术,因此我希望API模式能够正常运行; RSSI值和错误校正会很好。