Arduino UNO + ESP-01 + ThingSpeak + MIT App Inventor 打造简易 IoT 系统
所需元件与物料
| Arduino UNO | ×1 |
| ESP8266 ESP-01 模块 | ×1 |
| DHT22 温湿度传感器 | ×1 |
| DS18B20 土壤温度传感器 (防水) | ×1 |
| LDR 光敏电阻 | ×1 |
| YL-69 + LM393 土壤湿度模块 | ×1 |
| 双路 5V 继电器模块 (低电平触发、带光耦) | ×1 |
| 5V 直流水泵、220V 灯泡、LED 指示灯、电阻、面包板、杜邦线、继电器独立 5V 供电 | 若干 |
软件与云服务
- Arduino IDE
- ThingSpeak.com (免费 IoT 平台,提供数据存储、可视化、HTTP API)
- MIT App Inventor (开发 Android 监控/控制 App)
项目架构
本地采集单元 (Arduino + 传感器) → ESP-01 (AT 命令透传) → ThingSpeak 云端通道 → Android App 读取状态 / 下发控制指令 → ESP-01 → Arduino 驱动继电器控制水泵/灯泡。

分步实施指南 (17 步)
Step 1: 项目概览
采集空气温湿度、土壤温湿度、光照强度 5 项传感器数据,上传 ThingSpeak 状态通道 (Channel)。控制水泵与灯泡 2 路执行器,状态回传云端。Android App 实时显示并可远程开关执行器。决策逻辑示例:土壤湿度低 → 开水泵;土壤温度低 → 开灯泡加温。
Step 2: 物料清单 (BoM)
详见元件表,含参考价格 (约 $50 总成本)。
Step 3: 硬件分阶段组装建议
- 分别安装测试所有传感器
- 配置 ESP-01 (BareMinimum 空代码避免串口冲突)
- 修改 ESP-01 波特率为 9600 (出厂常为 115200),命令:
AT+UART_DEF=9600,8,1,0,0 - 设置 Station 模式
AT+CWMODE=1,连接 WiFiAT+CWJAP="SSID","PASS" - 创建 ThingSpeak 状态通道 (8 字段:2 执行器 + 5 传感器 + 1 预留)
- 编写 Arduino 代码上传传感器数据 (HTTP GET 写入)
- 开发 App 读取状态通道并显示
- 安装执行器 (继电器+水泵/灯泡)
- 创建 2 个执行器专用通道 (各仅用 Field1 存 0/1)
- Arduino 定时读取执行器通道 (HTTP GET 读最后值) 并驱动继电器
- 完善 App 增加控制按钮 (写入执行器通道)
- 整合收发代码,加入 ESP-01 心跳检测与硬件复位机制
Step 4-6: 传感器接线与代码框架
// 传感器初始化
#define ONE_WIRE_BUS 5
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);
DHT dht(11, DHT22);
#define ldrPIN A1
#define soilHumPIN A0
void readSensors() {
airTemp = dht.readTemperature();
airHum = dht.readHumidity();
DS18B20.requestTemperatures();
soilTemp = DS18B20.getTempCByIndex(0);
soilHum = map(analogRead(soilHumPIN), 1023, 0, 0, 100);
light = map(analogRead(ldrPIN), 1023, 0, 0, 100);
}
Step 7-9: ThingSpeak 状态通道配置与数据上传
创建通道后记录 Write API Key。上传采用三步 AT 命令:
AT+CIPSTART="TCP","184.106.153.149",80(建立 TCP 连接)AT+CIPSEND=长度- 发送 GET 字符串:
GET /update?api_key=KEY&field1=pump&field2=lamp&field3=airTemp&field4=airHum&field5=soilTemp&field6=soilHum&field7=light&field8=spare\r\n\r\n
代码含定时发送 (默认 17 秒)、失败重发、错误计数 (field8) 等健壮性逻辑。
Step 10: Android App 第一版 (仅监控)
使用 MIT App Inventor:
- Clock 定时器 (2 秒) 调用 readArduino 过程
- Web 组件 GET 请求 ThingSpeak 状态通道 JSON
- 解析 JSON 填充全局变量并更新 Label 显示
- 土壤温度<10°C 或湿度<60% 时闪烁报警
Step 11-13: 执行器安装、ThingSpeak 执行器通道、Arduino 读取控制指令
继电器模块低电平触发,GND 与 Arduino 隔离供电以防干扰。创建两个通道 (Pump、Lamp),各仅用 Field1 存 0/1。Arduino 每 10 秒轮询读取:
GET /channels/375598/fields/1/last // 读取水泵指令
GET /channels/375599/fields/1/last // 读取灯泡指令
解析响应第 5 字符 (ASCII '0'/'1'),驱动对应继电器引脚 (D10/D12)。
Step 14: 浏览器测试执行器控制
直接在浏览器访问:
https://api.thingspeak.com/update?api_key=ACT1_WRITE_KEY&field1=1 (开水泵)
...&field1=0 (关水泵) 同理灯泡。
Step 15: App 完善 (增加控制按钮)
每个执行器配 ON/OFF 两按钮,按下变色 (蓝/红),点击时向对应执行器通道写入 1/0。
Step 16: 终极整合代码
合并传感器上传、执行器轮询、ESP-01 心跳检测 (定时发 AT 检测是否卡死,卡死则硬件复位) 的完整 Arduino 代码见 GitHub:
ArduFarmBot_Light.ino
Step 17: 总结
Arduino UNO + ESP-01 虽老但经典,配合 ThingSpeak 与 App Inventor 可快速落地 IoT 原型。后续将推出更多进阶教程,敬请关注 GitHub 与 博客。
电路原理图
Fritzing 源文件:下载
制造工艺
- 树莓派 4B+ 上构建并行 C++17 SYCL 代码:hipSYCL 与 GCC/Clang 工具链实战
- 基于 Arduino 与 MAX30100 的实时物联网心率监测系统
- Arduino Uno WiFi 网页服务器:通过浏览器控制 LED 开关
- Arduino 串口简易计算器:两数四则运算演示
- 自制便携式视觉暂留显示器:Arduino UNO 与 ATtiny85
- 非接触体温筛查闸机:Arduino MKR1000 + 红外测温 + 舵机控制
- Arduino UNO + WiFi 盾板:串口实时推送温度到网页绘图
- Arduino + ThingSpeak 实时气象监测站
- 校园智能体温监测系统 - 精准、实时、安全的学生健康守护方案
- 热敏电阻测温轻松上手:Arduino 分步实战教程
- Azure IoT智能游泳池监控系统:温度感知与远程控制
- 精准温控木炭烟熏炉套件:Arduino MKR1000 物联网 BBQ 大师