Содержание статьи
![](/wp-content/themes/engine/img/info-icon.jpg)
INFO
NodeMCU от Expressif — это одна из самых недорогих плат с Wi-Fi, microUSB и программатором на борту. Она создана на базе модуля ESP8266. Плату второго поколения можно приобрести приблизительно за 6–7 долларов. С платой можно работать из Arduino IDE. Кроме того, плата поддерживает скриптовый язык Lua (переводится с португальского как «Луна»).
![Загрузка ... Загрузка ...](https://xakep.ru/wp-content/plugins/wp-polls/images/loading.gif)
Подключение и настройка девайса
Для того чтобы под Windows девайс распознался, нужно скачать драйвер по следующей ссылке: CP210x USB to UART Bridge VCP Drivers.
Стандартная скорость последовательного порта NodeMCU — это 115 200 бит/с. Ты можешь установить другую скорость, но при первом же сбросе устройства она вернется к 115 200. Важно, чтобы драйверу была установлена точно такая же скорость.
![Свойства драйвера](https://xakep.ru/wp-content/uploads/2018/03/158297/driver_properties.png)
Прошивка
Скорее всего, в первоначальной прошивке чего-то будет не хватать, поэтому в идеале нужно прошить устройство самостоятельно. Собрать образ Firmware можно несколькими способами: с помощью облачного сервиса, образа Docker’а или используя инструкцию для Linux.
Я собирал с помощью облачного сервиса, что и всем советую. 🙂
Если нужно отправить данные в облако, то понадобится выбрать SNTP, MQTT, HTTP (Wi-Fi, timer, file, GPIO, net, node, UART уже выбраны по умолчанию). Также следует пометить в качестве необходимого TLS/SSL support в пункте Miscellaneous options. Ссылка с bin-файлом приходит на почту. Точнее сказать, приходят даже сразу две ссылки. Одна с образом, поддерживающим операции с плавающей запятой, и вторая с не поддерживающим.
Перед прошивкой ESP8266 необходимо привести в особый режим. На плате имеется отдельная кнопка FLASH. Ее нажатие во время включения питания или нажатия reset переводит девайс в режим bootloader. Если вдруг в твоей модификации платы такой кнопки нет, то перед прошивкой нужно соединить GPIO0 с GND и нажать reset (этот способ подходит для ESP-12). Прошить Firmware можно утилитой PyFlasher. Py в названии означает, что приложение написано на Python. Есть еще nodemcu-flasher, но она давно уже не обновлялась. Ее я не пробовал.
Окно PyFlasher выглядит так:
![PyFlasher](https://xakep.ru/wp-content/uploads/2018/03/158297/pyflasher.png)
Flash mode выбирается в зависимости от того, какая у нас плата. Большинству современных плат на базе модулей ESP8266 ESP-12 и ESP32 подходит режим DIO, ESP8266 от 01 до 07 — более быстрый режим QIO. DOUT используется ESP8285.
Настройка IDE
Скачиваем бесплатную IDE по ссылке ESPlorer. В качестве альтернативы есть ZeroBrane Studio. Мне больше всего по душе пришелся ESPlorer, поэтому приведу пример работы именно с ним.
ESPlorer написан на JAVA. Интерфейс приложения такой.
![ESPlorer](https://xakep.ru/wp-content/uploads/2018/03/158297/ESPlorer.png)
С левой стороны код, настройки и подобное. С правой — окно мониторинга и команды управления девайсом. Открываем приложение, выбираем порт. Устанавливаем скорость, на которой будет происходить обмен (вероятнее всего, это 115 200), и нажимаем Open.
![Установка скорости порта в ESPlorer](https://xakep.ru/wp-content/uploads/2018/03/158297/Esplorer_1.png)
Для разминки можно запустить простой скрипт, который мигает встроенным светодиодом:
LED = 0
gpio.mode(LED, gpio.OUTPUT)
function flash_led()
gpio.write(LED, gpio.LOW)
tmr.delay(500000)
gpio.write(LED, gpio.HIGH)
end
tmr.alarm(1, 1000, tmr.ALARM_AUTO, flash_led)
Если на нашей плате нет встроенного светодиода (или тебе уже вконец надоели примеры моргания светодиодом), то можно попробовать выполнить еще более простой скрипт, который выводит на экран строку:
print("Hello from Lua!")
После того как создашь файл формата .lua (допустим, test.lua), внесешь в него код и сохранишь на диск, можно будет загрузить его на устройство. Для этого необходимо открыть порт, если он не открыт (кнопка Open), и нажать кнопку Upload. Ее можно найти среди кнопок, которые расположены под кодом (слева).
Загрузив файл, выполним его, отправив команду
dofile("test.lua")
Команду можно ввести вручную в нижнее поле, расположенное справа под монитором. Особо ленивые, а точнее — рациональные программисты могут нажать кнопку Reload (крайний ряд кнопок справа). Появится список кнопок с загруженными на плату файлами .lua. Нажатие на кнопку с именем файла запустит файл на исполнение.
Если хочешь, чтобы файл запускался сразу после включения платы, то создай файл с именем AUTOEXEC.BA… тьфу, то есть init.lua. 🙂
Настройка облачной части для работы с устройством
Оставим на какое-то время наше устройство и создадим его двойник в облаке. С недавних пор двойник устройства можно создать прямо на портале Azure, воспользовавшись новыми возможностями. В группе настроек IoT-хаба под названием Explorers необходимо выбрать IoT Devices и нажать + Add
.
Для подключения устройства к IoT-хабу нам необходимо сгенерировать SAS (shared access signature). Для генерации SAS используется ключ двойника устройства, который можно получить с помощью вспомогательной утилиты (Device Explorer, iothub-explorer, IoT Extension for Azure CLI 2.0). Но проще всего получить ключ все там же, на портале Azure, зайдя в IoT Hub → IoT Devices.
![IoT Explorer](https://xakep.ru/wp-content/uploads/2018/03/158297/IoT_Explorer.png)
SAS можно сгенерировать на устройстве, а можно с помощью своего онлайн-сервиса. В принципе, SDK может сгенерировать SAS автоматически (достаточно в коде указать ключ двойника устройства).
![Создание токена с помощью сервиса](https://xakep.ru/wp-content/uploads/2018/03/158297/ftis-tokenservice.png)
Способ, при котором SAS-токен генерируется веб-сервисом на ограниченное время, чуть более безопасен. Хотя существует и определенный нюанс. Если отправлять сервису только имя устройства, то злоумышленник может перебором имен получить токен какого-то другого устройства. Поэтому, чтобы немного обезопасить процесс, предлагаю такое решение: сохраним на устройстве хеш Azure-ключа двойника устройства. И в коде сервиса перед генерацией SAS проверим, совпадает ли хеш с хешем ключа устройства. Таким образом, получить SAS можно будет, только зная имя устройства и хеш его ключа.
Первый способ, при котором SAS генерируется на устройстве, более простой и удобный, но чуть менее безопасный, так как, получив доступ к устройству, злоумышленник сможет добыть ключ и генерировать SAS устройства самостоятельно. Во втором случае взломщик сможет получать только SAS токены, время жизни которых ограничено.
Выходит, что оба способа по большому счету неидеальны, если у хакера есть доступ к устройству. Даже защита соединения с помощью VPN здесь не поможет. В таком случае канал передачи будет защищен, но тот, кому попадет в руки устройство, сможет получить и доступ к каналу. К сожалению, на устройствах NodeMCU, Arduino и подобных нет возможности хранить ключи/пароли в каком-либо безопасном хранилище.
Создание Azure-функции для генерации SAS
В качестве онлайн-сервиса проще всего использовать Azure-функции. Это своеобразные сниппеты, которые можно писать сразу на портале Azure в браузере. Шутки шутками, но таким образом программировать можно даже со смартфона. Конечно, никто не запрещает создавать и отлаживать их и из Visual Studio и только потом публиковать в Azure уже в откомпилированном виде. Задача функции — выполнить какую-то, как правило, не особо сложную операцию. По микросервисной задумке, каждая функция умеет делать что-то одно, но зато очень хорошо (принцип Single responsibility).
Создать Azure Function App можно на портале, заполнив небольшую анкету.
![Создание Azure-функции](https://xakep.ru/wp-content/uploads/2018/03/158297/function_creation.png)
Consumption Plan позволяет платить только за те вызовы функции, которые были совершены. Это самый недорогой вариант. На данный момент миллион вызовов функции дается бесплатно. Заметь, что вместе с функцией создается и вспомогательное хранилище данных (Storage).
После создания Function App можно создать и саму функцию. В данном случае нам нужна функция типа Webhook + API. Функция может быть открыта всем (анонимный доступ), а может быть доступна только обладателям особого кода. Код можно получить из окна работы с функцией, нажав на ссылку </> Get function URL
.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»