ESP32/ESP8266: Аутентификация Firebase (Email и пароль)
В этом руководстве вы узнаете, как выполнить аутентификацию в Firebase с помощью платы ESP32 или ESP8266, используя email и пароль, а также получить UID пользователя. Это полезно для ограничения или предоставления доступа определённым пользователям, а также для создания нескольких пользователей, которые могут получить доступ к одному и тому же проекту Firebase. Кроме того, это полезно при настройке правил базы данных для защиты данных вашего проекта.
Обновлено 30 апреля 2025
Другие руководства по Firebase с ESP32, которые могут вас заинтересовать:
Что такое Firebase?
Firebase — это платформа разработки мобильных приложений от Google, которая помогает создавать, улучшать и развивать ваше приложение. Она имеет множество сервисов для управления данными из любого Android, iOS или веб-приложения, таких как аутентификация, база данных реального времени, хостинг и другие. В этом руководстве мы сосредоточимся на части аутентификации.
Обзор проекта
1) Создание проекта Firebase
Следуйте приведённым ниже инструкциям, чтобы создать новый проект в Firebase.
Перейдите на сайт Firebase и войдите с помощью аккаунта Google.
Перейдите в Firebase Console и создайте новый проект.
Дайте имя вашему проекту, например: ESP-Project, и нажмите Continue.
Далее включите или отключите AI-помощника для вашего проекта. Это необязательно.
Отключите опцию Enable Google Analytics для этого проекта, так как она не нужна. Затем нажмите Create project.
Настройка проекта займёт несколько секунд. Нажмите Continue, когда всё будет готово.
Вы будете перенаправлены на страницу консоли вашего проекта.
2) Настройка методов аутентификации
Чтобы разрешить аутентификацию по email и паролю, сначала необходимо настроить методы аутентификации для вашего приложения.
«Большинству приложений необходимо знать личность пользователя. Другими словами, оно занимается входом в систему и идентификацией пользователей (в данном случае ESP32 или ESP8266). Знание личности пользователя позволяет приложению безопасно сохранять пользовательские данные в облаке и обеспечивать одинаковый персонализированный опыт на всех устройствах пользователя.» Чтобы узнать больше о методах аутентификации, вы можете прочитать документацию.
На левой боковой панели нажмите Build > Authentication, а затем Get started.
Существует несколько методов аутентификации, таких как email и пароль, аккаунт Google, аккаунт Facebook и другие.
Выберите Email/Password и включите этот метод аутентификации. Затем нажмите Save.
Затем вверху нажмите на вкладку Users. Затем нажмите Add user.
Создайте нового пользователя с email и паролем. Email может быть вашим личным email. Придумайте пароль для этого пользователя (пароль понадобится позже). Наконец, нажмите Add user.
Пользователь появится в списке пользователей. Вы можете увидеть информацию о пользователе: когда он был создан, когда последний раз входил в систему и его UID.
Firebase создаёт уникальный UID для каждого зарегистрированного пользователя. UID пользователя позволяет идентифицировать пользователя и отслеживать его для предоставления или отказа в доступе к проекту или базе данных. Также есть столбец, регистрирующий дату последнего входа. На данный момент он пуст, так как мы ещё не входили с этим пользователем.
3) Получение API-ключа проекта
Для взаимодействия с вашим проектом Firebase с помощью плат ESP32 или ESP8266 вам нужен API-ключ проекта. Следуйте приведённым ниже шагам, чтобы получить API-ключ вашего проекта.
Чтобы получить API-ключ проекта, на левой боковой панели нажмите Project Settings.
Скопируйте API Key в безопасное место, так как он понадобится позже.
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.
Затем нажмите Add to Project и выберите проект, над которым вы работаете.
Также измените скорость монитора на 115200, добавив следующую строку в файл platformio.ini вашего проекта:
monitor_speed = 115200
Установка — Arduino IDE
Если вы используете Arduino IDE, выполните следующие шаги для установки библиотеки.
Перейдите в Sketch > Include Library > Manage Libraries
Найдите FirebaseClient и установите FirebaseClient от Mobitz. Мы используем версию 2.0.3.
Аутентификация 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 пользователя и токене аутентификации.
Затем перейдите в консоль вашего проекта Firebase, чтобы проверить, вошёл ли он как пользователь. Перейдите в Authentication > Users. В поле Signed In должна быть текущая дата. Кроме того, вы увидите, что UID пользователя совпадает с UID, выведенным вашей платой ESP в Serial Monitor.
Поздравляем! Вы успешно выполнили вход на плате 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.