ESP32/ESP8266 Firebase: Отправка показаний BME280 в Realtime Database
В этом руководстве вы узнаете, как отправлять показания датчика BME280 в Firebase Realtime Database с помощью плат ESP32 или ESP8266 NodeMCU. Плата ESP будет аутентифицироваться как пользователь с email и паролем, а также вы добавите правила безопасности базы данных для защиты ваших данных. Платы будут программироваться с использованием ядра Arduino.
Обновлено 30 апреля 2025 года
Часть 2 этого проекта: ESP32/ESP8266: Веб-приложение Firebase для отображения показаний датчиков (с аутентификацией)
Другие руководства по Firebase с ESP32/ESP8266, которые могут вас заинтересовать:
Что такое Firebase?
Firebase – это платформа разработки мобильных приложений от Google, которая помогает создавать, улучшать и развивать ваше приложение. Она имеет множество сервисов для управления данными из любого Android, iOS или веб-приложения, таких как аутентификация, база данных реального времени, хостинг и другие.
Обзор проекта
Следующая диаграмма показывает общий обзор проекта, который мы создадим.
ESP32/ESP8266 аутентифицируется как пользователь с email и паролем (этот пользователь должен быть настроен в методах аутентификации Firebase);
После аутентификации ESP получает UID пользователя;
База данных защищена правилами безопасности. Пользователь может получить доступ только к узлам базы данных под узлом со своим UID. После получения UID пользователя ESP может публиковать данные в базу данных;
ESP отправляет температуру, влажность и давление в базу данных.
Вот основные шаги для выполнения этого проекта:
Вы можете продолжить с проектом Firebase из этого предыдущего руководства или создать новый проект. Если вы используете проект Firebase из предыдущего руководства, вы можете перейти к разделу 4) Настройка Realtime Database, так как методы аутентификации уже настроены.
Подготовка Arduino IDE
Для этого руководства мы будем программировать платы ESP32 и ESP8266 с использованием ядра Arduino. Поэтому убедитесь, что у вас установлен аддон ESP32 или ESP8266 в Arduino IDE:
Установка платы ESP32 в Arduino IDE 2 (Windows, Mac OS X, Linux)
Установка платы ESP8266 NodeMCU в Arduino IDE 2 (Windows, Mac OS X, Linux)
Если вы хотите программировать платы ESP с помощью VS Code с расширением PlatformIO, следуйте этому руководству:
1) Создание проекта Firebase
Следуйте инструкциям ниже, чтобы создать новый проект в Firebase.
Перейдите на Firebase и войдите с помощью Google-аккаунта.
Перейдите в консоль Firebase и создайте новый проект.
Дайте имя вашему проекту, например: 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 может быть вашим личным. Придумайте пароль для этого пользователя (вам нужно будет запомнить пароль позже). Наконец, нажмите Add user.
Пользователь появится в списке. Вы можете увидеть информацию о пользователе: когда он был создан, когда последний раз входил в систему, и его UID.
3) Получение API-ключа проекта
Для взаимодействия с вашим проектом Firebase через платы ESP32 или ESP8266 вам необходимо получить API-ключ проекта. Следуйте инструкциям ниже.
Чтобы получить API-ключ проекта, на левой боковой панели нажмите Project Settings.
Скопируйте API Key в безопасное место, так как он понадобится позже.
4) Настройка Realtime Database
Теперь создадим базу данных реального времени и настроим правила для нашего проекта.
1) На левой боковой панели нажмите Realtime Database, а затем Create Database.
2) Выберите расположение базы данных. Оно должно быть ближайшим к вашему местоположению.
3) Настройте правила безопасности для базы данных. Вы можете выбрать Start in test mode. Мы изменим правила базы данных через мгновение.
4) Ваша база данных создана. Вам нужно скопировать и сохранить URL базы данных – он выделен на следующем изображении – так как он понадобится позже в коде ESP32/ESP8266.
5) Настройка правил безопасности базы данных
Теперь настроим правила базы данных. На вкладке Realtime Database выберите вкладку Rules вверху. Затем нажмите Edit rules, скопируйте следующие правила и нажмите Publish.
// These rules grant access to a node matching the authenticated
// user's ID from the Firebase auth token
{
"rules": {
"UsersData": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}
Эти правила разрешают доступ только к узлу, соответствующему UID аутентифицированного пользователя. Это гарантирует, что каждый пользователь может получить доступ только к своим данным. Другими словами, пользователь может читать или записывать данные только в те части базы данных, которые расположены под его конкретным UID. Любые данные, хранящиеся за пределами узла с его UID, будут ему недоступны.
Например, представьте, что UID нашего пользователя – RjO3taAzMMXBB2Xmir2LQ. С нашими правилами безопасности он может читать и записывать данные в базу данных под узлом UsersData/RjO3taAzMMXBB2Xmir2LQ.
Вы лучше поймёте, как это работает, когда начнёте работать с ESP32/ESP8266.
6) ESP32/ESP8266 Отправка показаний датчика в Realtime Database
В этом разделе мы запрограммируем платы ESP32 или ESP8266 для выполнения следующих задач:
Аутентификация как пользователь с email и паролем (пользователь, которого вы настроили в этом разделе);
Отправка показаний датчика в Firebase Realtime Database как авторизованный пользователь в узел, соответствующий его UID.
Необходимые компоненты
Для этого проекта вам понадобятся следующие компоненты*:
ESP32 или ESP8266 (читайте ESP32 vs ESP8266);
BME280 или любой другой знакомый вам датчик;
* вы также можете протестировать проект со случайными значениями вместо показаний датчика, или использовать любой другой знакомый вам датчик.
Вы можете использовать ссылки выше или перейти напрямую на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!
Схема подключения
В этом руководстве мы будем отправлять показания датчика BME280 в Firebase Realtime Database. Поэтому вам нужно подключить датчик BME280 к вашей плате. Следуйте одной из следующих схем подключения.
ESP32 с BME280
Мы будем использовать I2C-связь с модулем датчика BME280. Для этого подключите датчик к стандартным выводам ESP32: SCL (GPIO 22) и SDA (GPIO 21), как показано на следующей схеме.
Не знакомы с BME280 на ESP32? Прочитайте это руководство: ESP32 с датчиком BME280 в Arduino IDE (давление, температура, влажность)
ESP8266 с BME280
Мы будем использовать I2C-связь с модулем датчика BME280. Для этого подключите датчик к выводам ESP8266: SDA (GPIO 4) и SCL (GPIO 5), как показано на следующей схеме.
Не знакомы с BME280 на ESP8266? Прочитайте это руководство: ESP8266 с датчиком BME280 в Arduino IDE (давление, температура, влажность)
Установка библиотек
Для этого проекта вам нужно установить следующие библиотеки:
Установка библиотек – VS Code
Следуйте этим инструкциям, если вы используете VS Code с расширением PlatformIO или pioarduino.
Установка библиотеки FirebaseClient
Нажмите на иконку PIO Home и выберите вкладку Libraries. Найдите «FirebaseClient». Выберите библиотеку Firebase Client Library от Mobitz.
Затем нажмите Add to Project и выберите проект, над которым вы работаете.
Установка библиотеки BME280
На вкладке Libraries найдите BME280. Выберите библиотеку Adafruit BME280.
Затем нажмите Add to Project и выберите проект, над которым вы работаете.
Также измените скорость монитора на 115200, добавив следующую строку в файл platformio.ini вашего проекта:
monitor_speed = 115200
Установка – Arduino IDE
Следуйте этому разделу, если вы используете Arduino IDE.
Вам нужно установить следующие библиотеки:
Перейдите в Sketch > Include Library > Manage Libraries, найдите библиотеки по имени и установите их.
Теперь всё готово для программирования плат ESP32 и ESP8266 для взаимодействия с базой данных.
Код отправки показаний датчика в Realtime Database
Скопируйте следующий код в Arduino IDE или в файл main.cpp, если вы используете VS Code.
Вам нужно вставить ваши сетевые учётные данные, API-ключ проекта, URL базы данных, а также email и пароль авторизованного пользователя.
/*
Rui Santos & Sara Santos - Random Nerd Tutorials
Complete project details at our blog: https://RandomNerdTutorials.com/esp32-esp8266-firebase-bme280-rtdb/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
#define ENABLE_USER_AUTH
#define ENABLE_DATABASE
#include <Arduino.h>
#if defined(ESP32)
#include <WiFi.h>
#elif defined(ESP8266)
#include <ESP8266WiFi.h>
#endif
#include <WiFiClientSecure.h>
#include <FirebaseClient.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
// 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_PROJECT_API_KEY"
#define DATABASE_URL "REPLACE_WITH_YOUR_DATABASE_URL"
#define USER_EMAIL "REPLACE_WITH_THE_USER_EMAIL"
#define USER_PASSWORD "REPLACE_WITH_THE_USER_PASSWORD"
// User function
void processData(AsyncResult &aResult);
// Authentication
UserAuth user_auth(Web_API_KEY, USER_EMAIL, USER_PASSWORD);
// Firebase components
FirebaseApp app;
WiFiClientSecure ssl_client;
using AsyncClient = AsyncClientClass;
AsyncClient aClient(ssl_client);
RealtimeDatabase Database;
// Timer variables for sending data every 10 seconds
unsigned long lastSendTime = 0;
const unsigned long sendInterval = 10000;
// Variable to save USER UID
String uid;
// Variables to save database paths
String databasePath;
String tempPath;
String humPath;
String presPath;
// BME280 sensor
Adafruit_BME280 bme; // I2C
float temperature;
float humidity;
float pressure;
// Initialize BME280
void initBME(){
if (!bme.begin(0x76)) {
Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1);
}
Serial.println("BME280 Initialized with success");
}
void setup(){
Serial.begin(115200);
initBME();
// 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();
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");
app.getApp<RealtimeDatabase>(Database);
Database.url(DATABASE_URL);
}
void loop(){
// Maintain authentication and async tasks
app.loop();
// Check if authentication is ready
if (app.ready()){
// Periodic data sending every 10 seconds
unsigned long currentTime = millis();
if (currentTime - lastSendTime >= sendInterval){
// Update the last send time
lastSendTime = currentTime;
// Get User UID
Firebase.printf("User UID: %s\n", app.getUid().c_str());
uid = app.getUid().c_str();
databasePath = "UsersData/" + uid;
// Update database path for sensor readings
tempPath = databasePath + "/temperature"; // --> UsersData/<user_uid>/temperature
humPath = databasePath + "/humidity"; // --> UsersData/<user_uid>/humidity
presPath = databasePath + "/pressure"; // --> UsersData/<user_uid>/pressure
// Get latest sensor readings
temperature = bme.readTemperature();
humidity = bme.readHumidity();
pressure = bme.readPressure()/100.0F;
Serial.println("Writing to: " + tempPath);
Database.set<float>(aClient, tempPath, temperature, processData, "RTDB_Send_Temperature");
Database.set<float>(aClient, humPath, humidity, processData, "RTDB_Send_Humidity");
Database.set<float>(aClient, presPath, pressure, processData, "RTDB_Send_Pressure");
}
}
}
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());
}
Как работает код
Продолжайте чтение, чтобы узнать, как работает код, или перейдите к разделу демонстрации.
Подключение библиотек
Сначала подключаем необходимые библиотеки. Мы подключаем разные WiFi-библиотеки для ESP32 и ESP8266.
#include <Arduino.h>
#if defined(ESP32)
#include <WiFi.h>
#elif defined(ESP8266)
#include <ESP8266WiFi.h>
#endif
#include <WiFiClientSecure.h>
#include <FirebaseClient.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
Сетевые учётные данные
Укажите ваши сетевые учётные данные в следующих строках, чтобы платы могли подключиться к интернету через вашу локальную сеть.
// Insert your network credentials
#define WIFI_SSID "REPLACE_WITH_YOUR_SSID"
#define WIFI_PASSWORD "REPLACE_WITH_YOUR_PASSWORD"
API-ключ проекта Firebase, пользователь Firebase и URL базы данных
Вставьте API-ключ вашего проекта Firebase – тот, который вы получили в этом разделе.
#define Web_API_KEY "REPLACE_WITH_YOUR_PROJECT_API_KEY"
Вставьте URL вашей базы данных в следующую строку:
// Insert RTDB URL
#define DATABASE_URL "REPLACE_WITH_YOUR_DATABASE_URL"
Вставьте авторизованный email и соответствующий пароль – это данные пользователя, которого вы добавили в этом разделе.
#define USER_EMAIL "REPLACE_WITH_THE_USER_EMAIL"
#define USER_PASSWORD "REPLACE_WITH_THE_USER_PASSWORD"
Объявление аутентификации и компонентов Firebase
Следующая строка создаёт объект аутентификации с использованием API-ключа проекта, email и пароля пользователя.
UserAuth user_auth(Web_API_KEY, USER_EMAIL, USER_PASS);
Это создаёт экземпляр FirebaseApp с именем app, который ссылается на приложение Firebase.
FirebaseApp app;
Следующие строки настраивают фреймворк асинхронной связи для взаимодействия с Firebase Realtime Database. По сути, вы создаёте SSL-клиент с помощью библиотеки WiFiClientSecure. Затем создаёте асинхронный клиент aClient, который обеспечивает безопасное HTTPS-соединение. Это позволит обрабатывать сетевые операции асинхронно.
WiFiClientSecure ssl_client;
using AsyncClient = AsyncClientClass;
AsyncClient aClient(ssl_client);
Следующая строка создаёт объект RealtimeDatabase с именем Database, который представляет Firebase Realtime Database.
RealtimeDatabase Database;
Переменные таймера и данных
Затем создаём переменные для отслеживания времени. Мы будем отправлять показания датчика в базу данных каждые 10 секунд.
// Timer variables for sending data every 10 seconds
unsigned long lastSendTime = 0;
const unsigned long sendInterval = 10000;
Создаём переменную для сохранения UID пользователя. Переменная uid будет использоваться для сохранения UID пользователя. Мы можем получить UID после аутентификации.
// Variable to save USER UID
String uid;
Создаём переменные для сохранения пути к базе данных и конкретных узлов. Мы обновим эти переменные позже в коде, когда получим UID пользователя.
// Variables to save database paths
String databasePath;
String tempPath;
String humPath;
String presPath;
Переменные BME280
Затем создаём объект Adafruit_BME280 с именем bme. Это автоматически создаёт объект датчика на стандартных I2C-выводах ESP32 или ESP8266.
Adafruit_BME280 bme; // I2C
Следующие переменные будут хранить показания температуры, влажности и давления с датчика.
float temperature;
float humidity;
float pressure;
initBME()
Функция initBME() инициализирует датчик BME280. Мы вызовем её позже в setup().
// Initialize BME280
void initBME(){
if (!bme.begin(0x76)) {
Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1);
}
Serial.print("BME280 Initialized with success");
}
setup()
В setup() инициализируем Serial Monitor, датчик BME280 и подключаем плату к вашей Wi-Fi сети.
void setup(){
Serial.begin(115200);
initBME();
// 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();
Настройка SSL-клиента.
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");
Затем указываем, что объект Database, определённый ранее, должен использоваться как база данных для нашего приложения Firebase.
app.getApp<RealtimeDatabase>(Database);
Наконец, устанавливаем URL базы данных.
Database.url(DATABASE_URL);
loop()
Библиотека Firebase, которую мы используем, работает асинхронно и с функциями обратного вызова. Это означает, что при возникновении события запускаются соответствующие назначенные функции обратного вызова. Чтобы приложение Firebase продолжало работать, обрабатывая аутентификацию и асинхронные задачи, нам нужно добавить app.loop() в начало нашей функции loop().
void loop(){
app.loop();
Команда app.ready() проверяет, завершена ли аутентификация Firebase и готова ли она, чтобы мы могли продолжить с другими операциями Firebase (такими как запись в базу данных).
if (app.ready()){
Следующие строки проверяют, прошло ли 10 секунд (sendInterval). Мы будем использовать это для периодической отправки данных каждые 10 секунд.
// Periodic data sending every 10 seconds
unsigned long currentTime = millis();
if (currentTime - lastSendTime >= sendInterval){
// Update the last send time
lastSendTime = currentTime;
После успешной аутентификации мы получаем UID пользователя и сохраняем его в переменной uid. Затем обновляем путь к базе данных на UsersData/<USER_UID>.
// Get User UID
Firebase.printf("User UID: %s\n", app.getUid().c_str());
uid = app.getUid().c_str();
databasePath = "UsersData/" + uid;
Затем обновляем путь для каждого узла, где будут сохраняться показания.
// Update database path for sensor readings
tempPath = databasePath + "/temperature"; // --> UsersData/<user_uid>/temperature
humPath = databasePath + "/humidity"; // --> UsersData/<user_uid>/humidity
presPath = databasePath + "/pressure"; // --> UsersData/<user_uid>/pressure
Получение показаний датчика
Затем получаем новые показания датчика и сохраняем их в переменных temperature, humidity и pressure.
// Get sensor readings
temperature = bme.readTemperature();
humidity = bme.readHumidity();
pressure = bme.readPressure()/100.0F;
Отправка данных в базу данных
Для отправки данных в базу данных мы используем Database.set(). Эта функция шаблонизирована для поддержки различных типов данных. Вот общий синтаксис и аргументы:
Database.set<T>(AsyncClient &client, const String &path, T value, AsyncResultCallback callback, const String &uid);
Разберём, как это работает:
<T>– тип данных. В коде используется какDatabase.set<String>,Database.set<int>иDatabase.set<float>. Вы можете использовать другие типы данных.AsyncClient &client– объект асинхронного клиента (aClient в коде), который управляет сетевым подключением к Firebase.const String &path– путь в Firebase Realtime Database, куда будут записаны данные. Путь относителен к корню базы данных (определённому DATABASE_URL). Например: «test/string».T value– значение, которое будет записано по указанному пути.AsyncResultCallback callback– указатель на функцию обратного вызова, которая обрабатывает результат асинхронной операции. В коде это функция processData(). Она обрабатывает объект AsyncResult для логирования событий, ошибок, отладочных сообщений или успешных данных. Функция вызывается, когда сервер Firebase отвечает или при возникновении ошибки во время запроса.const String &uid– уникальный идентификатор задачи, используемый для отслеживания конкретной операции в функции обратного вызова. Это помогает различать несколько асинхронных задач в функции processData().
Подробнее: ESP32: Начало работы с Firebase (Realtime Database)
В нашем примере мы будем отправлять переменные типа float. Мы используем функцию set() следующим образом для отправки показаний в их конкретные пути узлов базы данных.
Database.set<float>(aClient, tempPath, temperature, processData,"RTDB_Send_Temperature");
Database.set<float>(aClient, humPath, humidity, processData, "RTDB_Send_Humidity");
Database.set<float>(aClient, presPath, pressure, processData, "RTDB_Send_Pressure");
Обработка асинхронных результатов
Наконец, функция processData() логирует результаты асинхронных операций Firebase.
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());
}
Демонстрация
Загрузите приведённый выше код на вашу плату. Код совместим как с ESP32, так и с ESP8266. Не забудьте вставить ваши сетевые учётные данные, API-ключ проекта, URL базы данных, email пользователя и соответствующий пароль.
После загрузки кода нажмите кнопку RST на плате, чтобы запустить выполнение кода. Плата должна аутентифицироваться в Firebase, получить UID пользователя и сразу же отправить новые показания в базу данных.
Откройте Serial Monitor на скорости 115200 бод и убедитесь, что всё работает как ожидается.
Дополнительно перейдите в Realtime Database в интерфейсе вашего проекта Firebase и убедитесь, что новые показания сохраняются. Обратите внимание, что данные сохраняются под узлом с UID пользователя – это способ ограничения доступа к базе данных.
Вот и всё. Вы успешно отправили показания датчика в Firebase Realtime Database и защитили данные с помощью правил базы данных.
Заключение
В этом руководстве вы узнали, как аутентифицировать ESP32/ESP8266 как пользователя с email и паролем, отправлять показания датчика в базу данных и настраивать правила безопасности для защиты базы данных и ограничения доступа.
В Части 2 мы создадим веб-приложение Firebase с аутентификацией (вход по email и паролю), которое отображает показания датчиков, сохранённые в базе данных. Только авторизованный вошедший пользователь сможет получить доступ к данным. Позже вы сможете модифицировать этот проект для отображения различных данных и ограничения или предоставления доступа к данным конкретным пользователям.
Надеемся, что это руководство было для вас полезным.
>> Перейти к Части 2: ESP32/ESP8266: Веб-приложение Firebase для отображения показаний датчиков (с аутентификацией)
Если вам нравятся проекты с Firebase, посмотрите нашу электронную книгу:
Узнайте больше об ESP32 и ESP8266 с нашими ресурсами:
—
Источник: :doc:`ESP32/ESP8266 Firebase: Send BME280 Sensor Readings to the Realtime Database <../esp32-esp8266-firebase-bme280-rtdb/index>` by Rui Santos & Sara Santos – Random Nerd Tutorials