亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino + ThingSpeak 实时气象监测站

组件与材料

组件数量
Arduino UNO1
ESP8266 ESP-01 WiFi 模块1
DHT11 温湿度传感器 (3引脚)1
面包板1
跳线若干
面包板电源模块 5V/3.3V1

软件与服务

项目简介

ThingSpeak Arduino 气象站

物联网入门最佳实践

Arduino + ThingSpeak 实时气象监测站

初学者面对繁杂的 IoT 选项往往无从下手。ThingSpeak 提供免费、易用的云平台,本项目将引导你完成第一个 IoT 作品:温湿度传感器通过 Arduino + ESP-01 将数据上传 ThingSpeak 云端绘图。

特点:低成本、易理解、酷炫实用。

所需材料

  1. Arduino UNO
  2. ESP-01 模块
  3. DHT11 传感器
  4. 面包板
  5. 面包板电源模块(强烈建议:ESP-01 发射峰值电流大,Arduino 3.3V 引脚供电不足,外接电源模块更稳定)
  6. 连接导线
Arduino + ThingSpeak 实时气象监测站
Arduino + ThingSpeak 实时气象监测站
Arduino + ThingSpeak 实时气象监测站
Arduino + ThingSpeak 实时气象监测站
Arduino + ThingSpeak 实时气象监测站

接线说明

Arduino + ThingSpeak 实时气象监测站

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 设置

  1. 注册 ThingSpeak 账号,创建新 Channel,添加两个字段:Temperature、Humidity。
  2. 获取 Write API Key,稍后填入代码。
Arduino + ThingSpeak 实时气象监测站
Arduino + ThingSpeak 实时气象监测站

Arduino IDE 库安装

需安装两个库(SoftwareSerial 内置):

  1. Adafruit Unified Sensor Library:GitHub
  2. DHT Sensor Library:GitHub

下载 ZIP 后在 IDE 中 草图 → 包含库 → 添加 .ZIP 库 安装。

Arduino + ThingSpeak 实时气象监测站
Arduino + ThingSpeak 实时气象监测站

代码配置与上传

完整代码见 GitHub 或下方复制。上传前修改两处:

  1. 填入你的 Write API Key。
  2. Arduino + ThingSpeak 实时气象监测站
  3. 填入 WiFi SSID 和密码。
  4. Arduino + ThingSpeak 实时气象监测站

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

Arduino + ThingSpeak 实时气象监测站

完整代码

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");
  }
}

原理图

Arduino + ThingSpeak 实时气象监测站

代码仓库:https://github.com/imalwaysontheinternet/Weather-Stasion

制造工艺

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