ESP32/ESP8266: Аутентификация Firebase (Email и пароль)

В этом руководстве вы узнаете, как выполнить аутентификацию в Firebase с помощью платы ESP32 или ESP8266, используя email и пароль, а также получить UID пользователя. Это полезно для ограничения или предоставления доступа определённым пользователям, а также для создания нескольких пользователей, которые могут получить доступ к одному и тому же проекту Firebase. Кроме того, это полезно при настройке правил базы данных для защиты данных вашего проекта.

ESP32 ESP8266 Firebase аутентификация Email пароль

Обновлено 30 апреля 2025

Другие руководства по Firebase с ESP32, которые могут вас заинтересовать:

Что такое Firebase?

Firebase — это платформа разработки мобильных приложений от Google, которая помогает создавать, улучшать и развивать ваше приложение. Она имеет множество сервисов для управления данными из любого Android, iOS или веб-приложения, таких как аутентификация, база данных реального времени, хостинг и другие. В этом руководстве мы сосредоточимся на части аутентификации.

Логотип Firebase

Обзор проекта

  1. Создание проекта Firebase

  2. Настройка методов аутентификации

  3. Получение API-ключа проекта

  4. Аутентификация с ESP32/ESP8266

1) Создание проекта Firebase

Следуйте приведённым ниже инструкциям, чтобы создать новый проект в Firebase.

  1. Перейдите на сайт Firebase и войдите с помощью аккаунта Google.

  2. Перейдите в Firebase Console и создайте новый проект.

  3. Дайте имя вашему проекту, например: ESP-Project, и нажмите Continue.

Создание проекта Firebase для ESP32 и ESP8266 шаг 1
  1. Далее включите или отключите AI-помощника для вашего проекта. Это необязательно.

Создание проекта Firebase для ESP32 и ESP8266 - включение AI-помощника
  1. Отключите опцию Enable Google Analytics для этого проекта, так как она не нужна. Затем нажмите Create project.

Отключение Google Analytics для проекта Firebase
  1. Настройка проекта займёт несколько секунд. Нажмите Continue, когда всё будет готово.

Проект Firebase для ESP32 готов
  1. Вы будете перенаправлены на страницу консоли вашего проекта.

Консоль проекта Firebase

2) Настройка методов аутентификации

Чтобы разрешить аутентификацию по email и паролю, сначала необходимо настроить методы аутентификации для вашего приложения.

«Большинству приложений необходимо знать личность пользователя. Другими словами, оно занимается входом в систему и идентификацией пользователей (в данном случае ESP32 или ESP8266). Знание личности пользователя позволяет приложению безопасно сохранять пользовательские данные в облаке и обеспечивать одинаковый персонализированный опыт на всех устройствах пользователя.» Чтобы узнать больше о методах аутентификации, вы можете прочитать документацию.

  1. На левой боковой панели нажмите Build > Authentication, а затем Get started.

Firebase проект настройка аутентификации
  1. Существует несколько методов аутентификации, таких как email и пароль, аккаунт Google, аккаунт Facebook и другие.

Методы аутентификации Firebase
  1. Выберите Email/Password и включите этот метод аутентификации. Затем нажмите Save.

Включение входа по Email и паролю в Firebase
  1. Затем вверху нажмите на вкладку Users. Затем нажмите Add user.

Firebase создание нового пользователя
  1. Создайте нового пользователя с email и паролем. Email может быть вашим личным email. Придумайте пароль для этого пользователя (пароль понадобится позже). Наконец, нажмите Add user.

Firebase добавление пользователя email и пароль
  1. Пользователь появится в списке пользователей. Вы можете увидеть информацию о пользователе: когда он был создан, когда последний раз входил в систему и его UID.

Пользователь Firebase создан

Firebase создаёт уникальный UID для каждого зарегистрированного пользователя. UID пользователя позволяет идентифицировать пользователя и отслеживать его для предоставления или отказа в доступе к проекту или базе данных. Также есть столбец, регистрирующий дату последнего входа. На данный момент он пуст, так как мы ещё не входили с этим пользователем.

3) Получение API-ключа проекта

Для взаимодействия с вашим проектом Firebase с помощью плат ESP32 или ESP8266 вам нужен API-ключ проекта. Следуйте приведённым ниже шагам, чтобы получить API-ключ вашего проекта.

  1. Чтобы получить API-ключ проекта, на левой боковой панели нажмите Project Settings.

Firebase Realtime Database настройки проекта
  1. Скопируйте API Key в безопасное место, так как он понадобится позже.

API-ключ проекта Firebase

4) Аутентификация с ESP32/ESP8266

Теперь, когда ваш проект Firebase создан и вы настроили метод аутентификации, вы узнаете, как войти в систему с помощью ESP32 или ESP8266, используя авторизованный email и пароль пользователя.

Для программирования плат вы можете использовать Arduino IDE, VS Code с расширением PlatformIO или pioarduino или другое подходящее программное обеспечение.

Примечание

Для проектов Firebase мы рекомендуем использовать VS Code с расширением PlatformIO или pioarduino, так как если вы хотите разработать веб-приложение для связи между ESP и Firebase, VS Code предоставляет все необходимые инструменты. Однако в этом руководстве мы не будем создавать веб-приложение, поэтому вы можете использовать Arduino IDE.

Установка библиотеки FirebaseClient

Для использования Firebase с ESP32 и ESP8266 мы будем использовать библиотеку FirebaseClient. Эта библиотека совместима с ESP32, ESP8266 и многими другими платами.

Установка — VS Code + PlatformIO

Если вы используете VS Code с расширением PlatformIO, нажмите на иконку PIO Home и затем выберите вкладку Libraries. Найдите «FirebaseClient». Выберите Firebase Client Library от Mobitz.

Установка библиотеки FirebaseClient VS Code

Затем нажмите Add to Project и выберите проект, над которым вы работаете.

Добавление библиотеки FirebaseClient в проект VS Code

Также измените скорость монитора на 115200, добавив следующую строку в файл platformio.ini вашего проекта:

monitor_speed = 115200

Установка — Arduino IDE

Если вы используете Arduino IDE, выполните следующие шаги для установки библиотеки.

  1. Перейдите в Sketch > Include Library > Manage Libraries

  2. Найдите FirebaseClient и установите FirebaseClient от Mobitz. Мы используем версию 2.0.3.

Установка библиотеки Firebase Client Arduino IDE

Аутентификация ESP32/ESP8266 Firebase по Email/Паролю (Получение UID пользователя)

Скопируйте следующий код в Arduino IDE или в файл main.cpp, если вы используете VS Code.

/*
  Rui Santos & Sara Santos - Random Nerd Tutorials
  Complete project details at our blog: https://RandomNerdTutorials.com/esp32-esp8266-firebase-authentication/
  Based on this example: https://github.com/mobizt/FirebaseClient/blob/main/examples/App/AppInitialization/UserAuth/UserAuth.ino
*/
#define ENABLE_USER_AUTH

#include <Arduino.h>
#if defined(ESP32)
  #include <WiFi.h>
#elif defined(ESP8266)
  #include <ESP8266WiFi.h>
#endif
#include <WiFiClientSecure.h>
#include <FirebaseClient.h>
#include "ExampleFunctions.h" // Provides the functions used in the examples.

// Network and Firebase credentials
#define WIFI_SSID "REPLACE_WITH_YOUR_SSID"
#define WIFI_PASSWORD "REPLACE_WITH_YOUR_PASSWORD"

#define Web_API_KEY "REPLACE_WITH_YOUR_FIREBASE_PROJECT_API_KEY"

#define USER_EMAIL "REPLACE_WITH_FIREBASE_PROJECT_EMAIL_USER"
#define USER_PASS "REPLACE_WITH_FIREBASE_PROJECT_USER_PASS"

// User functions
void processData(AsyncResult &aResult);

// Authentication
UserAuth user_auth(Web_API_KEY, USER_EMAIL, USER_PASS);

// Firebase components
FirebaseApp app;
WiFiClientSecure ssl_client;
using AsyncClient = AsyncClientClass;
AsyncClient aClient(ssl_client);
AsyncResult dbResult;

bool taskComplete = false;

void setup(){
  Serial.begin(115200);

  // Connect to Wi-Fi
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("Connecting to Wi-Fi");
  while (WiFi.status() != WL_CONNECTED)    {
    Serial.print(".");
    delay(300);
  }
  Serial.println();
  Serial.print("Connected with IP: ");
  Serial.println(WiFi.localIP());
  Serial.println();

  // Configure SSL client
  ssl_client.setInsecure();
  #if defined(ESP32)
    ssl_client.setConnectionTimeout(1000);
    ssl_client.setHandshakeTimeout(5);
  #elif defined(ESP8266)
    ssl_client.setTimeout(1000); // Set connection timeout
    ssl_client.setBufferSizes(4096, 1024); // Set buffer sizes
  #endif

  // Initialize Firebase
  initializeApp(aClient, app, getAuth(user_auth), processData, "authTask");
}

void loop(){
  // Maintain authentication and async tasks
  app.loop();

  // Check if authentication is ready
  if (app.ready() && !taskComplete){
    taskComplete = true;
    // Print authentication info
    Serial.println("Authentication Information");
    Firebase.printf("User UID: %s\n", app.getUid().c_str());
    Firebase.printf("Auth Token: %s\n", app.getToken().c_str());
    Firebase.printf("Refresh Token: %s\n", app.getRefreshToken().c_str());
    print_token_type(app);
  }
}

void processData(AsyncResult &aResult){
  if (!aResult.isResult())
    return;

  if (aResult.isEvent())
    Firebase.printf("Event task: %s, msg: %s, code: %d\n", aResult.uid().c_str(), aResult.eventLog().message().c_str(), aResult.eventLog().code());

  if (aResult.isDebug())
    Firebase.printf("Debug task: %s, msg: %s\n", aResult.uid().c_str(), aResult.debug().c_str());

  if (aResult.isError())
    Firebase.printf("Error task: %s, msg: %s, code: %d\n", aResult.uid().c_str(), aResult.error().message().c_str(), aResult.error().code());

  if (aResult.available())
    Firebase.printf("task: %s, payload: %s\n", aResult.uid().c_str(), aResult.c_str());
}

Просмотреть исходный код

Вам нужно указать свои учётные данные сети, API-ключ проекта, а также email и пароль авторизованного пользователя Firebase, чтобы проект заработал.

Как работает код

Продолжайте чтение, чтобы узнать, как работает код, или перейдите к разделу демонстрации.

Подключение библиотек

Сначала подключаем необходимые библиотеки. Библиотека WiFi.h для подключения ESP32 к интернету (или библиотека ESP8266WiFi.h для платы ESP8266), библиотеки FirebaseClient.h и WiFiClientSecure для взаимодействия плат с Firebase. Мы также подключаем файл ExampleFunctions.h, который входит в состав библиотеки и содержит дополнительные функции для этого примера.

#include <Arduino.h>
#if defined(ESP32)
    #include <WiFi.h>
#elif defined(ESP8266)
    #include <ESP8266WiFi.h>
#endif
#include <WiFiClientSecure.h>
#include <FirebaseClient.h>
#include "ExampleFunctions.h" // Provides the functions used in the examples.

Определение учётных данных

Укажите свои учётные данные сети в следующих строках.

#define WIFI_SSID "REPLACE_WITH_YOUR_SSID"
#define WIFI_PASSWORD "REPLACE_WITH_YOUR_PASSWORD"

Вставьте API-ключ вашего проекта Firebase.

#define Web_API_KEY "REPLACE_WITH_YOUR_FIREBASE_PROJECT_API_KEY"

Укажите email и пароль пользователя Firebase.

#define USER_EMAIL "REPLACE_WITH_FIREBASE_PROJECT_EMAIL_USER"
#define USER_PASS "REPLACE_WITH_FIREBASE_PROJECT_USER_PASS"

Объявление аутентификации и компонентов Firebase

Следующая строка создаёт объект аутентификации, используя API-ключ проекта, email и пароль пользователя.

UserAuth user_auth(Web_API_KEY, USER_EMAIL, USER_PASS);

Эта строка создаёт экземпляр FirebaseApp с именем app, который ссылается на приложение Firebase.

FirebaseApp app;

Следующие строки настраивают фреймворк асинхронного взаимодействия с Firebase. По сути, вы создаёте SSL-клиент с помощью библиотеки WiFiClientSecure. Затем создаёте экземпляр асинхронного клиента aClient, который обеспечивает безопасное HTTPS-соединение. Это позволяет обрабатывать сетевые операции асинхронно.

WiFiClientSecure ssl_client;
using AsyncClient = AsyncClientClass;
AsyncClient aClient(ssl_client);

setup()

В функции setup() инициализируем Serial Monitor и подключаем плату к вашей Wi-Fi сети.

void setup(){
  Serial.begin(115200);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("Connecting to Wi-Fi");
  while (WiFi.status() != WL_CONNECTED)    {
    Serial.print(".");
    delay(300);
  }
  Serial.println();

Настройка SSL-клиента (разная для ESP32 и ESP8266).

// Configure SSL client
ssl_client.setInsecure();
#if defined(ESP32)
  ssl_client.setConnectionTimeout(1000);
  ssl_client.setHandshakeTimeout(5);
#elif defined(ESP8266)
  ssl_client.setTimeout(1000); // Set connection timeout
  ssl_client.setBufferSizes(4096, 1024); // Set buffer sizes
#endif

Следующая строка инициализирует приложение Firebase с аутентификацией и устанавливает processData() в качестве функции обратного вызова для асинхронных результатов (это означает, что любые результаты функции initializeApp() будут обработаны в функции обратного вызова processData()).

initializeApp(aClient, app, getAuth(user_auth), processData, "authTask");

loop()

Библиотека Firebase, которую мы используем, работает асинхронно и с функциями обратного вызова. Это означает, что при возникновении события запускаются соответствующие назначенные функции обратного вызова. Чтобы приложение Firebase продолжало работать, обрабатывая аутентификацию и асинхронные задачи, нам нужно добавить app.loop() в начало нашей функции loop().

void loop(){
  app.loop();

Команда app.ready() проверяет, завершена ли аутентификация Firebase и готова ли она, чтобы мы могли продолжить другие операции Firebase (например, получение UID пользователя). У нас также есть управляющая переменная taskComplete, чтобы код выполнился только один раз для вывода UID пользователя.

if (app.ready() && !taskComplete){
  taskComplete = true;

Затем мы можем получить UID пользователя с помощью app.getUid().

Firebase.printf("User UID: %s\n", app.getUid().c_str());

Мы также выводим дополнительную информацию о токене аутентификации приложения.

Firebase.printf("Auth Token: %s\n", app.getToken().c_str());
Firebase.printf("Refresh Token: %s\n", app.getRefreshToken().c_str());
print_token_type(app);

Демонстрация

После загрузки кода откройте Serial Monitor на скорости 115200 бод.

Примечание

Если вы используете VS Code, вам нужно добавить следующую строку в файл platformio.ini для изменения скорости передачи. Затем сохраните файл.

monitor_speed = 115200

Перезагрузите плату, нажав встроенную кнопку EN/RST.

ESP32/ESP8266 успешно аутентифицируется и выводит информацию о UID пользователя и токене аутентификации.

ESP32/ESP8266 получение UID пользователя Firebase

Затем перейдите в консоль вашего проекта Firebase, чтобы проверить, вошёл ли он как пользователь. Перейдите в Authentication > Users. В поле Signed In должна быть текущая дата. Кроме того, вы увидите, что UID пользователя совпадает с UID, выведенным вашей платой ESP в Serial Monitor.

Пользователи Firebase последний вход

Поздравляем! Вы успешно выполнили вход на плате ESP32/ESP8266 как пользователь. Вы можете совместить этот пример с одним из наших предыдущих руководств для отправки показаний датчиков в базу данных как авторизованный пользователь: ESP32: начало работы с Firebase (Realtime Database), или вы можете следовать этому проекту:

Заключение

В этом руководстве вы узнали, как настроить плату ESP32/ESP8266 в качестве пользователя, который может получить доступ к вашему проекту Firebase по email и паролю. Это был лишь простой пример, который вы можете применить к более продвинутым проектам.

Настройка ESP в качестве пользователя позволяет идентифицировать пользователя для включения или ограничения доступа к проекту Firebase, базе данных или определённым узлам базы данных — позволяет настраивать правила базы данных.

У нас есть проект, который показывает, как использовать эту функцию для создания правил базы данных и построения веб-приложения с функциями входа/выхода для авторизации и ограничения доступа к данным. Вы можете ознакомиться с ним по следующей ссылке:

Если вы хотите узнать больше о создании полнофункционального Firebase Web App для управления и мониторинга ваших плат ESP32 и ESP8266 из любой точки мира, ознакомьтесь с электронной книгой:

Другие ресурсы, которые могут быть полезны:


Примечание

Источник: ESP32/ESP8266: Firebase Authentication (Email and Password) — Random Nerd Tutorials, Rui Santos & Sara Santos.