ESP8266 + Firebase
Сейчас облачными хранилищами никого не удивишь. Все хранят данные в облаках. А может ли 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.

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

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

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

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

Ну а теперь пример скрипта на 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 protected]"
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, показать как через интернет можно управлять состоянием ног 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)
Дивись також:
- ESP8266 NodeMCU Перше знайомство. Робимо WiFi розетку
- ESP8266 NodeMCU. PWM
- ESP8266 NodeMCU. ADC
- ESP8266 NodeMCU. timer, rtc, SNTP, cron
- ESP8266 NodeMCU. файлова система, SD Card
- ESP8266 NodeMCU. UART
- GPS-трекер на базі ESP8266
- GPS-трекер + Дисплей SSD1306
- ESP8266 NodeMCU. SSD1306. U8G
- ESP-01 (ESP8266) upgrade flash memory to 4MB
- ESP8266 NodeMCU. I2C. BME280/
- Метеостанція на ESP8266
вибачаюсь за некропостинг, але NodeMCU - це якраз те, через що я на деякий час підзакинув єсп8266, але потім спробував на С під ардуїно і все виявляється не так погано, все працювало набагато стабільніше, без втрат зв'язку і неочікуваних перезавантажень))) email не обов'язкове поле ж...
Дякую за коментар. Абсолютно цілковито підтримую Вас у тому, що коли існує можливість писати для мікроконтролерів на С, треба обирати саме С і не вестися на усілякі "зручні прошарки".
Tags
bme280 bmp280 gps mpu-6050 options stm32 ssd1331 ssd1306 eb-500 3d-printer soldering tim mpu-9250 dma watchdog piezo exti web raspberry-pi docker ngnix solar bluetooth foc html css brushless flask dc-dc capture gpio avr rs-232 mpx4115a atmega mongodb st-link barometer pwm nvic git java-script programmator dht11 hih-4000 pmsm encoder max1674 smd sensors rtc adc lcd motor timer meteo examples i2c usb flash sms rfid python esp8266 servo books bldc remap eeprom bkp battery ethernet uart usart displays led websocket nodemcu wifi
Архіви