课程专题 · 2024
IoT 自动浇水
Arduino 读取土壤湿度并控制水泵。ESP8266 让它连上网。Raspberry Pi 上的服务器保存读数,网页实时显示,也能修改设置。
- 团队
- 6 人
- 时间
- 2024 年 11 月至 12 月
- 课程
- 微算机原理(CO3006)
- 代码
- GitHub ↗
- 技术
- Arduino
- ESP8266
- C++
- Node.js
- Next.js
- Raspberry Pi
01 / 我的部分
我负责的部分
我编写了 ESP8266 固件与自定义协议、Arduino 控制逻辑、Node.js 服务器,以及 Next.js 网页。
02 / 系统
从传感器到浏览器
Arduino 读取湿度传感器,通过继电器开关水泵。ESP8266 给它 Wi-Fi。Raspberry Pi 上的服务器保存读数,网页实时显示。
03 / 重点
实作重点
- 协议 自己设计的二进制协议。每个数据包以 1 字节的 opcode 开头,一个湿度读数只有 2 字节。在 Arduino 与 ESP8266 之间 9600 baud 的串口上,JSON 会大上好几倍。
- 排错 在宿舍网络上,ESP8266 无法维持 WebSocket 连接,但普通的 TCP 连接可以。可能的原因是防火墙在应用层过滤流量,所以我把设备改成用 TCP。
- 可靠性 Wi-Fi 或连接中断时,设备会自己重新连接。Arduino 发现异常时,会通过 EN 引脚重启 ESP8266。
- 控制 湿度低于下限时开始浇水,达到上限时停止。上下限、传感器校准和回报间隔都能在网页上修改。
04 / 成果
设备与仪表盘
测试装置,以及显示实时读数、目标范围和历史记录的网页。