Мини-кейс: Загрузка данных в Firebase [Переделать]

Финальное испытание, пройти которое мы собирались - загрузка данных в облачную базу данных Firebase.

Познакомимся с сервисом Firebase от Google. Будем записывать и считывать из Realtime Database данные.

ЧТО ДЕЛАЕМ?

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

    1. Заходим в firebase.google.com и войдите, используя учетную запись Google.

    2. На главной странице нажимаем на Get Started и далее на Add project.

    3. При создании проекта на первом шаге укажите имя.

    4. На втором шаге создания проекта выключите аналитику и нажмите на Create project.

    5. Создание проекта займёт некоторое время. Затем нажмите Continue, когда будет всё готово.

    6. Создайте Realtime Database в разделе Build.

    7. Вы будете перенаправлены на страницу консоли проекта.

  2. Установите методы аутентификации

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

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

      2. Существует несколько методов аутентификации, таких как электронная почта и пароль, учетная запись Google, учетная запись Facebook и другие.

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

  3. Создание базы данных в реальном времени Следующим шагом является создание базы данных реального времени для вашего проекта. Выполните следующие шаги, чтобы создать базу данных.

    1. На левой боковой панели нажмите «Realtime Database», а затем нажмите «Create Database».

    2. Выберите местоположение вашей базы данных. Он должен быть ближе всего к вашему местонахождению.

    3. Настройте правила безопасности для вашей базы данных. В целях тестирования выберите Start in test mode. В последующих руководствах вы узнаете, как защитить базу данных с помощью правил базы данных.

    4. Теперь ваша база данных создана. Вам нужно скопировать и сохранить URL-адрес базы данных, выделенный на следующем изображении, потому что он понадобится вам позже в коде ESP8266. База данных реального времени настроена. Теперь вам также необходимо получить ключ API вашего проекта.

  4. Получите ключ API проекта

    1. Чтобы получить ключ API вашего проекта, на левой боковой панели нажмите иконку с шестерёнкой, а далее «Project Settings».

    2. Скопируйте ключ API в безопасное место, так как он понадобится вам позже. Теперь у вас есть все необходимое для взаимодействия ESP8266 с базой данных.

  5. Запрограммируйте ESP8266 для взаимодействия с Firebase

    1. Перейдите в Скетч > Подключить библиотеку > Управление библиотеками...

    2. Найдите клиент Firebase ESP и установите клиентскую библиотеку Firebase Arduino Client Library for ESP8266 and ESP32 от Mobitz. Теперь все готово для начала программирования платы ESP8266 для взаимодействия с базой данных.

    3. Скопируйте следующий код в вашу Arduino IDE. Этот скетч вставляет целое число и число с плавающей запятой в базу данных каждые 15 секунд. Это простой пример, показывающий, как подключить ESP8266 к базе данных и хранить данные.

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <Firebase_ESP_Client.h>

#include "addons/TokenHelper.h"
#include "addons/RTDBHelper.h"

#define WIFI_SSID "dimdimdim" // Имя WI-FI точки
#define WIFI_PASSWORD "08001800" // Пароль к WI-FI

#define API_KEY "REPLACE_WITH_YOUR_FIREBASE_PROJECT_API_KEY" // Ваш API ключ к проекту
#define DATABASE_URL "REPLACE_WITH_YOUR_FIREBASE_DATABASE_URL" // Ваша ссылка db проекта

FirebaseData fbdo; //Define Firebase Data object

FirebaseAuth auth;
FirebaseConfig config;

unsigned long sendDataPrevMillis = 0;
int count = 0;
bool signupOK = false;

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();
  Serial.print("Connected with IP: ");
  Serial.println(WiFi.localIP());
  Serial.println();

  /* Assign the api key (required) */
  config.api_key = API_KEY;

  /* Assign the RTDB URL (required) */
  config.database_url = DATABASE_URL;

  /* Sign up */
  if (Firebase.signUp(&config, &auth, "", "")) {
    Serial.println("ok");
    signupOK = true;
  } else{
    Serial.printf("%s\n", config.signer.signupError.message.c_str());
  }

  /* Assign the callback function for the long running token generation task */
  config.token_status_callback = tokenStatusCallback; //see addons/TokenHelper.h
  
  Firebase.begin(&config, &auth);
  Firebase.reconnectWiFi(true);
}

void loop() {
  if (Firebase.ready() && signupOK && (millis() - sendDataPrevMillis > 15000 || sendDataPrevMillis == 0)){
    sendDataPrevMillis = millis();
    // Write an Int number on the database path test/int
    if (Firebase.RTDB.setInt(&fbdo, "test/int", count)){
      Serial.println("PASSED");
      Serial.println("PATH: " + fbdo.dataPath());
      Serial.println("TYPE: " + fbdo.dataType());
    }
    else {
      Serial.println("FAILED");
      Serial.println("REASON: " + fbdo.errorReason());
    }
    count++;
    
    // Write an Float number on the database path test/float
    if (Firebase.RTDB.setFloat(&fbdo, "test/float", 0.01 + random(0,100))){
      Serial.println("PASSED");
      Serial.println("PATH: " + fbdo.dataPath());
      Serial.println("TYPE: " + fbdo.dataType());
    }
    else {
      Serial.println("FAILED");
      Serial.println("REASON: " + fbdo.errorReason());
    }
  }
}
  1. В Firebase слева в меню зайдите в Realtime Database и посмотрите что происходит. Нажмите на "Создать базу данных". При создании выбираем "Тестовый режим".

  2. Открываем вкладку "Правила" и там указываем так:

    {
      "rules": {
        ".read": true,
        ".write": true,
      }
    }
  3. Во вкладке "Данные" смотрим что происходит.

Теперь вы знаете как работать с Realtime Database в Firebase.

Last updated

Was this helpful?