Score:2

เขียนไปยังอุปกรณ์และบันทึกการตอบสนอง

ธง br

ฉันมีอุปกรณ์ที่เป็น /dev/ttyACM0 ฉันสามารถ "คัดกรอง" ไปยังอุปกรณ์นี้ได้ หน้าจอ /dev/ttyACM0 และโต้ตอบกับอุปกรณ์ ฉันต้องสามารถเขียนสคริปต์การส่งคำสั่งง่ายๆ และบันทึกการตอบสนองได้ คำสั่งง่ายๆ เช่น พิมพ์ "ver" แล้วกด return อุปกรณ์จะตอบกลับด้วยค่าเวอร์ชันที่เป็นตัวเลข มันทำงานในหน้าจอ

ฉันกำลังพยายามเขียนสคริปต์นี้ใน bash และไม่สามารถหาวิธีทำให้มันใช้งานได้ สิ่งที่ชอบ echo "ver" > /dev/ttyACM0 ไม่ก่อให้เกิดอะไร ฉันได้ลองพิมพ์สิ่งเดียวกัน ใครสามารถชี้ให้ฉันเห็นวิธีการทำเช่นนี้?

waltinator avatar
it flag
`expect` เป็นเครื่องมือที่ดีสำหรับสิ่งนี้ อ่าน `มนุษย์คาดหวัง`
jpbrain avatar
ca flag
สวัสดี @alabamatoy ฉันมีคำถาม. อุปกรณ์ของคุณคือ Arduino Mega? Arduino รีเซ็ตทุกครั้งที่คุณเปลี่ยน DTR ดังนั้นการเปิด/ปิดผ่าน bash จะรีบูตอุปกรณ์ของคุณ หน้าจอเปิดการเชื่อมต่อและอย่าปิดจนกว่าคุณจะปิดหน้าต่าง ดังนั้นจึงเป็นเรื่องง่ายที่จะทำโปรแกรม c ขนาดเล็กสำหรับสิ่งนั้น ทั้งหมดนี้ถือว่าคุณไม่มีปัญหาการเข้าถึง "rw"
alabamatoy avatar
br flag
@jpbrain ไม่ใช่ arduino แต่เป็นบอร์ด Numato USB IO https://numato.com/product/8-channel-usb-gpio-module-with-analog-inputs/
Score:1
ธง ca

ใน Unix/Linux ทุกอย่างเป็นไฟล์ ทุกครั้งที่คุณสะท้อนไปยังอุปกรณ์ (/dev) คุณกำลังเปิดเพื่อเขียน จากนั้นจึงเขียนปิด วิธีง่ายๆ ในการจับเอาต์พุตของอุปกรณ์นั้นทำได้ง่ายเพียง

tail -f /dev/ttyACM0 (-f เปิดบรรทัดไว้)

สิ่งนี้จะส่งสัญญาณออกและทำให้อุปกรณ์เปิดอยู่
ตัวอย่างเช่น ในกรณีของฉัน ฉันมีโครงการหนึ่งที่อ่านเซ็นเซอร์ใน Arduino และส่งข้อมูลแบบขนานไปยังเซิร์ฟเวอร์และพอร์ตอนุกรมด้วย

ตอนนี้ ttys อนุกรมจำเป็นต้องจับคู่ความเร็วบนระบบปฏิบัติการและอุปกรณ์ ดังนั้นบางครั้งคุณจึงไม่ได้รับเอาต์พุตเว้นแต่คุณจะมีความเร็วและการตั้งค่าที่เหมาะสม หากคุณพิมพ์เทอร์มินัล

stty /dev/ttyACM0

คุณจะได้รับการกำหนดค่าความเร็วปัจจุบัน
ดังนั้นคุณสามารถลองสิ่งนี้ (แต่ไม่ได้ผลเสมอไป)
ปรับปรุง ++

#!/bin/bash

input="/dev/ttyACM1" #ตั้งค่าอุปกรณ์

stty -F $input 115200 นาที 0
#เพิ่มเพื่อเริ่มต้นบรรทัด
stty -F $input -brkint -icrnl -imaxbel -opost -onlcr -isig 
stty -F $ อินพุต -icanon -iexten -echo -echoe -echok -echoctl -echoke

echo "ver" >>$input #ส่งคำสั่ง
tail -f $input & #reads และรอตลอดไป
นอน2วิ
killall tail # อาจเป็นปัญหาหากหางอื่นทำงาน

ในกรณีของฉันที่เชลล์ส่งออกสิ่งนี้ (จะไม่ใช้คำสั่ง ver เนื่องจากไม่ได้ใช้งาน แต่หลังจากนั้นจะอ่านจาก tty ไม่ว่า tty จะส่งอะไรก็ตาม) เมื่อส่วนท้ายของการเปลี่ยนแปลงหยุดลงก่อนหน้านี้และเอาต์พุตจะถูกตัดทอนใน 2 วินาที

1970-00-00-00:00:00: เริ่มต้น SDCard...
1970-00-00-00:00:00: เสร็จสิ้น SDCard Init
1970-00-00-00:00:00: กำลังอ่านการกำหนดค่า...
1970-00-00-00:00:00: เสร็จแล้ว...
1970-01-01-00:00:01 : IP : 192.168.22.199

อีกครั้ง แฟล็ก -f ทำให้เทอร์มินัลเปิดอยู่ แต่ถ้าฉันถอดออก ฉันจะไม่ได้อะไรเลย (ฉันสูญเสียเอาต์พุตบัฟเฟอร์)

นั่นคือเหตุผลที่ฉันคิดว่าโปรแกรม c ขนาดเล็กจะทำได้ดีกว่า

หวังว่านี่จะช่วยได้

alabamatoy avatar
br flag
ฉันจะปิดหางเมื่อเปิดแล้วได้อย่างไร ฉันคิดเหมือนกันว่าโปรแกรม C ขนาดเล็กอาจดีกว่า แต่นั่นจะเป็นโครงการวิจัยใหม่ทั้งหมดสำหรับฉัน เนื่องจาก C อยู่นอกเหนือชุดทักษะของฉัน ฉันคิดว่าสคริปต์ของคุณควรให้คำแนะนำมากมายแก่ฉันในการแก้ปัญหา
alabamatoy avatar
br flag
คำสั่งหางไม่เสร็จสมบูรณ์และไม่มีอะไรกลับมา ฉันต้องฆ่ากระบวนการสำหรับคำสั่งหาง สิ่งที่ยอดเยี่ยมคือถ้าฉันส่ง "stty -F /dev/ttyACM0 -cstopb -crtscts cs8 9600 ; echo "ver" >>/dev/ttyACM0" เมื่อฉันเปิด "หน้าจอ /dev/ttyACM0" ค่าเวอร์ชันจะยังคงอยู่ ที่นั่น ฉันรู้ว่าฉันกำลังคุยกับมัน แต่ดูเหมือนว่าจะคุยกับสคริปต์ไม่ได้
jpbrain avatar
ca flag
ฉันจะทำการเปลี่ยนแปลงเล็กน้อย แต่ต้องปรับแต่งตามความต้องการของคุณ นี่คือคุณสมบัติ autokill :-)
jpbrain avatar
ca flag
ในกรณีของฉัน สิ่งนี้จะฆ่าเชลล์ แต่ฉันยังคงได้รับข้อความเพิ่มเติมหลังจากนั้นไม่นาน
jpbrain avatar
ca flag
สวัสดี @alabamatoy ฉันทดสอบแนวทางอื่น ตัวสุดท้ายนี้ฆ่าหางหลังจาก 2 วินาที
alabamatoy avatar
br flag
ฉันยังไม่ได้อะไรจากอุปกรณ์ผ่านคำสั่งหาง หน้าจอใช้งานได้ แต่ไม่ใช่ cat หรือ tail ของ /dev/ttyACM0 มันไม่แสดงอะไรเลย
jpbrain avatar
ca flag
การกำหนดค่าหน้าจอคืออะไร? หากคุณพิมพ์ "stty -F /dev/ttyACM0" คุณได้อะไร?
alabamatoy avatar
br flag
> stty -F /dev/ttyACM0 ความเร็ว 9600 บอด; เส้น = 0; ฆ่า = ^H; นาที = 100; เวลา = 2; -icrnl -ไอแม็กซ์เบล -opost -onlcr -isig -icanon -echo
jpbrain avatar
ca flag
สวัสดี @alabamatoy ฉันได้ทำการทดสอบบางอย่าง ไม่สามารถทำซ้ำสถานการณ์ของคุณ อย่างที่บอกว่าฉันใช้ arduino และ ubuntu 20.04 โดยใช้เชลล์ที่ให้มา เมื่อคุณเรียกใช้เชลล์และหน้าจอ คุณรันแยกกันในเทอร์มินัลต่างๆ หรือไม่
jpbrain avatar
ca flag
นรก @alabamatoy เพิ่มสองสามบรรทัด ฉันไปที่นั่นได้อย่างไร ดำเนินการ stty บน dev เมื่อมันไม่ได้ทำงานและจากนั้นอีกครั้งเมื่อทำงาน ด้วยวิธีนี้ฉันใส่ทุกอย่างที่ขาดหายไปตั้งแต่แรก Meyabe ไม่จำเป็นทั้งหมด แต่เป็นเดิมพันที่ปลอดภัย
jpbrain avatar
ca flag
ขออภัย... ฉันหมายถึงสวัสดีในความคิดเห็นที่แล้ว เพิ่งเห็นว่าพิมพ์ผิด
Score:0
ธง it

ปัญหาการเข้าถึงอุปกรณ์หลายอย่างสามารถแก้ไขได้ด้วยการเปลี่ยนแปลงสมาชิกกลุ่ม

โดยเฉพาะถ้า ls -l แสดงว่าสิทธิ์กลุ่ม (ที่สอง "rwx" แฝดสาม) คือ "แถว" (เช่น."-rw-rw----") จากนั้นเพิ่มตัวเองในกลุ่มที่เป็นเจ้าของอุปกรณ์จะให้สิทธิ์ แถว เข้าไป.

นี่คือวิธี:

อุปกรณ์="/dev/ttyACM0"
sudo adduser $USER $(stat -c "%G" $อุปกรณ์)

ซึ่งจะช่วยให้คุณเป็นสมาชิกในกลุ่มที่สามารถ แถว อุปกรณ์ แต่มีอีกหนึ่งขั้นตอน

เพื่อให้กระบวนการทั้งหมดของคุณเป็นสมาชิกของกลุ่มใหม่ ให้ออกจากระบบและเข้าสู่ระบบ มีการตั้งค่าการเป็นสมาชิกกลุ่มที่ เข้าสู่ระบบ เวลา.

หากต้องการสร้างกระบวนการเดียวในกลุ่มใหม่ (สำหรับการทดสอบ ก่อนออกจากระบบ/เข้าสู่ระบบ):

newgrp $(stat -c "%G" $อุปกรณ์)  

หรือพิมพ์ชื่อกลุ่ม ดู ผู้ชายคนใหม่.

alabamatoy avatar
br flag
> ls -al /dev/ttyACM0 crw-rw---- 1 root dialout 166, 0 1 กันยายน 11:52 /dev/ttyACM0 ฉันไม่สามารถหาวิธีจัดรูปแบบนี้ใน stackexchange ได้ แต่ค่อนข้างชัดเจนสำหรับฉันว่าปัญหาของฉันไม่ใช่ปัญหาการอนุญาต โดยเฉพาะอย่างยิ่งเมื่อ ฉันคือซูโด ฉันจำเป็นต้องรู้วิธีจับเอาต์พุตที่กลับมาจากคำสั่งที่ส่งไปยัง ttyACM0....
waltinator avatar
it flag
โปรด [แก้ไข] โพสต์ของคุณเพื่อเพิ่มข้อมูลใหม่ในรูปแบบที่เหมาะสม ข้อมูลที่เพิ่มผ่านความคิดเห็นนั้นยากสำหรับคุณในการจัดรูปแบบ ยากสำหรับเราที่จะอ่านและไม่สนใจโดยผู้อ่านในอนาคต โปรดคลิกÂ [แก้ไข]Â และเพิ่มข้อมูลสำคัญนั้นในคำถามของคุณ เพื่อให้ข้อเท็จจริงทั้งหมดที่เราต้องการอยู่ในคำถาม โปรดอย่าใช้ Add Comment เนื่องจากเป็นอัปลิงค์ของเราที่ส่งถึงคุณ ข้อเท็จจริงทั้งหมดเกี่ยวกับระบบของคุณควรอยู่ในคำถามเกี่ยวกับ [แก้ไข]

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา