mengarahkan output port serial sebagai perintah bash dengan Xbee dan RPI

Pengaturan saya rumit dan saya pikir saya memiliki jalan yang jelas ke depan, tapi tolong beri tahu saya jika Anda melihat cara yang lebih baik untuk mencapai keadaan akhir saya dengan menggunakan jendela terminal melalui Xbee. Kasus penggunaan saya adalah RPI #1 memiliki konektivitas internet, tetapi RPI #2 tidak, dan saya ingin sepenuhnya mengontrol dan mengakses RPI #2 melalui RPI #1 melalui Xbee.

  1. Saya memiliki x2 Raspberry Pi 3B+ dan saya menggunakan modul x2 Xbee Pro S3B untuk berkomunikasi antara RPI melalui Xbee USB Development Shields. Xbees ditampilkan di RPI sebagai /dev/ttyUSB0. Saya ingin menggunakan Xbees sebagai lapisan transportasi ke RPI, seperti 802.11/15 atau ethernet lama biasa akan digunakan dalam situasi tanpa kepala dengan bash. Xbee berjalan pada kecepatan baud 115200, dan diberi nama serta pengaturan melalui alat X-CTU. Saya tidak memiliki ilusi data berkecepatan tinggi, tetapi ingin "melihat" terminal RPI #2 di RPI #1, sama seperti ketika SSH dilakukan dengan lapisan transport tradisional.
  2. Saya dapat menggunakan Xbees dalam Mode Transparan, dan mengirim teks biasa dengan Screen, Minicom, "echo "text here" > /dev/ttyUSB0", dan "cat ‹ /dev/ttyUSB0". Meskipun ada kemampuan untuk menyampaikan pesan, saya ingin menggunakan pesan teks biasa ini sebagai input bash. Misalnya, ketika saya meneruskan perintah ls melalui salah satu dari tiga metode yang tercantum dari RPI 1, saya ingin bash mengeksekusi "ls" di RPI 2, tidak hanya melihatnya tercantum di layar untuk RPI 2.
  3. Saya telah menemukan beberapa alat untuk Xbee, tetapi tidak ingin memasang pin GPIO dan menggunakan metode itu; Saya ingin menggunakan Xbees sebagai transportasi sederhana, tidak lebih. Bagaimana cara meneruskan teks dari /dev/ttyUSB0 ke bash sebagai perintah, dan melihat hasilnya? Singkatnya, saya mempertimbangkan untuk menggunakan crontab dan file yang dapat dieksekusi yang dihapus dan ditulis ulang untuk menyelesaikan tugas ini, tetapi saya merasa itu adalah metode terakhir yang sangat tidak efektif.
  4. Apakah ada alat yang saya lewatkan yang sudah melakukan hal ini? Bisakah saya "menyaring" port serial sebagai baris perintah dan I/O serial secara bersamaan? Saya menemukan pyserial, yang memungkinkan pengikatan TCP ke port /dev/ttyUSB0, tetapi saya tidak yakin apakah itu cara yang tepat atau tidak. Sampai sekarang, kode saya sesederhana

RPI #1:

    echo "ls" > /dev/ttyUSB0

RPI#2:

    cat < /dev/ttyUSB0

person james    schedule 09.07.2018    source sumber
comment
Mengapa tidak menggunakan perangkat usbnet standar yang sudah ada di kernel?   -  person Ipor Sircer    schedule 09.07.2018
comment
Sederhanakan ini untuk memulai. Dapatkan 2 kabel serial USB FTDI tingkat TTL, silangkan TX/RX dan RTS/CTS di antara keduanya, sambungkan ground di antara keduanya tetapi bukan Vcc. Sekarang Anda memiliki antarmuka serial null-modem melalui USB yang dapat Anda uji di minicom. Jadikan itu berfungsi, dan kemudian lihat untuk memasukkan modul XBee berpasangan untuk meneruskan data itu.   -  person tomlogic    schedule 09.07.2018
comment
Terima kasih atas balasan cepat Anda, Tuan-tuan. Saya menghabiskan beberapa waktu mencoba solusi Anda sampai saya menyadari bahwa solusi tersebut menempatkan saya dalam kesulitan yang sama seperti yang saya alami. Hargai upaya Anda.   -  person james    schedule 16.07.2018


Jawaban (1)


Saya dapat mengirim dan menerima perintah dari baris perintah host XBee lokal (walaupun terpencil) ke host Xbee jarak jauh (sekunder, di luar jaringan). Saya menemukan jawabannya ketika saya mulai melihat bagaimana perangkat serial dapat membuka terminal login, dan tiba di alat getty. Berikut adalah petunjuk pengaturan saya untuk penggunaan Mode Transparan, saya masih mencoba membuat python-xbee dan alat lain berfungsi untuk memungkinkan konsep yang sama, tetapi melalui mode API. Perhatikan bahwa petunjuk di bawah ini adalah solusi 95%, tetapi akan membawa pengguna umum ke masa depan. Saya bukan penulis asli langkah-langkah di bawah ini dalam formatnya, namun menemukan setiap langkah dan menggabungkannya melalui berbagai forum Tanya Jawab lainnya untuk sampai pada solusi:

Pertama, dapatkan perangkat lunak Digi Xbee X-CTU (tidak diinstal pada perangkat ARM seperti Raspberry atau Odroid): XCTU: Instal dari tautan Digi.com berikut, tetapi navigasikan ke tautan FTP perangkat lunak yang sesuai:

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

Linux 64 Bit: ftp://ftp1.digi.com/support/utilities/40002881_R. lari

Linux 32 Bit: ftp://ftp1.digi.com/support/utilities/40002880_R. lari

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

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

Instal X-CTU Melalui:

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

Temukan Perangkat X-Bee:

pastikan Xbee tidak dicolokkan ke hub, daya akan terlalu kecil, dapat dikenali melalui kesalahan di bawah ini, YMMV:

dmesg | grep ttyUSB0 

dan mengembalikan kesalahan: [228.800021] ftdi_sio ttyUSB0: gagal mendapatkan status modem: -32

lsusb -v -d 0403:6001

sudo nano /boot/cmdline.txt

ubah perangkat konsol tty dari AMA ke USB, lalu untuk kgdboc, yang memungkinkan ujung jarak jauh untuk melihat proses boot, tambahkan/buat kecocokan yang sesuai

console=ttyUSB0,115200 kgdboc=ttyUSB0,115200

sudo nano /etc/inittab

pastikan untuk membatalkan komentar (hapus #) jika ada, ubah tty dari AMA ke USB

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

Pada sistem Ubuntu x86, gunakan X-CTU melalui

sudo ./XCTU.desktop

perbarui firmware ke versi terbaru saat ini 8075 untuk Pro S3B, lalu atur baud rate ke 115200 di setiap perangkat xbee lain di sekitarnya dapat diperbarui dengan menggunakan xbee lokal melalui X-CTU, lalu atur mode api ke “mode api dengan pelarian”. Perhatikan bahwa Mode Transparan harus digunakan kecuali Anda memiliki pengetahuan mendalam untuk membuat mode API berfungsi. Saya memulai dengan Mode Transparan untuk mendemonstrasikan cara kerja di bawah ini, namun sejak itu beralih ke mode API untuk mendapatkan kemampuan kontrol kirim-terima yang ditingkatkan (menunggu versi yang berfungsi saat tulisan ini dibuat).
lakukan langkah yang sama untuk semua perangkat yang akan digunakan di jaringan; setelah perangkat lokal selesai, perangkat jarak jauh lainnya dapat diperbarui jika terlihat (cukup dekat).

Tutup X-CTU dan tambahkan pengguna saat ini ke grup dialout melalui:

sudo usermod -a -G dialout root

reboot lalu:

Pengaturan Minicom Melalui:

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

ATAU Layar:

screen /dev/ttyUSB0

sekali lagi, jika Anda melihat prompt login, Anda sudah terhubung. Perhatikan bahwa layar mungkin merupakan pilihan terbaik bagi sebagian besar pengguna; ia memiliki kualitas kemudahan penggunaan yang melekat (jika dibandingkan dengan Minicom), menangani koneksi bandwidth rendah dengan mudah, dan tetap hidup meskipun terputus dari host jarak jauh. Ctl+a dan kemudian k akan terputus.

Instal Coreutils untuk menambahkan lebih banyak opsi daripada Minicom (Layar juga disarankan):

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

ini akan memeriksa kemampuan dan pengaturan port serial

Berkomunikasi dengan perangkat Anda:

Perhatikan bahwa Anda berinteraksi dengan jaringan Anda di mesin lokal dengan X-Bee yang terhubung, atau pada perangkat jarak jauh yang Anda SSH melalui internet, selama X-Bee terpasang. Juga, perhatikan bahwa pengaturan di bawah ini untuk rc.local tidak mempertahankan pengaturan saya setelah reboot; ini sedang dalam proses. Saya mengaturnya secara manual sampai otomatisasi berhasil. Juga, saya menambahkan rc.local ke RPI secara manual, cara melakukannya ada di suatu tempat:

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

Baris stty ada dua kali karena tercatat bahwa contoh pertama mengubah baud rate yang dilaporkan menjadi 9600, yang kedua menjadi 115200. Jika Anda melakukan ini secara manual, lakukan "stop" lalu lakukan kembali perintah start untuk menerima prompt . Ini bisa dilakukan secara otomatis; Saya akan memperbarui posting ini dengan monitor proses.

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]

Kemudian, gunakan Minicom, Screen, atau "cat" dan "watch" untuk melihat pesan yang dikirim. Saat menggunakan Minicom Anda akan menerima prompt login melalui petunjuk di atas. Seperti yang dinyatakan sebelumnya, saya masih mencoba agar ini berfungsi dengan lancar untuk mode API, tetapi setidaknya saya tahu saya memiliki konektivitas dan dapat melakukan perintah & kontrol dasar melalui baris perintah dari jarak jauh dengan Mode Transparan, termasuk menjalankan program dan perintah baris perintah. Mode Transparan tidak menawarkan teknik koreksi propagasi RF yang ditingkatkan, oleh karena itu saya ingin agar mode API berfungsi; Nilai RSSI dan koreksi kesalahan akan menyenangkan.

person james    schedule 16.07.2018