
Ако вече сте се чувствали комфортно с „нормалния“ Python и току-що сте открили, че той съществува MicroPython за Arduino и платки тип ESPМного е вероятно в момента главата ви да е пълна със съмнения: какво точно е това, как се различава от настолния Python, какви платки поддържа, как се инсталира или... Как изглежда програмирането на микроконтролер с вграден интерпретатор на Python?.
През последните години екосистемата на MicroPython и хардуер като Arduino, ESP32, ESP8266 или RP2040 Популярността на Python нарасна драстично. В същото време Arduino премина от практически игнориране на Python до създаване на собствен специализиран редактор, сътрудничейки си директно със създателя на MicroPython и предлагайки предварително компилиран фърмуер за много от съвременните си платки. Нека разгледаме по-отблизо цялата картина, като се задълбочим в практическите детайли и свържем различните части от информация, вече разпръснати из интернет.
Какво точно е MicroPython и как се различава от Python?
MicroPython е имплементация на Python 3, предназначена за микроконтролери.Написано на C и силно оптимизирано за работа на устройства с много ограничени ресурси: малко RAM, малко място за съхранение, много ограничена консумация на енергия и т.н. Не говорим за вашия стар гимназиален компютър, а за малки платки като тези от семейството Arduino, ESP8266, ESP32, BBC micro:bit или ARM микроконтролери като STM32 или... RP2040.
Вътрешно, MicroPython включва компилатор за преобразуване на Python код в байткод и интерпретатор, който изпълнява този байткод директно върху микроконтролера. В много случаи можете да напишете .py скриптове, да ги копирате на устройството и да ги изпълнявате в движение, но има и опцията за прекомпилира в .mpy файлове и да ги „замразите“ в самия фърмуер, за да увеличите скоростта и да спестите памет.
От гледна точка на потребителя, един от ключовите елементи е Интерактивен REPL (циклична обработка на четене-оценка-печат), към който се свързвате чрез сериен/USB порт и от който можете да въвеждате инструкции в реално време, да тествате бързи неща, да проверявате състоянието на хардуера или да отстранявате грешки, без да е необходимо непрекъснато да прекомпилирате.
Относно синтаксиса, MicroPython спазва почти целия синтаксис на Python 3.4. (включително изключения, мениджъри на контекст с with, конструкции като например yield fromи др.) и също така включва елементи от Python 3.5, като например async y awaitТова, което намалява, е броят на наличните стандартни модули: няма смисъл да се зарежда целият арсенал от стандартната библиотека на Python за настолни компютри върху микроконтролер.
За да компенсира това намаление, MicroPython предоставя специфични модули за управление на хардуер на ниско нивоGPIO управление, I2C/SPI/UART шини, PWM, достъп до сензори, управление на флаш памет, WiFi, BLE и др. С други думи, той жертва неща, които не биха ви липсвали в един компютър, но в замяна ви дава инструментите, за да извлечете максимума от типичните периферни устройства за разработчици.
Малко история: от PyBoard до огромна екосистема
В началото си, MicroPython можеше да се използва само на оригиналния PyBoardТова беше платка, проектирана от Деймиън Джордж (създател на проекта), базирана на микроконтролер STM32F4. Това беше силно контролирана среда, замислена почти като демонстрация, че Python може да живее вътре в микроконтролер.
С течение на времето проектът се разрасна, бяха отворени още пристанища и днес MicroPython работи с голямо разнообразие от семейства микроконтролериСред най-популярните са WiFi SoC-тата ESP8266 и ESP32, Raspberry Pi RP2040, голям брой STM32, SAMD на Microchip, nRF на Nordic, семействата Renesas RA и много други ARM и не-ARM чипове.
Това разширение се материализира под формата на множество „портове“ или адаптации на MicroPython към всяка архитектура: esp8266, esp32, rp2 (RP2040), samd, stm32, nrf, mimxrt, renesas-ra, rp2350, cc3200Да назовем само няколко от най-видимите. Всеки порт включва основна поддръжка на микроконтролери и в много случаи драйвери за специфични периферни устройства на платката.
Цялото развитие е координирано около Официално хранилище на GitHub: github.com/micropython/micropythonПълният изходен код се намира там. Оттам можете да компилирате проекта или да изтеглите предварително направени дистрибуции. Проектът също така генерира ежедневни дистрибуции на изходния код и снимки, и разполага с автоматизирана система за генериране на фърмуер за голям брой поддържани платки.
В допълнение към хранилището, има инфраструктура за непрекъснато изграждане, която Генерира фърмуер, готов за флашване, всеки ден. на различни платки и портове. Тези автоматизирани компилации ви позволяват да тествате нови функции или да проверявате корекции на грешки, без да се налага да настройвате цялата среда от нулата.
MicroPython и Arduino: от прекъсване на връзката до съвместна работа
В продължение на доста време връзката между Arduino и MicroPython бяха доста отдалечениВъпреки че Arduino се е превърнал в де факто стандарт за любители, образование и бързо прототипиране, официалната му екосистема се е въртяла около C/C++ и класическия Arduino API (setup/loop и др.).
Междувременно MicroPython се утвърждаваше като един от най-интересните езици за програмиране на микроконтролериЧист синтаксис, бърза разработка, гъвкавост, леснота на преподаване на програмиране… и въпреки това, официалната поддръжка за платките Arduino очевидно липсваше. Малкото, което съществуваше, се състоеше от неофициални инициативи, експериментални портове или хакове, специфични за определени модели.
Беше поразително, че един от най-добрите езици за микрокомпютри и една от най-популярните хардуерни платформи Те на практика не комуникираха помежду си. Това накара много потребители да се чувстват принудени да използват C/C++, дори и да предпочитат Python, или да преминат към други форуми, където MicroPython беше добре поддържан.
С течение на времето Ардуино осъзна, че Python се превърна в лингва франка за много потребителски профили.Студенти, специалисти по данни, специалисти по изкуствен интелект, програмисти от уеб света и др. започнаха да експериментират с MicroPython в образователни среди и идентифицираха ясен проблем: беше трудно да се намери... Наистина проста кросплатформена MicroPython IDE това би отговаряло на потребителското изживяване на класическата Arduino IDE.
Решението, което приеха, беше да си сътрудничат директно с Деймиън Джордж, за да Пренасяне на виртуалната машина MicroPython към съвременни платки Arduino и освен това да създадат свой собствен редактор, адаптиран към този работен процес. Това сътрудничество кристализира в конкретен продукт, който отбеляза повратна точка в официалната поддръжка на Python в екосистемата на Arduino.
Arduino Lab за MicroPython: леката IDE за вашите платки
Това сътрудничество доведе до Arduino лаборатория за MicroPythonСпециализиран редактор за работа с MicroPython върху платки Arduino и други съвместими микроконтролери. Вместо обикновен плъгин за традиционната Arduino IDE, беше избрано самостоятелно, леко приложение, фокусирано върху типичните нужди на този тип проекти.
Arduino Lab за MicroPython е, по същество, Много проста среда за редактиране на код, свързване към дъската, качване на скриптове, управление на файлове и използване на REPL.Предлага се за Linux, macOS и Windows и е насочен към тези, които искат лекотата на света на Arduino, но програмират в MicroPython.
Основните му възможности включват директна връзка с платката чрез сериен/USB порт, зареждане на .py код, прехвърляне на други файлове към вътрешната файлова система на микроконтролера и достъп до интерактивната обвивка на MicroPython за експериментиране в реално време.
Самият Arduino го определя като инструмент, който все още е „експериментален“Въпреки че е напълно функционален и вече е достъпен за общността, с която да си играе и да предоставя обратна връзка, те дори са открили специален раздел на уебсайта си Arduino Labs, за да проследяват напредъка на проекта.
За крайния потребител това означава, че без да се налага да се борите със сложни конфигурации, можете Започнете да пишете и тествате MicroPython на новите платки Arduino с много малко допълнителни стъпки, възползвайки се от плавната крива на обучение, която винаги е характеризирала екосистемата на Arduino.
MicroPython фърмуер за платки Arduino и други микроконтролери
Един от стълбовете на настоящата екосистема на MicroPython е наличие на предварително компилиран фърмуер за голямо разнообразие от платки от различни производители, включително Arduino. Тези фърмуери се изграждат автоматично ежедневно и се публикуват на сървърите на проекта.
Тези ежедневни компилации могат да бъдат филтрирани по „порт“ (esp32, esp8266, rp2, stm32, samd, nrf, renesas-ra, cc3200 и др.), по „функция“ (WiFi, BLE, USB, Ethernet, камера, DAC, дисплей, SD карта, микрофон, LoRa, PoE, външна флаш/RAM памет и др.) и също по производител, където ще намерите опцията да изберете „Arduino“ като доставчик.
Когато изберете производителя на Arduino, ще видите списък с Поддържани модели с автоматично генериран MicroPython фърмуерСред платките, изброени като съвместими, са например Giga, Arduino Nano 33 BLE Sense, Arduino Nano ESP32, Arduino Nano RP2040 Connect, серията Nicla (като Nicla Vision), Portenta C33, Portenta H7, Opta WiFi, Primo и други съвременни модели.
Всяка от тези платки е вътрешно поддържана от специфичен микроконтролер: ESP32, esp32s2, esp32s3, RP2040, SAMD21, SAMD51, STM32 от различни семейства, Renesas RA4/RA6, nRF52
Тази ежедневна инфраструктура за изграждане означава, че не винаги е нужно сами да компилирате фърмуера: в много случаи Просто изтеглете съответното изображение и го инсталирайте на дънната си платка. да започнете да програмирате с MicroPython веднага.
Практически пример за компилация на фърмуер: Seeeduino XIAO SAMD
Дори и вече да имате подготвени фърмуери, понякога може да се интересувате компилирайте сами MicroPython: за активиране на персонализирани модули, оптимизиране за конкретна платка или просто по-добро разбиране на процеса. Добре документиран пример е този на Seeeduino XIAO SAMD, малка платка, базирана на SAMD микроконтролери с ARM архитектура, която вече има официална поддръжка на MicroPython.
Типичният поток започва с Подготовка на средата за изграждане на Debian/Ubuntu системаЗа компилиране за ARM се използва кръстосана верига от инструменти, като например arm-none-linux-gnueabiкойто можете да инсталирате с обичайния мениджър на пакети (в Debian/Ubuntu, използвайки пакета gcc-arm-linux-gnueabi или подобни). Освен това ще ви трябват инструменти като gcc, make, git и Python инсталиран на вашата машина.
След като подготвите средата, следващата стъпка е клонирайте официалното хранилище на MicroPython и изтеглете необходимите подмодули. Самият проект включва скриптове и конфигурационни файлове, които указват от кои хранилища идва всяка външна зависимост и къде трябва да бъде поставена.
Преди компилирането на специфичния фърмуер, почти всички портове изискват генериране на крос-компилатор mpy-crossТази малка програма се използва за предварително компилиране на Python скриптове в байткод (.mpy), който след това може да бъде замразен и включен във фърмуера, нещо особено полезно, когато искате да интегрирате персонализирани библиотеки, без да разчитате на файловата система на платката.
След като mpy-cross вече е изграден, продължете към компилирайте външните зависимости и фърмуера на избрания портВ този случай, този, съответстващ на семейството SAMD. Обикновено посочвате версията или конкретния модел (като например Seeeduino XIAO SAMD), въвеждате съответната директория в дървото на MicroPython и изпълнявате командата за компилация със съответните опции.
След завършване на компилацията ще получите файл с фърмуер, готов за записване на платката. Процесът на флашване може да варира леко в зависимост от платката, но често се свежда до поставяне на устройството в режим на зареждане и копиране на файла на фърмуера на устройството, което се появява на вашата система, когато натиснете специален бутон за нулиране.
След като фърмуерът на MicroPython е инсталиран, можете Опитайте с един прост пример, като например скрипт, който кара вградения светодиод на платката да мига. Копирате кода на платката (или го изпълнявате директно от REPL) и ако светодиодът започне да мига както се очаква, това е знак, че новият ви фърмуер на MicroPython е инсталиран и работи.
Ключови характеристики на езика MicroPython в този контекст
От гледна точка на някой, който идва от стандартния Python, си струва да се помни, че MicroPython предлага „Python минус някои неща и повече от други“Той запазва синтаксиса и много от усъвършенстваните конструкции, но орязва и реорганизира стандартната библиотека, за да я адаптира към вградената среда.
Няма да намерите всички инструменти, които познавате от настолния Python, защото Много от тях просто нямат смисъл в микроконтролер с няколкостотин килобайта памет. Ще видите обаче специфични модули, които капсулират функционалности, много често срещани в електронните проекти: цифрово управление на пинове, аналогово четене, ШИМ, серийни комуникационни шини, директен достъп до регистри и др.
Друга интересна функция е възможността за използване „В движение“ .py скриптове или предварително компилирани .mpy файловеС .py имате максимална гъвкавост за разработка и тестване, докато замразените .mpy файлове във фърмуера ви позволяват да групирате библиотеки и критична логика по-ефективно и стабилно.
Всичко това е комбинирано с интерактивния REPL, който е един вид Python конзола, свързана с микроконтролераМожете да се свързвате чрез USB/сериен порт, да пишете инструкции, да проверявате променливи, да тествате малки рутини за четене на сензори или управление на изпълнителни механизми и само когато сте сигурни, да преместите кода си в постоянен скрипт.
За някой, който започва да се занимава с хардуерно програмиране, тази комбинация от Известен синтаксис, незабавна обратна връзка и директен достъп до хардуера Това прави преживяването много различно от класическите цикли на компилиране-качване-тестиране в C/C++, като значително намалява времето, докато видите резултати.
MicroPython работи ли с всички платки Arduino?
Много често задаван въпрос за тези, които откриват тази тема, е дали MicroPython е съвместим с „всички“ платки Arduino, включително най-старите като Arduino Uno базирани на AVR микроконтролери. Краткият отговор тук е „не“, поне не официално или на практика за повечето потребители.
Класически типови плочи Arduino UnoNano или Mega с AVR чипове Те имат много ограничени ресурси за това, което изисква една виртуална машина на Python: малко RAM, много малко програмна памет и хардуер, предназначен за други видове среди. Следователно, MicroPython не ги поддържа по подразбиране и всеки опит за пренасянето им би бил сериозно компрометиран по отношение на функционалност и производителност.
Обратно, съвременни платки Arduino, базирани на ARM, ESP32, RP2040 или подобни Да, те попадат изцяло в гамата устройства, за които е проектиран MicroPython. Това са моделите, които се появяват в автоматичните актуализации на фърмуера и които получават поддръжка в инструменти като Arduino Lab за MicroPython.
Ако имате дънна платка като Arduino Uno И ако искате да използвате нещо подобно, най-реалистичният вариант обикновено е преминете към платка, съвместима с MicroPython (например ESP32, ESP8266, RP2040 или скорошна платка Arduino, базирана на тези архитектури) или се придържайте към C/C++ на традиционния Uno.
Ако обаче вече имате устройства като NodeMCU (ESP8266), ESP32 платки или Arduino Nano RP2040 ConnectТам можете лесно да инсталирате MicroPython и да започнете да програмирате, използвайки инструменти като esptool, Thonny, Arduino Lab за MicroPython или други съвместими IDE.
Какво ви е необходимо, за да започнете работа с MicroPython на платки тип Arduino
За да започнете вашето MicroPython пътешествие на съвместима платка, не ви е необходима огромна система. Основите са: поддържана дънна платка, USB кабел, подходящ фърмуер и редактор, който комуникира със серийния порт.
В секцията за софтуер можете да изберете различни подходи: от Прости IDE, фокусирани върху MicroPython (като Thonny или Arduino Lab за самия MicroPython) до по-общи решения, където ръчно се свързвате към серийния порт и сами управлявате скриптовете.
В зависимост от чипа на вашата платка (ESP8266, ESP32, RP2040, SAMD и др.), ще ви е необходим специфичен метод за флашване на фърмуер на MicroPythonВ ESP-тата е обичайно да се използват инструменти като esptool; на много платки с USB bootloader процесът се свежда до копиране на .uf2 файла или подобен на устройството, което се появява във вашата система, когато натиснете специален бутон за нулиране.
След като инсталирате фърмуера, всичко, което трябва да направите, е свържете се към съответния сериен/USB портОтворете REPL и напишете няколко тестови реда. На платки като NodeMCU или ESP32, класическият пример за включване и изключване на вградения светодиод или мигане на изходен пин е добър начин да се провери дали всичко работи правилно.
Що се отнася до избора на IDE, няма строго изискване: можете да използвате всичко - от много основни редактори до по-пълни среди. Важното е, че Можете лесно да качвате файлове на устройството и да имате достъп до REPL.защото тези две части са в основата на процеса на разработка с MicroPython.
След като цялата тази екосистема вече е консолидирана, съюзът между MicroPython и платки като Arduino, ESP и RP2040 Това се превърна в много мощна комбинация: позволява на тези, които вече познават Python, да направят скок в света на хардуера, без да се налага да учат друг език от нулата, като същевременно предоставя на производителите и образователната общност бърз път за създаване на прототипи и изследване на проекти за интернет на нещата, роботика, сензори и автоматизация, използвайки модерен и широко използван език.

