1. ESP32刷入micropython固件
1. 本机安装python环境
python下载地址:https://www.python.org/downloads/
2. 安装工具
pip install esptool
pip install pyserial
3. 擦除所有的flash
esptool --port COM3 erase_flash
4. 固件下载
固件下载:https://micropython.org/download/esp32/
5. 写入固件
# COM3连结串口号 # ESP32_GENERIC-20231005-v1.21.0.bin固件名称
esptool --chip esp32 --port COM3 write_flash -z 0x1000 ESP32_GENERIC-20231005-v1.21.0.bin
6. 验证固件已刷入
# 呼吸灯测试
# 开发板上的蓝色小灯会由暗——明——暗
from machine import Pin, PWM
import time
# 使用 ESP32 的板载 LED。大多数 ESP32 开发板的板载 LED 连接到 GPIO2。
LED_PIN = 2
# 创建一个 PWM 对象
led = PWM(Pin(LED_PIN), freq=1000)
def breath():
while True:
# 逐渐增加亮度
for duty in range(0, 1024, 10):
led.duty(duty)
time.sleep(0.01)
# 逐渐减少亮度
for duty in range(1023, -1, -10):
led.duty(duty)
time.sleep(0.01)
breath()
2. 使用Thonny编程
1. 连接电路,测试程序
# 使用GPIO15接收传感器模块数字量
# 使用GPIO33接收传感器模拟量
# 打印湿度值
from machine import Pin, ADC
import time
pin15 = Pin(15, Pin.IN) # 15引脚接受传感器数字量
pin33 = ADC(Pin(33)) # 33引脚接收传感器模拟量
pin33.atten(ADC.ATTN_11DB) # 这里配置测量量程为3.3,传感器供电3.3v
while Ture:
print(pin15.value(), pin33.read()) # 0-4095
time.sleep(0.5)
2. 连接继电器模块,并测试
# 使用GPIO15接收传感器模块数字量
# 使用GPIO33接收传感器模拟量
# 使用GPIO13输出数字量至继电器,控制其动作
from machine import Pin, ADC
import time
# pin15 = Pin(15, Pin.IN) # 15引脚接受传感器数字量
pin33 = ADC(Pin(33)) # 33引脚接收传感器模拟量
pin13 = Pin(13, Pin.OUT)# 13引脚输出到继电器
pin33.atten(ADC.ATTN_11DB) # 这里配置测量量程为3.3,传感器供电3.3v
pin13.value(0) # 默认继电器不动作
while True:
value= pin33.read() # 读取湿度值0-4095
print("湿度值(湿0—4095干燥):{}".format(value))
if value > 3000:
print("检测到湿度值为{},已经很干燥了,准备倒计时".format(value))
for i in range(3, 0, -1):
print("倒计时{}".format(i))
time.sleep(1)
pin13.value(1)
while pin33.read() > 2000:
print("正在抽水灌溉中...当前湿度值:{}".format(pin33.read()))
time.sleep(0.5)
pin13.value(0)
print("已完成灌溉...抽水机停止工作")
time.sleep(1) # 每xx分钟检测一次.1为测试值1s
# 最终代码:
# 使用GPIO33接收传感器模拟量
# 使用GPIO13输出数字量至继电器,控制其动作
from machine import Pin, ADC
import time
pin33 = ADC(Pin(33)) # 33引脚接收传感器模拟量
pin13 = Pin(13, Pin.OUT)# 13引脚输出到继电器
pin33.atten(ADC.ATTN_11DB) # 这里配置测量量程为3.3,传感器供电3.3v
pin13.value(0) # 默认继电器不动作
while True:
value= pin33.read() # 读取湿度值0-4095
print("湿度值(湿0—4095干燥):{}".format(value))
if value > 3000:
print("检测到湿度值为{},已经很干燥了,准备倒计时".format(value))
for i in range(3, 0, -1):
print("倒计时{}".format(i))
time.sleep(1)
pin13.value(1) # 开启灌溉,继电器动作
while pin33.read() > 2000:
print("正在抽水灌溉中...当前湿度值:{}".format(pin33.read()))
time.sleep(0.5)
pin13.value(0) # 灌溉停止,将继电器复位。
print("已完成灌溉...抽水机停止工作")
time.sleep(900) # 每15分钟检测一次
3. 改进
可以改进的地方。
- 在倒计时可以设置为15秒,15秒后再次检测湿度值,如果湿度值还是大于设定值,再开始浇水
- 我这个花盆较小,浇水时候可以设置每浇水2秒,等待10秒再检测湿度值。
- 统计浇水时间,并记录到mqtt服务器。
- 将湿度值传输到mqtt服务器,并且能远程手动浇水。
