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

两块 Arduino 通过 Firebase 传递温湿度数据

零部件与物料

零部件数量
Arduino UNO2
ESP8266 ESP-012
DHT11 温湿度传感器(3引脚)1
DFRobot I2C 16×2 LCD 显示屏1
面包板2
公/母杜邦线1套

软件与在线服务

项目概述

本教程演示:UNO① 读取 DHT11 数据 → 串口发给 ESP8266① → 经 WiFi 写入 Firebase → ESP8266② 从 Firebase 读回 → 串口发给 UNO② → I2C LCD 显示。涵盖串口通信、WiFi 组网、云端存储,是物联网入门必修课。

步骤 1:明确各板角色

UNO 负责传感器采集,ESP8266 充当 WiFi 网关。两者串口直连,ESP8266 不直连互联网(由模块内部处理)。代码分板编写,避免混淆。

步骤 2:UNO 接 I2C LCD

I2C 接线简洁省引脚。DFRobot 模块开箱即用。若用 20×4 屏,构造函数改为 LiquidCrystal_I2C lcd(0x3F, 20, 4);。

步骤 3:第二块 UNO 接 DHT11

按官方教程接线装库,数据脚接 A0。

步骤 4:ESP8266 配置 Firebase

在代码中填入 WiFi SSID/密码、Firebase 项目 URL 与 Token。ESP8266 向实时数据库写入 temperature 与 humidity 节点。新手可参考配套视频教程。

步骤 5:掌握串口通信协议

串口仅发送有效数据字符串(如 25.3,60.1),任何调试打印都会破坏协议。传感器 UNO 发送逗号分隔字符串,ESP8266 解析后分别上传。

步骤 6:烧录与测试

依次烧录:传感器 UNO、传感器侧 ESP8266、显示侧 ESP8266。观察 LCD 每几秒刷新一次。拔插杜邦线前先拔 USB,防短路。

常见坑与对策

代码片段

lcd_arduino.ino(显示端 UNO)

#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x3F, 20, 4);
String sensorData;
void setup() {
  Serial.begin(9600);
  lcd.begin(20, 4);
  lcd.init(); lcd.backlight();
  lcd.setCursor(0, 0); lcd.print("Temperature: ");
  lcd.setCursor(18, 0); lcd.print("C");
  lcd.setCursor(0, 1); lcd.print("Humidity: ");
  lcd.setCursor(15, 1); lcd.print("%");
}
void loop() {
  if (Serial.available()) {
    sensorData = Serial.readString();
    String temp = sensorData.substring(0, sensorData.indexOf(','));
    String hum = sensorData.substring(sensorData.indexOf(',') + 1);
    lcd.clear();
    lcd.setCursor(13, 0); lcd.print(temp);
    lcd.setCursor(10, 1); lcd.print(hum);
  }
  delay(2000);
}

lcd_esp8266.ino(显示端 ESP8266)

#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>
#define FIREBASE_HOST "YOUR_FIREBASE_LINK"
#define FIREBASE_AUTH "YOUR_FIREBASE_TOKEN"
#define WIFI_SSID "YOUR_WIFI_SSID"
#define WIFI_PASSWORD "YOUR_WIFI_PASSWORD"
void setup() {
  Serial.begin(9600);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) delay(500);
  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
}
void loop() {
  String temp = Firebase.getString("temperature");
  String hum = Firebase.getString("humidity");
  Serial.flush();
  Serial.print(temp + "," + hum);
  delay(2000);
}

sensor_arduino.ino(采集端 UNO)

#include <SoftwareSerial.h>
#include <dht.h>
#define DHT_PIN A0
DHT dht;
void setup() { Serial.begin(9600); }
void loop() {
  dht.read11(DHT_PIN);
  String data = String(dht.temperature) + "," + String(dht.humidity);
  Serial.flush();
  Serial.print(data);
  delay(2000);
}

sensor_esp8266.ino(采集端 ESP8266)

#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>
#define FIREBASE_HOST "YOUR_FIREBASE_LINK"
#define FIREBASE_AUTH "YOUR_FIREBASE_TOKEN"
#define WIFI_SSID "YOUR_WIFI_SSID"
#define WIFI_PASSWORD "YOUR_WIFI_PASSWORD"
void setup() {
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) delay(500);
  Serial.begin(9600);
  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
}
void loop() {
  if (Serial.available()) {
    String payload = Serial.readString();
    int comma = payload.indexOf(',');
    String temp = payload.substring(0, comma);
    String hum = payload.substring(comma + 1);
    Firebase.setString("temperature", temp);
    Firebase.setString("humidity", hum);
    if (Firebase.failed()) Serial.println("Failed to write to Firebase");
  }
  delay(2000);
}

制造工艺

  1. 树莓派 ppDAQC 扩展板实时采集温度数据并上传至 InitialState
  2. Arduino 实时太阳能电池板监测:低成本数据采集系统
  3. 基于 Arduino Uno 的人体检测救援机器人:传感器集成分步指南
  4. Arduino 红外心率传感器 DIY:低成本高精度,串口绘图器实时波形
  5. Arduino 声纳实时测距与 Processing 可视化
  6. Bolt IoT + Arduino UNO 实现 6 路 LED 无级调光
  7. MAX30100脉搏血氧传感器与Arduino接入指南:获取PPG波形与SpO2
  8. 分步指南:将 YL-39/YL-69 土壤湿度传感器连接到 Arduino UNO
  9. 构建基于 PHP 的 Web 界面控制 Arduino Uno
  10. Arduino Nano + MPU6050 实现加速度转倾斜角度(Visuino 图形化编程)
  11. 基于 Arduino 与 DSM501A 传感器的空气质量监测仪
  12. CMMS 无缝迁移:数据迁移专家指南