Вдохновленный комментарием
Стикс писал(а):
А вообще такие уроки очень полезны! Моё одобрение.
из темы
про будильник,решил продолжить в том-же духе.
Сразу скажу, что пока не являюсь экспертом в области "интернета вещей". Да и модуль NodeMCU (ESP8266) приобрел совсем недавно, и скорее с целью ознакомления, чем практического применения. Так, что мой подход скорее дилетантский.
На самом деле под термином IoT скрывается куча скучных спецификаций, а в этой теме я предлагаю шаблонное решение, для тех, кто иногда балуется Инвентором, чтобы состряпать на скорую руку какую-нибудь интернет- управлялку.
Лирическое отступление: Надо сказать, что пока App Inventor не поддерживает традиционные IoT-протоколы.
Своего MQTT- брокера у Гугла я тоже не обнаружил. Поэтому, в нашем случае, использование Firebase, пожалуй единственное подходящее решение. Вообще теперь Firebase - это целый набор интересных сервисов, но мы будем пока использовать ее по старинке, т.е. как Realtime базу данных для хранения общих переменных. Т.о. в нашем проекте будет 3 функциональных элемента:
1.Приложение на смартфоне с Андроид, с 2-мя кнопками управления (ON,OFF),
2.База данных на облаке, как посредник в общении,
3.Исполнительное устройство с обратной связью (ESP), которое, допустим, будет включать выходное реле.
Для реализации, не считая смартфона, еще понадобиться:
1. ESP8266, с прошивкой под Arduino IDE
2. Сама Arduino IDE, с установленной библиотекой
firebase-arduino 3. Google - акаунт (уже есть, если вы пробовали Инвентор)
4. Полчаса свободного времени
5. Скачать архив с примером:
Вложение:
Project.zip [3.67 КиБ]
Скачиваний: 0
Блямц - время пошло!
Начнем с середины, т.е. с создания БД:
1.1 Идем сюда
https://firebase.google.com/console/ 1.2 Давим "создать новый проект"
1.3 Даем ему имя, например "Test ESP"
1.4 Вибираем страну (вероятно, чтобы БД создалась на близлежащем сервере)
1.5 Давим "Создать"
1.6 Кликаем слева на Database
1.7 Появится консоль с пока пустой БД (URL
надо скопировать - скоро пригодится)
1.8 Осталось отредактировать правила - жмем на вкладку Rules
И меняем этот текст
Код:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
На этот
Код:
{
"rules": {
".read": true,
".write": true
}
}
Подтверждаем все, что просят. Это означает, что доступ к базе имеет любой желающий, имеющий ее URL. Авторизацию тоже сделать не сложно, но мы идем по пути максимального упрощения.
С серверной частью закончили. Консоль оставляем открытой.
Теперь займемся Андроид - приложением:
2.1 Запускаем
AppInventor и грузим проект
Firebase_ESP_Test.aia из скачанного архива.
2.2 В дизайнере щелкаем на элемент
FB1 и заменяем
FirebaseURL, на ранее скопированный в пункте 1.7.
FirebaseToken генерируется автоматически, про него беспокоится не надо.
2.3 Билдим, ставим на смарт. Нажимаем кнопку
ON и смотрим на нашу консоль, отображающую, состояние БД. Ага! Появилась папка
ESP, а в ней новая запись
OUT_CMD: "1".
Вложение:
Комментарий к файлу: Вид приложения
App.jpg [ 13.16 КиБ | Просмотров: 4628 ]
Переводим дыхание, останавливаем пока секундомер и смотрим на программу в Инвенторе
Там все проще пареной репы. Но, у меня бы сразу возникли следующие вопросы:
-
Разве мы не должны были сначала создать новую запись в пустой БД методом AppendValue, а уже потом менять ее значение методом StoreValue? FirebaseDB использует стандарт
REST в котором
AppendValue соответствует POST запросу, а
StoreValue - PUT. По PUT- запросу база автоматически создает новую запись, если таковая не существует, а также меняет значение существующей записи. Так что он универсален. (Если кто-то знает, чем лучше POST для создания записей, мне бы тоже было бы интересно)
-
Мы отправляем в БД целочисленные значения 0 и 1. Почему на консоли БД мы видим их, как строки (в кавычках)? А, это уже особенность Инвентора.
StoreValue принимает любой тип переменных, но отправляет их в базу, преобразованными в текст. Это обстоятельство
надо будет учитывать в скетче для ESP8266
-
Как мы используем событие DataChanged? Нам нужна обратная связь с исполнительным устройством. Иначе, мы не будем уверены, дошла ли до него команда. Роль этой связи выполняет не существующая пока запись
OUT_STATE, которую создаст ESP8266 при первом подключении. Также он будет обновлять эту переменную при каждом изменении статуса своего выходного сигнала. Что в свою очередь вызовет выполнение события
DataChanget на смартфоне - подсветку синим фоном соответствующей кнопки.
Так, хватит отдыхать! Включаем секундомер и идем дальше:
3.1 Открываем мой простой пример в Arduino IDE
3.2 Не забываем про свои
WIFI_SSID и
WIFI_PASSWORD, а также привести в соответствие со своим
FIREBASE_HOST (п.1.7). Так, как показано в коментарии в скетче. (моя база тоже пока работает)
3.3 Просмотреть и понять скетч, прочитать коменты.
3.4 Залить в ESP, включить СОМ- монитор для контроля.
На консоли БД должна быть примерно такая картинка:
Вложение:
Комментарий к файлу: Вид консоли БД
Consol.jpg [ 46.84 КиБ | Просмотров: 3632 ]
Осталось потыкать в кнопочки на смарте и убедиться, что все работает. Или не работает....
В любом случае, секундомер останавливаем
Далее можно попробовать подключить датчик температуры, с выводом на экран телефона. А, если и этого покажется мало,
то....