'''
深圳市普中科技有限公司(PRECHIN 普中)
技术支持:www.prechin.net
PRECHIN
普中
实验名称:烟雾传感器检测实验
接线说明:
MQ-2烟雾传感器模块-->ESP32 IO
AO-->34
VCC-->5V
GND-->GND
SSD1306 OLED模块-->ESP32 IO
SDA-->21
SCL-->22
VCC-->3.3V
GND-->GND
实验现象:程序下载成功后,在Shell控制台和OLED屏幕上同时显示MQ2烟雾传感器检测的烟雾浓度值
注意事项:需在仿真平台中添加SSD1306 OLED显示屏
'''
from machine import Pin, ADC, I2C
from time import sleep
from ssd1306 import SSD1306_I2C
# 硬件引脚定义
GAS_PIN = 34 # MQ-2传感器AO引脚连接到ESP32的GPIO34
OLED_WIDTH = 128 # OLED显示屏宽度
OLED_HEIGHT = 64 # OLED显示屏高度
SDA_PIN = 21 # I2C数据线连接到GPIO21
SCL_PIN = 22 # I2C时钟线连接到GPIO22
# 全局变量
gas_adc = None # ADC对象
oled = None # OLED对象
def setup():
global gas_adc, oled
# 初始化MQ-2传感器
gas_adc = ADC(Pin(GAS_PIN))
gas_adc.atten(ADC.ATTN_11DB) # 11dB衰减,最大输入电压约3.6V
# 初始化OLED显示屏
i2c = I2C(0, sda=Pin(SDA_PIN), scl=Pin(SCL_PIN), freq=400000)
oled = SSD1306_I2C(OLED_WIDTH, OLED_HEIGHT, i2c)
oled.fill(0) # 清屏
oled.text("MQ-2 Sensor Test", 0, 0)
oled.text("Initializing...", 0, 16)
oled.show()
sleep(1)
def loop():
while True:
# 读取MQ-2传感器值
sensor_value = gas_adc.read()
# 在控制台打印
print(f"MQ-2 Sensor Value: {sensor_value}")
# 在OLED上显示
oled.fill(0) # 清屏
oled.text("MQ-2 Sensor Monitor", 0, 0)
oled.hline(0, 12, OLED_WIDTH, 1) # 水平线
oled.text(f"ADC Value: {sensor_value}", 0, 24)
# 根据传感器值显示状态
if sensor_value < 1000:
oled.text("Status: Normal", 0, 40)
elif sensor_value < 2000:
oled.text("Status: Caution", 0, 40)
else:
oled.text("Status: ALERT!", 0, 40)
oled.hline(0, 52, OLED_WIDTH, 1) # 水平线
oled.text("PRECHIN Technology", 0, 54)
oled.show()
sleep(0.2) # 延时200ms
def main():
"""主函数,程序入口点"""
print("MQ-2 Smoke Sensor Monitoring System")
print("Initializing hardware...")
setup()
print("System ready. Starting monitoring...")
try:
loop()
except KeyboardInterrupt:
print("\nProgram terminated by user")
# 清屏
if oled:
oled.fill(0)
oled.show()
if __name__ == "__main__":
main()