В этом проекте мы узнаем, как создать проект автоматизации дома (умный дом) на основе технологии Интернета вещей (IoT) с использованием Google Firebase и NodeMCU ESP8266. Один из самых распространенных и популярных хобби-проектов, с которыми вы столкнетесь в Интернете, — это проект домашней автоматизации. Под домашней автоматизацией мы подразумеваем управление бытовыми приборами без ручного переключателя. При подключении к Интернету домашние устройства становятся важной составляющей приложения Интернета вещей («IoT»).
Ранее на нашем сайте мы рассматривали проекты автоматизации дома с помощью таких сервисов как:
Но в этом проекте мы будем использовать Google Firebase. Google Firebase — это поддерживаемое Google программное обеспечение для разработки приложений, используемое для создания, управления и изменения данных, сгенерированных любым приложением Android/IOS , веб-сервисами, датчиками IoT и оборудованием. Чтобы узнать больше о консоли Google Firebase, вы можете прочитать официальную документацию Google Firebase. Чтобы узнать больше о работе с этим сервисом, рекомендуем посмотреть статью про отправку данных датчиков на Android с помощью Google Firebase и ESP8266.
Мы разработаем приложение домашней автоматизации Android с помощью MIT APP Inventor. Используя Firebase Host & Authentication Key, мы подключим приложение Android к Google Firebase. Затем мы отправим команду ВКЛ/ВЫКЛ (1/0) из приложения. Данные из приложения отправляются в Google Firebase. Теперь данные Google Firebase обновляются на плате NodeMCU через подключение к Интернету. Таким образом, цифровые контакты GPIO становятся высокими и низкими, включая/выключая приборы, подключенные к реле.
Также вы можете посмотреть проект умного дома с управлением через Wi-Fi и голосом на NodeMCU ESP8266 и Android.
Необходимые компоненты
- NodeMCU ESP8266 (купить на AliExpress).
- Реле 5В - 4 шт. (купить на AliExpress).
- Диод 1N4007 - 4 шт. (купить на AliExpress).
- Регулятор напряжения LM7805 (купить на AliExpress).
- Гнездо питания постоянного тока DCJ0202
- Резистор 330 Ом – 5 шт.
- NPN-транзистор BC547 - 4 шт.
- Клеммная колодка.
- Светодиод 5 мм (купить на AliExpress).
- Разъемы типа "мама" - 2 комплекта.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Схема проекта
Схема проекта автоматизации дома с помощью Google Firebase и NodeMCU ESP8266 представлена на следующем рисунке.
Используя эту принципиальную схему, вы можете собрать схему на макетной плате, используя 4-канальное реле и плату NodeMCU.
Печатная плата для проекта
Если вы не хотите собирать схему на макетной плате, а хотите печатную плату для проекта, то вот печатная плата для вас. Печатная плата для проекта домашней автоматизации разработана с использованием онлайн-инструмента проектирования схем и печатных плат EasyEDA. Передняя и задняя стороны печатной платы показаны ниже.
Файл Gerber для изготовления печатной платы вы можете скачать по следующей ссылке.
Настройка базы данных консоли Google Firebase
Теперь самое главное, что нам нужно сделать, это настроить базу данных консоли Google Firebase. После завершения настройки мы можем отправлять данные в реальном времени из приложения Android в Google Firebase .
Но я не буду здесь объяснять, как настроить базу данных консоли Google Firebase, поскольку я уже объяснил весь процесс в предыдущем уроке. Вы можете проверить следующий урок, чтобы узнать, как выполнить настройку.
Вам нужны Firebase Host и Authentication Token. Оба этих параметра будут нужны в коде программы, а также в Firebase App.
Разработка и настройка приложения Android
Теперь нам нужно разработать приложение Android, которое может отправлять данные в Google Firebase. Самый простой способ разработать приложение Android — использовать MIT App Inventor. MIT APP Inventor позволяет разрабатывать приложения для телефонов Android с помощью веб-браузера и подключенного телефона или эмулятора. Серверы App Inventor хранят вашу работу и помогают вам отслеживать ваши проекты.
Я просто разработал интерфейс для проекта домашней автоматизации с использованием Google Firebase. Приложение имеет 4 пары переключателей ON/OFF (ВКЛ/ВЫКЛ) для отправки команд 0 и 1 в Google Firebase.
Аналогично ниже представлен редактор блоков, содержащий информацию о назначениях и программировании.
При проектировании приложения вам необходимо ввести Firebase Host & Authentication Token в базу данных приложения. Для этого следуйте видеоинструкции ниже.
Соберите/скомпилируйте приложение и экспортируйте его на свой телефон Android. Вы можете установить файл APK на свой телефон.
Файл .aia для этого приложения приведен ниже. Вы можете импортировать этот файл в окно MIT App Inventor и изменить его, изменив Host & Token на Database.
Добавление Firebase и библиотеки JSON в Arduino IDE
1. Библиотека ArduinoJSON
Сначала перейдите в менеджер библиотек, найдите «JSON» и установите библиотеку, как показано на рисунке ниже.
Примечание: Последняя библиотека JSON может не работать с кодом. Поэтому вам может потребоваться понизить версию библиотеки до v5.13.5
2. Расширенная библиотека Google Firebase
Теперь вам нужно установить библиотеку Google Firebase. Итак, скачайте библиотеку по ссылке ниже и добавьте ее в папку Library после извлечения.
Исходный код программы
После добавления библиотеки в Arduino IDE вы можете загрузить код на плату NodeMCU.
Но перед загрузкой кода внесите изменения в SSID WiFi, пароль, хост Firebase и токен аутентификации.
1 2 3 4 |
#define FIREBASE_HOST "**********" // Your Firebase Project URL #define FIREBASE_AUTH "************" // Your Firebase Database Secret #define WIFI_SSID "**************" // your WiFi SSID #define WIFI_PASSWORD "********" // your WiFi PASSWORD |
Полный код программы выглядит следующим образом.
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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
#include <ESP8266WiFi.h> #include <FirebaseArduino.h> #define FIREBASE_HOST "**********" // Your Firebase Project URL #define FIREBASE_AUTH "************" // Your Firebase Database Secret #define WIFI_SSID "**************" // your WiFi SSID #define WIFI_PASSWORD "********" // your WiFi PASSWORD #define Relay1 12 //D6 int value1; #define Relay2 14 //D2 int value2; #define Relay3 4 //D1 int value3; #define Relay4 5 //D5 int value4; void setup() { Serial.begin(115200); pinMode(Relay1,OUTPUT); pinMode(Relay2,OUTPUT); pinMode(Relay3,OUTPUT); pinMode(Relay4,OUTPUT); digitalWrite(Relay1,HIGH); digitalWrite(Relay2,HIGH); digitalWrite(Relay3,HIGH); digitalWrite(Relay4,HIGH); WiFi.begin(WIFI_SSID,WIFI_PASSWORD); Serial.print("connecting"); while (WiFi.status()!=WL_CONNECTED) { Serial.print("."); delay(500); } Serial.println(); Serial.print("connected:"); Serial.println(WiFi.localIP()); Firebase.begin(FIREBASE_HOST); Firebase.setInt("S1",0); Firebase.setInt("S2",0); Firebase.setInt("S3",0); Firebase.setInt("S4",0); } void firebasereconnect() { Serial.println("Trying to reconnect"); Firebase.begin(FIREBASE_HOST); } void loop() { if (Firebase.failed()) { Serial.print("setting number failed:"); Serial.println(Firebase.error()); firebasereconnect(); return; } value1=Firebase.getString("S1").toInt(); //Reading the Status of Variable 1 from the firebase if(value1==1) { digitalWrite(Relay1,LOW); Serial.println("Relay 1 ON"); } else if(value1==0) { digitalWrite(Relay1,HIGH); Serial.println("Relay 1 OFF"); } value2=Firebase.getString("S2").toInt(); //Reading the Status of Variable 2 from the firebase if(value2==1) { digitalWrite(Relay2,LOW); Serial.println("Relay 2 ON"); } else if(value2==0) { digitalWrite(Relay2,HIGH); Serial.println("Relay 2 OFF"); } value3=Firebase.getString("S3").toInt(); //Reading the Status of Variable 3 from the firebase if(value3==1) { digitalWrite(Relay3,LOW); Serial.println("Relay 3 ON"); } else if(value3==0) { digitalWrite(Relay3,HIGH); Serial.println("Relay 3 OFF"); } value4=Firebase.getString("S4").toInt(); //Reading the Status of Variable 4 from the firebase if(value4==1) { digitalWrite(Relay4,LOW); Serial.println("Relay 4 ON"); } else if(value4==0) { digitalWrite(Relay4,HIGH); Serial.println("Relay 4 OFF"); } } |
Тестирование работы проекта
После загрузки кода NodeMCU подключится к сети WiFi. Используя Firebase Authentication Token & Host, приложение Android, а также плата Nodemcu подключаются к Google Firebase.
Теперь вы можете отправлять команды ВКЛ/ВЫКЛ из мобильного приложения, чтобы включать/выключать бытовые приборы.