Python编程实现USB转RS485串口通信

---作者吴疆,未经允许,严禁转载,违权必究---

---欢迎指正,需要源码和文件可站内私信联系---

-----------点击此处链接至博客园原文-----------

功能说明:Python编程实现USB转RS485串口通信(发送数据、接收数据均为16进制格式)

运行环境:Windows7&Python3.7与Ubuntu14.04&Python2.7

文件下载:源码点击下载

一、Windows7&Python3.7下Python编程实现USB转RS485串口通信

参考链接:USB转串口连接线与串口调试助手的使用用Python采集RS485温湿度传感器信息

(1)驱动下载

解压驱动压缩包,选取..\390-11000880 V01\Driver\win xp server2003 2008 2012 Vista 7 8 8.1 10 32-64bit\中Autoinstaller_WHQL_CDM2.12.24_Win 2K, XP, Vista, 7, 8, 8.1, 10, 32_64bit.exe傻瓜式安装,可见参考链接1。

(2)环境搭建

安装serial库,cmd中执行命令   pip3 install pyserial   

(3)源码实现

# -*- coding:utf-8 -*-
# Author: WUJiang
# 运行环境为Windows7&Python3.7

import serial
import time

ser = serial.Serial("com3", 9600)   # 选择串口,并设置波特率
if ser.is_open:
    print("port open success")
    # hex(16进制)转换为bytes(2进制),应注意Python3.7与Python2.7此处转换的不同
    send_data = bytes.fromhex('ff 01 00 55 00 00 56')    # 发送数据转换为b'\xff\x01\x00U\x00\x00V'
    ser.write(send_data)   # 发送命令
    time.sleep(0.1)        # 延时,否则len_return_data将返回0,此处易忽视!!!
    len_return_data = ser.inWaiting()  # 获取缓冲数据(接收数据)长度
    if len_return_data:
        return_data = ser.read(len_return_data)  # 读取缓冲数据
        # bytes(2进制)转换为hex(16进制),应注意Python3.7与Python2.7此处转换的不同,并转为字符串后截取所需数据字段,再转为10进制
        str_return_data = str(return_data.hex())
        feedback_data = int(str_return_data[-6:-2], 16)
        print(feedback_data)
else:
    print("open failed")

二、Ubuntu14.04&Python2.7下Python编程实现USB转RS485串口通信

参考链接:

(1)驱动下载

(2)环境搭建

(3)源码实现

# -*- coding:utf-8 -*-
# Author: WUJiang
# 运行环境为Ubuntu14.04&Python2.7

import serial
import time

ser = serial.Serial("/dev/ttyUSB0", 9600) # 选择串口,并设置波特率
if ser.is_open:
    print("port open success")
    # hex(16进制)转换为bytes(2进制),应注意Python2.7与Python3.7此处转换的不同
    send_data = 'ff010055000056'
    send_data = send_data.decode('hex')    # 发送数据转换为b'\xff\x01\x00U\x00\x00V'
    ser.write(send_data)   # 发送命令
    time.sleep(0.1)        # 延时,否则len_return_data将返回0,此处易忽视!!!
    len_return_data = ser.inWaiting()  # 获取缓冲数据(接收数据)长度
    if len_return_data:
        return_data = ser.read(len_return_data)  # 读取缓冲数据
        # bytes(2进制)转换为hex(16进制),应注意Python2.7与Python3.7此处转换的不同,并转为字符串后截取所需数据字段,再转为10进制
        str_return_data = str(return_data.encode('hex'))
        feedback_data = int(str_return_data[-6:-2], 16)
        print(feedback_data)
else:
    print("open failed")

注意:Python2、Python3中bytes(2进制)与hex(16进制)相互转换有区别,以下摘自参考链接中博客。

猜你喜欢

转载自www.cnblogs.com/deeplearning1314/p/10818529.html