Loading

用ESP32(ESP32-CAM)(Micropython)、水位传感器、继电器、水泵 做根据水位自动加水的设备时遇到的问题记录

基本流程

水位传感器放在水缸内上方位置,水位到达水位传感器所在的位置时,水位传感器触发,并输出信号给到ESP32(ESP32CAM)。然后ESP32(ESP32CAM)控制继电器闭合,水泵启动并工作60S。之后还是根据传感器信号,决定继电器是闭合还是断开,一直循环下去。

main.py

点击查看 main.py
from machine import Pin
from time import sleep

# 水位传感器
sensor = Pin(26, Pin.IN)
# 继电器
relay = Pin(18, Pin.OUT)

# 断开继电器
relay.value(1)
sensorValue = sensor.value()

while True:
    if sensor.value() != sensorValue:
        sensorValue = sensor.value()
        print("Current sensor value is " + str(sensorValue))

        if sensorValue == 0:
            relay.value(0)
            print("继电器闭合")
            print("sleeping ...")
            sleep(60)
        else:
            relay.value(1)
            print("继电器断开")

过程中遇到的问题和记录

ESP32刷入Micropython固件

直接用USB线连接到电脑上,然后用thonny写入Micropython官方的ESP32固件即可

Which GPIO Pins should I use ?
接入继电器之后,却不能控制其闭合或者断开(水位传感器也是,单独供电时,传感器信号没能正常传入ESP32)

原因分析:
ESP32的GPIO引脚最高输出为3.3V电压,无法驱动继电器工作。继电器本质上依赖电压高低差而实现电磁的吸合以及断开

高电平--电压5v---断开

低电平---低电平触发---触发电压0-1.2v---接合

解决方案:
将继电器的VCC输入使用3.3v,不要用5v,然后正常接GPIO,此时低电平0v,高电平3.3v,压差为3.3v,可以稳定工作。

(继电器的电源及信号输入都要来自ESP32)
(水位传感器的也是如此,电源独立时,传感器信号不能正确传递)

参考:

ESP32-CAM 刷入 Micropython 固件

使用 USB转TTL-CH340 连接 ESP32-CAM,用flash_download_tool,把micropython 固件写入 0x1000。模式选DIO,波特率可能需要改成921600,如果默认的115200不成功的话。点击下载之后,如果进度条一直不动,则按一下ESP32-CAM上的RST按钮。写入之后再正常启动后有可能报错,可以考虑先ERASE再重新写入。有问题随时插拔USB。写入固件的时候,记得短接IO0和GND,写入完成正常使用的时候断开前面的短接。
另外,最开始直接用thonny刷入ESP32-CAM的固件,没能成功(ESP32可以直接用USB线连接到电脑上,然后用thonny写入Micropython官方的ESP32固件)。

ESP32-CAM的引脚

如果不使用SD卡时,GPIO 2、4、12、13、14 和 15可以用作普通的GPIO口

参考:

其他参考资料

posted @ 2024-06-12 18:03  asashadow  阅读(888)  评论(0)    收藏  举报