перенаправить вывод последовательного порта как команду bash с Xbee и RPI

Моя установка сложна, и я думаю, что у меня есть четкий путь вперед, но, пожалуйста, дайте мне знать, если вы видите лучший способ выполнить мое конечное состояние с использованием окна терминала через Xbee. В моем случае RPI № 1 имеет подключение к Интернету, а RPI № 2 - нет, и я хочу полностью контролировать и получать доступ к RPI № 2 через RPI № 1 через Xbee.

  1. У меня x2 Raspberry Pi 3B +, и я использую модули x2 Xbee Pro S3B для связи между RPI через Xbee USB Development Shield. Xbees отображаются в RPI как / dev / ttyUSB0. Я хочу использовать Xbees в качестве транспортного уровня для RPI, так же, как 802.11 / 15 или простой старый Ethernet будут использоваться в безголовой ситуации с bash. Xbees работают со скоростью 115200 бод, их имена и настройки выполняются с помощью инструмента X-CTU. У меня нет иллюзий относительно высокоскоростной передачи данных, но я хочу «увидеть» терминал RPI # 2 на RPI # 1, так же, как когда SSH выполняется с традиционными транспортными уровнями.
  2. Я могу использовать Xbees в прозрачном режиме и отправлять простой текст с помощью Screen, Minicom, "echo" здесь "> / dev / ttyUSB0" и "cat‹ / dev / ttyUSB0 ". Несмотря на возможность передавать сообщения, я хочу использовать эти текстовые сообщения в качестве ввода bash. Например, когда я передаю команду ls с помощью любого из трех методов, перечисленных в RPI 1, я хочу иметь bash exectue «ls» на RPI 2, а не просто видеть его в списке на экране для RPI 2.
  3. Я нашел несколько инструментов для Xbee, но не хочу подключать контакты GPIO и использовать этот метод; Я хочу использовать Xbees как простой транспорт, не более того. Как передать текст из / dev / ttyUSB0 в bash в виде команды и увидеть результаты? Если не считать более прямого пути, я подумываю об использовании crontabs и исполняемого файла, который стирается и переписывается для выполнения этой задачи, но считаю, что это последний и очень неэффективный метод.
  4. Есть ли какой-то инструмент, который мне не хватает, который уже делает это? Могу ли я «экранировать» последовательный порт одновременно с командной строкой и последовательным вводом-выводом? Я нашел pyserial, который может позволить привязку TCP к порту / dev / ttyUSB0, но я не уверен, правильный ли это путь или нет. На данный момент мой код так же прост, как

RPI №1:

    echo "ls" > /dev/ttyUSB0

RPI № 2:

    cat < /dev/ttyUSB0

person james    schedule 09.07.2018    source источник
comment
Почему бы не использовать стандартное устройство usbnet, которое уже находится в ядре?   -  person Ipor Sircer    schedule 09.07.2018
comment
Упростите это для начала. Возьмите 2 последовательных кабеля USB FTDI уровня TTL, пересеките TX / RX и RTS / CTS между ними, подключите заземление между ними, но не Vcc. Теперь у вас есть последовательный нуль-модемный интерфейс через USB, который вы можете протестировать в minicom. Получите, что это работает, а затем рассмотрите возможность добавления парных модулей XBee для передачи этих данных.   -  person tomlogic    schedule 09.07.2018
comment
Спасибо за ваши быстрые ответы, господа. Я потратил некоторое время на то, чтобы пробовать ваши решения, пока не понял, что они поставили меня в такое же положение, в котором я уже был. Оцените ваши усилия.   -  person james    schedule 16.07.2018


Ответы (1)


Я мог отправлять и получать команды из командной строки локального (хотя и удаленного) хоста XBee на удаленный (вторичный, вне сети) хост Xbee. Я нашел ответ, когда начал смотреть, как последовательные устройства могут открывать терминал входа в систему, и пришел к инструменту getty. Вот мои инструкции по настройке для использования в прозрачном режиме. Я все еще пытаюсь заставить работать python-xbee и другие инструменты, чтобы реализовать ту же концепцию, но через режим API. Обратите внимание, что приведенные ниже инструкции представляют собой 95% -ное решение, но должны помочь рядовому пользователю уверенно двигаться вперед. Я не являюсь первоначальным автором приведенных ниже шагов в их формате, но нашел каждый шаг и объединил их на различных форумах вопросов и ответов, чтобы прийти к решению:

Сначала приобретите программное обеспечение Digi Xbee X-CTU (не устанавливается на устройства ARM, такие как Raspberry или Odroid): XCTU: установите со следующей ссылки Digi.com, но перейдите по FTP-ссылке соответствующего программного обеспечения:

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

64-разрядная версия Linux: ftp://ftp1.digi.com/support/utilities/40002881_R. бежать

32-разрядная версия Linux: ftp://ftp1.digi.com/support/utilities/40002880_R. бежать

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

обновите прошивку до последней версии 8075 для Pro S3B, затем установите скорость передачи на 115200 на каждом устройстве, другие xbees поблизости могут быть обновлены с помощью локального xbee через X-CTU, затем установив режим api на «api mode» с побегами ». Обратите внимание, что следует использовать прозрачный режим, если у вас нет глубоких знаний, чтобы заставить работать режим API. Я начал с прозрачного режима, чтобы продемонстрировать приведенные ниже работы, но с тех пор перешел в режим API, чтобы получить расширенные возможности управления отправкой-получением (ожидая рабочей версии на момент написания этой статьи).
выполните те же действия для всех устройств, которые будет использоваться в сети; как только локальное устройство будет завершено, другие удаленные устройства могут быть обновлены, если они видны (достаточно близко).

Закройте X-CTU и добавьте текущего пользователя в группу dialout через:

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 (также рекомендуется Screen):

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

это проверит возможности и настройки последовательного порта

Общайтесь со своими устройствами:

Обратите внимание, что вы взаимодействуете со своей сетью на локальном компьютере с подключенным X-Bee или на удаленном устройстве, на котором вы используете SSH через Интернет, если к нему подключен X-Bee. Также обратите внимание, что приведенные ниже настройки rc.local не сохранили мои настройки после перезагрузки; Работа в процессе. Я устанавливал их вручную, пока не добился автоматизации. Кроме того, я вручную добавил rc.local в RPI, инструкции для этого где-то там:

sudo systemctl stop [email protected]
sudo systemctl disable [email protected]
sudo systemctl enable [email protected]

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 [email protected]

Затем используйте Minicom, Screen или «cat» и «watch» для просмотра отправленных сообщений. При использовании Minicom вы получите запрос на вход в систему по указанным выше инструкциям. Как указывалось ранее, я все еще пытаюсь заставить это работать плавно для режима API, но, по крайней мере, я знаю, что у меня есть подключение и я могу выполнять базовые команды и управление через командную строку удаленно с помощью прозрачного режима, включая запуск программ и команд командной строки. Прозрачный режим не предлагает никаких улучшенных методов коррекции радиочастотного распространения, отсюда и мое желание заставить работать режим API; Значения RSSI и исправление ошибок было бы неплохо.

person james    schedule 16.07.2018