python通過串口控制單片機,python實現485通訊_Python編程實現USB轉RS485串口通信

 2023-12-06 阅读 34 评论 0

摘要:---作者疆,未經允許,嚴禁轉載,違權必究------歡迎指正,需要源碼和文件可站內私信聯系--------------點擊此處鏈接至博客園原文-----------python通過串口控制單片機、功能說明:Python編程實現USB轉RS485串口通信(發送數據、接收數據均為16

---作者疆,未經允許,嚴禁轉載,違權必究---

---歡迎指正,需要源碼和文件可站內私信聯系---

-----------點擊此處鏈接至博客園原文-----------

python通過串口控制單片機、功能說明:Python編程實現USB轉RS485串口通信(發送數據、接收數據均為16進制格式)

運行環境:Windows7&Python3.7與Ubuntu14.04&Python2.7,宇泰UT-890A USB轉RS-485/422串口連接線

文件下載:源碼點擊下載?vsl7

一、Windows7&Python3.7下Python編程實現USB轉RS485串口通信

python編程例子?(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傻瓜式安裝,可見USB轉串口連接線與串口調試助手的使用。

(2)環境搭建

安裝serial庫,cmd中執行命令? ?pip3 install pyserial

python pyserial、(3)源碼實現

#-*- coding:utf-8 -*-#Author: WUJiang#運行環境為Windows7&Python3.7

importserialimporttime

ser= serial.Serial("com3", 9600) #選擇串口,并設置波特率

python串口通信的接收與發送。ifser.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,此處易忽視!!!

python串口數據采集并發送、len_return_data = ser.inWaiting() #獲取緩沖數據(接收數據)長度

iflen_return_data:

return_data= ser.read(len_return_data) #讀取緩沖數據

#bytes(2進制)轉換為hex(16進制),應注意Python3.7與Python2.7此處轉換的不同,并轉為字符串后截取所需數據字段,再轉為10進制

python爬蟲教程。str_return_data =str(return_data.hex())

feedback_data= int(str_return_data[-6:-2], 16)print(feedback_data)else:print("portopen failed")

二、Ubuntu14.04&Python2.7下Python編程實現USB轉RS485串口通信

(1)驅動下載

按linux對應驅動安裝包中readme說明直接make報錯,解決不了尋求宇泰科技官方技術支持,建議我更新系統內核(我拒絕!),后來提供了一個說明文件(FTDI.txt),經驗證本機ubuntu14.04的4.4.0內核集成了該USB驅動,免去了安裝麻煩。

(2)環境搭建

ubuntu14.04中預裝了python-serial,其版本為2.6,需要卸載重新安裝高版本的pyserial,否則會有相關接口錯誤,如‘serial’ object has no attribute 'is_open',執行以下命令,卸載原有python-serial,pip安裝pyserial。

sudo apt-get remove python-serial

sudo apt-get install python-pip

sudo pip install pyserial

(3)源碼實現

#-*- coding:utf-8 -*-#Author: WUJiang#運行環境為Ubuntu14.04&Python2.7

importserialimporttime

ser= serial.Serial("/dev/ttyUSB0", 9600) #選擇串口,并設置波特率

ifser.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() #獲取緩沖數據(接收數據)長度

iflen_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("portopen failed")

注意:Python2、Python3中bytes(2進制)與hex(16進制)相互轉換有區別,以下摘自Python-bytes和hex字符串之間的相互轉換。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/188579.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息