сайт для палких паяльників

Сейчас облачными хранилищами никого не удивишь. Все хранят данные в облаках. А может ли ESP8266 под NodeMCU использовать облачные хранилища? А почему бы и нет. Давайте заставим ESP8266 отправлять данные в базу данных FireBase.

Firebase

Firebase – это больше чем просто хранилище данных, подробнее на сайте http://firebase.google.com/. Но мы будем использовать сервис FireBase только для хранения данных в их документо- ориентированной базе данных. Google в 2014 году поглотил Firebase и теперь Google предоставляет эти услуги. Искренне надеюсь, что Google не скоро похоронят* Firebase, и мы успеем им чуток попользоваться.

REST API для Firebase

Для Firebase сделан REST API, поэтому его можно ковырять HTTPS запросами, что худо-бедно умеет делать NodeMCU.

Настройка параметров базы данных Firebase

– Для начала надо зайти на http://firebase.google.com/ и создать проект. Нам понадобится APIKEY.

Firebase APIKEY

– Затем создаем базу данных (Realtime Database)

Firebase Realtime Database

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

Firebase Rules

– Заходим в правила авторизации и включаем “адрес электронной почты и пароль”

Firebase Auth

– добавляем пользователей, которые будут работать с базой. E-mail можно указывать отфонарный его валидация не требуется

Firebase Users. Настройка

Ну а теперь пример скрипта на lua, который аутентифицируется и пишет данные в базу Firebase.


--WiFi Settup
--wifi.setmode(wifi.STATION)
--local cfg={}
--cfg.ssid="WiFiSSID"
--cfg.pwd="WiFiPassword"
--wifi.sta.config(cfg)
--cfg = nil
--collectgarbage()

-- Firebase settings
FB_APIKEY = "ApiKey"
FB_EMAIL = "email@mydomain.com"
FB_PASSWORD = "password"
FB_PROJECT = "https://mytestproject.firebaseio.com/weather.json?auth="

-- Global Variables
weather_data = {D=0, P=0, T=0, H=0}
firebaseIdToken = ''

function firebaseAuth(resend)
  uri = "https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key="..FB_APIKEY
  data = '{"email":"'..FB_EMAIL..'","password":"'..FB_PASSWORD..'","returnSecureToken":true}'

  http.post(uri,
    'Content-Type: application/json\r\n',
    data,
    function(http_code, http_data)
        print (http_code)
        response = sjson.decode(http_data)
        firebaseIdToken = response['idToken']
        if resend == true then
          firebaseSendData()
        end
    end)
end

function firebaseSendData()
  print('Sending...')
  http.post(FB_PROJECT..firebaseIdToken,
            'Content-Type: application/json\r\nConnection: close\r\n',
            '{"D":'..weather_data.D..', "T":'..weather_data.T..', "P":'..weather_data.P..', "H":'..weather_data.H..'}',
    function(http_code, http_data)
      print(http_code)
      print(http_data)
      -- if idToken is expired
      if (http_code == 401) then
        firebaseAuth(true)
      end
    end
  )
end

sntp.sync()
firebaseAuth(false)

-- IIC init
local sda = 3 -- GPIO14
local scl = 4 -- GPIO12
--local sla = 0x3c
i2c.setup(0, sda, scl, i2c.SLOW)

--Init BME280
bme280.setup()
--First reading always is incorrect
local P, T = bme280.baro()
tmr.delay(100000)

cron.schedule("*/5 * * * *", function(e)
  print('Sheduler')

  -- get current datetime
  local sec, usec = rtctime.get()
  
  -- if time is synchronized
  if sec > 1514764800 then
    weather_data.D = sec

    local P, T = bme280.baro()
    local H, t = bme280.humi()

    weather_data.P = P
    weather_data.T = T/100
    weather_data.H = H/1000
  
    firebaseSendData()
  end
end)

Скачать пример работы ESP8266 NodeMCU с Firebase GitHub

Этот скрипт периодически опрашивает состояние датчика BME280 и записывает данные (дату, температуру, давление, влажность) в Firebase. Вернее сказать, он пытается отправить данные. А если получает ответ 401 (idToken is expired), тогда проходит аутентификацию с теми данными, которые нужно указать в скрипте. После удачной аутентификации получает idToken с которым и ходит писать в базу пока idToken валидный. idToken выдается, кажется, на 30 минут. Результат работы ESP8266 с Firebase смотрим в виде графиков на этой странице: http://avislab.com/meteo/. На этой странице данные читаются с той же БД но уже Java скриптами. Таким образом, в который раз, я трансформировал свою микро “метеостанцию”.

Лирика

Можно было немного шире рассказать о работе ESP8266 с Firebase, показать как через интернет можно управлять состоянием ног ESP8266, включать свет, крутить серву, и всякое такое… НО, но, но … я настоятельно рекомендую ESP8266 всем начинающим. И если Ваши дети или Вы желаете попробовать что-то сделать с электроникой, побаловаться программированием контроллеров – купите ESP. И не только потому что это стоит недорого, а вот почему.

Парочка ESP8266 + NodeMCU меня откровенно достали своими глюками, и крайне нестабильной работой. Нет, конечно, для проектов, где чел всегда может передернуть его по питанию, ESP8266 сгодится. А если его спрятать подальше, где нибудь на крыше, то регулярный фитнес Вам обеспечен.

Я был крайне разочарован нестабильной работой ESP8266, когда вышел модуль ESP-01. К слову сказать, он появился у меня спустя несколько месяцев после начала его выпуска. Он периодически, по непонятным причинам, терял связь, уходил в себя. Можно было на него забить и через несколько часов или дней он сам возвращался к жизни (без ребута, без сброса питания). Обновление прошивок ситуацию кардинально не меняло. Модуль мог неделю работать как часы, а потом снова глючить несколько дней подряд. Перепробовал все – и мощный блок питания и 1-2 метра от Wi-Fi роутера и роутеры менял. Никакой разницы. Тогда я все списал на “первую версию”. К тому же у него была крайне скудная периферия. 2 ноги да TX, RX – это вообще ничего.

Тогда я сложил свои ESP-01 в коробочку и несколько лет вообще не смотрел в их сторону. И когда мне говорили “а чо ты не юзаешь ESP8266? круть какая шьтука…можно умный дом на них зделать…” я с трудом подавлял рвотный рефлекс.

Но, со временем душевные раны затянулись, а массовая истерия вокруг ESP8266 заинтриговала меня, и я решил попробовать снова, ну уже с модулем ESP-12. “Ну в версии модуля ESP-12 уже все баги пофиксены! Да и ног наружу торчит вон сколько! Размах! Прогресс!” – подумал я. Ага! ЩАС! На модуле ножек стало больше. Но начинка до боли знакомая. Тот же дешевый 32-разрядный контроллер с нищебродской периферией, флеш память только по-больше припаяли. Даже у старючей 8-разрядной Atmega8 периферия куда богаче. Ну даладно, зато есть WiFi. Я искренне пытался сделать все, чтобы ESP8266 раскрыл все свои сильные стороны в моих проектах. И он раскрыл. Действительно, с ESP8266 и NodeMCU проекты создавать очень быстро и можно даже красиво. И некоторые вещи, которые я сделал, даже мне немного нравятся, например этот GPS трекер или Метеостанция.

Но работают они – *опа, как нестабильно! И если Вы повторите любой из этих проектов в точности, включите, а он не работает, а скорее всего, работает, но не так – это НОРМАЛЬНО! Для этого китайского контроллера – это нормально! А если все сразу заработает — это тоже нормально для этого китайского микроконтроллера, но радоваться все равно не спешите. И что вообще в нем происходит и почему — не понять. Ну вот хотя бы взять этот примитивный скрипт для работы с Firebase. В скрипте для того чтобы с заданной периодичностью отправлять данные используется cron.schedule. И Вы там найдете строчку print(‘Sheduler’) Зачем она там? Консоль никто не смотрит? Если ее убрать, через 5 минут, когда cron.schedule попытается выполнить все что надо, NodeMCU после фатальной ошибки уходит в ребут. А простой print это “лечит”! А в другом проект cron.schedule работал без этого глюка. Это как понять? Собственно, эта мелочь и стала “последней каплей”, до этого было много других “чудес”.

Но Вы обязательно купите своему ребенку ESP8266 (или что там есть поновее) или сами с него начните. И обязательно с NodeMCU. Если человек справится, сможет что-то сделать, обойти все глюки, не сломается – сможет дальше заниматься микроконтроллерами, но не ESP, конечно, а другими, настоящими.

Успхов.

P.S.

Этой статьей я заканчиваю цикл статей про ESP8266 и NodeMCU.

P.S. P.S.

*
Если в один из дней Firebase перестанет работать, лично меня это не удивит.
Проекты похороненные Google:

Panoramio (куплен 2007, закрыт 2017)
Picasa(куплен 2004, закрыт 2016)
Google Codes (куплен 2004, закрыт 2016)
Google Health (закрыт 2012)
Google Catalogs (закрыт 2015)
Dodgeball (куплен 2005, закрыт 2007)
Google Reader (закрыт 2013)
iGoogle (закрыт 2013)
Google Talk (закрыт 2013)
Knol (закрыт 2011)
Google Buzz (закрыт 2011)
Aardvark (куплен 2010, закрыт 2011)
Google Notebook (закрыт 2011)
Google Dictionary (закрыт 2011)
Google Labs (закрыт 2011)
Google Wave (закрыт 2009)
Google Searchwiki (закрыт 2010)
Dodgeball (куплен 2005, закрыт 2009)
Jaiku (закрыт 2009)
Google Answers (закрыт 2006)
и это только интернет-проекты…

Смотри также:

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

 
Translate
Архіви

© 2011-2018 Андрій Корягін, Кременчук - Київ, Україна