1 使用用硬件
樹莓派,CH340串口轉USB兩個,PC
python通過串口控制單片機。2 環境安裝
樹莓派我使用的是自帶系統,環境都已經配好了,PC這邊我安裝了的ubunt子系統,有python環境,那么就需要安裝pyserial庫和CH340的驅動
sudo apt-get update
電腦串口直接連接485設備?sudo apt install python-pip
pip install --upgrade pip
pip install pyserial
stm32支持python嗎,可以使用命令查看本機的串口
python -m serial.tools.list_ports
python3 -m serial.tools.list_ports
PC的話將會列舉一堆,需要取設備管理器中找到對應的COM口號,例如我串口是COM8,則是用的/dev/ttyS5
樹莓派的話將會顯示兩個,/dev/ttyAMA0是GPIO處的串口,/dev/ttyUSB0則是我插入的串口轉USB模塊
pi@raspberrypi:~ $ python -m serial.tools.list_ports
/dev/ttyAMA0
/dev/ttyUSB0
3 收發測試
PC
lissettecarlr@lissettecarlr ~ % python
Python 2.7.12 (default, Nov 12 2018, 14:36:49)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial
>>> com=serial.Serial('/dev/ttyS8',115200,timeout=0.2)
>>> com.isOpen()
True
>>> com.write('123')
3
>>> com.readline()
'lalala'
>>>
樹莓派
root@raspberrypi:~# python
Python 2.7.13 (default, Sep 26 2018, 18:42:22)
[GCC 6.3.0 20170516] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial
>>> com=serial.Serial('/dev/ttyUSB0',115200,timeout=0.5)
>>> com.isOpen()
True
>>> com.readline()
'123'
>>> com.write('lalala')
6
>>>
4 miniterm
這是一個簡單的串口收發工具,在控制臺每輸入一個字符將被立即發送出去。而接收到的信息會被打印在當前窗口中
例如
pi@raspberrypi:~ $ python -m serial.tools.list_ports
/dev/ttyAMA0
/dev/ttyUSB0
2 ports found
pi@raspberrypi:~ $ sudo miniterm.py /dev/ttyUSB0
--- Miniterm on /dev/ttyUSB0 9600,8,N,1 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
AT
image.png
5編寫一個串口收發的小程序
該程序接收控制臺輸入,將其串口發送出去,如若需要接收對應模組應答信息,則將屏蔽取消
import serial
import os
import threading
import serial.tools.list_ports
from time import sleep
def rcv_data():
while True:
rcv=serial.readline()
rcv=rcv.decode()
print(rcv)
if __name__=='__main__':
port_list = list(serial.tools.list_ports.comports())
k=0
for i in port_list:
print(i,k)
k=k+1
if len(port_list) <= 0:
print("not find serial")
else:
serial_k=input("please switch serial:")
k = int(serial_k)
serial_list = list(port_list[k])
serialName = serial_list[0]
#print(serialName)
serial=serial.Serial(serialName,115200,timeout=3600)
th=threading.Thread(target=rcv_data)
th.setDaemon(True)
th.start()
if serial.isOpen():
print("open succeed >",serial.name)
else:
print("open failed >",serial.name)
while True:
send_data=input("=>")
send_data = send_data + '\r\n'
serial.write(send_data.encode())
# data=serial.read(1)
# sleep(0.1)
# data = (data + serial.read(serial.inWaiting())).decode()
# print(data)
運行結果
image.png
注意事項:
不要將文件命名為serial,這和導入包名稱相同!
參考資料
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态