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

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

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

ЧТО ДЕЛАЕМ?

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

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

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

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

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

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

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

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

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

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

    2. Скопируйте следующий код в вашу 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.

Дополнительное задание:

Загружать данные с датчика в Firebase. Вам нужно будет, чтобы Arduino передавала по Serial данные, а ESP8266, а WI-FI модуль уже грузил в Firebase.

Last updated