本帖最后由 yun59t 于 2024-8-9 15:15 编辑
最近开始尝试用esphome做些小东西,边玩边学。esphome没看到哪有系统性的中文教程,esphome的官网,外行+英文,太难食用了。
1、准备材料:
① ESP32 Super Mini开发板 ×1;(接口:1xI2C、1xSPI、2xUART、11xGPIO(PWM)、4xADC)
② 4脚(VIN、GND、A0、D0)雨水传感器×1,型号未知;
③ 4脚(VIN、GND、A0、D0)土壤湿度传感器×1,型号未知;
④ 杜邦线×n。
二、esphome代码
esphome:
name: rain
friendly_name: rain
esp32:
board: esp32-c3-devkitm-1
framework:
type: arduino
# 启用日志功能
logger:
# 启用HA API,使设备能够与HA通信,接入ha时填此key
api:
encryption:
key: "XXX"
# 启用OTA(Over-the-Air)功能,允许通过Wi-Fi更新设备固件
ota:
- platform: esphome
password: "123457"
# 配置Wi-Fi网络
wifi:
ssid: "XXX"
password: "XXX"
# 配置热点,在Wi-Fi连接失败时启用
ap:
ssid: "智能设备19转192.168.4.1"
password: "123456789"
# 启用在设备连接热点时提供一个配置页面
captive_portal:
# 启用web服务器,地址IP:80
web_server:
port: 80
# 定义GPIO引脚,用于控制板载LED灯
output:
- platform: gpio
pin: GPIO8
id: gpio_8
# 定义一个二进制灯光实体,使用上述定义的GPIO输出控制LED灯
light:
- platform: binary
name: "LED板载灯"
output: gpio_8
# 定义若干二进制传感器
sensor:
# 一个wifi信号传感器
- platform: wifi_signal # 平台,wifi信号传感器
name: "WiFi信号强度" # 在HA中显示的实体名称
update_interval: 60s # 更新周期,默认60s
# 一个雨水传感器
- platform: adc
pin: GPIO1
name: "雨量湿度"
id: rain_humidity_sensor
update_interval: 1s
attenuation: 11db # 输入电压范围档
filters:
- lambda: |-
// 将电压转换为百分比并反转
float percent = (1.0 - x / 3.3) * 100.0;
// 上式值使用后范围10%~80%,映射为10%~100%
float min_input = 10.0;
float max_input = 80.0;
float min_output = 0.0;
float max_output = 100.0;
// 确保值在范围内
if (percent < min_input) percent = min_input;
if (percent > max_input) percent = max_input;
// 线性插值公式
return (percent - min_input) / (max_input - min_input) * (max_output - min_output) + min_output;
unit_of_measurement: "%"
accuracy_decimals: 0 # 精度
# 一个土壤湿度传感器
- platform: adc
pin: GPIO0
name: "土壤湿度"
id: soil_moisture_sensor
update_interval: 3s
attenuation: 11db # 输入电压范围档
filters:
- lambda: |-
// 将电压转换为百分比并反转
float percent = (1.0 - x / 3.3) * 100.0;
// 上式值使用后范围10%~80%,映射为10%~100%
float min_input = 10.0;
float max_input = 80.0;
float min_output = 0.0;
float max_output = 100.0;
// 确保值在范围内
if (percent < min_input) percent = min_input;
if (percent > max_input) percent = max_input;
// 线性插值公式
return (percent - min_input) / (max_input - min_input) * (max_output - min_output) + min_output;
unit_of_measurement: "%"
accuracy_decimals: 0 # 精度
# 定义若干二进制传感器
binary_sensor:
# 一个二进制雨水传感器
- platform: gpio
pin: GPIO2
name: "雨水感应"
device_class: moisture # 设备类别
filters: # 反转输出状态
- invert:
# 一个二进制土壤湿度传感器
- platform: gpio
pin: GPIO5
name: "土壤湿度感应"
device_class: moisture # 设备类别
filters: # 反转输出状态
- invert:
三、成果及存在问题
1、在路由器中接入后,设备名称比较随意,能否在esphome代码中,直接定义路由器中的显示名称,而不是在路由器中修改。
2、二进制传感器正常,但模拟量的传感器,ha中只能显示一个,在esphome的web控制页中也是,但在左侧运行反馈中内容明明有两个。是不是需要进行I2C配置,具体怎么配置。(本条已解决,模拟量名称用中文导致不懂什么原因的冲突,改英文后出来了)
3、开发板上有蓝色+红色2个板载LED,其中蓝色这个是可编程的,红色这个是不可编程的。日常通电时,不可编程的红色LED一直亮着,比较碍眼,能把它关掉不。
-------------------------------------
备注:麻烦大神们提供方法时,越具体越好,没有具体做法,这样对于外行小白来说,又绕又晕,难以食用。后面问题解决了,我也把正确的思路写上来,给同是新人的爱好者们提供个参考。非常感谢!!!
|