树莓派4B使用python配置USB转RS485模块读取传感器数值

一、安装GPIO的库函数-Wiringpi

因为使用gpio readall 指令时显示 bash: /usr/bin/gpio:没有那个文件或目录  因此需要更新wiringPi库到新版本,根据官方提供的教程:

cd /tmp

wget https://project-downloads.drogon.net/wiringpi-latest.deb

sudo dpkg -i wiringpi-latest.deb

 到最后一步安装失败,显示缺失依赖,如下:

dpkg: 依赖关系问题使得 wiringpi:armhf 的配置工作不能继续:
 wiringpi:armhf 依赖于 libc6.

dpkg: 处理软件包 wiringpi:armhf (--install)时出错:
 依赖关系问题 - 仍未被配置
正在处理用于 man-db (2.9.4-2) 的触发器 ...
在处理时有错误发生:
 wiringpi:armhf 

在此之后使用指令sudo apt-get install -f 后在执行上述最后一步即可。

二、树莓派4B使用python对GPIO编程

导入模块

import RPi.GPIO as GPIO

设置引脚引用模式:

BOARD规则和树莓派电路板上的物理引脚编号相对应。使用这种编号的好处是,硬件一直可以使用,树莓派的版本问题不会有影响(兼容)。

BCM规则:是更底层的工作方式。在使用一个引脚时,需要查找信道号和物理引脚编号之间的对应规则。不同的树莓派版本,编写的脚本文件可能是无法通用。

# BCM或者BOARD模式,看引脚采用的是什么编码方式
GPIO.setmode(GPIO.BCM)
GPIO.setmode(GPIO.BOARD) # 引脚映射模式

检测使用的哪种模式可以使用:

mode=GPIO.getmode()  # mode的取值有GPIO.BOARD, GPIO.BCM, None

设置引脚方向(输入/输出)并使用

pin = 12

设置为输出

GPIO.setup(channel,GPIO.OUT,initial=GPIO.HIGH)   #默认输出为高电平
GPIO.setup(channel,GPIO.OUT,initial=GPIO.LOW)   #默认输出为低电平

GPIO.output(pin, GPIO.HIGH)  # 设置引脚输出高电平

# 如果要设置多个引脚:
list=[11,12]
GPIO.output(list,GPIO.OUT)
GPIO.output(list,(GPIO.HIGH,GPIO.LOW))

或者设置为输入

GPIO.setup(pin,GPIO.IN)
GPIO.input(pin)
# 低电平返回0 / GPIO.LOW / False
# 高电平返回1 / GPIO.HIGH / True

如果输入引脚处于悬空状态,引脚的值将是漂动的。读取到的值是未知的,因为它并没有被连接到任何的信号上,直到按下一个按钮或开关。

由于干扰的影响,输入的值可能会反复的变化。

可通过此法解决:

GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_UP)  
# or
GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
#可以调整上下拉状态

释放引脚使用的资源

GPIO.cleanup()

GPIO.cleanup()只会释放掉脚本中使用的GPIO引脚,并会清除设置的引脚编号规则。

警告
如果RPi.GRIO检测到一个引脚已经被设置成了非默认值,那么你将看到一个警告信息。你可以通过下列代码禁用警告:

GPIO.setwarnings(False)

三、串口设置

在终端输入ls /dev -al, 发现只有硬件串口(serial1 -> ttyAMA0)的映射,并没有mini串口(serial0 -> ttyS0q)的映射。

串口配置:打开串口→sudo raspi-config  ,选择Interfacing Options→Serial port→No→Yes→ok

cd /boot
sudo gedit config.txt
#  在文件的最后将enable_uart=0改为enable_uart=1
sudo reboot 
重启之后就可以看见serial0

树莓派4B的默认硬件串口是分配给蓝牙模块使用的,而性能较差的mini串口是分配给GPIO串口 TXD0、RXD0。

Serial0,即GPIO映射的串口(TXD0、RXD0),默认是ttyS0,即mini串口。
Serial1,即板载蓝牙映射的串口,默认是ttyAMA0,即硬件串口。

为了稳定使用串口,我们要将两者映射交换——Serial0 映射成ttyAMA0,Serial1映射成ttyS0。

交换映射

仍然对config.txt进行操作

cd /boot
sudo gedit config.txt
# 在文件最后加上如下一句话:
dtoverlay=disable-bt

 在终端输入以下命令禁用掉和蓝牙有关的开机启动项

 sudo systemctl disable bluetooth

 重启之后就可以看见两者调换过来了

配置串口助手Minicom

# 查看串口设备
ls -al /dev/
# 安装minicom
sudo apt-get install minicom
# 启动minicom
sudo minicom -D /dev/ttyAMA0 -b 9600

树莓派4B串口通信配置方式 - 技术栈树莓派4B的串口使用,并通过串口与其他设备经过通讯协议发送、接收数据。_树莓派串口发送数字-CSDN博客

四、使用Python实现串口通信

基础功能实现:

# -*- coding: utf-8 -*
import serial
import time

ser = serial.Serial("/dev/ttyAMA0",115200)  # 创建serial实例,并设置端口和波特率

# 判断串口是否打开了,如果没有打开则打开
if not ser.isOpen():
    ser.open()  # 打开串口

ser.write(b"Raspberry pi is ready")  # 向串口发送一条数据
try:
    while True:
        count = ser.inWaiting()  # 获取串口接收缓冲区的字符数量
        if count != 0:  # 如果缓冲区中有数据
            recv = ser.read(count)  # 获取接收缓冲区中的所有数据,并将其存储到变量中。
            print(recv)  # 打印获取的数据
        	ser.write(recv)  # 将接收到的数据原样发送回给发送设备
            ser.flushInput()  # 清空接收缓存区
            time.sleep(0.5) 
except KeyboardInterrupt:  # 捕获用户按下Ctrl+C键的中断信号。
    if ser != None:
        ser.close()

<think>嗯,用户想在树莓派4B上用Python 3.11部署YOLOv5,我需要仔细看看提供的引用资料,然后整理出详细的步骤。首先,引用1提到了在树莓派4B上部署自己训练的YOLOv5模型,配合NCS2加速,可能涉及环境准备、模型换和部署步骤。引用2是关于YOLOv3和v3-tiny的部署记录,里面提到了使用tensorflow-yolo-v3项目,可能需要换模型,还有在Ubuntu或Windows上运行。引用3则提到了YOLOv5lite和onnxruntime,安装onnxruntime的步骤,可能对优化模型运行有帮助。 首先,用户需要安装Python 3.11。树莓派默认可能不是这个版本,所以可能需要从源码编译或者使用第三方工具。比如使用pyenv来安装,或者添加deadsnakes的仓库。然后,安装依赖库,比如OpenCV、PyTorch等。但PyTorch在ARM架构上的支持可能需要通过预编译的wheel文件安装,比如参考官方或社区提供的版本。 接下来是模型换部分。YOLOv5通常导出为ONNX格式,然后可能换为OpenVINO的IR格式,以便使用NCS2加速。引用1提到使用OpenVINO进行加速,所以需要安装OpenVINO工具包,并运行模型优化器。这一步可能需要将ONNX模型换为.bin和.xml文件。 然后,安装必要的Python库,比如onnxruntime(引用3提到)或者OpenVINO的runtime库。需要确保这些库支持Python 3.11,可能版本兼容性会有问题,需要检查。 在部署代码部分,需要加载模型,处理输入图像,进行推理,然后后处理输出。代码示例可能包括使用OpenCV读取图像,预处理,推理,解析边界框,NMS过滤,并绘制结果。需要确保代码适配Python 3.11的语法和依赖库版本。 可能遇到的问题包括:Python 3.11的兼容性,某些库可能尚未支持该版本;ARM架构下的性能优化,比如使用NCS2加速;模型换过程中的错误,需要调整参或版本匹配;依赖项安装失败,需要寻找合适的源或编译安装。 还需要考虑是否使用虚拟环境,比如venv,来隔离项目依赖,避免系统包冲突。此外,树莓派的硬件限制,如内存和处理器速度,可能需要模型轻量化,比如使用YOLOv5s或tiny版本,或者进行量化处理。 总之,步骤大致分为环境准备(Python 3.11、依赖库)、模型换(ONNX、OpenVINO)、部署代码编写,以及性能优化。需要逐一解决每个环节可能出现的问题,确保各组件版本兼容,并参考提供的引用资料中的具体操作步骤。</think>### 树莓派4B Python 3.11部署YOLOv5详细步骤 #### 一、环境准备 1. **系统更新与依赖安装** ```bash sudo apt update && sudo apt upgrade -y sudo apt install python3.11 python3.11-venv libopenblas-dev libatlas-base-dev libhdf5-dev -y ``` 树莓派官方系统默认支持Python 3.9,需手动安装Python 3.11[^1]。 2. **创建虚拟环境** ```bash python3.11 -m venv yolov5_env source yolov5_env/bin/activate ``` 3. **安装PyTorch(ARM兼容版)** 树莓派使用预编译的PyTorch ARM版本: ```bash pip install torch==2.0.1 torchvision==0.15.2 --extra-index-url https://snapshots.linaro.org/ldcg/pypi/ ``` --- #### 二、模型换与优化 1. **导出YOLOv5模型为ONNX格式** 在PC端执行: ```python import torch model = torch.hub.load('ultralytics/yolov5', 'yolov5s') model.export(format='onnx', dynamic=True) ``` 生成`yolov5s.onnx`文件。 2. **换为OpenVINO格式(可选,需Intel NCS2加速)** 使用OpenVINO模型优化工具: ```bash mo --input_model yolov5s.onnx --data_type FP16 ``` 生成`yolov5s.xml`和`yolov5s.bin`。 --- #### 三、部署代码 1. **安装依赖库** ```bash pip install opencv-python-headless onnxruntime numpy scipy ``` 2. **推理代码示例** ```python import cv2 import numpy as np from yolov5.utils.general import non_max_suppression # 加载模型(以ONNX为例) import onnxruntime as ort session = ort.InferenceSession('yolov5s.onnx', providers=['CPUExecutionProvider']) # 图像预处理 img = cv2.imread('test.jpg') img = cv2.resize(img, (640, 640)) blob = img.transpose(2,0,1).astype(np.float32) / 255.0 blob = np.expand_dims(blob, axis=0) # 推理 outputs = session.run(None, {'images': blob}) pred = non_max_suppression(torch.tensor(outputs[0]), conf_thres=0.5)[0] # 绘制结果 for det in pred: x1, y1, x2, y2, conf, cls = det cv2.rectangle(img, (int(x1), int(y1)), (int(x2), int(y2)), (0,255,0), 2) cv2.imwrite('result.jpg', img) ``` --- #### 四、性能优化建议 1. **使用NCS2加速(需安装OpenVINO Runtime)** ```bash pip install openvino==2023.0.0 ``` 修改代码中模型加载方式为`Core().compile_model()`。 2. **模型轻量化** 选择`yolov5n`或`yolov5s`模型,或使用量化技术(如INT8量化)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

WEIXW99

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

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

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

打赏作者

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

抵扣说明:

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

余额充值