一:ESP32采集压力传感器信号(使用Micro Python)
·
1、实验目标:
基于Micro Pytohn使用ESP32采集两路压力传感器信号。
2、实验环境:
| 芯片 | esp32-wroom-32 |
| 传感器 | 压力传感器 |
| 开发环境 | Thonny + micro python |
3、实验步骤
购买的压力传感器如下图:有三个引脚,GNG,VCC,S;
- GND连接esp32的GND,
- VCC连接esp32的VCC,
- S来连接esp32任意具有ADC功能的GPIO口。
Tips: ESP32 芯片有2 个12位的SAR(逐次逼近)ADC,最多可以读取18个不同的模拟通道输入:(ADC1支持8个通道(GPIO32-GPIO39),ADC2支持10个通道(GPIO0、GPIO2、GPIO4、GPIO12-GPIO15、GPIO25-GPIO27)。
代码:
from machine import Pin# 导入Pin模块
from machine import ADC# 导入ADC模块
from machine import Timer# 导入Timer模块
import time# 导入time模块
import utime
import os
sensor1 =ADC(Pin(25))
sensor1.width(ADC.WIDTH_12BIT) #读取的电压转为0-4096;ADC.WIDTH_9BIT:0-511
sensor1.atten(ADC.ATTN_11DB) #衰减设置范围:输入电压0-3.3v
sensor2 =ADC(Pin(26))
sensor2.width(ADC.WIDTH_12BIT) #读取的电压转为0-4096;ADC.WIDTH_9BIT:0-511
sensor2.atten(ADC.ATTN_11DB) #衰减设置范围:输入电压0-3.3v
while True:
print(f'sensor1输出:{sensor1.read_u16()}',f'sensor2输出:{sensor2.read_u16()}')
utime.sleep_ms(20)
结果如图:

如果想保存传感器数据,可以使用xcom或者sscom等串口助手进行保存。
4、代码改进
代码比较简单,但是这个代码有一下几个缺点
1、缺乏实时性
循环阻塞操作:代码使用 while True 循环读取传感器数据,且在每次迭代中调用 utime.sleep_ms(20)。这种实现会阻塞主线程,导致无法同时执行其他任务。
2、无法保证精准的采样周期
该代码使用 utime.sleep_ms(20) 控制采样周期,但 utime.sleep 的精度依赖于系统时钟和其他任务的执行情况,可能导致实际采样周期偏离预期,尤其是在运行复杂任务时。
3、数据采集不可扩展
每个传感器的初始化和读取都需要单独的代码块(如 sensor1 和 sensor2 的设置),当需要增加更多传感器时,代码会变得冗长且难以维护。
4、高功耗
由于代码持续运行在 while True 循环中,主线程始终处于忙碌状态,增加了功耗,尤其是在电池供电的嵌入式设备中不理想。
如果想克服以上缺点,可以使用以下方法:
- 使用 定时器(Timer) 实现周期性采样,避免主线程阻塞。
- 将传感器的初始化和数据采集封装为模块化函数或类,方便扩展和维护。
- 在低功耗应用中,使用合适的休眠模式降低能耗。
相关程序在下一个博客中给出 。
更多推荐
所有评论(0)