ฉันต้องการความช่วยเหลือในการแก้ไขปัญหาข้อผิดพลาดของแอตทริบิวต์ในโค้ด Python ของฉัน
ฉันกำลังทำงานกับอุปกรณ์อนุกรมที่เชื่อมต่อด้วย /dev/ttyUSB0 กับ Raspberry Pi 2B เป้าหมายของฉันสำหรับโค้ดนี้คือการอ่านข้อมูลอนุกรมแบบสดอย่างต่อเนื่องจากอุปกรณ์อนุกรม และแยกคำสั่งออกซึ่งกำหนดโดยสัญลักษณ์ '@' แทน /n หรือ /r
โปรเจ็กต์นี้ยังอยู่ในช่วงเริ่มต้น แต่จากการวิจัยอย่างรวดเร็ว ฉันได้ทำแอตทริบิวต์ pyserial 'read_until' จะทำหน้าที่เป็นแกนหลักได้อย่างสมบูรณ์แบบ สิ่งนี้จะช่วยให้ฉันสามารถอ่านทีละไบต์และหยุดที่สัญลักษณ์ '@' และหลังจากนั้นก็ประมวลผลข้อมูลก่อนที่จะย้ายไปยังส่วนถัดไปของข้อมูลอนุกรม
ด้วยเหตุผลบางอย่าง ฉันได้รับข้อผิดพลาดของแอตทริบิวต์เมื่อฉันพยายามใช้ 'read_until' โดยอ้างว่าวัตถุ 'Serial' ไม่มีฟังก์ชันนี้ ด้านล่างนี้คือโค้ดทดสอบที่ฉันใช้และมีข้อผิดพลาดเกิดขึ้น:
import serial
gc = serial.Serial('/dev/ttyUSB0', baudrate = 230400)
print(gc.name)
def getCommand():
gcData = gc.read_until('@', 1).decode('ascii')
print(gcData)
getCommand()
gc.close()
และนี่คือผลลัพธ์ที่โค้ดนี้ให้ฉัน:
>>>
/dev/ttyUSB0
Traceback (most recent call last):
File "/home/pi/Python/GC/serialRead1.py", line 10, in <module>
getCommand()
File "/home/pi/Python/GC/serialRead1.py", line 7, in getCommand
gcData = gc.read_until('@', 1).decode('ascii')
AttributeError: 'Serial' object has no attribute 'read_until'
>>>
ความยุ่งยากเบื้องหลังคือควรนำเข้า 'read_until' พร้อมกับไลบรารีซีเรียล บางทีฉันอาจพลาดบางสิ่งที่ค่อนข้างเรียบง่ายไป แต่มันจะมีประโยชน์มากหากฉันสามารถใช้คุณลักษณะนี้ได้ คำถามอื่น ๆ ส่วนใหญ่เกี่ยวกับ 'read_until' กำลังอ้างอิงถึง 'telnetlib' ซึ่งเท่าที่ฉันรู้ว่าไม่เหมือนกับที่ PySerial มี
นี่คือลิงก์ไปยังเว็บไซต์ที่ฉันพบเอกสารที่ระบุว่า 'read_until' ควรเป็นของ PySerial: https://pyserial.readthedocs.io/en/latest/pyserial_api.html
เพียงเพื่อให้คุณทราบ ฉันยังใหม่มากกับการเขียนโปรแกรมโดยทั่วไป ศัพท์เฉพาะบางคำที่โปรแกรมเมอร์ผู้ช่ำชองเช่นคุณใช้อาจเกินความคิดของฉัน ดังนั้นฉันจึงไม่รู้ว่าจะดำเนินการแก้ไขปัญหาที่คุณมีอย่างไร ฉันขอให้คุณอดทนรอในขณะที่ฉันเรียนรู้เพิ่มเติมเกี่ยวกับการเขียนโปรแกรมและ Python โดยทั่วไป
ขอบคุณมากสำหรับเวลาของคุณ!
python3 -c 'import serial; print(serial.__version__)'
- person tttapa   schedule 17.03.2020Traceback (most recent call last): File "<string>", line 1, in <module> Attribute Error: 'module' object has no attribute '__version__'
- person Sgt_Baconbits   schedule 17.03.2020__version__
ถูกเพิ่มในปี 2016 คุณติดตั้ง PySerial ได้อย่างไร? คุณสามารถลองpython3 -c 'import serial; print(serial.VERSION)'
แทนได้ - person tttapa   schedule 17.03.2020sudo apt-get install python-serial
ฉันพบว่ามันน่าสนใจที่คุณบอกว่ามันเป็นเวอร์ชันเก่าจริงๆ ฉันดูวิธีที่อัปเดตในการติดตั้ง pip และลองsudo python3 -m pip install --upgrade pyserial
มันไม่ทำให้ฉันมีข้อผิดพลาดด้านแอตทริบิวต์อีกต่อไป ฉันจะกระโดดไปไกลเกินไปที่จะบอกว่าสิ่งนี้ได้รับการแก้ไขแล้วหรือไม่? - person Sgt_Baconbits   schedule 17.03.2020