Python实现串口通信

1.  串口通信

串行接口是一种可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。

串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节的通信方式。python中使用serial进行串口通信。

2.  serial库的安装

pip install  serial  -i https://pypi.tuna.tsinghua.edu.cn/simple

3.  通信

import serial
port = "COM3"#端口
baudrate = 9600#波特率,可以设置的范围9600到115200
bytesize = 8#字节大小,为每个字节的比特数
parity = 'E'#校验位选择
stopbits = 1#停止位,用来指示字节完成
timeout = 0.1  ##读出超时设置
ser = serial.Serial(port=port, baudrate=baudrate, bytesize=bytesize, parity=parity, stopbits=stopbits, timeout=timeout)#创建serial对象
data = [0x01, 0x04, 0x00, 0x01, 0x00, 0x08, 0xA0, 0x0C]#我的模块需要发送的十六进制指令
ser.write(data)#给硬件通信模块发送指令,被动模式的通信模块才会返回数据
result = self.ser.read(21)  # 读取串口数据,读取21个字节
print(result[0])#打印第一个字节数据

4. 提供几个功能函数

def tenTOtwo8(number):#number为一个字节,此功能为将一个字节转换为二进制的字符串
    # 定义栈
    s = []
    binstring = ''
    number = int(number)
    while number > 0:
        # 余数出栈
        rem = number % 2
        s.append(rem)
        number = number // 2
    while len(s) > 0:
        # 元素全部出栈即为所求二进制数
        binstring = binstring + str(s.pop())
    while len(binstring) < 8:
        c = 8 - len(binstring)
        binstring = '0' * c + binstring
    return binstring  # 返回8位的二进制字符串数据

if __name__=="__main__":
    data=b'9'#b表示字节类型数据
    result=tenTOtwo8(data)
    print(result)#结果是字符串类型的8位00001001

  另外:result = int(str_bin, 2)  #表示 二进制字符串转10进制

 

 

posted @ 2023-03-14 17:22  wancy  阅读(2563)  评论(0编辑  收藏  举报