В этом уроке мы узнаем, как отправлять данные датчиков в приложение Android с помощью Google Firebase и NodeMCU ESP8266. Мы будем использовать датчик влажности и температуры DHT11 для считывания данных о температуре и влажности окружающей среды. Мы отправим эти данные c датчика DHT11 в базу данных Google Firebase. Затем мы извлечем данные из Google Firebase в приложение Android. Приложение Android, используемое здесь, разработано с помощью MIT App Inventor. Проектировать приложения с помощью MIT App Inventor довольно просто. Этому мы тоже научимся здесь.
Ранее на нашем сайте мы уже рассматривали взаимодействие NodeMCU ESP8266 с сервисом Google Firebase в следующих проектах:
- управление светодиодом с помощью ESP8266 NodeMCU и консоли Google Firebase;
- передача с помощью NodeMCU ESP8266 данных температуры и влажности на Google Firebase.
Но эта статья переведена с другого сайта и с немного другим подходом к взаимодействию с Google Firebase, поэтому если у вас что то не получилось при взаимодействии с Google Firebase, описанном в двух представленных статьях, то можете попробовать подход, описанный в данной статье.
Необходимые компоненты
- Модуль NodeMCU ESP8266 (купить на AliExpress).
- Датчик температуры и влажности DHT11 (купить на AliExpress).
- Макетная плата.
- Соединительные провода.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Что такое Google Firebase?
Google Firebase — это поддерживаемое Google программное обеспечение для разработки приложений, используемое для создания, управления и изменения данных, сгенерированных любым приложением Android/IOS, веб-сервисами, датчиками IoT (Интернета вещей) и оборудованием. Чтобы узнать больше о консоли Google Firebase, вы можете прочитать официальную документацию Google Firebase.
Firebase Auth — это сервис, который может аутентифицировать пользователей, используя только клиентский код. Он поддерживает поставщиков социальных входов Facebook, GitHub, Twitter и Google (и Google Play Games). Более того, он включает в себя систему управления пользователями, с помощью которой разработчики могут включить аутентификацию пользователей с помощью входа по электронной почте и паролю, хранящимся в Firebase.
Схема проекта
Схема проекта для отправки данных датчиков на Android с помощью Google Firebase и NodeMCU ESP8266 представлена на следующем рисунке. Фактически, это просто схема подключения датчика влажности и температуры DHT11 к плате NodeMCU ESP8266.
Подключите положительный вывод DHT11 к 3,3 В, а отрицательный вывод к GND платы. Подключите цифровой выход датчика к D2/GPIO4 NodeMCU.
Вы можете собрать схему на макетной плате как показано на следующем рисунке.
Установка библиотек
FirebaseArduino — это библиотека для упрощения подключения к базе данных Firebase из клиентов Arduino. Это полная абстракция REST API Firebase, представленная через вызовы C++ в удобном для подключения виде. Весь парсинг JSON обрабатывается библиотекой, и вы можете работать с чистыми типами C/Arduino.
Библиотека не может работать автономно. Поэтому вам нужно добавить также библиотеку ArduinoJSON.
1. Библиотека ArduinoJSON
Поэтому сначала перейдите в менеджер библиотек, найдите «JSON» и установите библиотеку, как показано на рисунке ниже.
Примечание: Последняя библиотека JSON может не работать с кодом. Поэтому вам может потребоваться понизить версию библиотеки до v5.13.5
2. Расширенная библиотека Google Firebase
Теперь вам нужно установить библиотеку Google Firebase. Cкачайте библиотеку по следующей ссылке и добавьте ее в папку Library после извлечения.
3. Библиотека DHT11
Для считывания температуры и влажности нам понадобится любой датчик температуры и влажности. Для этого DHT11 — лучший и дешевый датчик. Для этого нам нужно установить библиотеку DHT11. Загрузите библиотеку по следующей ссылке и добавьте ее в Arduino IDE.
Настройка базы данных консоли Google Firebase
Теперь самое главное, что нам нужно сделать, это настроить базу данных консоли Google Firebase. После завершения настройки мы можем отправлять данные датчиков в реальном времени в Google Firebase с помощью Nodemcu ESP8266.
Но я не буду здесь объяснять, как настроить базу данных консоли Google Firebase, поскольку я уже объяснил весь этот процесс в предыдущем уроке.
После завершения настройки вы увидите следующее окно.
Теперь нам нужно изменить Правила (Rules). Для этого нажмите на правила (rules) и установите все параметры на «true», которые изначально установлены как «false».
Разработка приложения для Android с помощью MIT App Inventor 2
Теперь нам нужно разработать приложение Android, где мы можем отслеживать данные датчиков в режиме реального времени. Сначала мы разработаем приложение Android, а затем отправим данные датчиков на телефон Android с помощью Google Firebase и ESP8266.
Для разработки приложения Android вы можете просто зайти на сайт http://ai2.appinventor.mit.edu/. Затем создайте учетную запись и начните новый проект. Экран просмотра дизайна показан ниже на рисунке.
В разделе базы данных вам необходимо ввести «Firebase URL», оставив поля «FirebaseToken» и «Projectbucket» пустыми.
А если посмотреть на дизайнерскую часть блока, то она выглядит примерно так.
Все, что вам нужно сделать, это загрузить файл FirebaseIOT.aia и импортировать его в проект MIT App Inventor. А затем просто скопировать URL вашей базы данных google firebase.
Исходный код программы
Перед загрузкой кода обязательно внесите изменения в FIREBASE_HOST. Вы можете получить этот параметр из консоли Google Firebase. Также измените WIFI_SSID и WIFI_PASSWORD из указанного кода на SSID и пароль вашей сети Wi-Fi.
1 2 3 |
#define FIREBASE_HOST "mydhtsensor-26aa7.firebaseio.com" #define WIFI_SSID "Alexahome" #define WIFI_PASSWORD "12345678" |
Полный код программы выглядит следующим образом.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
#include <ESP8266WiFi.h> #include <FirebaseArduino.h> #include "DHT.h" #define FIREBASE_HOST "sensorandroid-42dd6.firebaseio.com" #define WIFI_SSID "Alexahome" // Change the name of your WIFI #define WIFI_PASSWORD "xstevedore1" // Change the password of your WIFI #define DHTPIN D2 #define DHTTYPE DHT11 // DHT 11 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(115200); dht.begin(); //reads dht sensor data WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.print("Connecting to "); Serial.print(WIFI_SSID); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.println(); Serial.print("Connected"); Serial.print("IP Address: "); Serial.println(WiFi.localIP()); Firebase.begin(FIREBASE_HOST); } void loop() { float h = dht.readHumidity(); float t = dht.readTemperature(); // Reading temperature as Celsius (the default) Serial.print("Humidity: "); Serial.print(h); Serial.print("% Temperature: "); Serial.print(t); Serial.println("°C "); Firebase.setFloat ("Temp",t); Firebase.setFloat ("Humidity",h); delay(3000); } |
Объяснение работы кода
Во-первых, мы подключаем библиотеки для Firebase и датчика DHT11.
1 2 3 |
#include <ESP8266WiFi.h> #include <FirebaseArduino.h> #include "DHT.h" |
Затем мы задаем FIREBASE_HOST. Мы получаем его из Google Firebase Setup. Он необходим для обмена данными между ESP8266 и firebase.
1 |
#define FIREBASE_HOST "*********************.firebaseio.com" |
Затем мы определяем WiFi SSID и пароль. Замените SSID и пароль на SSID и пароль вашей сети. Nodemcu подключится к сети и свяжется с Google Firewall.
1 2 |
#define WIFI_SSID "Alexahome" #define WIFI_PASSWORD "12345678" |
Затем мы задаем тип датчика DHT и создаем экземпляр датчика DHT.
1 2 3 |
#define DHTPIN D2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); |
Следующие строки предназначены для подключения платы NodeMCU ESP8266 к сети Wifi. После подключения последовательный монитор отобразит статус подключения и выведет IP-адрес платы.
1 2 3 4 5 6 7 8 9 10 11 12 |
WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.print("Connecting to "); Serial.print(WIFI_SSID); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.println(); Serial.print("Connected"); Serial.print("IP Address: "); Serial.println(WiFi.localIP()); |
Следующая строка кода позволяет Nodemcu подключиться к серверу Firebase. Если адрес хоста правильный, то подключение будет успешным.
1 |
Firebase.begin(FIREBASE_HOST); |
Далее мы получаем значение влажности и температуры с датчика DHT11.
1 2 |
float h = dht.readHumidity(); float t = dht.readTemperature(); |
Затем мы отправляем данные в Google Firebase, используя путь, указанный в коде.
1 2 |
Firebase.setFloat ("Temp",t); Firebase.setFloat ("Humidity",h); |
Тестирование работы проекта
После загрузки кода вы можете открыть Serial Monitor (окно монитора последовательной связи), в котором отобразятся зарегистрированные данные температуры и влажности.
Аналогичным образом вы можете проверить базу данных Google Firebase, она покажет данные в реальном времени о температуре и влажности, полученные с NodeMCU ESP8266.
Теперь откройте приложение Android на своем смартфоне, чтобы увидеть зарегистрированные данные на экране приложения.