使用 Firebase 将传感器数据从一个 Arduino 发送到另一个
组件和用品
| × | 2 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 |
应用和在线服务
| ||||
|
关于这个项目
概述:
在这个很酷的物联网项目中,您从连接到一个 Arduino UNO 的湿度和温度传感器读取数据。使用 esp8266 模块将此数据发送到 Firebase,然后使用 esp8266 将数据下载到另一个 Arduino UNO 中,最后将其显示在 LCD 上。
第 1 步:了解 Arduino UNO 和 ESP8266 如何协同工作。
请注意,它们作为两个不同的板工作并且具有不同的代码。您使用 Arduino UNO 与 ESP8266 进行通信。了解您不是将 Arduino 连接到互联网,而是将 ESP8266 连接到互联网您可以稍后通过串行终端在两块板之间发送数据。
第 2 步:将一个 Arduino 连接到 LCD
对于这部分,您可以像我们一样使用 I2C 通信或正常通信。 I2C 总是更好。试试他们在那里展示的示例代码。
请注意,我们使用了 20x4 的 LCD。如有必要,请更改代码。
第 3 步:将另一个 Arduino 连接到 DHT11 传感器
您可以按照本教程进行操作。记得试试模板代码。
第 4 步:将 ESP8266 连接到 Firebase 以发送和接收数据
在本教程中,他们很好地解释了如何设置它。
按照此分步视频进行操作。它们将 NodeMCU 连接到 ESP8266,但您可以使用与 Arduino UNO 相同的连接。
至于建议,我建议您使用您用于 ESP8266 的颜色创建一个 google sheet 或 excel,这样您就不会感到困惑。
如果它不起作用,请转到最后的错误部分。还有 , 查看对教程的评论。
第 5 步:了解串行通信的工作原理。
在本教程中,他们将其他传感器数据发送到 firebase,您可以阅读它以了解它的工作原理,甚至可以尝试一下。
您应该只在串行监视器上打印所需的字符串,任何其他打印线都会中断通信。
第 6 步:上传代码。
现在您知道如何上传和接收数据,您可以将实际代码上传到连接到 Arduinos 和 Arduinos 的 esp8266s。有关如何上传代码,请参阅步骤 4。
在上传之前阅读代码并进行任何必要的更改。
常见错误和建议:
在断开任何电线之前,务必先断开 ARDUINO 电缆。
代码没有上传到 ESP8266:
- 选择 esp8266 通用板。
- 如果代码仍未上传并出现错误,请执行此操作。
- 如果仍然无法正常工作,请拔下电源,重新连接,尝试上传,然后再次尝试之前的解决方案。
代码未上传到 Arduino UNO:
- 仔细阅读本文档第 7 步中如何将代码上传到 Arduino UNO。
- 从 GND 中取出 GPIO-0 (IO0),从 Uno 的接地/GND 引脚中取出 Arduino Uno RESET 引脚。
- 从 UNO 的 RX 引脚上移除 ESP8266 RX 引脚,从 UNO 的 TX 引脚上移除 ESP8266 TX 引脚。
- 重新检查您的引脚,选择 Arduino UNO 板。
上传两个代码后不起作用:
- 将 ESP8266 RX 引脚连接到 Uno 的 TX 引脚,将 ESP8266 TX 引脚连接到 Uno 的 RX 引脚。是的,您必须将它们反向连接。不要问我为什么。就去做吧。
- 断开 ESP8266 GPIO-0 (IO0) 与 GND 的连接。
- 重新检查您的图钉
- 确保您只在串行监视器中打印要在 Arduino 和 ESP8266 之间共享的值。如果您打印诸如“已连接”之类的内容或任何其他内容,代码将无法工作。
注意: 如果你让它工作并且 LCD 打印出一些奇怪的东西,它应该在几秒钟后修复它 与 初始化 功能。这可能是由于串行通信延迟而发生的。
代码
- lcd_arduino.ino
- lcd_esp8266.ino
- sensor_arduino.ino
- sensor_esp8266.ino
lcd_arduino.inoArduino
Arduino_LCD_Code#include#include // 通过将任何需要的 LCD 接口引脚与连接到 LiquidCrystal_I2C lcd(0x3F, 20, 4) 的 arduino 引脚编号相关联来初始化库;字符串值,sensor_data;void setup() { Serial.begin(9600);延迟(2000); // 设置 LCD 的列数和行数:lcd.begin(20, 4); // 向 LCD 打印一条消息。液晶显示器.init(); // 初始化液晶显示器 lcd.backlight();延迟(2000); lcd.setCursor(0, 0); lcd.print("温度:");延迟(10); lcd.setCursor(18, 0);液晶打印(“C”);延迟(10); lcd.setCursor(0, 1); lcd.print("湿度:");延迟(10); lcd.setCursor(15, 1); lcd.print("%"); delay(2000);}void loop() { bool Sr =false; while (Serial.available()) { //从串口获取传感器数据放入sensor_data sensor_data =Serial.readString(); Sr =真; } 延迟(1000); if (Sr ==true) { values =sensor_data; //通过逗号分割从values变量中获取传感器数据并放入变量String temperature =values.substring(0, 5);字符串湿度 =values.substring(6, 11);初始化(); lcd.setCursor(13, 0);延迟(10); lcd.print(温度);//设置光标打印温度延迟(10); lcd.setCursor(10, 1);延迟(10);液晶打印(湿度); } 延迟(2000);}无效初始化(){ lcd.clear(); lcd.setCursor(0, 0); lcd.print("温度:");延迟(10); lcd.setCursor(18, 0);液晶打印(“C”);延迟(10); lcd.setCursor(0, 1); lcd.print("湿度:");延迟(10); lcd.setCursor(15, 1); lcd.print("%");}
lcd_esp8266.inoArduino
ESP8266_LCD_Code#include#include #define FIREBASE_HOST "YOUR_FIREBASE_LINK"#define FIREBASE_AUTH "YOUR_FIREBASE_TOKEN"#define WIFI_SSID "YOUR_WIFI_SSID"#define "WIFI_SSIDWORD"#define "WIFI_SSIDWORD"#define "WIFI_SWITCH_PASSID" Serial.begin(9600); // 连接到无线网络。 WiFi.begin(WIFI_SSID, WIFI_PASSWORD);而(WiFi.status()!=WL_CONNECTED){延迟(500); } Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);}void loop() { String temperature =Firebase.getString("温度"); String 湿度 =Firebase.getString("湿度");温度 =温度.substring(0, 5);湿度 =湿度.substring(0, 5);值 =(温度 + 湿度);延迟(10); // 在打印之前总是刷新 Serial.flush();延迟(1000); Serial.print(values);延迟(1000);}
sensor_arduino.inoArduino
Arduino_Sensor_Code#include#include #define dht_apin A0dht DHT;String values;void setup() { Serial.begin(9600);延迟(5000); //延迟让系统启动}void loop() { DHT.read11(dht_apin);值=(字符串(DHT.温度)+','+字符串(DHT.湿度));延迟(10);串行.flush();延迟(1000); // 将传感器数据发送到串口(将传感器数据发送到 ESP8266) Serial.print(values);延迟(2000);}
sensor_esp8266.inoArduino
Sensor_ESP8266_Code#include#include #define FIREBASE_HOST "YOUR_FIREBASE_LINK"#define FIREBASE_AUTH "YOUR_FIREBASE_TOKEN"#define WIFI_SSID "YOUR_WIFI_SSID"WORD#define WIFI_PASSID,SWITCH ) { 延迟 (1000); // 连接到无线网络。 WiFi.begin(WIFI_SSID, WIFI_PASSWORD);而(WiFi.status()!=WL_CONNECTED){延迟(500); Serial.begin(9600); Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);}void loop() { bool Sr =false; while (Serial.available()) { //从串口获取传感器数据放入sensor_data sensor_data =Serial.readString(); Sr =真; } 延迟(1000); if (Sr ==true) { values =sensor_data; //从值变量中获取逗号索引 int fristCommaIndex =values.indexOf(','); int secondCommaIndex =values.indexOf(',', fristCommaIndex + 1); //通过逗号分割从值变量中获取传感器数据并放入变量 String temperature =values.substring(0, fristCommaIndex);字符串湿度 =values.substring(fristCommaIndex + 1, secondCommaIndex); //将超声波传感器数据作为字符串存储在firebase Firebase.setString("temperature", temperature);延迟(10); //将红外传感器 1 数据作为字符串存储在 firebase 中 Firebase.setString("湿度", 湿度);延迟(10); //将之前的传感器数据作为字符串存储在 firebase delay(1000) 中; if (Firebase.failed()) { return; } } }}
制造工艺
- 使用 InitialState
- 使用 Arduino 的太阳能电池板实时数据采集
- 使用 Arduino Uno 的人体检测机器人系统
- 使用 Arduino DIY 红外线心跳传感器
- Sonar 使用 arduino 并在处理 IDE 上显示
- 使用 Bolt 和 Arduino 控制 LED 亮度
- 使用 MAX30100 可穿戴脉搏传感器和 Arduino
- 使用 YL-39 + YL-69 土壤湿度传感器和 Arduino
- 如何使用 PHP 创建一个与 Arduino 通信的网站
- 将加速度转换为来自 MPU6050 I2C 传感器的角度
- 带有 DSM501A 传感器的 Arduino 空气质量监测器
- 从一个 CMMS 到另一个:软件数据迁移指南