ฉันจะเชื่อมต่อกับอุปกรณ์ USB อนุกรมได้อย่างไร?


12

ฉันมีอุปกรณ์ที่มีสายเคเบิลพอร์ตอนุกรม USB ที่ฉันต้องการเชื่อมต่อกับ Raspberry Pi ของฉัน ชิปเซ็ตสำหรับ USB เข้ากับสายเคเบิลอนุกรมนี้คือ PL-2303 จาก Prolific Technology, Inc.

ฉันจะอ่านข้อมูลจากการเชื่อมต่อแบบอนุกรมของอุปกรณ์นี้โดยใช้ Python ได้อย่างไร


1
คำถามที่น่าสนใจ สิ่งนี้อาจช่วยได้กับส่วน USB: raspberrypi.stackexchange.com/questions/258/…
Jivings

1
เป็นสองคำถามนี้หรือไม่ โดยเฉพาะ 'ฉันจะติดตั้งไดรเวอร์สำหรับอุปกรณ์อนุกรมได้อย่างไร' และ 'ฉันจะเชื่อมต่อกับอุปกรณ์อนุกรมภายใน Python ได้อย่างไร' คำถามเกี่ยวกับไดรเวอร์จะยาวบนไซต์นี้ อย่างไรก็ตามคำถาม Python อาจเฉพาะเจาะจงมากขึ้นสำหรับไซต์เช่น StackOverflow ฉันจะถือว่าการสื่อสารกับอุปกรณ์อนุกรมใน Python เหมือนกันโดยไม่คำนึงถึงสถาปัตยกรรมที่ใช้ linux หรือกลไกการติดตั้ง
RLH

ไม่ควรมีความแตกต่างระหว่างการสื่อสารกับพอร์ตอนุกรมของบอร์ด (พิน UART) และพอร์ตอนุกรม USB
อเล็กซ์แชมเบอร์เลน

คำถามนี้อ่าน: ฉันจะเริ่มต้นด้วย [ทดสอบการกำหนดค่า \ Litmus สำหรับ PL2303 TTL เป็น Serial] ได้อย่างไร ( raspberrypi.stackexchange.com/questions/41553/ … ) เมื่อฮาร์ดแวร์ได้รับการยืนยันแล้วหนึ่งสามารถเพลิดเพลินกับการทำงาน pyserial เพื่อดึงข้อมูลจากพอร์ตอนุกรม
gatorback

คำตอบ:


7

หากต้องการพูดคุยกับอุปกรณ์แบบอนุกรมโดยใช้ Python ให้ใช้โมดูล pyserial หากไม่มีในการแจกจ่ายของคุณสามารถติดตั้งได้โดยรับสำเนาของแหล่งที่มาจากหน้าโครงการ pyserialและเรียกใช้ "python setup.py ติดตั้ง"

ตัวอย่างง่ายๆของการใช้ pyserial มีที่แนะนำสั้น

โมดูลสำหรับ PL-2303 สามารถใช้ได้โดยเริ่มต้น - ดูเฟิร์มแวพื้นที่เก็บข้อมูล GitHub - /var/log/messagesเมื่อคุณเสียบอุปกรณ์ในคุณจะเห็นมันยิงขึ้นใน ฉันได้เชื่อมต่อกับ Arduino และ "เพิ่งทำงาน" บนพอร์ตการสื่อสาร/dev/ttyUSB0(อุปกรณ์ไดรเวอร์ชิปเซ็ตอื่น ๆ ดังนั้นระยะของคุณอาจแตกต่างกันไป )


เชื่อมต่ออุปกรณ์และตอนนี้ฉันเห็น / dev / ttyUSB0 ดังนั้นดูเหมือนว่ามีโอกาสที่ดีที่มันจะ "ใช้งานได้"
Swinders

ด้วยการติดตั้ง pyserial และใช้ miniterm ตัวอย่างฉันสามารถดูข้อมูลจากอุปกรณ์ :)
Swinders

4

PL-2303 /dev/ttyUSBxได้รับการสนับสนุนอย่างดีและจะปรากฏเป็น ไม่จำเป็นต้องใช้ไดรเวอร์ อ่านมันตามที่คุณต้องการพอร์ตอนุกรมปกติ ฉันไม่ได้ใช้ Python แต่ใน C ++ ฉันเปิด () ในโหมดที่ไม่มีการบล็อกเลือก () เพื่อดูว่ามีข้อมูลที่จะอ่านหรือไม่แล้วอ่าน ()


4

ดาวน์โหลด pySerial ( https://pypi.python.org/pypi/pyserial )

wget http://pypi.python.org/packages/source/p/pyserial/pyserial-2.7.tar.gz?raw=true -O pyserial-2.7.tar.gz
tar -xzf pyserial-2.7.tar.gz
cd pyserial-2.7
sudo python setup.py install

คุณสามารถตรวจสอบความพร้อมใช้งาน ttyUSB กับบรรทัด

ls -ltr /dev|grep -i ttyUSB

เพื่อดูการใช้งานอนุกรมเอาท์พุท

tail -f /dev/ttyUSB<NUMBER FROM ABOVE>

เพื่อแยก crtl + c

สร้างไฟล์ testserial.py วางรหัสนี้

#!/usr/bin/python
from time import sleep
import serial

# Establish the connection on a specific port
ser = serial.Serial('/dev/ttyUSB0', 9600) 

x = 1 while True:
       print ser.readline() # Read the newest output 
       x += 1

-3

การสอนที่ยอดเยี่ยมสำหรับเรื่องนี้:

http://www.digitalmihailo.com/post/usb-programming-with-python-on-linux

แหล่งข้อมูลที่มีค่าคือhttp://www.lvr.com/usbc.htmเสร็จสมบูรณ์


1
ในขณะที่สิ่งนี้อาจตอบคำถามในทางทฤษฎีมันก็ควรที่จะรวมส่วนสำคัญของคำตอบที่นี่และให้ลิงค์สำหรับการอ้างอิง ลิงค์ที่สองของคุณก็เสียเช่นกัน
Steve Robillard
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.