全部作品

课程专题 · 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 上的服务器保存读数,网页实时显示。

IoT 架构

03 / 重点

实作重点

  • 协议 自己设计的二进制协议。每个数据包以 1 字节的 opcode 开头,一个湿度读数只有 2 字节。在 Arduino 与 ESP8266 之间 9600 baud 的串口上,JSON 会大上好几倍。
  • 排错 在宿舍网络上,ESP8266 无法维持 WebSocket 连接,但普通的 TCP 连接可以。可能的原因是防火墙在应用层过滤流量,所以我把设备改成用 TCP。
  • 可靠性 Wi-Fi 或连接中断时,设备会自己重新连接。Arduino 发现异常时,会通过 EN 引脚重启 ESP8266。
  • 控制 湿度低于下限时开始浇水,达到上限时停止。上下限、传感器校准和回报间隔都能在网页上修改。

04 / 成果

设备与仪表盘

测试装置,以及显示实时读数、目标范围和历史记录的网页。

测试装置
仪表盘与串口监视器

附件

下一个作品 Raven