该实例是raspi和dsp电机运动控制板的串口uart通信:
import serial
class SerialHandler():
\'\'\'
raspi serial for communication
\'\'\'
def __init__(self)://初始化一些默认参数,其它非初始化参数在方法中作为参数传入
self.serialdev = None//给参数赋初始值
def serial_open(self,serialdev,timeout)://用户可传入的参数,其它参数(如baudrae、bytesize...)使用默认值
try:
self.serialdev = serial.Serial(serialdev,baudrate=9600,bytesize=8,parity=\'N\',stopbits=1,timeout=None,xonxoff=False,rtscts=False,dsrdtr=False)
except:
self.serialdev = None
#print (\'Open /dev/ttyAMA0 fail!\')
print (\'Open %s fail!\' %(serialdev))//print的用法
def serial_close(self):
if type(self.serialdev) != type(None):
self.serialdev.close()
self.serialdev = None
return True
return False
def serial_write(self,txdata):
self.len_txdata = len(txdata)//后面方法serial_read要使用该变量,所以在变量前面加self
if type(self.serialdev) != type(None):
#txdata_list = list[txdata]
encodetxdata=txdata.encode(\'ascii\')//只在本方法中使用的变量,其前可以不加self,如果该类的其它方法要用到这个变量,则其前加self
try: //发送前进行编码unicode码转换为ascii码
#self.serialdev.write(txdata_list[:])
self.serialdev.write(encodetxdata)
except:
print (\'send txdata fail!\')
self.serial_close()
return False
return False
def serial_read(self):
if type(self.serialdev) != type(None):
try:
#self.len_txdata = len(txdata)
rxdata=self.serialdev.read(self.len_txdata)//使用前面serial_write的变量
decoderxdata = rxdata.decode()//接收后显示前解码,把scii码解码为Unicode码
return decoderxdata
except:
print (\'receive txdata fail!\')
self.serial_close()
return None
return None
if __name__ == \'__main__\'://单元测试
test = SerialHandler()//将类实例化为test,之后实例test使用类SerialHandler的方法
test.serial_open(\'/dev/ttyAMA0\',timeout=1)
test.serial_write(\'abc234de\')
printrxdata = test.serial_read()
print(\'the receive data is %s\' %(printrxdata))
test.serial_close()