Начало работы с Espruino и JavaScript на ESP32 с платой ESPino32

Venus Supply Co., Ltd, более известная как ThaiEasyElec , — тайская компания, специализирующаяся на продаже встраиваемых систем и плат разработки, а также предоставлении соответствующих услуг. Компания предоставила для тестирования свою новейшую плату ESPino32 на базе модуля Wi-Fi и Bluetooth ESP-WROOM-32 от Espressif. Хотя плата поддерживается в Arduino-esp32 , а Arduino с модулем ESP32-Bit и платой ESP32-T ранее уже тестировались , после изучения аппаратной части было решено загрузить альтернативную прошивку: Espruino , позволяющую программировать на JavaScript через последовательную консоль или веб-среду разработки.

Распаковка и пайка ESPino32

Плата поставляется с четырьмя гнездовыми разъемами и наклейками для обозначения портов ввода-вывода.

Увеличить

Плата содержит модуль ESP-WROOM-32, выводит сигналы через четыре 10-контактных разъема, оснащена микросхемой CP2104 для последовательной отладки через micro USB, двумя кнопками (сброс и программа), пользовательским светодиодом на IO16 и перемычкой для выбора питания (стабилизированное от micro USB/Vin или от батареи Vbat).

Увеличить

Для интеграции в проект плату можно использовать без разъемов для экономии места, но при работе с макетной платой рекомендуется припаять гнездовые разъемы. Процесс упрощается возможностью размещения платы поверх разъемов во время пайки.

Увеличить

После пайки на все разъемы наносятся стикеры, что упрощает подключение перемычек.

Теперь плату можно установить на макетную плату, подключить внешний 5В светодиод к пину 16 и подсоединить кабель micro USB к компьютеру для питания и доступа.

Увеличить

Гнездовые разъемы обеспечивают два рабочих ряда контактов с каждой стороны платы. При использовании штыревых разъемов дополнительный ряд теряется, за исключением более узких плат вроде   ESP32 Pico Core board .

Вывод при подключении платы к компьютеру с Linux:

[ 7809.352096] usb 5-3: new full-speed USB device number 4 using ohci-pci
[ 7809.547130] usb 5-3: New USB device found, idVendor=10c4, idProduct=ea60
[ 7809.547134] usb 5-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 7809.547137] usb 5-3: Product: CP2104 USB to UART Bridge Controller
[ 7809.547140] usb 5-3: Manufacturer: Silicon Labs
[ 7809.547142] usb 5-3: SerialNumber: 013CF2B2
[ 7809.551174] cp210x 5-3:1.0: cp210x converter detected
[ 7809.561307] usb 5-3: cp210x converter now attached to ttyUSB0

Краткое руководство по Espruino для ESP32

На странице поддержки ESP32 в Espruino перечислены рабочие функции:

  • onewire
  • аппаратный SPI
  • аппаратный I2C
  • DAC
  • ADC
  • Serial
  • WiFi — клиент и точка доступа

и нереализованные возможности:

  • OTA-обновления прошивки.
  • Bluetooth и BLE

Bluetooth недоступен, но WiFi и GPIO функционируют. Далее приведены адаптированные инструкции со страницы (часть оригинальных устарела или неработоспособна).

Сначала необходимо загрузить последнюю версию Espruino (в данном случае — 1.94).

Прошивки Espruino для различных плат – Увеличить

ZIP-архив содержит прошивки для всех поддерживаемых платформ, включая оригинальные платы Espruino, Puck.js , Micro::bit, OlimeXino, Raspberry Pi, отладочные платы STM32 и другие.

Для установки требуется каталог espruino_1v94_espruino с тремя бинарными файлами (bootloader.bin, espruino_esp32.bin, partitions_espruino.bin) и README_flash.txt, описывающим обновление в Windows (flash_download_tools_v3.4.4.zip) или Linux (esptool.py из ESP-IDF SDK). Для Ubuntu 16.04 выбран второй вариант, но большинству пользователей достаточно установить esptool через pip для Python 2.7/3.4+:

sudo apt install python-pip
sudo pip install --upgrade pip
sudo pip install esptool

при наличии предыдущих установок esptool для плат esp32/esp8266 обновите утилиту:

sudo pip install esptool --upgrade

В данном случае устаревшая версия esptool (v0.4.6) была установлена через apt при работе с платой NodeMCU и удалена:

sudo apt remote esptool

После установки актуальной версии esptool можно прошивать извлеченный образ:

esptool.py --chip esp32 \
	--port "/dev/ttyUSB0" \
	--baud 921600 \
	write_flash \
	-z \
	--flash_mode "dio" \
	--flash_freq "40m" \
	0x1000 bootloader.bin \
	0x10000 espruino_esp32.bin \
	0x8000 partitions_espruino.bin

Процесс завершился успешно с первой попытки. Журнал установки:

esptool.py v2.1
Connecting........_
Chip is ESP32D0WDQ6 (revision 0)
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 12272 bytes to 7603...
Wrote 12272 bytes (7603 compressed) at 0x00001000 in 0.1 seconds (effective 961.3 kbit/s)...
Hash of data verified.
Compressed 929680 bytes to 516107...
Wrote 929680 bytes (516107 compressed) at 0x00010000 in 9.3 seconds (effective 802.6 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 136...
Wrote 3072 bytes (136 compressed) at 0x00008000 in 0.0 seconds (effective 6143.7 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting...

На этом этапе, теоретически, вы можете установить Espruino Web IDE chrome extension , нажать значок подключения в левом верхнем углу, выбрать порт /dev/ttyUSB0 и начать программировать.

Нажмите для увеличения

Espruino Web IDE также отобразится в Dash Ubuntu 16.04. Однако на практике существует известная проблема: при первом подключении через Web IDE соединение установить не удастся, что и произошло. Обходное решение — сначала подключиться через screen или minicom в терминале:

minicom --baudrate 115200 --device /dev/ttyUSB0

Затем можно запустить пример «Hello World»:

>console.log('Hello ESP32!');
Hello ESP32!
=undefined
>

Вывод «=undefined» может смущать, но разработчики Espruino поясняют, что это ожидаемо:

Это нормально и указывает результат последней операции, которым в данном случае является возвращаемое значение console.log, всегда равное undefined.

Следующий шаг — настройка подключения WiFi к вашей точке доступа:

var ssid = 'YOUR_SSID';
var password = 'YOUR_SSID_PASSWORD';

var wifi = require('Wifi');
wifi.connect(ssid, {password: password}, function() {
    console.log('Connected to Wifi.  IP address is:', wifi.getIP().ip);
    wifi.save(); // Next reboot will auto-connect
});

Замените «YOUR_SSID» и «YOUR_SSID_PASSWORD» на данные вашего WiFi-роутера. При успешном подключении вскоре появится сообщение:

Connected to Wifi. IP address is: 192.168.0.112

Команда wifi.save() обеспечит постоянное подключение, поэтому плата будет автоматически переподключаться к роутеру после каждой перезагрузки.

Теперь вернитесь в Espruino Web IDE, нажмите значок Setup в правом верхнем углу, перейдите на вкладку Communications и введите IP-адрес (в моём случае 192.168.0.112) в поле «Connect over TCP Address«.

Нажмите для увеличения

Плату уже не обязательно подключать к компьютеру — достаточно питания от батареи или USB-адаптера. При повторном нажатии на значок Connect появится опция выбора TCP/IP: 192.168.0.112.


Я создал простой код мигания светодиодом в правой части окна и нажал кнопку Upload (третья кнопка посередине) для загрузки и запуска программы:

var  on = false;
setInterval(function() {
  on = !on;
  digitalWrite(D16, on);
}, 500);


D16 подключён к светодиоду IO16 на плате и внешнему светодиоду. IO16 активируется при низком уровне D16, а мой светодиод — при высоком уровне каждые полсекунды. Результат показан в демонстрации ниже.

Однако при перезагрузке платы программа не запустится автоматически. Для постоянной работы добавьте команду save в конец кода:

save();

Вывод в консоли будет выглядеть так при нажатии кнопки Upload .

Erasing Flash..................
Writing.....
Compressed 80000 bytes to 2998
Checking...
Done!

После выключения и включения платы демо-светодиод возобновлял работу автоматически без повторной загрузки кода из IDE.

На этом этапе начали возникать странные проблемы: сбои подключения, сообщения «module http not found» или «module wifi not found» при разработке веб-сервера.

Возможно, перед выполнением save требуется включить код постоянного WiFi-подключения. Иногда функциональность сохранялась, но для стабильности тестов я перешёл на подключение через micro USB в Espruino Web IDE.

Чтобы использовать ESPino32 в качестве веб-сервера, создайте точку доступа и возвращайте «Hello World» следующим кодом:

function processRequest (req, res) {
  res.writeHead(200);
  res.end('Hello World by ESPino32');
}
var ssid = 'YOUR_SSID';
var password = 'YOUR_SSID_PASSWORD';
var port = 80;
var http = require('http');
var wifi = require('Wifi');

wifi.connect(ssid, {password: password}, function() {
  http.createServer(processRequest).listen(port);
  console.log('Web server running at http://', wifi.getIP().ip,':',port);
});

После нажатия Upload веб-сервер стал доступен в Firefox.

Основное преимущество Espruino перед Arduino IDE — скорость тестирования кода без компиляции бинарного файла и прошивки. Дополнительное преимущество для веб-разработчиков — отсутствие необходимости изучать C, используемый в Arduino IDE.

Для работы с другими интерфейсами (SPI, I2C, ADC…) обратитесь к документации Espruino ESP32, но учтите: примеры blink и веб-сервера могут не работать (неизвестные переменные, пропущенные точки с запятой). Рекомендуется изучить справочник API при неработоспособности примеров. Компания Pur3 Ltd сосредоточена на разработке собственных платформ (Puck.js, Espruino), и соответствующая активность выше в форумах . ESP32 может быть не лучшей платформой для изучения JavaScript на микроконтроллерах из-за сложностей, но подходит для экспериментов.

Благодарю ThaiEasyElec за предоставленный образец ESPino32. Плата доступна локально и глобально за 590 THB / ~$16 плюс доставка на их сайте с документацией на английском и тайском. Для покупателей в Таиланде доступны дополнительные скидки и бесплатная доставка через приложение LINE.

Выражаем свою благодарность источнику, с которого взята и переведена статья, сайту cnx-software.com.

Оригинал статьи вы можете прочитать здесь.

0 0 votes
Article Rating
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 Комментарий
Oldest
Newest Most Voted
Inline Feedbacks
View all comments