2013-04-15 13 views
8

के साथ pySerial का उपयोग करके मैंने धारावाहिक बंदरगाह का उपयोग करके कई कोड नमूने देखे हैं और लोग कहते हैं कि वे भी कोड काम कर रहे हैं। बात यह है कि, जब मैं कोड आज़माता हूं तो यह काम नहीं करता है।पायथन 3.3

import serial 

ser = serial.Serial(
    port=0, 
    baudrate=9600 
    # parity=serial.PARITY_ODD, 
    # stopbits=serial.STOPBITS_TWO, 
    # bytesize=serial.SEVENBITS 
) 

ser.open() 
ser.isOpen() 

print(ser.write(0xAA)) 

यह त्रुटि मुझे यह देती है: "सीरियल अपवाद: पोर्ट पहले ही खोला गया है"। क्या यह मुझे python3.3 समस्या का उपयोग कर रहा है या क्या कुछ अतिरिक्त मुझे इंस्टाल करने की आवश्यकता है? क्या Python3.3 के साथ COM पोर्ट्स का उपयोग करने का कोई और तरीका है?

+0

यदि कोई पूछता है, तो मेरे पास COM1 है। मैंने इसे बहुत इस्तेमाल किया है। जब मैंने इस कोड को आजमाया तो यह किसी अन्य कार्यक्रम द्वारा खोला नहीं गया था। डॉकलाइट के साथ प्रयास किए जाने पर COM1 सफलतापूर्वक खुलता है। –

उत्तर

10

तो कहानी का नैतिक है .. प्रारंभ होने पर बंदरगाह खोला जाता है। ser.open() विफल रहता है क्योंकि सीरियल पोर्ट पहले ही ser = serial.Serial(.....) द्वारा खोला गया है। और यह एक बात है।

दूसरी समस्या ser.write(0xAA) है - मुझे उम्मीद है कि "एक बाइट 0xAA भेजें", इसका अर्थ यह है कि वास्तव में 170 (0xAA) शून्य भेज दिया गया था। फ़ंक्शन write में, मैंने निम्न देखा: data = bytes(data) जहां डेटा आपके द्वारा पारित तर्क है। ऐसा लगता है कि फ़ंक्शन बाइट्स() तर्कों के रूप में स्ट्रिंग नहीं लेता है, इसलिए कोई स्ट्रिंग सीधे इसके साथ नहीं भेज सकता: serial.write(), लेकिन ser.write(bytearray(TheString,'ascii')) नौकरी करता है।

हालांकि मैं जोड़ने पर विचार कर रहा हूँ:

if(type(data) == type('String')): 
    data = bytearray(data,'ascii') 
ser.write() में

है, हालांकि यह है कि मेरे कोड अन्य पीसी पर काम नहीं होगा।

संबंधित मुद्दे