Arduino + ThingSpeak 实时气象监测站
组件与材料
| 组件 | 数量 |
|---|---|
| Arduino UNO | 1 |
| ESP8266 ESP-01 WiFi 模块 | 1 |
| DHT11 温湿度传感器 (3引脚) | 1 |
| 面包板 | 1 |
| 跳线 | 若干 |
| 面包板电源模块 5V/3.3V | 1 |
软件与服务
- ThingSpeak API
- Arduino IDE
- Microsoft Windows 10
项目简介
ThingSpeak Arduino 气象站
物联网入门最佳实践

初学者面对繁杂的 IoT 选项往往无从下手。ThingSpeak 提供免费、易用的云平台,本项目将引导你完成第一个 IoT 作品:温湿度传感器通过 Arduino + ESP-01 将数据上传 ThingSpeak 云端绘图。
特点:低成本、易理解、酷炫实用。
所需材料
- Arduino UNO
- ESP-01 模块
- DHT11 传感器
- 面包板
- 面包板电源模块(强烈建议:ESP-01 发射峰值电流大,Arduino 3.3V 引脚供电不足,外接电源模块更稳定)
- 连接导线





接线说明

ESP-01:VCC→3.3V, GND→GND, CH_PD→3.3V, RESET→3.3V, TX→Arduino D2, RX→Arduino D3
DHT11:VCC→5V, OUT→A0, GND→GND
面包板电源模块跳线帽拨至 3.3V 侧。上电冒烟则检查接线。
ThingSpeak 设置
- 注册 ThingSpeak 账号,创建新 Channel,添加两个字段:Temperature、Humidity。
- 获取 Write API Key,稍后填入代码。


Arduino IDE 库安装
需安装两个库(SoftwareSerial 内置):
下载 ZIP 后在 IDE 中 草图 → 包含库 → 添加 .ZIP 库 安装。


代码配置与上传
完整代码见 GitHub 或下方复制。上传前修改两处:
- 填入你的 Write API Key。
- 填入 WiFi SSID 和密码。


上传成功后,ThingSpeak Channel 将每 15 秒更新一次图表。

完整代码
String myAPIkey = "Your Write API key here";
#include <SoftwareSerial.h>
#include <DHT.h>;
SoftwareSerial ESP8266(2, 3); // Rx, Tx
#define DHTTYPE DHT11
#define DHTPIN A0
DHT dht(DHTPIN, DHTTYPE, 11);
float humidity, temp_f;
long writingTimer = 17;
long startTime = 0;
long waitTime = 0;
boolean relay1_st = false;
boolean relay2_st = false;
unsigned char check_connection = 0;
unsigned char times_check = 0;
boolean error;
void setup() {
Serial.begin(9600);
ESP8266.begin(9600);
dht.begin();
startTime = millis();
ESP8266.println("AT+RST");
delay(2000);
Serial.println("Connecting to Wifi");
while (check_connection == 0) {
Serial.print(".");
ESP8266.print("AT+CWJAP=\"Wifi Network's name\",\"PassWord\"\r\n");
ESP8266.setTimeout(5000);
if (ESP8266.find("WIFI CONNECTED\r\n") == 1) {
Serial.println("WIFI CONNECTED");
break;
}
times_check++;
if (times_check > 3) {
times_check = 0;
Serial.println("Trying to Reconnect..");
}
}
}
void loop() {
waitTime = millis() - startTime;
if (waitTime > (writingTimer * 1000)) {
readSensors();
writeThingSpeak();
startTime = millis();
}
}
void readSensors(void) {
temp_f = dht.readTemperature();
humidity = dht.readHumidity();
}
void writeThingSpeak(void) {
startThingSpeakCmd();
String getStr = "GET /update?api_key=";
getStr += myAPIkey;
getStr += "&field1=";
getStr += String(temp_f);
getStr += "&field2=";
getStr += String(humidity);
getStr += "\r\n\r\n";
GetThingspeakcmd(getStr);
}
void startThingSpeakCmd(void) {
ESP8266.flush();
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += "184.106.153.149"; // api.thingspeak.com IP
cmd += "\",80";
ESP8266.println(cmd);
Serial.print("Start Commands: ");
Serial.println(cmd);
if (ESP8266.find("Error")) {
Serial.println("AT+CIPSTART error");
return;
}
}
String GetThingspeakcmd(String getStr) {
String cmd = "AT+CIPSEND=";
cmd += String(getStr.length());
ESP8266.println(cmd);
Serial.println(cmd);
if (ESP8266.find(">")) {
ESP8266.print(getStr);
Serial.println(getStr);
delay(500);
String messageBody = "";
while (ESP8266.available()) {
String line = ESP8266.readStringUntil('\n');
if (line.length() == 1) {
messageBody = ESP8266.readStringUntil('\n');
}
}
Serial.print("MessageBody received: ");
Serial.println(messageBody);
return messageBody;
} else {
ESP8266.println("AT+CIPCLOSE");
Serial.println("AT+CIPCLOSE");
}
}
原理图

代码仓库:https://github.com/imalwaysontheinternet/Weather-Stasion
制造工艺
- 树莓派 2 搭建户外气象站:接入 ADS‑WS1 串口气象站
- 树莓派自制气象站:每日邮件推送温湿雨数据
- 高级气象站 v2.0:BME280 实时监测温度/气压/湿度/海拔 (Windows 10 IoT Core)
- Arduino 数字骰子:LCD 显示随机点数的电子骰子
- DIY 钢铁侠人偶:Arduino 控制超声波触发音效与灯光
- Find Me:基于 Arduino 与蓝牙的智能寻物器制作指南
- 打造功能完整的 Arduino 驱动 3D 打印机械臂:分步指南
- DIY Arduino 加湿器控制器:继电器安全控制高压电路
- 自制 10 美元便携 Arduino 气象站 - Nano + DHT22 + BMP180 + LCD
- eDOT:基于 Arduino 的精密时钟与气象站,内置红外遥控
- DIY Arduino 手柄方向盘 - 游戏竞速模拟器自制指南
- Arduino 101 计步器:集成 DHT11 温湿度 + LCD 显示步数/距离/卡路里