ESP32 PM2.5测试
在STM32上测了,但是发现 ESP32和STM32的串口用法稍有区别,特此记录一下
ESP32串口用法(UART)
基础用法
# 导入模块
from machine import UART
#构建UART对象
uart = UART(2, baudrate=9600,rx=22,tx=23,timeout=10)
#UART(id, baudrate, bits, parity, rx, tx, stop, timeout)
id : 串口编号:ESP32的UART资源只有两个, id有效取值范围为1,2
bandrate: 波特率(时钟频率):常用波特率为:9600(默认),115200,信息接受双方的波特率必须一致,否则会乱码。
bits:单个字节的位数(比特数):8 (默认),7,9
parity: 校验方式:None 不进行校验(默认),0 偶校验,1 奇校验
rx:接收口的GPIO编号
tx:发送口的GPIO编号
stop: 停止位个数:1 (默认),2
timeout: 超时时间:取值范围: 0 < timeout ≤ 2147483647
检测数据
uart.any() # 检测是否有数据
# if uart.any():
# uart.read() # 有数据就读取。
读写
uart.read(10) # 读入10个字符, 返回一个比特对象
uart.read() # 读取所有的有效字符
uart.readline() # 读入一行
uart.readinto(buf) # 读入并且保存在缓存中
uart.write('xianyu') # 向串口写入6个字符xianyu
uart.readchar() # 读入一个字符
uart.writechar(42) # 写入ASCALL码为42的字符
uart.writechar(ord('*')) # 等同于uart.writechar(42)
PM2.5测试
所选设备
ESP32
PM2.5模块
5003 G5
模块原理
有效值
接线说明
8根线,我们只用3根(VCC GND和TXD)。通电就传数据,我们只要接数据,提取就行。
开发板 | PM2.5 |
---|---|
22 | TX |
5v | VCC |
GND | GND |
from machine import UART
#ESP32可以映射引脚,初始化的时候设置就行,串口号一般设置成2(0和1尽量别用。)
import timeuart= UART(2, baudrate=9600, bits=8, parity=None, rx=22, stop=1, timeout=100)
while True:
time.sleep(1)
if uart.any():
u1=uart.read()
#print(u1)
PM2_5= u1[6]*256+u1[7] # 6,7位PM2.5
PM10 = u1[8]*256+u1[9] # 8.9位PM10
print("PM2.5为:",PM2_5,"um")
print("PM10为:",PM10,"um")