В данной статье я хочу рассказать об одной интересной плате 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-интерфейсом на базе данной платы.
Для каких-то серьёзных проектов я бы не стал использовать данный одноплатник, слишком сильно всё завязано на китайский софт и мало оперативной памяти. В ресурсоёмких задачах я бы лучше доверился более дорогим, но проверенным решениям, а для простых использовал микроконтроллер.
Комментарии (32)

010011011000101110101
05.10.2025 13:52LuckFox он называется. (lack - недостаток, luck - удача) :-)
Очень-очень мало проектов на этих платах.

Guestishe
05.10.2025 13:52Интересно бы погонять именно npu на производительность и энергоэффективность.

xSVPx
05.10.2025 13:52Непонятна ниша. Вряд-ли можно получить быстрый рантайм с этим линуксом, питонами, шарпами итп. А если он не нужен, то есть миллион вариантов. Фигачить это в датчики умного дома.... ну такое себе, лично у меня нет уверенности что оно будет стабильно работать годами, а профит совершенно невелик по сравнению с каким-нибудь esphome его как по мне и нету вовсе. Какое-то применение наверняка можно найти, вопрос какое...

The_KOPACb
05.10.2025 13:52Ну, вы недооцениваете лень.
Писать на питоне под полноценным линуксом и на arduino c, не говорят уже о стм32 две очень большие разницы.
Да даже под esp32 попрбуйте вёбсервер поднять, там предел - 20 коннектов чтоли ( в том который из библиотеки какой-то стандартной )
Ещё же есть всякие видеокамеры. А если докинут Npu - можно будет крутить всякие opencv.

xSVPx
05.10.2025 13:52Моя лень говорит мне, что администрировать линуксы в десятках датчиков - это не то, что я хочу делать.
Рано или поздно весь этот адский оверхед конвертируется в совершенно неэфемерный гемморой.

Vilos
05.10.2025 13:52Второе, что я установил, — это среду .NET для запуска приложений на C#.
В этом месте у меня пердюмонокль произошёл....Зачем С#? Почему??? Для чего??? Вы же ж как бы в Linux, как Microsoft очутился тут? Причем далее по тексту никаких "экзотических" задач и не было...Чем вам классический gcc-то не угодил?? Ну и С++...зачем С# туда городить?
Я попросил чат GPT написать простенький тест скорости операций для float и double
Уверяю Вас, GPT с лёгкостью напишет код для GCC, не нужно было чуждую в Linux C# засовывать, это противоестественно.

HOMPAIN Автор
05.10.2025 13:52С с++ очень сложно для ARMv7. Как я понял там надо ставить виртуальную машину с линукс с компилятором, настраивать подключение к ней из среды. Потом отладку непонятно как вести, как-то через adb подключаться...
Я хотел попробовать, но там прям очень много всего нужно для этого сделать, не стоит того для DIY проектов.
CrashLogger
05.10.2025 13:52Что может быть сложного с С++ в Linux ? Можно прямо на этой плате все скомпилировать, если не хочется настраивать кросс-компиляцию на основной машине.

mapnik
05.10.2025 13:52Стоит, конечно.
"Мало оперативной памяти" на этой машинке вам именно из-за того, что вы пытаетесь работать с ней несвойственными операционному окружению методами. Виртуалки какие-то... Среда... adb, прости Г~ди...Про .NET хотел смолчать, но всё-таки: попробуйте то же самое моргание сделать на Си прямо по месту, на самой машинке, путем редактирования текстового файла blink.c тестовым редактором и последующей компиляции его путём запуска
gcc -O2 -o blink blink.c. Интересует разница в производительности моргания светодиодиком :)
HOMPAIN Автор
05.10.2025 13:52Попробовал, получилось 18КГц. Также есть фризы.
Тут частота скорее в скорость работы с файлами упирается, т.к. я его при каждом изменении состояния открываю. В шарпе наверно больше проверок при открытии и закрытии файла.

Vilos
05.10.2025 13:52ЗАЧЕМ??!? А главное нафига?! Как раз в Linux-e С++ самое "родное", что только там может быть: sudo apt install gcc - ВСЕ! больше ничего не нужно! ну если хотите чтото серьезное с Makefile-ом...ну поставьте туды make аналогичной командой...никакие виртуальные машины, никакие Adb; зачем так сложно то??? Это вы прямо сову на глобус натянули когда C# закорячили туда... причем сове это не по душе...

akod67
05.10.2025 13:52Вопрос в скорости разработки и лёгкости поддерживания. Если умеешь в дотнет, то на кой ся учить? Профита будет ровно никакого для мелких поделий.

Kuprijan
05.10.2025 13:52А потому, что одноплатников со всеми этими вашими проприетарными способами установки linux, как в сабже дохрена, и что там наворочено... Лучше поддерживать один код, когда этих штук у тебя админится дохрена, а потом у тебя несколько дохнет, а тебе "аналогичные" впаривают, которые не аналогичные... Да даже если не дохрена, это на работах ваших и пет проектах копайтесь сколько угодно, а когда делаешь для себя, то хочется меньше копать, меньше отлаживать, просто запустить и всё, а потом, при случае, либо перенести на другое такое же железо, либо масштабировать...

akod67
05.10.2025 13:52Во-первых, .NET в никсах уже лет как 10 запускается. Во-вторых, давно уже запускают в докерах, а не на голых никсах. А в этом плане - какая разница, на чём код.

mapnik
05.10.2025 13:52Эдак-то можно и на питоне под него писать.

akod67
05.10.2025 13:52Вай нот, важен только результат. Ну ладно, не только. Важна ещё долговременная поддержка и не только собой. И тут высокоуровневые языки выигрывают, как более читаемые и популярные.

mapnik
05.10.2025 13:52Им бы ещё, помимо читаемости, ещё программы выполнять научиться как следует, а то потом пишутся такие вот статьи: памяти мало, процессор медленный...

HOMPAIN Автор
05.10.2025 13:52Что не так в моей статье? Я рассмотрел плату в том ключе, в котором она интересна для меня.

Vilos
05.10.2025 13:52Я же в первом сообщении в ветке комментариев написал что не так. Если непонятно, расшифрую: вы прикрутили не совсем тот инструмент под задачи которые описаны в статье, это делается проще и для железки и для сопровождения через стандартный путь, даааа... безусловно можно как угодно решить задачу, и даже виртуальную машину скорячить и даже докер засунуть, но есть прямой и правильный путь - стандартное использование стандартного инструментария, а не как вы микроскопом гвозди заколачиваете.

KonstantinTokar
05.10.2025 13:52Для меня в подобных девайсах главное - поддержка доступности в течении многих лет и наличие документации и сообщества. Наличие библиотек стало менее значимым, так как AI часто способны написать нужный функционал. Другой важный фактор это энергоэффективность, и тут у нишевых систем не всё так хорошо как хотелось. Цена имеет значение только для домашних исследований. В общем, поставить два условных pico оказывается проще и эффективней чем один такой недолинукс.

oxothuk_uae
05.10.2025 13:52На этой плате есть очень интересный проект, аудиофильский стример в формате Beaglebone Black (принимал участие в его создании)
https://forum.puredsd.ru/t/bbfox-project/1532
Фактически это универсальное устройство вывода ОЧЕНЬ выокого уровня - воспроизводит цифровую музыку из сети (интернета или локальной сети) и передаёт её на аудиооборудование — например, на ЦАП. Поддерживаемые протоколы
HQPlayer (NAA)
Roon (RAAT)
Squeezelite (LMS)
AirPlay
MPD (UPnP)
APrender (UPnP)
APSqueeze bridge
APlayer
APScream (ASIO)
Spotify Connect
Qobuz Connect
Из фишек реализации, очень низкое потребление (12V 100mA в режиме воспроизведения)

xaoc80
05.10.2025 13:52А есть ли у них SDK для работы с NPU? Конвертация моделей, инференс, оптимизация и т.д.
Aquahawk
Какая интересная кроха с проводным сетевым интерфейсом, у меня умный дом на распберях построен(по одной на каждое помещение), она конечно хорошо поддерживается софтом.
oleg1251
Тоже сразу мысль возникла для умного дома использовать. Стабильно все кабелем закоммутировать.
sav13
Это какой умный дом будет нормально работать на 64-256Мб ОЗУ?
akod67
У меня пол дома (свет, отопление) на нескольких Arduino Nano + Eth работает, там 2KB SRAM. Над всем этим конечно помощнее на N100 логика, но она опциональна, ардуинки самодостаточны.
Soulskill
А ведь когда-то люди умели писать программы
Anatoliy_rnd
Вот тока микросд самое узкое место в даном случае.