Python串口编程(转载)

python的串口网上有很多例子,这里了只是把认为好的整理到一起。

首先,应该安装serial模块,还能开始后续的操作。我用的python2.6,serial模块可以在这里下载安装serial模块下载


1,字符串的发送接收

短接串口的2、3脚,创建一个文本,如:

[python]  view plain copy
  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  
[python]  view plain copy
  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  

或者你可以稍微添加几句,变成你任意输入后打印出你的键入信息。

[python]  view plain copy
  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  
[python]  view plain copy
  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  

其中,read(value)方法的参数value为需要读取的字符长度。 如果想要全部读取,提供两个方法:

1)inWaiting::监测接收字符。 inWaitting返回接收字符串的长度值,然后把这个值赋给read做参数。

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

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


2,十六进制显示

十六进制显示的实质是把接收到的字符诸葛转换成其对应的ASCII码,然后将ASCII码值再转换成十六进制数显示出来,这样就可以显示特殊字符了。

在这里定义了一个函数,如hexShow(argv),代码如下:

[python]  view plain copy
  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)  
[python]  view plain copy
  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)  

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


3,十六进制发送

十六进制发送实质是发送十六进制格式的字符串,如'\xaa','\x0b'。重点在于怎么样把一个字符串转换成十六进制的格式,有两个误区:

1)'\x'+'aa'是不可以,涉及到转义符反斜杠

2)'\\x'+'aa'和r'\x'+'aa'也不可以,这样的打印结果虽然是\xaa,但赋给变量的值却是'\\xaa'


 这里用到decode函数,

[python]  view plain copy
  1. list='aabbccddee'  
  2. hexer=list.decode("hex")  
  3. print  hexer  
[python]  view plain copy
  1. list='aabbccddee'  
  2. hexer=list.decode("hex")  
  3. print  hexer  


需要注意一点,如果字符串list的长度为奇数,则decode会报错,可以按照实际情况,用字符串的切片操作,在字符串的开头或结尾加一个'0'

 

假如在串口助手以十六进制发送字符串"abc",那么你在python中则这样操作“self.l_serial.write(”\x61\x62\x63") ”

当然,还有另外一个方法:

[python]  view plain copy
  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);  
[python]  view plain copy
  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);  

同样可以达到相同目的。

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

源代码


额外小知识:

索引:称作下标操作,那么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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值