Отправка данных датчика от одного Arduino к другому с помощью Firebase
Компоненты и расходные материалы
![]() |
| × | 2 | |||
![]() |
| × | 2 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 2 | |||
![]() |
| × | 1 |
Приложения и онлайн-сервисы
![]() |
| |||
![]() |
|
Об этом проекте
ОБЗОР:
В этом крутом проекте IoT вы считываете данные с датчика влажности и температуры, подключенного к одной Arduino UNO. Отправьте эти данные в Firebase с помощью модуля esp8266, а затем загрузите данные в другой Arduino UNO с помощью esp8266, чтобы, наконец, отобразить их на ЖК-дисплее.
ШАГ 1. Узнайте, как работают вместе Arduino UNO и ESP8266.
Обратите внимание, что они работают как две разные платы и имеют разные коды. Вы используете Arduino UNO для связи с ESP8266. Поймите, что вы не подключаете Arduino к Интернету, вы подключаете ESP8266 к Интернету. Позже вы можете отправлять данные между двумя платами через последовательный терминал.
ШАГ 2. Подключите один Arduino к ЖК-дисплею
В этой части вы можете использовать либо связь I2C, как мы, либо обычную связь. I2C всегда лучше. Попробуйте использовать приведенный там пример кода.
ОБРАТИТЕ ВНИМАНИЕ, ЧТО МЫ ИСПОЛЬЗУЕМ ЖК-экран 20x4. ПРИ НЕОБХОДИМОСТИ ИЗМЕНИТЕ КОД.
ШАГ 3. Подключите другой Arduino к датчику DHT11
Вы можете следовать этому руководству, чтобы заставить его работать. Не забудьте попробовать код шаблона.
ШАГ 4. Подключите ESP8266 к Firebase для отправки и получения данных
В этом руководстве они очень хорошо объясняют, как его настроить.
Следуйте этому пошаговому видео. Они подключают NodeMCU к ESP8266, но вы можете использовать те же подключения к Arduino UNO.
Что касается совета, я бы посоветовал вам создать таблицу Google или Excel с цветами, которые вы используете для ESP8266, чтобы вы не запутались.
ПЕРЕЙДИТЕ К ЧАСТИ С ОШИБКОЙ В КОНЦЕ, ЕСЛИ ОНА НЕ РАБОТАЕТ. ТАКЖЕ , ПОСМОТРЕТЬ КОММЕНТАРИИ К РУКОВОДСТВУ.
ШАГ 5. Разберитесь, как работает последовательное соединение.
В этом руководстве они отправляют данные других датчиков в firebase, вы можете прочитать их, чтобы получить представление о том, как это работает, или даже попробовать.
ВЫ ДОЛЖНЫ ПЕЧАТЬ ТОЛЬКО НА ПОСЛЕДОВАТЕЛЬНОМ МОНИТОРЕ, ЛЮБАЯ ДРУГАЯ СТРОКА ПЕЧАТИ БУДЕТ ПРЕРЫВАТЬ СВЯЗЬ.
ШАГ 6. Загрузите код.
Теперь, когда вы знаете, как загружать и получать данные, вы можете загрузить фактический код в esp8266, подключенные к Arduinos и Arduinos. Обратитесь к шагу 4 о том, как загрузить код.
ПРОЧИТАЙТЕ КОД ПЕРЕД ЗАГРУЗКОЙ И ВНЕСТИ ЛЮБЫЕ НЕОБХОДИМЫЕ ИЗМЕНЕНИЯ.
РАСПРОСТРАНЕННЫЕ ОШИБКИ И СОВЕТ:
ВСЕГДА ОТСОЕДИНЯЙТЕ КАБЕЛЬ ARDUINO ПЕРЕД ОТСОЕДИНЕНИЕМ ЛЮБОГО ПРОВОДА.
Код не загружается в ESP8266:
- Выберите универсальную плату esp8266.
- Если код по-прежнему не загружается и выдает ошибку, сделайте это.
- Если по-прежнему не работает, отключите, подключите повторно, попробуйте загрузить, а затем снова попробуйте предыдущее решение.
Код не загружается в Arduino UNO:
- Внимательно прочтите, как загрузить код в Arduino UNO в этой документации, шаг 7.
- Выньте GPIO-0 (IO0) из GND и вывод сброса Arduino Uno из вывода заземления / заземления Uno.
- Удалите вывод RX ESP8266 из вывода RX UNO и вывод TX ESP8266 из вывода TX UNO.
- Еще раз проверьте свои контакты, выберите плату Arduino UNO.
Не работает после загрузки обоих кодов:
- Подключите контакт ESP8266 RX к контакту TX Uno, а контакт ESP8266 TX - к контакту RX Uno. Да, их надо соединять противоположным образом. Не спрашивайте меня, почему. Просто сделай это.
- Отключите ESP8266 GPIO-0 (IO0) от GND.
- Еще раз проверьте свои пины.
- Убедитесь, что вы печатаете только те значения, которые хотите передать между Arduino и ESP8266 в последовательном мониторе. Если вы напечатаете что-то вроде "connected" или что-то еще, код работать не будет.
ПРИМЕЧАНИЕ. Если вы заставили его работать и на ЖК-дисплее появилось что-то странное, это должно быть исправлено через несколько секунд с the инициализировать функция. Это может произойти из-за задержек последовательной связи.
Код
- lcd_arduino.ino
- lcd_esp8266.ino
- sensor_arduino.ino
- sensor_esp8266.ino
lcd_arduino.ino Arduino
Arduino_LCD_Code#include#include // инициализируем библиотеку путем связывания любого необходимого вывода ЖК-интерфейса // с номером вывода Arduino, к которому он подключен. LiquidCrystal_I2C lcd (0x3F, 20, 4); Строковые значения, sensor_data; void setup () {Serial.begin (9600); задержка (2000); // устанавливаем количество столбцов и строк ЖК-дисплея:lcd.begin (20, 4); // Выводим сообщение на ЖК-дисплей. lcd.init (); // инициализируем ЖК-дисплей lcd.backlight (); задержка (2000); lcd.setCursor (0, 0); lcd.print ("Температура:"); задержка (10); lcd.setCursor (18, 0); lcd.print ("C"); задержка (10); lcd.setCursor (0, 1); lcd.print ("Влажность:"); задержка (10); lcd.setCursor (15, 1); lcd.print ("%"); задержка (2000);} void loop () {bool Sr =false; while (Serial.available ()) {// получаем данные датчика по последовательному каналу, вставляем в sensor_data sensor_data =Serial.readString (); Sr =истина; } задержка (1000); если (Sr ==true) {значения =данные_сенсора; // получаем данные датчиков из переменной values, разделяя ее запятыми и помещая в переменные String temperature =values.substring (0, 5); Строка влажности =values.substring (6, 11); инициализировать (); lcd.setCursor (13, 0); задержка (10); lcd.print (temperature); // устанавливаем курсор на печать температуры delay (10); lcd.setCursor (10, 1); задержка (10); lcd.print (влажность); } задержка (2000);} void initialize () {lcd.clear (); lcd.setCursor (0, 0); lcd.print ("Температура:"); задержка (10); lcd.setCursor (18, 0); lcd.print ("C"); задержка (10); lcd.setCursor (0, 1); lcd.print ("Влажность:"); задержка (10); lcd.setCursor (15, 1); lcd.print ("%");}
lcd_esp8266.ino Arduino
ESP8266_LCD_Code#include#include #define FIREBASE_HOST "YOUR_FIREBASE_LINK" #define FIREBASE_AUTH "YOUR_FIREBASE_TOKEN_AUTH" YOUR_FIREBASE_TOKEN_AUTH "YOUR_FIREBASE_TOKEN" #define WIFI_PORD values "YOUR_FIREBASE_TOKEN" #define WIFI_ORD "YOUR_FIREBASE_TOKEN" #define WIFI_PORD values "#define WIFI_ORD" Serial.begin (9600); // подключаемся к Wi-Fi. WiFi.begin (WIFI_SSID, WIFI_PASSWORD); в то время как (WiFi.status ()! =WL_CONNECTED) {задержка (500); } Firebase.begin (FIREBASE_HOST, FIREBASE_AUTH);} void loop () {String temperature =Firebase.getString ("temperature"); Строка влажности =Firebase.getString ("влажность"); температура =температура. подстрока (0, 5); влажность =влажность. подстрока (0, 5); значения =(температура + влажность); задержка (10); // всегда очищать перед печатью Serial.flush (); задержка (1000); Serial.print (значения); задержка (1000);}
sensor_arduino.ino Arduino
Arduino_Sensor_Code#include#include #define dht_apin A0dht DHT; Строковые значения; void setup () {Serial.begin (9600); задержка (5000); // Задержка для загрузки системы} void loop () {DHT.read11 (dht_apin); values =(Строка (DHT.температура) + ',' + Строка (DHT.humidity)); задержка (10); Serial.flush (); задержка (1000); // отправляем данные датчиков на последовательный порт (отправляем данные датчиков на ESP8266) Serial.print (values); задержка (2000);}
sensor_esp8266.ino Arduino
Sensor_ESP8266_Code#include#include #define FIREBASE_HOST "YOUR_FIREBASE_LINK" #define FIREBASE_AUTH "YOUR_FIREBASE_TOKEN" YOUR_FIREBASE_token " ) {задержка (1000); // подключаемся к Wi-Fi. WiFi.begin (WIFI_SSID, WIFI_PASSWORD); в то время как (WiFi.status ()! =WL_CONNECTED) {задержка (500); } Serial.begin (9600); Firebase.begin (FIREBASE_HOST, FIREBASE_AUTH);} цикл void () {bool Sr =false; while (Serial.available ()) {// получаем данные датчика по последовательному каналу, вставляем в sensor_data sensor_data =Serial.readString (); Sr =истина; } задержка (1000); если (Sr ==true) {значения =данные_сенсора; // получить индексы запятых из переменной values int fristCommaIndex =values.indexOf (','); int secondCommaIndex =значения.indexOf (',', fristCommaIndex + 1); // получаем данные датчиков из переменной values, разделяя ее запятыми и помещая в переменные 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); если (Firebase.failed ()) {возврат; }}}
Производственный процесс
- Потоковая передача данных датчика с пластины PPDAQC Pi с использованием InitialState
- Сбор данных солнечной панели в реальном времени с использованием Arduino
- Робототехническая система для обнаружения человека с использованием Arduino Uno
- Инфракрасный датчик сердцебиения своими руками с использованием Arduino
- Сонар с использованием Arduino и отображение при обработке IDE
- Управление яркостью светодиода с помощью Bolt и Arduino
- Использование переносного датчика пульса MAX30100 с Arduino
- Использование датчика влажности почвы YL-39 + YL-69 с Arduino
- Как создать веб-сайт, взаимодействующий с Arduino с помощью PHP
- От одной CMMS к другой:рекомендации по миграции программных данных