Для початку нам необхідно створити новий проект в Firebase. Переходимо по посиланню https://console.firebase.google.com і тиснемо "Add project".
Вкажіть будь-яке ім’я для проекту (наприклад MyFirebaseProject) і оберіть ваш регіон. Натисніть "Create Project". Перед вами відкриється панель керування вашим проектом.
Раніше під назвою Firebase розумілась тільки NoSQL база даних. Наразі це цілий набір сервісів таких як: авторизація, хостинг, зберігання файлів, аналітика, тощо. Цей набір дозволить вам створювати свої додатки та серверну частину для IoT пристроїв без зайвих думок про написання коду. У цій лабораторній роботі в основному ми будемо використовувати саме базу даних. Перейдіть на вкладку Database.
Перейдіть на вкладку "Rules" і змініть правила доступу на приведені нижче. Не забудьте натиснути "PUBLISH" щоб зберігти зміни.
Дані правила відключать необхідність авторизуватись, щоб зчитувати/записувати дані. Процес авторизації пристрою більш складний, тому виходить за рамки цієї лабараторної. Але майте на увазі: з вимкненою авторизацією будь-хто зможе записувати і зчитувати ваші дані.
Надалі ми будемо використовувати вже налаштований проект з встановленою та трохи модифікованою бібліотекою для роботи з Firebase. Завантажте репозиторій за посиланням: https://github.com/snipter/firebase-iot-codelab.
Завантажте та разархівуйте файли. Перейдіть назад в Atom. Можете закрити попередній проект, клікнувши на ньому правою кнопкою.
За допомогою кнопки у панелі інструментів перейдіть на домашню сторінку PlatformIO та натисніть "Open Project".
Відкрийте проект, який знаходиться %папка_репозиторію%/projects/firebase-termo-sensor
. Проект повинен з’явитись зліва на панелі проектів:
Скомпілюйте проект та перевірте, щоб він не видавав помилок. В даному проекті в папці lib лежить бібліотека, яка полегше нам роботу з Firebase. Бібліотека для роботи з датчиком температури повинна бути встановлена ще з минулого кроку (вона встановлюється глобально).
Перегляньте код та прочитайте коментарі. Тут з’являється код підключення до мережі WiFi та запису даних в базу Firebase. Для того, щоб підключитись до точки доступу WiFi, вам треба змінити WIFI_SSID
та WIFI_PASSWORD
на відповідні значення. Наприклад:
#define WIFI_SSID "WiFiNetworkName"
#define WIFI_PASSWORD "WiFiNetworkPassword"
Далі вам необхідно вказати посилання на базу даних в константі FIREBASE_HOST
. Для цього просто скопіюйте ID вашого проекту з адмін-панелі Firebase. У моєму випадку це myfirebaseproject-a5af3
.
Далі вставте цей ID замість слова example, а частину з ".firebaseio.com" залиште. У вас повинен вийти рядок наступного вигляду:
#define FIREBASE_HOST "myfirebaseproject-a5af3.firebaseio.com"
Скомпілюйте проект, завантажте його на свій пристрій та запустіть монітор послідовного інтерфейсу. Якщо все ок, то ви побачите, що девайс підключився до WiFi мережі і відправляє дані:
Якщо ви будете бачити лише ряд крапок, то ще раз перевірте дані підключення до WiFi. У випадку, якщо дані з датчика будуть зчитуватись, але буде виникати помилка запису даних до Firebase - перевірте правильність написання посилання до вашої бази. Час від часу може виникати помилка зчитування даних з сенсору температури. Причиною цього можуть бути різні фактори - нестабільність живлення, відходження контактів, зовнішні перешкоди. Якщо дані будуть постійно зчитуватись з помилкою - перевірте надійність підключення сенсору та перезавантажте пристрій.
Перейдіть до адмін-панелі. Якщо ви все сконфігурували вірно, то побачите дані в своїй базі даних:
Змініть температуру сенсора, нагрівши його, і ви побачите, як відповідно змінюються дані в базі. Можете очистити базу, клікнувши на кнопку "закрити" поруч з коренем бази. При наступному оновлені дані знову з’являться.
Таким же чином можна видаляти і окремі записи в базі.
Наш код можна покращити. Наразі кожного разу коли ми викликаємо команду Firebase.setFloat наш пристрій робить HTTP запит до бази. Запити можна об’єднувати. Так як вся база Firebase - це просто JSON об’єкт, то і дані в неї можна записувати в JSON форматі. Замініть код відправки даних в Firebase на наступний:
// Writing data to the Firebase
String serverTimestamp = "{\".sv\": \"timestamp\"}";
String temperatureStr = String(t);
String humidityStr = String(h);
String dataJson = "{\"temperature\": " + temperatureStr + ", \"humidity\": " + humidityStr + ", \"updated\": " + serverTimestamp + "}";
Serial.println("Sending JSON data: " + dataJson);
Firebase.setJsonString("sensor/current", dataJson);
if (Firebase.failed()) {
Serial.print("Setting data failed");
return;
}
Serial.println("Data has been updated");
Скомпілюйте і запустіть код. Відкрийте термінал і подивіться які дані ми відправляємо через змінну dataJson
. Строка {".sv": "timestamp"}
в Firebase замінюється на timestamp
- значення дати та часу записаного у форматі цілого числа. Таким чином, за допомогою поля updated
ми завжди будемо знати, коли в останнє оновлювались дані.
Ще було б непогано зберігати історію зміни температури та вологості. Для цього в Firebase є спеціальний метод push
. Додайте наступний код в кінець функції loop
, прошийте свій девайс та перегляньте результат в базі.
Firebase.pushJsonString("sensor/history", dataJson);
if (Firebase.failed()) {
Serial.print("Pushing data failed");
return;
}
Тепер ви не тільки зможете дізнатись поточну температуру, але і переглянути історію зміни температури. Кожен запис зберігається з унікальним ID, котрий генерується самою базою.