Python串口編程(轉載)

python的串口網上有很多例子,這裏了只是把認爲好的整理到一起。

首先,應該安裝serial模塊,還能開始後續的操作。我用的python2.6,serial模塊可以在這裏下載安裝serial模塊下載


1,字符串的發送接收

短接串口的2、3腳,創建一個文本,如:

  1. import serial  
  2.   
  3. t = serial.Serial('com12',9600)  
  4. n = t.write('you are my world')  
  5. print t.portstr  
  6. print n  
  7. str = t.read(n)  
  8. print str  
import serial

t = serial.Serial('com12',9600)
n = t.write('you are my world')
print t.portstr
print n
str = t.read(n)
print str

或者你可以稍微添加幾句,變成你任意輸入後打印出你的鍵入信息。

  1. import serial  
  2.   
  3. t = serial.Serial('com12',9600)  
  4. print t.portstr  
  5. strInput = raw_input('enter some words:')  
  6. n = t.write(strInput)  
  7. print n  
  8. str = t.read(n)  
  9. print str  
import serial

t = serial.Serial('com12',9600)
print t.portstr
strInput = raw_input('enter some words:')
n = t.write(strInput)
print n
str = t.read(n)
print str

其中,read(value)方法的參數value爲需要讀取的字符長度。 如果想要全部讀取,提供兩個方法:

1)inWaiting::監測接收字符。 inWaitting返回接收字符串的長度值,然後把這個值賦給read做參數。

2)readall()::讀取全部字符。

===================================================================================================================================


2,十六進制顯示

十六進制顯示的實質是把接收到的字符諸葛轉換成其對應的ASCII碼,然後將ASCII碼值再轉換成十六進制數顯示出來,這樣就可以顯示特殊字符了。

在這裏定義了一個函數,如hexShow(argv),代碼如下:

  1. import serial  
  2.   
  3. def hexShow(argv):  
  4.     result = ''  
  5.     hLen = len(argv)  
  6.     for i in xrange(hLen):  
  7.         hvol = ord(argv[i])  
  8.         hhex = '%02x'%hvol  
  9.         result += hhex+' '  
  10.     print 'hexShow:',result  
  11.   
  12. t = serial.Serial('com12',9600)  
  13. print t.portstr  
  14. strInput = raw_input('enter some words:')  
  15. n = t.write(strInput)  
  16. print n  
  17. str = t.read(n)  
  18. print str  
  19. hexShow(str)  
import serial

def hexShow(argv):
    result = ''
    hLen = len(argv)
    for i in xrange(hLen):
        hvol = ord(argv[i])
        hhex = '%02x'%hvol
        result += hhex+' '
    print 'hexShow:',result

t = serial.Serial('com12',9600)
print t.portstr
strInput = raw_input('enter some words:')
n = t.write(strInput)
print n
str = t.read(n)
print str
hexShow(str)

===================================================================================================================================


3,十六進制發送

十六進制發送實質是發送十六進制格式的字符串,如'\xaa','\x0b'。重點在於怎麼樣把一個字符串轉換成十六進制的格式,有兩個誤區:

1)'\x'+'aa'是不可以,涉及到轉義符反斜槓

2)'\\x'+'aa'和r'\x'+'aa'也不可以,這樣的打印結果雖然是\xaa,但賦給變量的值卻是'\\xaa'


 這裏用到decode函數,

  1. list='aabbccddee'  
  2. hexer=list.decode("hex")  
  3. print  hexer  
list='aabbccddee'
hexer=list.decode("hex")
print  hexer


需要注意一點,如果字符串list的長度爲奇數,則decode會報錯,可以按照實際情況,用字符串的切片操作,在字符串的開頭或結尾加一個'0'

 

假如在串口助手以十六進制發送字符串"abc",那麼你在python中則這樣操作“self.l_serial.write(”\x61\x62\x63") ”

當然,還有另外一個方法:

  1. strSerial = "abc"  
  2. strHex = binascii.b2a_hex(strSerial)  
  3. #print strHex   
  4. strhex = strHex.decode("hex")  
  5. #print strhex   
  6. self.l_serial.write(strhex);  
                strSerial = "abc"
                strHex = binascii.b2a_hex(strSerial)
                #print strHex
                strhex = strHex.decode("hex")
                #print strhex
                self.l_serial.write(strhex);

同樣可以達到相同目的。

那麼,串口方面的就整理完了。

源代碼


額外小知識:

索引:稱作下標操作,那麼python抓取序列對應位置項目。從0開始計數,那麼str[0]第一個項目, str[3]第四個。(str一個參考序列)。當然呢,python有點不同可以負數,位置序列開始計算的。str[-1]表示序列一個元素,str[-2]倒數第二個。

切片操作:顧名思義,就是可以連續一整塊,什麼切成幾段,那一段連續的。序列一個方括號,方括號可選數字,並用冒號分割。可選的,冒號必須的。例如str[1:3]返回位置1開始,包括位置2,但是包括位置3,返回一個含有兩個項目切片。類似,str[:]返回整個序列拷貝。同樣,可以負數的。

 
轉載於:http://blog.csdn.net/xhao014/article/details/7640568
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章