一、目的

        这一节我们来学习如何使用ESP32连接空气质量传感器MQ135、有源蜂鸣器、酒精传感器MQ3、直流电机带扇叶PWM调速小风扇模块和0.96寸ssd1306屏幕,进行一个小实验。

二、环境

        ESP32 C3开发板(MicroPython v1.19.1 on 2022-06-18)+ 空气质量传感器MQ135 + 有源蜂鸣器(低电平触发)+ 酒精传感器MQ3 + 直流电机带扇叶PWM调速小风扇模块 + 0.96寸ssd1306屏幕Win10商业 + 几根杜邦线

        ESP32和各个模块接线方法:连接时注意您购买的器件电压支持情况


三、示例代码

from machine import Pin,SoftI2C,PWM,ADC
from ssd1306 import SSD1306_I2C
from ufont import BMFont
import time

# 创建I2C对象
i2c  = SoftI2C(scl = Pin(2),sda = Pin(3),freq = 400_000)
# 创建oled屏幕对象
oled = SSD1306_I2C(128,64,i2c,0x3c)

# 定义字体文件
font = BMFont("fonts/unifont-14-12888-16.v3.bmf")  

# 定义PWM小风扇马达对象
# freq = 40Mhz duty = 1023 4095 获取的值/最大宽带12bit 4095 * 1023
motor = PWM(Pin(8),duty=(0),freq = 4095)  # 4.095khz   # 风扇
# 定义蜂鸣器对象
beep = Pin(6,Pin.OUT)

# 创建MQ3传感器函数
def MQ_3():
    value = 0
    # 创建ADC对象
    adc = ADC(Pin(4))  # ADC1
    adc.atten(ADC.ATTN_11DB)  # 定义ADC衰减比
    adc.width(ADC.WIDTH_12BIT)  # 定义ADC的宽度,对应的为0到4095的分辨率
    
    # 求MQ3读取50次的平均值
    for i in range(0,50,1):
        value = value + adc.read()
    value /= 50
    # 通过公式计算出MQ3检测到的值
    temp = ((value * 125) / 4095)
    
    # 如果MQ3检测到的值不符合要求,则鸣叫
    if (temp > 30) & (temp < 50):
        beep.value(not beep.value())
        time.sleep(0.1)
    else:
        beep.value(1)
    
    # 在ssd1306上显示MQ3检测到的信息
    font.text(oled,"%d ppm"%(temp),60,16,color=1,font_size=16,reverse=False,clear=False,show=True,half_char=True, auto_wrap=True)
    print("MQ-03: %d "%(temp))

# 创建MQ135传感器函数
def MQ_135():
    
    value = 0
    # 创建ADC对象
    adc = ADC(Pin(5))  # ADC0
    adc.atten(ADC.ATTN_11DB)  # 3.3v
    adc.width(ADC.WIDTH_12BIT)  # 4095
    
    # 求MQ135读取50次的平均值
    for i in range(0,50,1):
        value = value + adc.read()
    value /= 50
    
    # 控制小风扇的转速
    motor.duty(int((value/4095) * 1023))
    
    font.text(oled,"%d"%(value),60,32,color=1,font_size=16,reverse=False,clear=False,show=True,half_char=True, auto_wrap=True)
    print("MQ135: %d "%(value))
    
def main():
    beep.value(0)
    font.text(oled,"MQ-03:",8,16,color=1,font_size=16,reverse=False,clear=False,show=True,half_char=True, auto_wrap=True)
    font.text(oled,"MQ135:",8,32,color=1,font_size=16,reverse=False,clear=False,show=True,half_char=True, auto_wrap=True)
    
    while True:
        MQ_3()
        MQ_135()
        time.sleep(2)
    
    
if __name__ == "__main__":
    main()

四、字库和ssd1306屏幕驱动

        大家查看前一篇文章获取。

物联网开发108 - Micropython ESP32 C3-ADC采集模拟量滑动电位器&PWM调速舵机角度控制_魔都飘雪的博客-CSDN博客使用ESP32 C3,连接0.96寸ssd1306屏幕、MG90S舵机、Motor Module直流电机带扇叶PWM调速小风扇模块,滑动变阻器模块来搭建我们的环境。最后,通过滑动电阻器的改变开控制舵机转动的角度和马达的转速,并将滑动变阻器的模拟值、舵机转动的角度和马达的电压值显示在屏幕上。https://blog.csdn.net/zhusongziye/article/details/130610032?spm=1001.2014.3001.5501

五、模块购买

1, MQ3和MQ135传感器购买

https://item.taobao.com/item.htm?spm=a1z09.2.0.0.7c5a2e8d9CDCEL&id=609977307608&_u=fp01rch1aa6icon-default.png?t=N3I4https://item.taobao.com/item.htm?spm=a1z09.2.0.0.7c5a2e8d9CDCEL&id=609977307608&_u=fp01rch1aa6全套资料下载链接: http://pan.baidu.com/s/1c10kCeO 密码: hcy2

 2,有源蜂鸣器(低电平有效)

https://detail.tmall.com/item.htm?abbucket=8&id=21124132861&ns=1&skuId=4319138558994&spm=a230r.1.14.1.5f448a4eS5wMWnicon-default.png?t=N3I4https://detail.tmall.com/item.htm?abbucket=8&id=21124132861&ns=1&skuId=4319138558994&spm=a230r.1.14.1.5f448a4eS5wMWn

 

3, PWM小风扇马达,请查看上一篇文章获取

物联网开发108 - Micropython ESP32 C3-ADC采集模拟量滑动电位器&PWM调速舵机角度控制_魔都飘雪的博客-CSDN博客使用ESP32 C3,连接0.96寸ssd1306屏幕、MG90S舵机、Motor Module直流电机带扇叶PWM调速小风扇模块,滑动变阻器模块来搭建我们的环境。最后,通过滑动电阻器的改变开控制舵机转动的角度和马达的转速,并将滑动变阻器的模拟值、舵机转动的角度和马达的电压值显示在屏幕上。https://blog.csdn.net/zhusongziye/article/details/130610032?spm=1001.2014.3001.5501

更多推荐