ESPHome 智能喂食器搭建指南:定时喂食 + 定量称重,一套能用的完整方案
【免费下载链接】esphomeESPHome is a system to control your ESP32, ESP8266, BK72xx, RP2040 by simple yet powerful configuration files and control them remotely through Home Automation systems.项目地址: https://gitcode.com/GitHub_Trending/es/esphome
凌晨下班到家,猫正蹲在空食盆前。这种"忘喂"场景,用 ESPHome 做一套智能喂食器就能彻底解决:CRON 表达式决定什么时候喂,步进电机决定喂多少,HX711 称重传感器负责核对食盆里的存量。全部逻辑写在一个 YAML 文件里,硬件总成本控制在 200 元以内。
先列清单:ESPHome 喂食器的 BOM 与引脚规划 🐾
核心是一块 ESP32 开发板加三个外设,引脚规划如下表。GPIO 可自由分配,但建议先把分配定死,再照着接线:
| 组件 | 引脚 | 作用 |
|---|---|---|
| A4988 STEP | GPIO26 | 电机脉冲 |
| A4988 DIR | GPIO27 | 转向 |
| A4988 EN | GPIO14 | 使能,低电平有效 |
| HX711 DOUT | GPIO19 | 称重数据 |
| HX711 SCK | GPIO18 | 时钟 |
| 限位开关 | GPIO4 | 送料螺杆回零检测 |
两个容易踩的坑:电机驱动和称重模块要分开供电,电机启动瞬间电流大,混用电源会让重量读数乱跳;所有地线不要手拉手串联,统一并接回 ESP32 的 GND。
ESPHome 基础配置:时间源、日志与首次编译 🔧
接线完成后,基础配置只需要先跑通三件事:板型、日志、时间源。其中时间源最关键——不接时间,后面所有 CRON 定时都没有依据。用 SNTP 从网络对时即可,省掉一个 RTC 模块:
esphome: name: pet-feeder logger: time: - platform: sntp id: feed_clock timezone: Asia/Shanghai上传靠一条命令搞定,以后每次改配置都是同样的方式,不再需要动串口线:
git clone https://gitcode.com/GitHub_Trending/es/esphome esphome run feeder.yamlESP32 步进电机控制与 HX711 称重传感器校准步骤
步进电机部分的关键是step_distance:它定义"一步等于多少物理量",之后所有target都用同一单位表达,喂食量才可复现。
stepper: - platform: a4988 name: feed_stepper step_pin: GPIO26 dir_pin: GPIO27 enable_pin: GPIO14 step_distance: 1.0 # 一步 = 1 个单位距离 max_speed: 5.0 acceleration: 10.0称重端才是校准的核心:HX711 输出的是 ADC 原始码,需要靠calibrate_linear过滤器把"零码"和"已知重量"两组实测值映射成克数。做法是空盘记一次原始读数,再放上 100g 砝码记一次,把两组数填进去:
sensor: - platform: hx711 name: 食盆重量 id: bowl_weight dout_pin: GPIO19 clk_pin: GPIO18 gain: 128 update_interval: 2s filters: - calibrate_linear: - 0 -> 0 # 空盘原始码 - 23000 -> 100 # 100g 砝码原始码,以实测为准容易踩的一个坑:该芯片每 80ms 才出一次新读数,update_interval设成 1s 时数据会抖,实测 2s 起步更稳。完整实现可以看 esphome/components/hx711/。
用 CRON 表达式设计喂食计划:ESPHome 定时喂食配置 ⚙️
定时器和日程表的差别在 CRON。时间组件的触发器支持从秒到星期的六段表达式,一条规则就能描述"工作日早上七点喂,晚上再补一顿":
automation: - alias: 工作日喂食 trigger: platform: time time_id: feed_clock cron: seconds: "0" minutes: "0" hours: "7" days_of_week: "MON-FRI" then: - stepper.set_target: id: feed_stepper target: 100 # 100 个单位,实测约对应 40g 粮设计思路一句话:触发器只管"何时",动作只管"喂多少",两者互不侵入。猫最近吃得少,只改 hours 或 target 即可,电机参数不用动。后续要加规则(空盆告警、深夜加餐)也是并列再写一条 automation,复用同一套 id。表达式的具体语法规则可参考 esphome/components/time/。
进阶玩法:远程手动喂食与 OTA 升级流程 📡
人在外面想给猫加餐,不用拔线——给配置加上web_server和一个模板按钮,设备网页里就出现"手动喂食"入口:
web_server: port: 80 button: - platform: template name: 手动喂食 on_press: - stepper.set_target: id: feed_stepper target: 50升级侧只要保留 ota 平台:改完配置执行esphome run,新固件推上去、设备自动重启加载,全程不到一分钟。后续还可以接一路摄像头看猫的进食状态,或者加个文本传感器记录食盆余量曲线。细节见 esphome/components/web_server/ 与 esphome/components/ota/。
排错清单:喂食器不动、读数乱时先查这几处
- 电机上电不转:先确认 EN 没有悬空,A4988 使能低电平有效,必须在配置里明确指定 GPIO;
- 重量严重不准:十有八九是供电问题,电机与称重分开供电,或把
gain降到 64 重新校准; - 定时不触发:先核对设备当前时间,SNTP 没同步时所有 CRON 都会跑偏;
- 动作顺序不对:重量核对要放在
delay之后,给落粮留出时间。
调试时把logger临时开到 debug 等级是最快的路:日志里先确认触发器有没有 fire,再确认动作有没有执行,两步就能把问题范围缩到最小。
更多组件用法与完整配置参考,见仓库根目录的 README 与 esphome/components/ 下的各组件源码。
【免费下载链接】esphomeESPHome is a system to control your ESP32, ESP8266, BK72xx, RP2040 by simple yet powerful configuration files and control them remotely through Home Automation systems.项目地址: https://gitcode.com/GitHub_Trending/es/esphome
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考