Windows下使用Python實作序列槽通信
- 基本資訊
- 配置過程
-
- 配置思路
- 詳細配置過程
-
- 安裝USB裝TTL驅動
- 配置serial庫
- 擷取裝置端口号
- 配置序列槽通信
-
- 配置說明
- 測試過程
- 其他學習記錄
- 參考資料
基本資訊
端口号:COM5
使用語言:Python
使用序列槽通信庫:python的serial庫
測試環境:Windows-Jeston nano
使用硬體:筆記本電腦windows系統、USB轉ttl、Jeston nano(做資料接受)
配置過程
配置思路
這裡配置思路和之前發的博文使用Jeston nano配置序列槽通信的思路一緻,均調用python的serial庫實作相應的功能,隻是這裡的端口号不像linux下ttyUSB這種形式,而是類似于COM5這種,這與第一步使用的驅動軟體有關。
詳細配置過程
安裝USB裝TTL驅動
浏覽器搜尋ch340:
選擇安裝即可:
配置serial庫
你可以直接用pip下載下傳serial庫
pip install pyserial
但是可能因為你換源的關系找不到這個庫,當然你也可以直接從github下載下傳:
github位址:https://github.com/pyserial/pyserial
配置過程:直接下載下傳上述連結 zip 檔案,将其中serial檔案夾複制到您 使用的python工程目錄下的 Lib/site-packages下即可
我這裡是在anaconda環境下;
當然你也可以直接在pycharm編輯器上下載下傳(如果能搜得到的話);
測試:import serial 無報錯即可。
擷取裝置端口号
以 COM5 為例
這裡可以在裝置管理器中直接檢視ch340的端口号:右擊 此電腦-屬性-裝置管理器-端口
也可以使用代碼檢視:
代碼如下:
import serial
import serial.tools.list_ports
plist = list(serial.tools.list_ports.comports())
if len(plist) <= 0:
print("The Serial port can't find!")
else:
plist_0 = list(plist[0])
serialName = plist_0[0]
serialFd = serial.Serial(serialName, 9600, timeout=60)
print("check which port was really used >", serialFd.name)
配置序列槽通信
配置說明
說明:
因為手裡沒有兩個USB轉ttl,不能做到在windows下同時發送和接受資料,是以借助手邊的jeston nano來完成資料傳輸測試;對于你,如果有兩個USB轉ttl,你可以開一個序列槽調試軟體測試;當然,你可以用單片機通信,如51、32、arduino;
測試平台:
Windows-pycharm-python-serial
Jeston nano-CuteCom
(CuteCom為一linux下的序列槽調試sudo apt-get install cutecom軟體,你可以通過:
sudo apt-get install cutecom
安裝,通過:
sudo CuteCom
使用)
測試效果:代碼實作雙方發送接受資料,并将資料列印出來;這裡因為我還不會用python實作多線程,是以隻能用兩個代碼分别實作發送和接受。
測試過程
測試效果:
windows端:
Jeston nano端:
配置;這裡可以直接看見Jeston nano3個序列槽
發送接收:
windows端代碼:
import time
import serial
print("UART Demonstration Program")
print("NVIDIA Jetson Nano Developer Kit")
serial_port = serial.Serial(
port="COM5", #記得替換此處端口号
baudrate=115200,
bytesize=serial.EIGHTBITS,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
)
# Wait a second to let the port initialize
time.sleep(1)
try:
# Send a simple header
serial_port.write("UART Demonstration Program\r\n".encode())
serial_port.write("NVIDIA Jetson Nano Developer Kit\r\n".encode())
while True:
if serial_port.inWaiting() > 0:
data = serial_port.read()
print(data)
serial_port.write(data)
# if we get a carriage return, add a line feed too
# \r is a carriage return; \n is a line feed
# This is to help the tty program on the other end
# Windows is \r\n for carriage return, line feed
# Macintosh and Linux use \n
if data == "\r".encode():
# For Windows boxen on the other end
serial_port.write("\n".encode())
except KeyboardInterrupt:
print("Exiting Program")
except Exception as exception_error:
print("Error occurred. Exiting Program")
print("Error: " + str(exception_error))
finally:
serial_port.close()
pass
後續有時間可以試試python多線程或者windows下使用C++調用相應的庫實作序列槽通信…
其他學習記錄
python部分:
python環境的包都在Lib/site-packages下;
Communication.Print_Used_Com() :Communication類調用Print_Used_Com()函數;
Python有3種方法,靜态方法(staticmethod),類方法(classmethod)和執行個體方法 代碼:global Ret ,聲明rect為全局變量
global Ret
聲明rect為全局變量(在類中)
關于通信:
如果要同時收發資料,要使用python多線程實作;
可以直接用printf方法發送資料
serial.Serial(serialName, 9600, timeout=60) 這裡指派為 5、‘com5’、“com5”、‘COM5’、“COM5”都可以 不區分大小寫
serial.printf("%c", a);
這裡找一種電腦和Jeston nano傳輸檔案的方式,要求:不使用外網、網際網路連接配接。
參考資料
1、pyserial官方github倉庫:https://github.com/pyserial/pyserial.
2、這篇部落格稍微總結了一下serial庫的常用參數: https://www.cnblogs.com/-wenli/p/11261109.html .
3、https://www.cnblogs.com/dongxiaodong/p/9992083.html .