/ / pySerial निम्न मूल्यों को पसंद नहीं करता है - अजगर, सीरियल-पोर्ट, माइक्रोकंट्रोलर, पीसरियल, यूरार्ट

pySerial कम मूल्य पसंद नहीं है - पायथन, धारावाहिक बंदरगाह, microcontroller, pyserial, uart

MCU के साथ खेलते हुए, मैं एक पीसी डेस्कटॉप के लिए RS232 लिंक के माध्यम से संवाद करने की कोशिश कर रहा हूं।

मैं वास्तव में सरल: एक परीक्षण कार्यक्रम बनाया है "नमस्ते दुनिया! N" प्रत्येक n सुश्री।

सबसे अधिक प्रासंगिक लिंक कनेक्शन पैरामीटर हैं:

  • पोर्ट: / देव / ttyUSB0
  • बॉड्रेट: 57600 बीपीएस
  • 8 डेटा बिट्स
  • 1 बिट स्टॉप
  • कोई समता और हार्डवेयर नियंत्रण नहीं

यह जांचने के लिए कि मुझे MCU से PC तक डेटा प्राप्त होता है, मैं इसके साथ / dev / ttyUSB0 सेट करता हूं:

%> stty -F /dev/ttyUSB0 57600 cooked

और फिर,

%> cat /dev/ttyUSB0
Hello world!
Hello world!
Hello world!
...

इसलिए, मैं MCU से ठीक से डेटा प्राप्त करता हूं।

लेकिन, यहाँ समस्या है, जब मैं पायरेसियल मॉड्यूल के साथ पायथन का उपयोग करना चाहता हूं, डेटा बिल्कुल गलत हैं:

>>> s = serial.Serial("/dev/ttyUSB0", 57600)
>>> print s
Serial<id=0x195fed0, open=True>(
port="/dev/ttyUSB0", baudrate=57600,
bytesize=8, parity="N",
stopbits=1, timeout=None,
xonxoff=False, rtscts=False,
dsrdtr=False)

>>> s.read(14)
"xc8xe5xecxecxefxa0xf7xefxf2xecxe4xa1x8ax80"

इस बिंदु पर, मैं "बदल गया"नमस्ते दुनिया! N " इस स्ट्रिंग के लिए आउटपुट स्ट्रिंग (MCU साइड): 0xde, 0xad, 0xbe, 0xef। और, मुझे जो चीज मिलती है, वह है:

>>> s.read(4)
"xdexadxbexef"

यह काम करता हैं! मैंने एक और समय बदला है, अब इसके लिए: 0x00, 0x01, 0x02, 0x03, 0x80, 0x81, 0x82, 0x83। परिणाम:

>>> s.read(8)
"x80x81x82x83x80x81x82x83"

निष्कर्ष: pySerial परिवर्तन बाइट्स का मान उसी मान के लिए 128 से अधिक और 128 के बराबर है।

मैं नहीं जानता कि यह क्यों हो रहा है। मैंने अन्य अवसरों (संस्करण 2.4) में पाइरेसीअल मॉड्यूल का उपयोग किया और सभी ने ठीक काम किया। मैंने Ubuntu 11.10 और Ubuntu 10.04 में 2.5 और 2.6 संस्करणों के साथ कोशिश की, लेकिन कोई काम नहीं किया।

पीडी: मेरी अंग्रेजी लेखन के साथ सहानुभूति हो। मैं अंग्रेजी में उतना कुशल नहीं हूं जितना मुझे होना चाहिए।

उत्तर:

जवाब के लिए 0 № 1

ठीक है, मेरी गलती! PySerial एकदम सही काम करता है। MCU में संशोधित कोड, मुझे एक गलती मिली जो कि सेट की जानी चाहिए (मैं 7-बिट वर्ण लंबाई भेज रहा था)। फिर, प्राप्त फ्रेम, जाहिर है, आंशिक रूप से अच्छी तरह से, आंशिक रूप से गलत था।

अब, मैं समझ सकता हूँ कि क्यों pySerial मुझे बुरा दिखाते हैंपरिणाम है। फिर भी, मेरे लिए एक रहस्य है कि मेरा पीसी 7-बिट डेटा, 8-बिट लंबाई के पात्रों से कैसे पुनर्निर्माण करता है। मुझे पूरा यकीन था कि MCU का कोड ठीक था क्योंकि टर्मिनल से डेटा सही था: S