Работа с микроконтроллерами в OpenBSD

Контроллер esp8266

В качестве хорошего примера, разберём создание gemini капсулы на базе микроконтроллера esp8266 - это один из первых мк с wifi и самый доступный по цене, за что его и полюбили многие DIY-щики. Чип работает на 80Mhz но может разгонятья до 160, RAM около 100Кб, ROM обычно 2-4МБ. Этого хватает для работы простого gemini-сервера на минималках.

Для этой цели был заказан самый дешевый МК на маркетплейсе с самой быстрой доставкой до самого близкого ПВЗ. Им оказался ESP-12F c usb-c.

Есть готовый проект:

https://github.com/Astrrra/ESP8266GeminiServer

Он написан в Arduino IDE которой нет в OpenBSD.

Но обсд не была бы обсд, если бы там не было простого решения данной проблемы.

Подготовка

Установка необходимых пакетов:

Подключение и права

После подключения МК по usb нужно посмотреть dmesg

Тут видно что плата подключена и доступна через /dev/ttyU0,

это устройство должно быть указано далее в Makefile проекта

Пользователя нужно добавить в группу dialer:

иначе для прошивки понадобится doas

Некоторые команды makeEspArduino

Главный командный центр находится в файле:

/usr/local/share/makeEspArduino/makeEspArduino.mk

Основные его команды:

(Ctrl-] - выход)

info показывает настройки, используемые при сборке проекта:

Настройки проекта

Настройки сборки "по умолчанию" прописаны в файле:

/usr/local/share/makeEspArduino/makeEspArduino.mk

Настройки, специфичные для разных моделей плат, перечислены в файле:

/usr/local/share/arduino/hardware/espressif/esp8266/boards.txt

Моего ESP-12F в писке не оказалось, но там был ESP-12E, который является ближайшим его родственником, по этому выбрал nodemcuv2.

Чтобы задать свои значения, нужно создать свой Makefile:

может потребоваться переопределить значения переменных:

Далее будет достаточно скопировать этот Makefile в директорию любого arduino-проекта рядом с .ino файлом и запустить gmake run.

Gemini server

Сертификат и настройки

Генерация сертификата для gemini.domain.com на 10 лет:

После этого нужно вставить содержимое key.pem и cetr.pem в config.h

И тамже прописать настройки wifi и домен.

В файле gemserv.ino в строке 38 поставить скорость порта, такую же как на хосте (по умолчанию 115200):

littlefs

Для работы проекта Astrrra/ESP8266GeminiServer потребуется старая версия утилиты mklittlefs.

путём проб и ошибок выяснилось что в пакетах OpenBSD эта утилита слишком новая для данного проекта.

В результате получится нужная версия mklittlefs.

Скопируйте mklittlefs в папку проекта ESP8266GeminiServer.

Финальный Makefile

При копировании не забудьте что в Makefile нужны tab-ы

Еще можно добавить/отредактировать файлы в data/gemini (содержимое капсулы)

Сборка и прошивка

Прошивка состоит из двух частей: сам код и образ littlefs.

Сборка, прошивка и запуск с выводом через последовательный порт:

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

Если видно ip адрес полученный по wifi, то всё ок!

Если ip не появился, то попробуйте перезагрузить контроллер, обычно на плате есть кнопка reset.

Выход из монитора последовательного порта: ctrl-]

Cборка и прошивка образа littlefs:

Если все сделано верно, то капсула станет доступной по ip, который было видно после `gmake run`

Далее при редактировании содержимого капсулы не нужно перепрошивать всё, достаточно только `gmake flash-fs`.

Проверить можно любым клиентом, но из-за медленной выдачи некоторые клиенты глючат.

Проверка:

Заключение

Если у вас получилось проделать выше описанное и есть постоянный ip адрес или настроен на роутере DynDNS, то вы можете пробросить порт 1965 и поделиться ссылкой с друзьями (не забудьте прописать ваш домен в config.h и при генерации сертификата).

Моя домашняя капсула на esp8266 (временно не доступно)

Благодарности

Спасибо:

⬅ Назад