最简单的树莓派+python3+串口通信的教程以及出现的问题的解决方式

本文提供了一种简化的方法,用于实现树莓派与电脑之间的串口通信,通过Python3进行编程。文章详细介绍了连接方式、查看串口命令及核心代码示例,并解释了每个代码段的作用,使读者能够快速掌握树莓派串口通信的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

寒假打算做个东西,需要用到串口通信,就百度教程,但是发现教程参差不齐,非常麻烦,什么下载这个下载那个,装什么minicom,简直了,于是在这里简化所有的步骤,一次搞定树莓派+python3+串口通信的开发!!!!!!

首先把树莓派和电脑端链接起来,接线方式如下:

如果不知道树莓派的串口在哪里,下面附上查看的命令:

输入 gpio readall 的命令就可以看了,如果不知道树莓派引脚排列,欢迎去看我的另一个教程,专门有解释哦。

---------------------------------------------------------------------------------------------------------------------------------------------

然后打开一个py文件,输入以下代码:

# -*- coding:utf-8 -*-
import serial
import time
ser = serial.Serial("/dev/ttyAMA0", 9600)  # 位置1
ser.flushInput()  # 位置2
ser.write("begin".encode("utf-8"))  # 位置3
def main():
    while True:
        count = ser.inWaiting()  # 位置4
        if count != 0:
            recv = ser.read(count)  # 位置5
            ser.write("Recv some data is : ".encode("utf-8"))  # 位置6
            ser.write(recv)  # 位置7
            ser.flushInput()
        time.sleep(0.1)  # 位置8

if __name__ == '__main__':
    main()

下面一个一个解释:

# 位置1:打开串口的命令,"/dev/ttyAMA0" 不一定是固定的,需要在这里查看

后面的9600是波特率,常用的有 115200 9600,其他的默认设置就可以。

# 位置2:先清空缓冲区域,省得有垃圾数据没有被接收影响我们的工作

# 位置3:串口发送一个字符串,这里需要用到encode,因为write 这个方法发送以二进制发送,接受也是接收的二进制,所以才要编码为这个,当然,我的文件编码是utf-8。

发送数据之后,还会返回一个整数,为发送的字符数量。

# 位置4:得到当前未接收的数据有多少个

# 位置5:将这么多数据全部读取出来。

# 位置6、7:回显接收的数据。因为接收的也是字节流,所以不需要编码,直接就能发送出去。

# 位置8:可以不要,但是为了不占用太多CPU资源,就可以适当写一下。

# 要点:要用 sudo 权限运行,否则无法使用串口。

就这么多即可完成串口通信,很简单吧。嘿嘿。

 

 

### 树莓派 Python 串口通信教程 #### 准备工作 为了使树莓派能够通过USB转TTL串口与其他设备进行通信,需调整配置以确保GPIO上的UART接口不被用作Linux控制台。这可以通过停止并禁用`serial-getty@ttyAMA0.service`服务来实现[^4]。 ```bash sudo systemctl stop serial-getty@ttyAMA0.service sudo systemctl disable serial-getty@ttyAMA0.service ``` 接着编辑启动参数文件 `/boot/cmdline.txt` ,移除其中有关于 `console=serial0,115200` 的设定(如果存在)。完成上述操作之后保存更改并重启系统以便新设置生效。 #### 安装依赖库 安装PySerial库可以方便地处理串行端口的数据传输: ```bash pip install pyserial ``` #### 编写Python代码 下面是一个简单的例子展示怎样利用Python脚本来读取来自其他设备的信息以及向其发送指令。这里假设波特率为9600bps,并且连接到名为`ttyUSB0`的虚拟COM端口上;对于某些情况可能需要更改为其他的名称比如`ttyS0`或`ttyAMA0`取决于具体的接线方式和操作系统版本。 ```python import time import serial ser = serial.Serial( port='/dev/ttyUSB0', # 替换成实际使用的串口号 baudrate=9600, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=1 # 设置超时时间 ) if ser.isOpen(): try: while True: if ser.in_waiting > 0: data_raw = ser.read(ser.in_waiting).hex() # 将收到的数据转换成十六进制字符串表示形式 print(f"Received: {data_raw}") send_data_hex = 'aabbccdd' # 要发送的数据,这里是示例值 ser.write(bytes.fromhex(send_data_hex)) # 发送前将十六进制字符串转化为字节流 time.sleep(1) # 延迟一秒再继续循环 except KeyboardInterrupt: pass finally: ser.close() else: print('Failed to open the serial port.') ``` 这段程序会持续监听是否有新的输入到达指定的串行端口,并打印出来自外部装置的消息作为调试信息。同时每隔一秒钟它还会尝试向外设发出一组预定义好的16进制编码后的消息。 #### 注意事项 - 如果遇到权限问题无法访问串行端口,则考虑给当前用户添加至dialout组或者临时给予root权限运行该应用程序。 - 对于不同的应用场景,请根据实际情况调整串行端口路径、波特率以及其他初始化选项。
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChuckieZhu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值