Хранение данных в базе данных Firebase

Представим себе, что у нас есть простой датчик температуры, который измеряет температуру воды котла каждые несколько минут, и нам необходимо сохранить историю измерений в журнале для последующего анализа данных и внесения корректировок в систему отопления. Также допустим, что нам необходимо работать удаленно, через Интернет. Данные должны быть доступны в любое время, круглосуточно. Нужно где-то хранить показания датчика. Для этого попробуем соединить  Arduino и Firebase.

Один из альтернативных способов, для таких задач — это Xively. Изначально это был Pachube, потом Cosm и теперь Xively. С Xively клиентом для Arduino вы просто подключаетесь к их API и посылаете им показания датчика. Это довольно быстрый и простой способ. Есть бесплатный тариф использования сервиса. Но есть несколько вещей, которые могут не устраивать наши потребности. Одной из них является предел показаний, которые вы можете хранить. В данный момент при бесплатном тарифе вы можете хранить до 3-х месяцев истории. Второе, вы можете посылать показания раз в 1 сек, таким образом невозможно хранить данные в реальном времени. Третье, нужно учесть то, что вы храните свои данные в базе данных, которая вам не принадлежит.

Что можно еще использовать? Иметь свой собственный сервер базы данных SQL — излишество. И не только из-за стоимости, но и по причине технического обслуживания. Для таких простых проектов вам не нужно тратить целое состояние. Вот здесь и приходит на помощь Firebase. Firebase позволяет подключаться к вашей собственной firebase-базе данных и делать все операции CRUD с помощью простых обращений к их API. Вы можете посетить их сайт, и вам предоставят базу данных 100mb бесплатно. Ее будет достаточно, чтобы хранить журнал за несколько лет. Это то, что нам нужно. Но тут есть большая проблема. Firebase использует только HTTPS по соображениям безопасности, а микропроцессоры Arduino UNO не имеют достаточно мощности для этого. По этой ссылке вы можете прочитать (англ.яз.), как член команды firebase говорит о поддержке SSL. Идея в том, что для решения этой проблемы можно использовать прокси-запросы через сервер, который поддерживает SSL. Для достижения этой цели используем библиотеку Firebase PHP, которую вы можете найти здесь. Т.е. система такая: Arduino-> Php website-> Firebase. После того как данные перешли в базу Firebase,  тут вы можете их использовать по-разному. Давайте начнем строить наш проект, и вы увидите, как все это работает.

Аппаратная часть. Используем популярный датчик температуры DS1820. Подключив его к Arduino Uno получим показания температуры в помещении. Также нужен модуль Ethernet. Используем плату на основе контроллера W5100, Схема такая:

DS18S20_arduino
А вот устройство со всеми частями в работе:

arduino-ds1820

Следующим шагом является создание бесплатной базы данных firebase на http://www.firebase.com. Затем войдем в базу данных и перейдем на последний пункт меню “Secrets”. Оттуда получаем наш секретный маркер. Запишем его, так как он понадобится нам позже. Теперь у нас есть аппаратное обеспечение и база данных готова. Если у вас уже есть домен или поддомен, то размещаем у себя Firebase файл библиотеки PHP на хостинге.

Затем с помощью FTP загружаем firebase lib.php:

А теперь самый важный файл, который вы также должны загрузить на ваш хостинг каталог. Это файл, который будет отвечать на запросы Arduino. Назовем его firebase test.php

Теперь, если вы сделаете вручную запрос http://www.yourdomain.com/firbaseTest.php?arduino_data=21.00 значение 21,00 должно сохраниться в вашей базе данных firebase. И вы можете сразу его увидеть. Довольно просто! Теперь единственное, что осталось сделать Arduino — отправить фактические показания датчика. Таким образом, вместо указанного значения «21,00», которое мы помещаем вручную, будет записано в базе реальное значение температуры. Код Arduino:

Приведенный выше код не так сложен, как это может показаться. Используем части веб-клиента примера кода из arduino.cc. В нескольких словах, что мы делаем: мы делаем запрос, передаем текущее показание температуры. Делаем запросы каждые 5 секунд. Самая трудная часть — преобразовать значение с плавающей точкой в строку. Если этого не сделать — получим сообщение об ошибке.

Если все сделаете правильно, то ваш Arduino загрузит показания, и вы увидите заполнение базы данных. Вот видео работы:

Теперь, когда у вас есть заполненная база данных, вы можете использовать эти данные, как вам заблагорассудится. В качестве небольшого тестового примера создадим простой HTML-файл со скриптами и JQuery плагин диаграммы. Покажем график комнатной температуры.

index.html:

javascript файл (controller.js)

Возможно, вы захотите загрузить и эти файлы в ваш хостинг каталог.

temperature_arduino_ds1820_firebase

Спасибо за чтение!

Отправить ответ

avatar
  Подписка  
Уведомлять, если есть