树莓派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()

  • 12
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

WEIXW99

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

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

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

打赏作者

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

抵扣说明:

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

余额充值