python通過串口控制單片機,python串口通信_python的串口通信(pyserial)

 2023-10-02 阅读 29 评论 0

摘要:1 使用用硬件 樹莓派,CH340串口轉USB兩個,PC python通過串口控制單片機。2 環境安裝 樹莓派我使用的是自帶系統,環境都已經配好了,PC這邊我安裝了的ubunt子系統,有python環境,那么就需要安裝pyserial庫和CH340的驅動 sudo apt-get

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

abadfdbb1681

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)

運行結果

abadfdbb1681

image.png

注意事項:

不要將文件命名為serial,這和導入包名稱相同!

參考資料

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

原文链接:https://hbdhgg.com/1/110109.html

发表评论:

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

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

底部版权信息