一·项目介绍
随着社会经济的不断发展,人们的生活水平日益提高,健康与养生成为了全民关注的热点话题,空气质量不断下降,也引起了社会的广泛关注。如何了解家居内空气质量的情况也成为了急需解决的问题,在此背景下,本设计针对室内空气质量问题设计了基于ESP32的空气质量检测系统。为人们能够及时调节室内空气质量,提高生活水平提供的可能。
二··模块介绍
主控芯片:ESP32
ESP32-S3 是一款集成 2.4 GHz Wi-Fi 和 Bluetooth 5 (LE) 的 MCU 芯片,支持远距离模式 (Long Range)。ESP32-S3 搭载 Xtensa® 32 位 LX7 双核处理器,主频高达 240 MHz,内置 512 KB SRAM (TCM),具有 45 个可编程 GPIO 管脚和丰富的通信接口。支持用户配置数据缓存与指令缓存。
ESP32-S3芯片具有行业领先的低功耗性能和射频性能,支持 WiFi IEEE802.11b/g/n 协 议和 Bluetooth 5。该芯片搭载 Xtensa-R32 位 LX7 双核处 理器,工作频率高达 240 MHz。支持二次开发,无需使用其它微控制器或处理器。芯片内置 512 KB SRAM,384 KB ROM, 16KB RTC SRAM。芯片支持多种 低功耗工作状态,能够满足各种应用场景的功耗需求。芯片所特有的精细时钟门控功能、动态电压时钟频率调节功能、射频输出功率可调节功 能等特 性,可以实现通信距离、通信速率和功耗之间的最佳平衡。
ESP32-S3实物图如下:
模组提供丰富的外设接口,包括 UART,PWM,SPI,I²C,ADC,LCD, DVP,RMT(TX/RX),脉冲计数器,USB OTG,USB Serial/JTAG,SDIO,DMA 控制器, TWAI 控制器,温度传感器,电容式传感器和多个IO 口。
模块具有多种特有的硬件安全机制。硬件加密加速器支持 AES、SHA 和 RSA 算法。其中的 RNG、HMAC 和数字签名(Digital Signature) 模块提供了更多安全性能。 其他安全特性还包括 Flash 加密和安全启动 (secure boot) 签名验证等。完善的安全机 制使芯片能够完美地应用于各种加密产品。模块支持低功耗蓝牙:Bluetooth5,Bluetooth mesh。蓝牙速率支持:125Kbps,500Kbps,1Mbps,2Mbps。支持广播扩展,多广播,信道选择。
支持蓝牙和WIFI,就意味着可以进行很多的无线连接;同时乐鑫提供了大量的开源库,包括语音识别Skainet,可以方便的进行后期扩展。
MQ135空气质量检测传感器:
MQ135是测量空气污染情况常用的一个传感器,具有代表性,价格低,寿命长,敏感度也OK,主要用于测量空气中二氧化碳,氮氧化物,氨气,酒精,苯类等。这几样气体可以说都属于家用空气污染测定中的重要成份。
MQ135空气质量检测模块实物图如下:
这个传感器有两个输出口:DO输出数字信号,也就是对应单片机的高低电平。AO输出模拟信号,也就是ADC信号。
DHT11温湿度传感器:
该传感器包括一个电阻式测湿元件和一个 NTC 测温元件,并与一个高性能 8 位单片机相连接。通过单片机等微处理器简单的电路连接就能够实时的采集本地湿度和温度。DHT11 与单片机之间能采用简单的单总线进行通信,仅仅需要一个I/O 口。传感器内部湿度和温度 40Bit 的数据一次性传给单片机,数据采用采样的方式进行校验,有效的保证数据传输的准确性。
DHT11温湿度传感器实物图如下:
DHT11 的特点:功耗很低,5V 电源电压下,工作平均最大电流 0.5mA。
OLED显示屏:
OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(Organic Electroluminesence Display, OELD)。OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。
OLED显示原理与LCD有着本质上的区别,主要是通过电场驱动,有机半导体材料和发光材料通过过载流子注入和复合后实现发光。从本质上来说,就是通过ITO玻璃透明电极作为器件阳极,金属电极作为阴极,通过电源驱动,将电子从阴极传输到电子传输层,空穴从阳极注入到空穴传输层,之后迁移到发光层,二者相遇后产生激子,让发光分子激发,经过辐射后产生光源。简单来说,一块OLED屏幕,就是由百千万个“小灯泡”组成。
三·原理图及PCB演示
原理图如下:
电源采用USB的电压供电
PCB如下:
四·成品调试
首先是成品组装好的样子
其次就是DHT11温湿度传感器
然后就是MQ135PM2.5空气质量检测器
五·程序
当KEY()函数返回0时,它表示与气体浓度有关的特定条件,代码通过调整变量进行响应。如果警报等级超过5级,则将其重置为1。
if KEY() == 0:
gas_concentration_alarm_grade += 1
if gas_concentration_alarm_grade == 5:
gas_concentration_alarm_grade = 1按键设置等级
- 初始化按键:使用Pin类初始化一个引脚,将引脚34配置为输入模式。
- 初始化I2C的OLED:使用SoftI2C和SSD1306_I2C类初始化I2C接口和OLED显示屏,设置时钟引脚为22,数据引脚为21,频率为400000。
- 初始化DHT11:使用DHT11类初始化温湿度传感器,将其连接的引脚配置为5。
- 初始化RTC:使用RTC类初始化实时时钟模块。
- 定义传感器连接到ESP32的引脚:将MQ135气体传感器连接到引脚33。
- 初始化MQ135传感器对象:使用MQ135类初始化MQ135气体传感器对象。
- 将gas_concentration_alarm_grade初始化为1:初始化gas_concentration_alarm_grade变量为1。
#初始化按键
KEY = Pin(34, Pin.IN)
# 初始化I2C和OLED
i2c = SoftI2C(scl=Pin(22), sda=Pin(21), freq=400000)
oled = SSD1306_I2C(128, 64, i2c)
# 初始化DHT11
dht_sensor = DHT11(pin=5)
# 初始化RTC
rtc = RTC()
# 定义传感器连接到ESP32的引脚
mq135_pin = 33
# 初始化MQ135传感器对象
mq135_sensor = MQ135(mq135_pin)
gas_concentration_alarm_grade = 1初始化
get_raw_value
方法:用于获取传感器的原始值。get_corrected_value
方法:用于获取经过校准后的传感器数值。在注释中提到,这可能需要根据传感器手册中提供的转换公式进行校准。当前示例中直接返回了原始值,实际的校准过程需要参考MQ135传感器的数据手册。
MQ135.py:
from machine import ADC
import time
class MQ135:
def __init__(self, pin):
self.adc = ADC(pin)
def get_raw_value(self):
return self.adc.read()
def get_corrected_value(self):
raw_value = self.get_raw_value()
# 在这里,你可能需要进行一些校准和转换来获得准确的气体浓度值
# 这可能涉及到使用传感器的数据手册中提供的转换公式
# 示例中直接返回原始值,具体校准过程需参考MQ135传感器的数据手册
return raw_value
采集电路
六·总结
很感谢硬禾学堂举办的FastBond2-How 2 Make电子设计活动,让我有机会通过这个活动使用一些未曾尝试过的芯片来做一些不大但很有意义的制作。这之中虽然遇到了很多难题,比如MQ135检测不到数据,但是经过后续不断排错也顺利解决了。因为阶段二设计时间较为仓促,如有错误,欢迎指正。同时十分感谢此次FastBond活动提供的机会和平台,让我能够将想实现的东西进行进一步具体化,这对我的学习生活很有帮助。