首页 文章

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

提问于
浏览
0

我的设置很复杂,我认为我有一个明确的方法,但如果你看到一个更好的方法来完成我在Xbee上使用终端窗口的最终状态,请告诉我 . 我的用例是RPI#1具有互联网连接,但RPI#2没有,我想通过Xbee上的RPI#1完全控制和访问RPI#2 .

  • 我有x2 Raspberry Pi 3B,我正在使用x2 Xbee Pro S3B模块通过Xbee USB Development Shields在RPI之间进行通信 . Xbees在RPI上显示为/ dev / ttyUSB0 . 我想使用Xbees作为RPI的传输层,就像802.11 / 15或普通的以太网将用于bash的无头情况 . Xbees以115200波特率运行,并通过X-CTU工具进行命名和设置 . 我对高速数据没有幻想,但想在RPI#1上使用"see" RPI#2终端,就像使用传统传输层完成SSH一样 .

  • 我能够在透明模式下使用Xbees,并使用Screen,Minicom,"echo "文本" > /dev/ttyUSB0"和"cat < /dev/ttyUSB0"发送纯文本 . 尽管能够传递消息,但我想将这些纯文本消息用作bash输入 . 例如,当我通过RPI 1中列出的三种方法中的任何一种传递命令ls时,我想在RPI 2上使用bash exectue "ls",而不仅仅是在RPI 2的屏幕上看到它 .

  • I 've found several tools for Xbee, but don' t想要连接GPIO引脚并采用该方法;我想将Xbees用作简单的传输,仅此而已 . 如何将/ dev / ttyUSB0中的文本作为命令传递给bash,并查看结果?没有更直接的路线,我正在考虑使用crontabs和一个可擦除和重写的可执行文件来完成这项任务,但感觉这是一种最后的,非常无效的方法 .

  • 是否有一些我缺少的工具已经这样做了?我可以通过串行端口作为命令行和串行I / O同时进行"screen"吗?我找到了pyserial,它可以允许TCP绑定到/ dev / ttyUSB0端口,但我不确定这是否是正确的方法 . 截至目前,我的代码非常简单

RPI#1:

echo "ls" > /dev/ttyUSB0

RPI#2:

cat < /dev/ttyUSB0

1 回答

  • 0

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

    First, acquire Digi Xbee X-CTU software (不安装在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

    Install X-CTU Via

    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
    

    Find X-Bee Device

    确保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
    

    On Ubuntu x86 system, use X-CTU via

    sudo ./XCTU.desktop
    

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

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

    sudo usermod -a -G dialout root
    

    然后重启:

    Setup Minicom Via:

    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
    

    OR Screen:

    screen /dev/ttyUSB0
    

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

    Install Coreutils to add more options than Minicom (Screen is also advisable):

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

    这将检查串口功能和设置

    Communicate with your devices:

    请注意,您在插有X-Bee的本地计算机上与网络进行交互只要连接了X-Bee,就可以在互联网上通过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值和纠错会很好 .

相关问题