Репитеры MeshCore\Meshtastic на RP2040

По большечасти про свои поделки и свои платы.

Почему RP2040?

А какой у нас выбор? Некоторое количество различных версий ESP32, nrf52840, все? Нет, еще вот появляются STM32WLE, всё? RP2040 самый стабильный и понятный из них, прошивается закидыванием прошивки на виртуальный диск, нет проблем с бутлодером как у nrf52840, в целом нет всех проблем nrf52840, начиная от отвратительно сделанного модуля. ESP32, это штука изначально для интернет вещей, с вайфаем и прочими плюшками, которые не очень хорошо сочетаются с нашей задачей, нужны сторонние штуки для перепрошивки и конфигурации, репитер мешкора конфигурируется через консоль, UART, телефон к нему не подключить. С мешстастиком ситуация немного иная, там ограничений меньше, вайфай\bt там актуален, но зачем оно на крыше.

У RP2040 мы имеем правильную разводку питания модуля и периферии, в случаи оригинального модуля, отсутствие ненужного лишнего на модуле, вроде бесполезной зарядки батареи аж на 100ма, в случаи модуля на nRF. Каких либо радиоинтерфейсов, телефон и вайфай к репитеру не подключить и зачем, нет необходимости в UART мосте для прошивки, настройки репитера и отладки в случаи ранних версий ESP. Имеем производительность более чем достаточную для наших целей и меньшее в сравнении с ESP потребление электричества, не nRF52, но приемлемую для постройки автономных с питанием от солнечной панельки.

Недостаток у RP2040, очень плохая поддержка софта в meshcore, оно практически не развивается, ибо развивать там некому и мало что можно. Дописывать поддержку датчиков на I2C пришлось самому, поддержки банального OLED дисплея там так и нет, не то чтобы оно там было нужно, хотяб ошибки исправляли, но нет. Прошивки под свои платы на рп, нужно собирать самому, как и под многие похожие МК, приоритет там на коммерческие платформы. На мешстастике все сильно лучше, там RP2040 поддерживается ничуть не хуже ESP, и RP2350 там тоже есть, в отличии от мешкора.

Это все конечно с позиции репитеров и не актуально для клиентских устройств.


Pico.mWatt v0.1

То с чего всё началось. Название подсказали в чатике, а идея платы: Это классический солнечный репитер с лорой на RA62 и линейной зарядкой на CN3163, плата идеалогически близка к fakeTec solar на nRF. Так же можно сменить CN3163 на модуль с CN3791

Тоже подключение солнечной и литиионной батареи, но зарядник не завязан на USB микроконтроллера, при подключении внешнего питания цепь зарядки и батареи отключается.

Так же присутствует супервизор MAX809T, и с RP2040 он работает куда лучше nRF, но с ним связан не большей баг, MAX809T смотрит за напряжением на батареи, а при подключении внешнего питания без подключенной батареи MAX809T оказывается обесточен и плата не запускается, решается конечно подключением батареи или питанием на вход зарядки. Есть мелкие недочеты вроде не верных номиналов делителя напряжения и прочих опечаток.

В целом плата получилась, но нужно всё переделать. Плату удобно этажерить в кросбенд репитер назначив Serial2 на ноги с I2С. Мы лишаемся датчиков, которые на тот момент и так не работали, но имеем возможность использовать те GPIO для других целей. Питание от батареи можно соединить выходами под модуль на CN3791.


Pico.Watt v0.1

Я тогда бросил попытки сделать одну универсальную плату которая подойдет всем под все задачи, и все возможные лора модули. Данная железка под модуль e22-900m30s и внешнее питание. Есть одна ошибка в схеме.

Тут оно так же может работать от USB, в случаи оригинального RP2040, отключая внешнее питание, но использовать так не рекомендуется. Лора модуль может потреблять в режиме передачи более 600ма, внешняя цепь питания предпочтительна.

Так же есть мелкие опечатки на шелкографии и номинал делителя вольтметра тоже не верен, но тут он не то что бы актуален. Вналичии внешнее управление антенным переключателем в лора модуле, по аналогии с RA62, но об этом рассказано в видео. Ошибка в защите от переполюсовки, схема актуальна для батареи с напряжением менее 5 вольт, а вот тут на вход нужно подавать 9 вольт, которые идут на затвор транзистора Q1, и он соответственно со спецэфектами выпускает волшебный дым. Во второй версии платы исправлено.


Pico.Watt v0.2 Сross-band repeater

Исправлено и дополнено.

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

На обратной стороне есть возможность поменять TX-RX второго UART интерфейса местами.

Также исправлена ошибка с защитой от переполюсовки, мосфет сменил на диод в встречном направлении, при неправильной полярности спецэфекты могут случится уже у блока питания и\или, этого диода, который вероятно спасет плату от дальнейшего выгорания.

Платы, и даже иногда собранные, доступны на авитах https://www.avito.ru/8163622442

Софт

Платы распиновкой официально совместимы с rpi_picow, это то что заработает из официальных источников, но к этой версии есть вопросы.

в platformio.ini есть деректива -D SX126X_CURRENT_LIMIT=130 ограничивает потребляемый ток лоры до 130ма, когда как во всех других версиях лимит указан как -D SX126X_CURRENT_LIMIT=140. Исправить это конечно не долго, но так же там имеются некие зачатки работы с WiFi который есть на плате Pico W, которых у нас на обычной Pico, нет.

Поэтому за основу была взята waveshare_rp2040_lora с переписаными GPIO как у rpi_picow.

Работа с I2C датчиками

Из коробки в мешкоре ничего c I2C на RP2040 не работает, вообще, в любых версиях плат. С мешстастиком все сильно проще, там проблем с этим нет, дисплей точно работает. А вот с мешкором пришлось разбираться как там всё устроенно и доделывать самому. В этом месте официальные прошивки под RP окончательно теряют всякий смысл, да rpi_picow заработает как репитер на моей плате, без датчиков, с ограничением тока и тд. С STM32WLE5 кстати похожая проблема, но о STM в другой раз, общий принцип мешкора, если хотим делать что то свое, прошивку нужно тоже делать свою, да-основываясь на чем то, но свою, иначе не полетит.

Не очень хочется расписывать как там все в коде устроенно. Нужно избавится от методов SensorManager sensors; заменив их на EnvironmentSensorManager sensors;, как там что устроенно и где нужно можно подсмотреть в версии для ESP32, LilyGo_TLora_V2_1_1_6 например, там где датчики давно и успешно работают, конечно нужно не забыть добавить ${sensor_base.build_flags} и ссылки на библиотеки ${sensor_base.lib_deps} и даже добавить директивы для GPIO на которых I2C.

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

Более свежие прошивки пока что будут на бусти boosty.to/arduinolab пока не найдется более удобное место.


Итого

На данный момент нет весомых аргументов против PR2040 в качестве репитера, Памяти достаточно под весь набор датчиков\сенсоров и еще остается.

Недостаток памяти это миф, а производительности хватает чтоб тянуть doom, Работу с датчиками дописал, кросбенд работает, потребление на уровне производительности, у nRF меньше, но и меньше ESP. Недостаток в отсутствии возможности подключить его к телефону? репитер у мешкора и так не подключить, он конфигурируется из консоли, сеть репитеру не нужна. Кароче у RP есть своя ниша, и эта ниша репитеры.


Мешстастикам

Что то про них забыли совсем. Там есть официальная прошивка под тот самый
rpipico, без соплей для вайфай и тд, не то чтобы я ей пользовался и проверял, но помню там все работало, а точнее почти всё. После прошивки мешкора, но перед прошивкой мешстастика желательно очистить рп2040, https://github.com/Gadgetoid/pico-universal-flash-nuke/releases и потом уже заливать прошивку. Есть странности с вебконфигуратором, он может не сохранять настройки, а точнее сохранять только после того, как было отправлено какое либо сообщение в эфир, какаята беда с открытием порта.


Вот прошивка у которой уже при старте выбран регион EU_868 и с ограничением мощности до 8дбм, для 33S, деректива #define SX126X_MAX_POWER 8 добавлена, но работа не проверялась.