Статьи

ESP8266 (ESP32) с базой данных реального времени Firebase: RGB-светодиоды, управляемые IoT

В этом руководстве рассказывается, как создавать RGB-светодиоды, управляемые IoT (например, светодиодные ленты), используя ESP32 или ESP8266 и Firebase. Это интересный проект, потому что с его помощью можно изучить, как использовать IoT. Несколько лет назад было почти невозможно построить RGB-светодиоды, управляемые IoT, теперь, как вы увидите, это очень просто. В этом проекте IoT мы будем использовать возможности Google Firebase для управления светодиодами RGB с помощью ESP32 или ESP8266 . Вкратце, Google Firebase cloud — это платформа, которая предоставляет несколько сервисов, таких как аутентификация, база данных в реальном времени и так далее. Для создания этого IoT-проекта мы будем использовать базу данных в реальном времени. Результат показан на видео ниже:

Чтобы управлять светодиодами с помощью базы данных Firebase в реальном времени, мы должны выполнить следующие два шага:

  • Настройте ESP32 / ESP8266 для подключения к базе данных Google Firebase в реальном времени
  • Настройте базу данных Firebase в реальном времени

Настройка ESP32 (или ESP8266) для подключения к базе данных Google Firebase в реальном времени

На этом первом шаге необходимо подключить ESP32 к базе данных Firebase, чтобы это устройство получало данные из базы данных, как только мы их изменим . Для этого сначала нужно подключить ESP8266 к Wi-Fi:

#include <ESP8266WiFi.h>

void connectWifi() {
  // Let us connect to WiFi
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println(".......");
  Serial.println("WiFi Connected....IP Address:");
  Serial.println(WiFi.localIP());
}

Это происходит там, где connectWifi()вызывается, setup()как мы увидим позже, а ssid и пароль — это ssid Wi-Fi и связанный с ним пароль.

Принципиальная электрическая схема

Схема подключения светодиодов RGB к ESP8266 (или ESP32) показана ниже:


В этом проекте IoT-контролируемых светодиодов используются светодиоды Neopixels, но мы можем использовать и другие виды светодиодов. Те же шаги можно применить, даже если вы меняете используемые вами светодиоды.

Программирование ESP8266 для подключения к Firebase

Это ядро ​​проекта. Чтобы подключить ESP32 к базе данных Google Firebase в реальном времени, мы будем использовать библиотеку Firebase, которая упрощает проект. Перейдите в Sketch-> Включить библиотеку-> Управление библиотеками и найдите библиотеку Firebase:


Выберите библиотеку в соответствии с устройством, которое вы используете — ESP32 или ESP8266 — и вы готовы! Код ниже показывает, как подключить ESP8266 к Google Firebase:

#include "FirebaseESP8266.h"

FirebaseData firebaseData;

void setup() {
  Serial.begin(9600);
  connectWifi();
  Firebase.begin("firebase_url", "your_firebase_API_key");
}

В строке 8 код устанавливает соединение между ESP8266 и Firebase. Необходимы два параметра: firebase_url и firebase_API_key . Позже вы увидите, как получить его из консоли Firebase после того, как мы настроим проект Firebase. Наконец, необходимо получить данные из базы данных Firebase в реальном времени:

void loop() {

  if (Firebase.getInt(firebaseData, "/red")) {
   if  (firebaseData.dataType() == "int") {
      int val = firebaseData.intData();
      if (val != redValue) {
        redValue = val;
        setLedColor();
      }
    }
  }

  if (Firebase.getInt(firebaseData, "/green")) {
   if  (firebaseData.dataType() == "int") {
      int val = firebaseData.intData();
      if (val != greenValue) {
        greenValue = val;
        setLedColor();
      }
    }
  }

  if (Firebase.getInt(firebaseData, "/blue")) {
   if  (firebaseData.dataType() == "int") {
      int val = firebaseData.intData();
      if (val != blueValue) {
        blueValue = val;
        setLedColor();
      }
    }
  }
}

Несколько вещей, чтобы отметить. Во-первых, для управления светодиодами IoT RGB необходимо использовать три компонента (красный, зеленый и синий). Второе, на что следует обратить внимание: приведенный выше код получает ссылку на данные, хранящиеся в базе данных реального времени Firebase, используя:

Firebase.getInt(firebaseData, "/red")

Затем необходимо убедиться, что значение является целым числом:

if  (firebaseData.dataType() == "int") {
  ....
}

И, наконец, код извлекает значение:

int val = firebaseData.intData();

Окончательный код показан ниже:

#include "FirebaseESP8266.h"
#include <ESP8266WiFi.h>
#include <Adafruit_NeoPixel.h>

#define PIN D1
#define NUM_LEDS 8

const char* ssid = "your_ssid";
const char* password = "your_wifi_passowrd";

FirebaseData firebaseData;

Adafruit_NeoPixel leds(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);

// Current color values
int redValue = 0;
int greenValue = 0;
int blueValue = 0;

void setup() {
  Serial.begin(9600);
  connectWifi();
  leds.begin();

  Firebase.begin("https://xxxx.firebaseio.com/", "wDsHB30jVN554CA********");
}

void loop() {

  if (Firebase.getInt(firebaseData, "/red")) {
    if  (firebaseData.dataType() == "int") {
      int val = firebaseData.intData();
      if (val != redValue) {
        redValue = val;
         setLedColor();
      }
    }
  }

  if (Firebase.getInt(firebaseData, "/green")) {
    if  (firebaseData.dataType() == "int") {
      int val = firebaseData.intData();
      if (val != greenValue) {
        greenValue = val;
        setLedColor();
      }
    }
  }

  if (Firebase.getInt(firebaseData, "/blue")) {
    if  (firebaseData.dataType() == "int") {
      int val = firebaseData.intData();
      if (val != blueValue) {
        blueValue = val;
        setLedColor();
      }
    }
  }
}

void connectWifi() {
  // Let us connect to WiFi
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println(".......");
  Serial.println("WiFi Connected....IP Address:");
  Serial.println(WiFi.localIP());

}

void setLedColor() {
  for (int i=0; i < NUM_LEDS; i++) 
    leds.setPixelColor(i, leds.Color(redValue, greenValue, blueValue));
   leds.show();
}

Если вам интересно, вы можете узнать, как интегрировать ESP8266 и Alexa, чтобы вы могли управлять устройствами с помощью голосовых команд .

Настройка базы данных реального времени Firebase

На этом втором этапе построения RGB-светодиодов, управляемых IoT, мы настроим базу данных Firebase в реальном времени. Если у вас нет учетной записи, перед ее началом необходимо создать ее бесплатно. Затем перейдите в консоль Firebase и начните добавлять новый проект:


А затем добавьте новый проект, как показано ниже:


Если все идет хорошо, то создается новый проект Firebase:


Затем пришло время создать базу данных Firebase:


Важно установить базу данных в тестовом режиме:


Затем, когда все эти шаги будут выполнены, выберите базу данных в реальном времени и начните добавлять поля, как показано ниже:


Теперь два последних шага. Сначала в Правилах необходимо установить для всех значений значение true, а затем необходимо извлечь значения для использования в коде ESP8266, показанном выше:

URL показан на рисунке выше https://xxxx.firebaseio.com, а ключ API находится в разделе «Настройки проекта» -> «Учетная запись службы» -> «Секреты базы данных».


Это все. Вы можете запустить и протестировать проект.

В этом руководстве показано, как создать RGB-светодиоды, управляемые IoT, с использованием базы данных Firebase в реальном времени и ESP32 или ESP8266. Как вы уже видели, это очень просто, и с помощью нескольких строк кода вы можете удаленно управлять светодиодами RGB.