เปลี่ยนเส้นทางเอาต์พุตพอร์ตอนุกรมเป็นคำสั่งทุบตีด้วย 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 Shields Xbees แสดงบน RPI เป็น /dev/ttyUSB0 ฉันต้องการใช้ Xbees เป็นเลเยอร์การขนส่งไปยัง RPI เช่นเดียวกับ 802.11/15 หรืออีเธอร์เน็ตแบบเก่าธรรมดาที่จะใช้ในสถานการณ์ที่ไม่มีหัวพร้อมกับ bash Xbees ทำงานที่อัตรารับส่งข้อมูล 115200 และตั้งชื่อและตั้งค่าผ่านเครื่องมือ X-CTU ฉันไม่มีภาพลวงตาของข้อมูลความเร็วสูง แต่ต้องการ "ดู" เทอร์มินัล RPI #2 บน RPI #1 เช่นเดียวกับเมื่อ SSH สำเร็จด้วยเลเยอร์การขนส่งแบบดั้งเดิม
  2. ฉันสามารถใช้ Xbees ในโหมดโปร่งใส และส่งข้อความธรรมดาด้วยหน้าจอ มินิคอม "echo "text here" > /dev/ttyUSB0" และ "cat ‹ /dev/ttyUSB0" แม้ว่าจะสามารถส่งข้อความได้ แต่ฉันต้องการใช้ข้อความธรรมดาเหล่านี้เป็นอินพุตทุบตี ตัวอย่างเช่น เมื่อฉันส่งคำสั่ง ls ผ่านหนึ่งในสามวิธีที่แสดงจาก RPI 1 ฉันต้องการให้ bash exectue "ls" บน RPI 2 ไม่ใช่แค่เห็นมันแสดงอยู่ในรายการบนหน้าจอสำหรับ RPI 2
  3. ฉันพบเครื่องมือหลายอย่างสำหรับ Xbee แต่ไม่ต้องการต่อหมุด GPIO และใช้วิธีการนั้น ฉันต้องการใช้ Xbees เป็นพาหนะที่เรียบง่าย ไม่มีอะไรมากไปกว่านี้ ฉันจะส่งข้อความจาก /dev/ttyUSB0 ไปยัง bash เป็นคำสั่งและดูผลลัพธ์ได้อย่างไร หากไม่ใช่เส้นทางที่ตรงกว่านี้ ฉันกำลังพิจารณาใช้ crontabs และไฟล์ปฏิบัติการที่ถูกลบและเขียนใหม่เพื่อให้งานนี้สำเร็จ แต่รู้สึกว่านั่นเป็นวิธีการสุดท้ายที่ไม่ได้ผลอย่างมาก
  4. มีเครื่องมือบางอย่างที่ฉันขาดหายไปที่ทำสิ่งนี้ไปแล้วหรือไม่? ฉันสามารถ "คัดกรอง" ผ่านพอร์ตอนุกรมเป็นบรรทัดคำสั่งและ I/O อนุกรมพร้อมกันได้หรือไม่ ฉันพบ pyserial ซึ่งอาจอนุญาตให้มีการเชื่อมโยง TCP กับพอร์ต /dev/ttyUSB0 แต่ไม่แน่ใจว่านั่นเป็นวิธีที่ถูกต้องหรือไม่ ณ ตอนนี้โค้ดของฉันนั้นง่ายพอ ๆ กับ

อาร์พีไอ #1:

    echo "ls" > /dev/ttyUSB0

อาร์พีไอ #2:

    cat < /dev/ttyUSB0

person james    schedule 09.07.2018    source แหล่งที่มา
comment
ทำไมไม่ใช้อุปกรณ์ usbnet มาตรฐานซึ่งมีอยู่แล้วในเคอร์เนล   -  person Ipor Sircer    schedule 09.07.2018
comment
ลดความซับซ้อนนี้เพื่อเริ่มต้น รับสายเคเบิลอนุกรม FTDI USB ระดับ TTL 2 เส้น ข้าม TX/RX และ RTS/CTS ระหว่างสายเหล่านั้น เชื่อมต่อกราวด์ระหว่างสายเหล่านั้น แต่ไม่ใช่ Vcc ตอนนี้คุณมีอินเทอร์เฟซซีเรียลโมลโมเด็มผ่าน USB ที่คุณสามารถทดสอบในมินิคอมได้ ทำงานนั้นให้สำเร็จ จากนั้นพิจารณาการวางโมดูล 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

Linux 64 บิต: ftp://ftp1.digi.com/support/utilities/40002881_R วิ่ง

Linux 32 บิต: ftp://ftp1.digi.com/support/utilities/40002880_R วิ่ง

วินโดวส์: 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 จากนั้นสำหรับ kgdbok ซึ่งอนุญาตให้ปลายระยะไกลเพื่อดูกระบวนการบูต ให้เพิ่ม/ทำให้การจับคู่ตามความเหมาะสม

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 ด้วยการหลบหนี” โปรดทราบว่าควรใช้โหมดโปร่งใส เว้นแต่คุณจะมีความรู้เชิงลึกเพื่อทำให้โหมด API ทำงานได้ ฉันเริ่มต้นด้วยโหมดโปร่งใสเพื่อสาธิตการทำงานด้านล่าง แต่ตั้งแต่นั้นมาได้ย้ายไปยังโหมด API เพื่อเพิ่มความสามารถในการควบคุมการส่ง-รับที่ได้รับการปรับปรุง (รอดำเนินการเวอร์ชันที่ใช้งานได้ในขณะที่เขียนบทความนี้)
ทำตามขั้นตอนเดียวกันสำหรับอุปกรณ์ทั้งหมดที่ จะถูกใช้งานบนเครือข่าย เมื่ออุปกรณ์ภายในเครื่องเสร็จสมบูรณ์แล้ว จะสามารถอัปเดตอุปกรณ์ระยะไกลอื่นๆ ได้หากมองเห็นได้ (ใกล้พอ)

ปิด X-CTU และเพิ่มผู้ใช้ปัจจุบันในกลุ่มการโทรผ่าน:

sudo usermod -a -G dialout root

รีบูตแล้ว:

ตั้งค่ามินิคอมผ่าน:

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 หรือบนอุปกรณ์ระยะไกลที่คุณ 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 คุณจะได้รับข้อความแจ้งการเข้าสู่ระบบตามคำแนะนำข้างต้น ตามที่ระบุไว้ก่อนหน้านี้ ฉันยังคงพยายามทำให้สิ่งนี้ทำงานได้อย่างราบรื่นสำหรับโหมด API แต่อย่างน้อยฉันก็รู้ว่าฉันมีการเชื่อมต่อและสามารถทำคำสั่งและควบคุมพื้นฐานผ่านบรรทัดคำสั่งจากระยะไกลด้วยโหมดโปร่งใส รวมถึงการรันโปรแกรมและคำสั่งบรรทัดคำสั่ง โหมดโปร่งใสไม่มีเทคนิคการแก้ไขการแพร่กระจาย RF ที่ได้รับการปรับปรุงใดๆ ดังนั้น ฉันต้องการให้โหมด API ทำงาน ค่า RSSI และการแก้ไขข้อผิดพลาดน่าจะดี

person james    schedule 16.07.2018