Стремительно развивающаяся в настоящее время сфера интернета вещей (Internet of things, IoT) позволяет управлять периферийными устройствами и считывать информацию с датчиков в любом месте земного шара. И на нашем сайте мы уже рассматривали достаточно много проектов из сферы интернета вещей, посмотреть которые вы можете по следующей ссылке.
В данной статье мы рассмотрим использование облака Google Firebase для управления светодиодом, подключенным к NodeMCU ESP8266. Firebase – это платформа базы данных от компании Google, предназначенная для создания, управления и изменения любых данных, сформированных приложениями android, веб-сервисами, датчиками и т.д.
Для управления светодиодом с помощью Firebase нам скачала необходимо сконфигурировать Wi-Fi модуль NodeMCU ESP8266, а затем настроить Google Firebase.
Необходимые компоненты
- NodeMCU ESP8266(12E) (купить на AliExpress).
- Светодиод (купить на AliExpress).
Если у вас NodeMCU ESP8266 (12E), то вместо нее вы можете использовать обычный модуль ESP8266 с платой Arduino UNO и средой Arduino IDE. Более подробно о программировании модуля ESP8266 с помощью Arduino IDE вы можете прочитать в этой статье.
Схема проекта
Схема для управления светодиодом с помощью ESP8266 NodeMCU и консоли Google Firebase представлена на следующем рисунке.
После сборки схемы проекта выполните следующую последовательность шагов:
- Подключите NodeMCU к компьютеру.
- Откройте Arduino IDE.
- В Arduino IDE выберите ‘Tools’ и затем ‘Boards’.
- В пункте меню для выбора плат выберите ‘NodeMCU V1.0 (ESP-12E Module)’.
- Выберите COM порт, к которому подключена NodeMCU.
- После того как узнаете значения “FIREBASE_HOST” и “FIREBASE_AUTH” (объяснено ниже в статье), внесите соответствующие изменения в код программы проекта (приведен в конце статьи).
Объяснение программы для NodeMCU ESP8266
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
Первым делом в программе подключим используемые библиотеки.
1 2 |
#include <ESP8266WiFi.h #include <FirebaseArduino.h |
Далее скачаем и установим библиотеки по следующим ссылкам:
https://github.com/FirebaseExtended/firebase-arduino/blob/master/src/Firebase.h
https://github.com/bblanchon/ArduinoJson
Если во время компиляции программы у вас будет выдаваться ошибка о том, что библиотека ArduinoJson.h у вас не установлена, то скачайте ее по приведенной выше ссылке и установите.
Далее нам необходимо задать два параметра (FIREBASE_HOST и FIREBASE_AUTH), которые нам понадобятся для взаимодействия с Google Firebase. Эти параметры сделают возможным обмен данными между ESP8266 и Firebase. Как получить эти параметры, описано в следующем разделе нашей статьи. После того как вы их получите, внесите соответствующие изменения в эти две строчки кода.
1 2 |
#define FIREBASE_HOST "your-project.firebaseio.com" // the project name address from firebase id #define FIREBASE_AUTH "06dEpqanFg***************qAwnQLwLI" // the secret key generated from firebase |
Следующие два параметра необходимы для подключения модуля ESP8266 к сети Wi-Fi. Замените идентификатор сети (SSID) и пароль (password) на значения для своей сети Wi-Fi.
1 2 |
#define WIFI_SSID "xxxxxxxxxxxxx" // input your home or public wifi name #define WIFI_PASSWORD "xxxxxxxxxxxxxx" //password of wifi ssid |
Далее сделаем попытку подключиться к сети Wi-Fi.
1 |
WiFi.begin(WIFI_SSID, WIFI_PASSWORD); //try to connect with wifi |
Если подключение к сети Wi-Fi осуществить не удается, мы будем печатать точки в окне монитора последовательной связи с помощью функции print(.) до тех пор пока соединение с сетью Wi-Fi не произойдет.
1 2 3 4 |
while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); } |
Далее осуществим попытку соединения с сервером Firebase. Если адрес хоста (FIREBASE_HOST) и ключ авторизации (FIREBASE_AUTH) корректны, то соединение должно завершиться успехом.
1 |
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH); // connect to firebase |
Далее с помощью класса, обеспечиваемого библиотекой firebase, мы будем передавать строку (string) на сервер firebase. Чтобы иметь возможность использовать больше классов, посмотрите информацию по этой ссылке. Первоначально мы передаем только одну строку. С помощью передачи соответствующих строк на сервер firebase мы сможем изменять состояние светодиода.
1 |
Firebase.setString("LED_STATUS", "OFF"); //send initial string of led status |
После того как мы передали одну строку на сервер firebase по указанному пути ("LED_STATUS"), мы можем, используя этот же путь, считать состояние нашего светодиода и сохранить его в переменной.
1 |
fireStatus = Firebase.getString("LED_STATUS"); // get ld status input from firebase |
Если принятая строка равна “ON” или “on”, то мы будем включать встроенный в модуль светодиод ESP8266 и светодиод, подключенный к модулю.
1 2 3 4 5 |
if (fireStatus == "ON" || fireStatus == "on") { // compare the input of led status received from firebase Serial.println("Led Turned ON"); digitalWrite(LED_BUILTIN, HIGH); // make bultin led ON digitalWrite(led, HIGH); // make external led ON } |
Если принятая строка равна “OFF” или “off”, то мы будем выключать встроенный в модуль светодиод ESP8266 и светодиод, подключенный к модулю.
1 2 3 4 5 |
else if (fireStatus == "OFF" || fireStatus == "off") { // compare the input of led status received from firebase Serial.println("Led Turned OFF"); digitalWrite(LED_BUILTIN, LOW); // make bultin led OFF digitalWrite(led, LOW); // make external led OFF } |
Если принятая строка не равна ни одному из описанных выражений, то мы будем просто игнорировать ее и печатать на экране сообщение об ошибке.
1 2 3 |
else { Serial.println("Wrong Credential! Please send ON/OFF"); } |
Настройка консоли Firebase
Если вы используете Firebase в первый раз, то вам необходимо выполнить ряд шагов чтобы настроить его работу:
1. Если у вас есть идентификатор/аккаунт Gmail (Gmail id), то вам не нужно дополнительно регистрироваться в Firebase. Если же у вас такого аккаунта нет, то вам необходимо зарегистрироваться на сервисе Firebase.
2. В браузере перейдите по адресу “firebase.google.com”.
3. В правом верхнем углу открывшегося сайта нажмите на “Go to Console”.
4. Нажмите на “Add project” (добавить проект).
5. Введите имя вашего проекта (Project Name).
6. После принятия условий пользовательского соглашения создайте проект (Create project) и нажмите на “Continue” (продолжить).
После того как вы успешно создали проект, вы можете получить имя хоста (Host Name) и ключ авторизации (Authorization Key), также известный как секретный ключ (Secret Key). Для этого выполните следующую последовательность шагов.
7. Зайдите в настройки сервиса (иконка с шестеренкой) и нажмите на “Project Settings” (настройки проекта).
8. Потом нажмите на “Service Accounts”.
9. Там вы увидите две опции: “Firebase admin SDK” и “Database Secrets”.
10. Нажмите на “Database Secrets”.
11. Пролистайте страницу вниз до имени вашего проекта и нажмите на кнопку ”Show” справа от вашего проекта.
12. После нажатия на “Show” вы сможете увидеть секретный ключ (secret key), созданный для вашего проекта.
13. Скопируйте этот секретный ключ и сохраните его у себя в блокноте. Его надо будет вставить в параметр “FIREBASE_AUTH” в программе для нашего проекта.
14. Теперь нажмите на “Database” в панели слева.
15. Пролистайте страницу вниз и нажмите на “Create Database” (создать базу данных).
16. Выберите “Start in test mode” (тестовый режим) и нажмите на “Enable”.
17. После этого ваша база данных будет создана и вам необходимо будет зайти в этот раздел снова чтобы управлять светодиодом.
18. Вверху страницы с базой данных вы должны увидеть надпись:
https://your_project_name.firebaseio.com/.
19. Скопируйте из этой надписи фразу “your_project_name.firebaseio.com” без всяких слешей и https и сохраните ее в блокноте в том же месте, где вы сохранили свой секретный ключ.
20. Эту фразу вам необходимо будет использовать в параметре “FIREBASE_HOST” в программе для нашего проекта.
21. Вы можете исследовать другие возможности firebase, но его настройки для нашего проекта на этом будут закончены.
После этого измените значения параметров “FIREBASE_HOST” и “FIREBASE_AUTH” в программе проекта на свои значения.
Откройте базу данных firebase и впишите в ней в поле “LED_STATUS” “ON”, “OFF”, “on” или “off”. Таким образом мы сможем управлять состоянием нашего светодиода из консоли Google Firebase. Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.
В следующей статье мы рассмотрим передачу данных температуры и влажности в облако firebase.
Исходный код программы (скетча)
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 |
/* Controlling LED using Firebase console by CircuitDigest (http://www.circuitdigest.com/) */ #include <ESP8266WiFi.h> // esp8266 library #include <FirebaseArduino.h> // firebase library #define FIREBASE_HOST "your-project.firebaseio.com" // адрес вашего проекта в firebase #define FIREBASE_AUTH "06dEpqanFg***************qAwnQLwLI" // ваш секретный ключ из firebase #define WIFI_SSID "xxxxxxxxxxxxx" // идентификатор вашей wifi сети #define WIFI_PASSWORD "xxxxxxxxxxxxxx" // пароль для вашей wifi сети String fireStatus = ""; // состояние светодиода, считываемое из firebase int led = D3; // внешний светодиод void setup() { Serial.begin(9600); delay(1000); pinMode(LED_BUILTIN, OUTPUT); pinMode(led, OUTPUT); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); //делаем попытку подключения к wifi Serial.print("Connecting to "); Serial.print(WIFI_SSID); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.println(); Serial.print("Connected to "); Serial.println(WIFI_SSID); Serial.print("IP Address is : "); Serial.println(WiFi.localIP()); //печатаем локальный IP адрес Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH); // соединяемся с firebase Firebase.setString("LED_STATUS", "OFF"); //передаем начальную строку состояния светодиода } void loop() { fireStatus = Firebase.getString("LED_STATUS"); // считываем состояние светодиода из firebase if (fireStatus == "ON") { // сравниваем принятую строку со значением "ON" Serial.println("Led Turned ON"); digitalWrite(LED_BUILTIN, LOW); // make bultin led ON digitalWrite(led, HIGH); // make external led ON } else if (fireStatus == "OFF") { // compare the input of led status received from firebase Serial.println("Led Turned OFF"); digitalWrite(LED_BUILTIN, HIGH); // make bultin led OFF digitalWrite(led, LOW); // make external led OFF } else { Serial.println("Wrong Credential! Please send ON/OFF"); } } |