Интерес к интернету вещей растет с каждым днем, свои курсы по технологии IoT запустили и Cisco, и Samsung. Но большинство этих курсов базируются на собственном железе компаний, довольно дорогом, в то время как практически все то же самое можно сделать на гораздо более дешевом железе самостоятельно, получив при этом массу удовольствия и полезных навыков.
 

Какую плату выбрать?

Когда неофит от IoT полезет в интернет, одним из первых модулей, которые он найдет, будет ESP8266. И действительно, он обладает массой достоинств: дешевый, много различных плат на его основе, позволяющих использовать его как самостоятельное устройство и подключать к сложным Arduino-based проектам. Но ESP8266, выпущенный в 2014 году, довольно быстро перестал удовлетворять запросы пользователей, и в 2015 году компания-разработчик Espressif выпускает новый микроконтроллер — ESP32.

Различия между ESP8266 и ESP32
Различия между ESP8266 и ESP32

Точно так же, как и в случае с ESP8266, разработчики создали довольно много плат, базирующихся на новом микроконтроллере. В данной статье все примеры тестировались и проверялись на плате MH-ET LIVE ESP32 DevKit. Плата для обзора была любезно предоставлена интернет-магазином Amperkot.

Pinoutmap платы
Pinoutmap платы

Сколько процессорных ядер у ESP32?

Загрузка ... Загрузка ...
 

Начинаем программирование

Как и у любой платы, основанной на ESP32, у MH-ET LIVE ESP32 DevKit есть достаточно большой набор языков программирования. Во-первых, это Arduino C, во-вторых, Lua, а в-третьих и в-четвертых — MicroPython и Espruino. Про Espruino — сборку JS для программирования микроконтроллеров — уже рассказывалось в ][, но в той статье разбиралась работа только на плате Espruino Pico, заточенной под Espruino.

INFO

К сожалению, портирование Espruino на ESP32 еще не до конца завершено. Часть возможностей, например обновление по воздуху и Bluetooth, недоступна. Но так как Espruino — open source проект, любой может добавить свою функциональность.

 

Установка

  1. Скачиваем на официальном сайте свежую сборку Espruino. А если не доверяешь готовым сборкам, то можно собрать прошивку самостоятельно:

    # Get the Espruino source code
    git clone https://github.com/espruino/Espruino.git
    cd Espruino
    # Download and set up the toolchain ('source' is important here)
    source scripts/provision.sh ESP32
    # Clean and rebuild
    make clean && BOARD=ESP32 make
    
  2. Несмотря на то что мы будем программировать на JS, для установки все равно нужен Python, а конкретно esptool.py. Повторяя свою предыдущую статью, скажу, что для его установки, при условии, что Python уже установлен, достаточно набрать в консоли/терминале: pip install esptool.

  3. В терминале перейти в папку с прошивкой. Кроме самого файла Espruino, здесь лежат файлы bootloader.bin и partitions_espruino.bin. Это необходимые компоненты, но в некоторых сборках их может не быть, тогда их придется скачать отсюда.
  4. Запускаем процесс прошивки, не забыв изменить порт, указанный в данном примере, на свой, а также при необходимости указать другое имя прошивки. Здесь она называется espruino_esp32.bin.

    esptool.py \
      --chip esp32                     \
      --port /dev/ttyUSB0              \
      --baud 921600                    \
      --after hard_reset write_flash   \
      -z                               \
      --flash_mode dio                 \
      --flash_freq 40m                 \
      --flash_size detect              \
      0x1000 bootloader.bin            \
      0x8000 partitions_espruino.bin   \
      0x10000 espruino_esp32.bin
    
Процесс прошивки
Процесс прошивки
 

IDE

Разработчики Espruino создали свою IDE, Espruino Web IDE. Эта программа распространяется через Chrome Web Store, также существуют нативные приложения для Windows (32 и 64).

Espruino Web IDE
Espruino Web IDE

Перед первым запуском нужно залезть в настройки, вкладка COMMUNICATIONS, и убедиться, что скорость общения выставлена на 115200, а также изменить поле Save on Send с No на Yes, иначе все программы после перезапуска слетят.

Теперь достаточно запустить IDE, подключиться к плате и набрать в консоли 1+2: если ты получил 3, значит, все настроено правильно и можно начинать полноценную работу.

Какую платформу для разработки прошивок ESP32 рекомендуют использовать Espressif, AWS IoT и Google Cloud IoT?

Загрузка ... Загрузка ...
 

Hello world

Во всех языках программирования, предназначенных или модифицированных для программирования микроконтроллеров, самая простая программа — так называемый Blink, мигание встроенным светодиодом. Но это как-то скучно. Поэтому нашей первой программой станет программа для управления светодиодом с помощью веб-страницы. И действительно, JS — это же язык веба.

var wifi = require("Wifi");

wifi.startAP('EspruinoAP', { password: '0123456789', authMode: 'wpa2' },function() {
  console.log(`AP started`);
});

function onPageRequest(req, res) {
  var a = url.parse(req.url, true);
  if (a.pathname=="/") {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end("<H1><center>Hello, ][aker!</center></H1>");
  } else if (a.pathname=="/on") {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end("Enable");
    digitalWrite(D2, false);
  } else if (a.pathname=="/off") {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end("Disable");
     D2.write(true);
  } else {
    res.writeHead(404, {'Content-Type': 'text/plain'});
    res.end("404: Page "+a.pathname+" not found");
  }
}
require("http").createServer(onPageRequest).listen(80);

Можно заметить, что синтаксис практически ничем не отличается от обычного JS. Давай разбираться, что же происходит в этой программе.

  • var wifi = require("Wifi") — для начала мы подгрузили необходимый нам модуль для работы с Wi-Fi. Логично будет задаться вопросом: а откуда мы его взяли? Допустим, есть встроенные в прошивку модули. А если нам нужно загрузить с какого-нибудь внешнего сайта? Функция require поддерживает синтаксис вида require("https://github.com/espruino/EspruinoDocs/blob/master/devices/PCD8544.js");, а WebIDE для поиска модулей онлайн, по умолчанию используется https://www.espruino.com/modules.
  • Следующий блок кода отвечает за поднятие точки доступа с именем EspruinoAP и паролем 0123456789. В случае успешного запуска в консоль выводится соответствующее сообщение.
  • Функция onPageRequest — собственно сам веб-сервер. В этой функции разбирается адрес и проверяется, что нужно сделать, в зависимости от запроса:
    • если загружается первая страница — /, то вернуть 200-й заголовок и сообщение типа text/html «Hello, ][aker!», в обрамлении HTML-тегов;
    • если загружается страница включения — /on, то вернуть 200-й заголовок и сообщение Enable, а также включить светодиод. Заметим, что используется привычная Arduin’щикам функция digitalWrite(pin, value);
    • небольшое отличие в случае страницы выключения — /off, для выключения светодиода используется не функция digitalWrite(pin, value), а метод write(value);
    • во всех остальных случаях возвращаем ошибку «404 — Page Not Found».
  • А последняя строка собственно поднимает сервер, с внутренней функцией onPageRequest, на 80-м порте.

Важно заметить, что мы можем возвращать различный контент: обычный текст, HTML, XML и так далее.

Продолжение доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все материалы на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Вариант 2. Купи один материал

Заинтересовала информация, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для материалов, опубликованных более двух месяцев назад.


7 комментариев

  1. baragoz

    04.05.2018 at 13:13

    Все круто, но я бы вот про выбор биометрического датчика для входной двери в квартиру почитал. Умный дом — это ж не только розетки и лампы. Плюс управление кондиционером к лету, чтобы к приходу с работы делал +21

  2. Garik93

    05.05.2018 at 08:18

    Отличная статья — спасибо.

  3. keeper-volok

    05.05.2018 at 12:54

    Да ну не устарел Arduino, не надо. Это продукты под разные задачи с совершенно разной стоимостью.
    То, что атмегу пытались нагрузить «малиновыми» задачами — это проблема не атмеги ))

    • i_am_kisly

      06.05.2018 at 08:44

      Это болезнь современного DIY сообщества: нагружать атмегу задачами малины и малину задачами атмеги. А ведь всё начиналось с arduino: «микроконтроллеры для домохозяек», «долой asm»..

  4. null overflow

    06.05.2018 at 16:45

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

  5. ge0gr4f

    24.05.2018 at 22:42

    Хорошая статья! Espruino наше всё! 🙂 Хоть ESP32 и проигрывает местами STM32 в нём есть своя прелесть. +SD +GPS и мобильный треккинг/маппинг Wifi точек у вас в кармане!
    wifi.scan((ap)=>console.log(ap)) 😉

  6. Str4n1x

    13.07.2018 at 00:15

    Залил первый скетч в ESP32 и нашел багу в статье: на /on надо делать digitalWrite(D2, true); а на /off D2.write(false). Иначе логика обратная. А так, да, зажигает синий светодиод. Плата ESP-WROOM-32 Dev Board.

Оставить мнение

Check Also

Сети для акулы. Разворачиваем Snort и пишем правила

Атакующие ломают даже самые защищенные системы, а администраторы месяцами не замечают злоу…