LINUX.ORG.RU

Как писать программы для esp32?

 ,


3

5

Как-то так сложилось, что в руки попала esp-wroom-32 и попросили для неё написать программы.

Есть небольшой опыт программирования на ассемблере для avr: работа с прерываниями по таймеру и взаимодействие по UART. Для этого достаточно:

  • текстового редактора
  • avr-gcc
  • avrdude
  • make (опционально)

Для stm32 на LOR’е опубликован шикарнейший цикл статей. Спасибо, @vbr! На практике, признаюсь, пока не пробовал.

А как быть с esp32? В официальной инструкции рекомендуется использовать ESP-IDF (integrated development framework, если правильно помню). Я попробовал загрузить базовые примеры («Привет, Мир!» и помигать диодиком) и пришёл в ужас от того, как эта Python поделка секунд >10 это дело загружает.

Также попробовал это дело через Arduino IDE, только базовые примеры сам уже написал. Гораздо быстрее всё грузится, но всё равно – такое себе.

Какой необходимый минимум программ, чтобы работать с esp32?

Ответ на: комментарий от pihter

Было, только действительно не за доллар. У TI в процессорах AM335x.

Еще была во многом похожая штука у cypress в FX2LP, оно там попроще, но тоже программируемый автомат ввода-вывода.

anonymous
()
Ответ на: комментарий от anonymous

Тут скорей как в басне про слона и трех слепцов, основная аудитория Лора кроме аврок и не видела, а не то что тыкала нихрена. Отсюда и такое неприятие жестких помоев на очередную «истину»

anonymous
()
Ответ на: комментарий от anonymous

Если не секрет, то где еще есть подобное, именно чтобы был отдельный конечный автомат для ввода/вывода. А то я только знаю PRU который есть у TI в их разных процессорах.

anonymous
()
Ответ на: комментарий от anonymous

в процессорах AM335x.

На самом деле во всей линейке OMAP Sitara. Начиная с ранних L138/AM18x и вплоть до AM65x.

Да, PRU штука мощная. И система команд там побогаче будет — без пяти минут DSP. Но самих ядер мало — всего пара штук на камень.

Но увы, с ней та же беда, что и с ESP32 — замороченные SDK и конфигурационный софт от TI. Докапывались до сути и применяли по назначению очень немногие. Хотя казалось бы, Beagle Bone не такая уж и экзотика.

anonymous
()
Ответ на: комментарий от James_Holden

Это всё правда, но я всё же замечу, что далеко не всем (а скорей даже почти никому) не нужен полновесный стек всего. Порой кастомный код выходит совсем не очень большим по размеру и выполняет все нужные функции. Я как-то писал свой «USB-стек». В кавычках, потому, что там кода реально строк на 500 вышло. Там все захардкоденные дескрипторы, там захардкоденные интерфейсы и тд. У меня всё получилось и я любопытства ради даже прогнал через специальный валидатор, всё ок, ну и на практике всё прекрасно работает. Альтернатива - взять реализацию «стека». И там совсем не 500 строк. Да, он гибкий, там поддержка любых дескрипторов, всяких изохронных эндпоинтов, какие-то там псевдо-ООП-классы, от которых можно унаследоваться. Ну как бы круто, но можно и без этого. И компилятор, к сожалению, чудес по элиминации мёртвого кода не делает.

Уверен, что и все эти WiFi + TCP/IP стеки можно реализовать, ну пусть не в 500 строк, но в разы меньше, чем предлагается из коробки. Выкинув поддержку неинтересного тебе лично, к примеру нет у тебя TCP в проекте, устраивает тебя UDP, который по сути даже и не стак, а так, нашлёпка поверх IP. Не нужен тебе IPv6. Не нужен тебе DHCP. И тд.

vbr ★★★★
()
Последнее исправление: vbr (всего исправлений: 1)
Ответ на: комментарий от anonymous

Старшие малинки ­— да, и впрямь оверпрайснутая проприетарь

А можно в этом месте поподробнее, пожалуйста, если возможно? Мне в общем интересно, что там и насколько открыто, ибо уже себе персонально решил взять чтобы потыкать.

Jullyfish
() автор топика
Ответ на: комментарий от V1KT0P

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

Это умеет и та же atmega328. Вообще, прикольно когда основная программа это просто «жужжалка»:

main: rjmp main

А все остальные действия выполняются по аппаратным прерываниям. Но не стоит так делать, если вызов прерывания подразумевает длительные действия.

Jullyfish
() автор топика
Ответ на: комментарий от Jullyfish

Это умеет и та же atmega328

Вообще мимо. Нет, так не умеет.

Для начала, как быстро может шевелить ногой та же mega328, даже разогнанная? А что, если будет четыре штуки таких мег вычислительных ядер, только на пару сотен мегагерц, параллельно работающих. Без арифметики, всего с десятком команд и парой регистров, но висящих на общей шине с армовыми ядрами, общим пулом на три десятка ножек и общей памятью с DMA. И код в них можно перегружать динамически, на лету.

https://www.youtube.com/watch?v=yYnQYF_Xa8g

https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf (раздел 3)

Можно нарулить хоть QSPI, хоть I2S, хоть I2C, да хоть чёрта в ступе с манчестером или MFM. Лишь бы фантазии и извилистости мозгов хватило.

anonymous
()
Ответ на: комментарий от Jullyfish

А можно в этом месте поподробнее, пожалуйста, если возможно? Мне в общем интересно, что там и насколько открыто, ибо уже себе персонально решил взять чтобы потыкать.

Pi pico - это первый микроконтроллере от команды raspberry pi. До этого они делали одноплатные компьютеры полноценные, способные запускать линукс.

Под старшими малинками, очевидно, имелись в виду они - их там целая линейка

pihter ★★★★★
()
Ответ на: комментарий от pihter

паяется в смд стиле на плату

Не понимаю, уточните, пожалуйста.

есть в модуле pico w

Pico W – целая плата.

Предоставляю дополнительные сведения, чтобы объяснить в чём проблема. Есть уже существующая технологическая линия. Уже спроектированы печатные платы, уже поставляются, уже печатаются для них и прочей периферии коробочки, т.е. уже есть ограничения по габаритам и технологии. Заменить один чип на другой, чуть-чуть скорректировав размеры и доплатить за чип условно 50р, на такую жертву ради меня готовы пойти.

По габаритам получается, что esp32 около 18x18мм. У RP235X размеры 7x7 и 10x10. Но нужен wifi/ble, куда его вставлять. Тот же CYW43439, который входит в состав Pico W по габаритам примерно такой же как esp32. Ну и его докупать надо.

Jullyfish
() автор топика
Ответ на: комментарий от Jullyfish

паяется в смд стиле на плату

Не понимаю, уточните, пожалуйста

Плата пики с задней стороны без деталей, а контактные площадки имеют не только отверстия для впаивания штырьков, но и метализированный выход на бок, что позволяет всю платку припаять к большой плате как smd-чип. У есп так же сделано: это же тоже не один чип, а маленькая платка

Гугли pi pico smd soldering да и я постил на прошлой странице картинки

pihter ★★★★★
()
Последнее исправление: pihter (всего исправлений: 1)

Какой необходимый минимум программ, чтобы работать с esp32?

Меньший чем для avr. (Пишу по памяти, дёргая код из другого проекта)

  1. установить среду

  2. в проекте нужны два CMake файла:

cmake_minimum_required(VERSION 3.16)

include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(mcu_software)

И внутри mcu_software:

idf_component_register(SRCS
     "main.c"
     INCLUDE_DIRS "."
     REQUIRES esp_driver_spi freertos
)

И вот такой командой всё компилится и прошивается:

idf.py --build-dir=builddir flash

Также всю их библиотеку можно использовать как наружную, с которой нужно самому линковаться. ВОзможность появилась относительно недавно, её я не проверял. Вспомню ссылку на это - напишу.

ahdenchik
()
Ответ на: комментарий от vbr

у этого чипа проприетарная архитектура процессора Xtensa, для которого нет открытых даташитов, поэтому с открытым тулчейном возможны нюансы.

У них есть ESP32c3 - это RISC-V

ahdenchik
()
Ответ на: комментарий от James_Holden

Вопреки названию, FreeRTOS не является операционной системой. Это очень небольшая гибко настраиваемая Сишная библиотека - планировщик процессов, пригодный для embedded

ahdenchik
()
Ответ на: комментарий от ahdenchik

Какой необходимый минимум программ, чтобы работать с esp32?

Меньший чем для avr

установить среду

Уже больше, чем для авр

в проекте нужны два CMake файла

Уже намного больше, чем для авр :)

pihter ★★★★★
()
Ответ на: комментарий от Jullyfish

Есть уже существующая технологическая линия. Уже спроектированы печатные платы, уже поставляются, уже печатаются для них и прочей периферии коробочки, т.е. уже есть ограничения по габаритам и технологии. Заменить один чип на другой, чуть-чуть скорректировав размеры и доплатить за чип условно 50р, на такую жертву ради меня готовы пойти.

Одни идиоты нанимают другого идиота. Вместо работы он занимается дрочкой на кол-во директорий и файлов, которые остаются вне esp32, т.е. не влияют на качество конечной программы.

Это Россия, детка.

futurama ★★★★★
()
Ответ на: комментарий от ahdenchik

Вопреки названию, FreeRTOS не является операционной системой

Простите?

Это очень небольшая гибко настраиваемая Сишная библиотека - планировщик процессов, пригодный для embedded

А что такое операционная система, по-твоему?

pihter ★★★★★
()
Ответ на: комментарий от pihter

Уже больше, чем для авр

Ок, GPIO светодиодом подёргать в случае если вы знаете/помните где расположена переферия можно просто скомпилировав голый C файл и прошив его ровно так же как везде. Я это проверял на c3.

Но смысла в этом мало - вся ценность в переферии же, и если вы начнёте её использовать то в лучшем случае напишите своё ESP-IDF

ahdenchik
()
Ответ на: комментарий от ahdenchik

Но смысла в этом мало - вся ценность в переферии же, и если вы начнёте её использовать то в лучшем случае напишите своё ESP-IDF

Странные вы: я же с этим и не спорю.

Чувак спросил: какой минимум софта

Ты ответил: меньше, чем для АВР и тут же перечислил больше, чем для АВР

Я говорю: брешешь, не меньше, чем для АВР

Ты: а какой смысл в МК без периферии? Вот поэтому и больше софта

Не кажется что ты обсуждаемый вопрос подменил? :)

pihter ★★★★★
()
Ответ на: комментарий от ahdenchik

А, вам поспорить? Тогда ладно

будто что-то плохое )

MS DOS это не OS, выходит? Планировщика в ней нет, ЕМНИП

А я и не утверждал что ОС это только там где планировщик. Ты сказал что фриртос – не ОС, а я спросил и что же тогда такое ОС?

Ну вот авторы фриртос, говорят что – ОС. А ты говоришь что – нет. Значит у тебя есть какое-то определение понятия ОС под которое фриртос не попадает, вот я и хотел бы определиться с понятиями ( потому как по-мне фриртос – вполне себе ОС ), стало быть мы расходимся в дефинициях

pihter ★★★★★
()
Последнее исправление: pihter (всего исправлений: 1)
Ответ на: комментарий от pihter

Нет не кажется

Если вы хотите буквоедствовать то это не ко мне

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

ahdenchik
()
Ответ на: комментарий от ahdenchik

Если вы хотите буквоедствовать то это не ко мне

Ну, как скажешь. Без обид )

я из лучших побуждений написал пример куда копать

Спасибо от имени сообщества. Без иронии

pihter ★★★★★
()
Ответ на: комментарий от pihter

А третий идиот не помнит как сам учился :)

Вспоминай.

Одному идиоту потребовалось 4 дня, чтобы сказать ГЛАВНОЕ:

Есть уже существующая технологическая линия …

futurama ★★★★★
()
Ответ на: комментарий от anonymous

Но увы, с ней та же беда, что и с ESP32 — замороченные SDK и конфигурационный софт от TI. Докапывались до сути и применяли по назначению очень немногие.

Тогда проще взять FPGA, можно цинк, там все проще и понятнее.

На самом деле во всей линейке OMAP Sitara.

А где еще? А то тут уверяли что подобное много где присутствует.

anonymous
()
Ответ на: комментарий от ahdenchik

FreeRTOS

Вообще RTOS аббревиатура от real-time operation system.

С другой стороны, есть, например, ROS (robotic operation system), но по факту операционной системой не является. Если память не отшибает, там это прям в документации где-то написано.

Jullyfish
() автор топика
Ответ на: комментарий от ahdenchik

Не надо путать авторов сайта с авторами FreeRTOS

А, ну окээээй. То-есть, по-твоему, «авторы сайта» (думаешь, они отдельных людей звали контент на сайт набивать?) написали большими буквами на главной что-то вопреки воле авторов фриртос? И, заодно, в название продукта тоже слоыва «операционная система» помимо воли авторов пропихнули? :)

По-прежнему жду пруфов

Закусывать надо! (с)

pihter ★★★★★
()
Ответ на: комментарий от pihter

Та я просто душню в твоём же стиле

«Авторы сайта» и «авторы FreeRTOS» это, скорее всего, пересекающиеся множества людей.

Но что нам с этого? Ведь в репозитории ESP-IDF больше 800 контрибьютеров. Так что, жду когда принесёшь результаты опроса на тему что есть OS среди этих 800 человек

ahdenchik
()
Ответ на: комментарий от ahdenchik

Та я просто душню в твоём же стиле

Слава богу )

«Авторы сайта» и «авторы FreeRTOS» это, скорее всего, пересекающиеся множества людей.

Да уж скорее всего )

Но что нам с этого?

Ну ты просил пруф что авторы считают свое творение операционной системой, я грю, так на главной их проекта в первой же строчке это написано, а ты теперь спрашиваешь что нам с этого? :)

Ведь в репозитории ESP-IDF больше 800 контрибьютеров. Так что, жду когда принесёшь результаты опроса на тему что есть OS среди этих 800 человек

А они тут при чем? Мы же про фриртос говорили. Ну давай я на остановке поспрашиваю.

Это же ты утверждал что фриртос – не ос. Я с этим не согласился, для весу приплел «авторов сайта фриртос», они тоже не согласны, и как бы я теперь должен что-то доказывать, хотя общепринятое мнение на моей стороне, а изначальное утверждение, которое противоречит общепринятому, выдвинул ты

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

pihter ★★★★★
()
Ответ на: комментарий от pihter

А они тут при чем?

Я имел ввиду FreeRTOS, конечно. У него n контрибьютеров, причём n больше количества авторов их сайта

хотя общепринятое мнение на моей стороне

Пруфы-то где?

Я вот уверен что большинство не считает FreeRTOS осью. Общепринятый в 2025 году смысл слов «операционная система» другой. Но это не остановит меня от контрибьюта во FreeRTOS, естественно.

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

Так это именно ты глумишься, а я гротескно показываю неуместность этого твоего буквоедства. Кажется, про MS-DOS вопрос ты проигнорил почему-то?

ahdenchik
()