В данной статье я хочу рассказать об одной интересной плате LuckFox pico. Она представляет собой нечто среднее между микроконтроллером и полноценным компьютером. На плате установлен полноценный ARM-процессор от Rockchip, и на ней запускается полноценный Linux. При этом по габаритам и цене данная плата сопоставима с микроконтроллерами. Её цена начинается от 600р за младшую версию.

Описание платы

На данной плате расположен одноядерный процессор с 32-битной архитектурой ARMv7. Оперативная память сразу встроена в процессор, и у данного производителя есть версии на 64, 128 и 256 МБ, у них различаются маркировки процессора: RV1103, RV1106G2 и RV1106G3. На моей плате Luckfox Pico Max также есть 256 МБ флэш-памяти и слот для микро-SD, на младших моделях встроенной памяти нет. Вообще, количество версий плат данной серии — какое-то невообразимое множество, и я выбирал плату наугад, а разобрался в них уже после покупки.

У процессоров данного семейства имеется блок NPU для нейронных вычислений, и также на плате есть параллельный интерфейс для подключения камеры. Это говорит о том, что данные платы ориентированы на распознавание изображений. Например, можно сделать систему сортировки деталей для какого-нибудь конвейера на производстве. Или можно сделать устройство, определяющее присутствие человека или кота в комнате. Конкурентом данной платы в таких задачах является микроконтроллер ESP32-P4, у них схожая цена и производительность.

Мне задачи распознавания не особо актуальны, и у данного производителя есть более интересные модели линейки Lyra или Nova. У Lyra три ядра и встроенный микроконтроллер Cortex-M0. Визуально они не отличаются, и, как я говорил ранее, разобрался в них я уже при получении платы.

Недостатком данных плат является отсутствие Bluetooth и WiFi. Они есть в более дорогих версиях, и также их можно подключить по USB, но тогда пропадает концепция дешёвой платы, которая могла бы заменить микроконтроллер.

У моей платы Pico Max есть порт Ethernet, его наличие мне не понятно. Через него нельзя запитать плату, и всё равно придётся подключать USB или как-то иначе подводить питание. Также на плате реализована возможность питания от аккумулятора. Это достаточно полезная опция. Я замерял потребление от USB, и оно оказалось в диапазоне от 10 до 100 мА в зависимости от нагрузки. Без проблем получится обеспечить 10 часов автономной работы даже с совсем крохотным аккумулятором.

На плате присутствует только один USB-разъём. Он может работать в двух режимах. По умолчанию при подключении к компьютеру плата определяется как виртуальный Ethernet, через который к ней можно подключиться. Это оказалось очень удобно: подключил один USB — и можно полноценно работать с платой. Также USB можно перенастроить в режим хоста, и тогда к плате можно будет подключать обычные USB-устройства. При зажатии клавиши boot через данный USB происходит процесс загрузки прошивки во встроенную флэш-память.

Форм-фактор платы похож на Ардуино. На выводы выведены порты GPIO и различные интерфейсы: SPI, UART, I2C, PWM, ADC. По UART можно общаться с платой через консоль или прошивать её, когда USB недоступен. У платы нет какого-либо интерфейса для подключения монитора. Но можно подключить маленький экран по SPI и вручную выводить на него картинку, как это происходит в микроконтроллерах.


Какие преимущества даёт мини-компьютер на Linux по сравнению с микроконтроллером? Основное — это наличие огромного количества готовых библиотек и утилит. Например, реализация сетевого протокола и веб-сервера. Можно сделать холодный кошелёк для криптовалюты, веб-интерфейс для взаимодействия с ним, а на GPIO вывести кнопку подтверждения операции. Ещё одно преимущество — возможность выполнять управляемый код и скрипты. В микроконтроллере чаще всего нет выбора, и почти всегда используется C++.

Недостатков у такого решения тоже много. Сложность работы с Linux и слабая поддержка и документация от китайцев. Отсутствие программной поддержки может поставить крест на использовании платы, независимо от её характеристик.

Тестирование

Китайцы нам предоставили на выбор два дистрибутива для этой платы.

BuildRoot

Первый — это легковесный BuildRoot Linux. Его можно прошить во внутреннюю память или на microSD-карту. Данный дистрибутив заточен под встраиваемую электронику. Он не предполагает установку компонентов и какие-либо изменения после прошивки. Его нужно компилировать и настраивать под себя, для этого на сайте LuckFox есть SDK.

По умолчанию в плату уже прошит базовый вариант BuildRoot Linux. В нём доступны Bash-скрипты и Python. Также в нём определяется дополнительная SD-карта, её можно вставлять даже на горячую. Плату можно использовать в таком варианте, просто закинув на неё скрипты через SSH или сразу на SD-карту. При этом из скриптов можно работать с портами GPIO и интерфейсами. Взаимодействие с ними реализовано через псевдофайлы. Это стандарт для одноплатных компьютеров.

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

Ubuntu

Второй вариант — установить образ Ubuntu, сделать это можно только на SD-карту. Образ Ubuntu заранее подготовлен производителем, и собрать его самостоятельно нельзя. Прошивка модуля и SD-карты осуществляется через проприетарную утилиту от производителя платы. Использовать её страшно, репутация у китайцев не лучшая, и альтернативы нет. Это серьёзный недостаток. Установка Ubuntu производится на карту отдельно от платы, процесс достаточно простой. При установке карты в плату она автоматически начинает грузиться с неё.

После установки Ubuntu займёт на карте более 3 ГБ. Я использовал карту на 4 ГБ, и у меня осталось около 600 МБ. Рекомендую использовать карты минимум на 8 ГБ. Мне пришлось отключить swap-файл, чтобы хватило места на все мои эксперименты, по умолчанию он был 1 ГБ.

В Ubuntu у нас сразу доступен менеджер пакетов apt, и мы можем устанавливать дополнительные программы, как и в настольной версии. Поскольку у нас не самая популярная архитектура процессора ARM32, многих программ может не быть, а что-то может не работать или не поддерживаться. Для установки программ на плату надо провести интернет. При подключении по USB придётся перевести плату в режим динамического IP-адреса и настроить маршрутизацию.

Первое, что я попробовал поставить, — это роутер I2P. На удивление, он сам поставился и запустился без каких-либо проблем. Правда, версия I2P оказалась достаточно старая. Это очень здорово. Через него можно соединить две таких платы в разных сетях. Например, можно на даче поставить реле на обогреватель, а дома сделать выключатель, через который можно включить обогреватель перед поездкой на дачу. Реализовать подобную задачу на голом микроконтроллере будет не так просто.

Второе, что я установил, — это среду .NET для запуска приложений на C#. Обычным способом она не устанавливалась, но у Microsoft на сайте был специальный скрипт для встраиваемых систем на ARM. В итоге всё легко установилось одной строчкой. Я попросил чат GPT написать простенький тест скорости операций для float и double. Программа запустилась и корректно отработала и на PC, и на плате. Судя по выводу, ядро RV1106G3 примерно в 10 раз слабее ядра PC Intel 13700H. Заметно медленными оказались операции с тригонометрией.

Затем я попробовал управлять выводом GPIO. Сначала просто помигал ножкой с интервалом в секунду. Всё получилось, только программу пришлось запускать с sudo-правами. Я попробовал повысить частоту мигания до 500 Гц, процессор справился, но местами стали заметны временные пропуски до 15 миллисекунд. Это связано с тем, что кроме моего кода на одном ядре ещё много чего крутится. Особенно сильные задержки проявляются при параллельном общении с платой по SSH. На максимальной скорости у меня получилась частота мигания около 7 кГц.

Также я попробовал более сложную программу. Создал базовое Web-приложение на Blazor Server для C# и добавил на кнопку взаимодействие с GPIO. Всё заработало, у меня получился простейший web-интерфейс для работы с портом.

Вывод

Плата оправдала мои ожидания. Она хорошо подходит для различных простых самоделок. За небольшую цену можно пользоваться мощными инструментами. Сразу становятся доступны различные сетевые протоколы, выполнение различных задач по расписанию, логирование больших объёмов информации.

Из недостатков стоит отметить отсутствие WiFi, его очень не хватает для создания простых датчиков с web-интерфейсом на базе данной платы.

Для каких-то серьёзных проектов я бы не стал использовать данный одноплатник, слишком сильно всё завязано на китайский софт и мало оперативной памяти. В ресурсоёмких задачах я бы лучше доверился более дорогим, но проверенным решениям, а для простых использовал микроконтроллер.