CircuitPython срещу Arduino: разлики, предимства и кога да използвате всеки от тях

  • Arduino C се компилира в машинен код, предлагайки по-висока производителност и по-ниска консумация на ресурси от CircuitPython.
  • CircuitPython интерпретира Python код директно от платката, което улеснява директното редактиране и много по-бърза разработка.
  • Arduino C е съвместим с повече микроконтролери, докато CircuitPython изисква съвременни чипове с повече памет.
  • Изборът между Arduino C и CircuitPython зависи от баланса между скорост, налични ресурси и лекота на разработка.

circuitpython и arduino

Ако работите в света на електрониката и роботиката, рано или късно ще се сблъскате с дилемата да избирате между... програмиране с Arduino или преминаване към CircuitPythonИ двете екосистеми ви позволяват да създавате впечатляващи проекти с микроконтролери, но го правят с много различни философии и това се отразява както на начина, по който работите, така и на вида хардуер, който можете да използвате.

В цялата тази статия ще сравним подробно CircuitPython срещу Arduino (Arduino C)Обяснява се какво представлява всеки един от тях, как работят вътрешно, предимствата и недостатъците на всеки подход и в кои ситуации единият или другият е по-подходящ. Ще видите също защо все повече хора, идващи от Arduino, опитват CircuitPython и обратното: когато няма друга опция, освен да използват Arduino C, защото хардуерът го диктува.

Какво точно представляват Arduino и CircuitPython?

Когато говорим за Arduino, много хора се сещат само за платки като UNO, Nano или Mega, но в действителност терминът може да се отнася и за двете. съвместими платки за разработка както и самия език за програмиране и неговата среда. Обикновено се програмира в опростен вариант на C/C++, известен като Arduino C, като се използва официалната IDE или други съвместими среди. Някои съвременни семейства платки, като например Seeed Studio XIAO семействоТе допълнително разширяват наличните опции.

В случая с CircuitPython идеята е различна: това е Python имплементация, проектирана специално за микроконтролериИзвлечен директно от проекта MicroPython, CircuitPython е силно насочен към образование, начинаещи и тези, които искат бързо да създават прототипи. Той се фокусира върху улесняване на живота на потребителя с преживяване, много подобно на включване на USB устройство в компютър и започване на писане на код.

Въпреки че екосистемата на Arduino се е разширила през годините с огромен брой платки, библиотеки и документация, CircuitPython е разработен с много отворена и ориентирана към общността философия, с постоянен принос към самия език, неговите библиотеки и документация. Това сътрудничество му е позволило постепенно да се развива. CircuitPython е съвместим с голям брой съвременни микроконтролерни платки и семейства.въпреки че все още се нуждае от повече ресурси от Arduino C, за да функционира.

Важен детайл е, че въпреки че ще говорим основно за Arduino C и CircuitPython като езици и среди, е важно да се има предвид и това Не всички дънни платки поддържат и двете опцииИма микроконтролери, където можете да използвате само Arduino C, и други, където CircuitPython блести, особено благодарение на своята мощност и памет.

Компилирано срещу изпълнено: голямата разлика

Ключът към разбирането на разликата между Arduino C и CircuitPython е да се знае как се изпълнява кодът във всеки случай. Arduino C е базиран на класически работен процес... съставен езикПишете програмата в IDE (или редактора, който използвате), кликвате, за да компилирате и качите, а системата превежда вашия C/C++ код в машинен код, специфичен за микроконтролера на платката.

Този процес на компилация прави получения код чист двоичен код, перфектно адаптиран към микроконтролераТова води до много бързо и ефективно изпълнение. Цената, която трябва да се плати, е, че всяка промяна, колкото и малка да е, включва повторно компилиране и повторно качване на фърмуера на платката. Ако коригирате стойности, коригирате синтактични грешки или тествате малки вариации, този цикъл на компилиране и качване може да стане доста досаден.

В CircuitPython подходът е напълно различен: езикът е тълкуваИзходният код в Python се съхранява такъв, какъвто е (обикновено във файл, наречен code.py) в паметта на платката. Когато микроконтролерът се стартира, интерпретаторът CircuitPython чете този файл и изпълнява инструкциите в реално време, преобразувайки ги в действия върху хардуера, когато ги срещне.

Този начин на работа има пряко следствие: кодът не се превежда в машинен код, докато не стане необходим, така че се консумират много ресурси. значително количество RAM и Flash ресурси да хоства интерпретатора и да управлява изпълнението. В замяна обаче получавате огромна гъвкавост: можете да модифицирате файла, да го запазите и да рестартирате платката и да стартирате новата програма почти мигновено, без междинни стъпки на компилация.

RP2040
Свързана статия:
RP2040: микроконтролерът Raspberry Pi за машинно обучение

Тази разлика между компилиран и интерпретиран код влияе и върху обработката на грешки. Arduino C, когато е компилиран, ви предупреждава за много синтактични грешки, преди да качите програмата, но всички проблеми по време на изпълнение могат да бъдат по-трудни за отстраняване на грешки без разширена настройка за отстраняване на грешки. В CircuitPython, Грешки могат да възникнат директно по време на изпълнение И в много случаи се показват четливи съобщения, които помагат да се локализира какво се случва.

Скорост и хардуерни ресурси

Една от областите, където разликата между Arduino C и CircuitPython е най-забележима, е в чиста и проста скорост на изпълнениеКогато работите с Arduino C, машинният код вече е подготвен в микроконтролера, така че няма нужда да се интерпретира нищо в реално време. Това се изразява в много кратко време за изпълнение и много висока скорост на реакция, което е от решаващо значение в проекти, където всеки тактов цикъл е от значение.

За разлика от това, CircuitPython трябва да интерпретира всеки ред, което въвежда слой от допълнителни разходи. Практическите тестове показват, че Една и съща операция може да отнеме няколко пъти повече време в CircuitPython, отколкото в Arduino C.В някои специфични случаи времето за изчисление може да се утрои. За много проекти това не е основен проблем, но когато микроконтролерът вече е прекалено дълъг или задачите са много интензивни, това може да се превърне в пречка.

Съществува и съществена разлика по отношение на паметта. Микроконтролер, който е повече от адекватен за проект с Arduino C, може да не успее да го направи, ако се опитате да стартирате CircuitPython, защото... Интерпретаторът се нуждае от добро количество Flash и RAM памет. само за зареждане и управление на средата за изпълнение. Това означава, че не всички платки са подходящи за използване на CircuitPython, особено по-старите или много евтините.

Въпреки това, реалността на пазара е, че Съвременните микроконтролери са все по-бързи, имат повече памет и предлагат по-добра производителност.Често на подобни или по-ниски цени от предишните поколения, това значително намалява влиянието на спада в производителността на Python върху много проекти. За голям брой приложения, малко по-бавният код не е реален проблем, докато скоростта на разработка с CircuitPython е ясно предимство.

Има обаче много специфични сценарии, в които CircuitPython просто не е подходящ: например, когато искате да изстискате всеки последен милиампер-час от много малка батерия или когато избраният микроконтролер има много малко памет. В тези случаи, Arduino C остава естественият избор за ефективност и наличност.

Опит в разработката и работен процес

Опитът в разработката е друга област, където разликите между двата свята са забележими още от първата минута. С Arduino C типичният работен процес започва от Arduino IDE или друга съвместима средаТрябва да изберете конкретната платка, порта, да се уверите, че необходимите библиотеки са инсталирани и в много случаи да добавите допълнителни пакети, за да поддържате семейства микроконтролери, различни от класическия AVR.

Тази първоначална настройка не е особено сложна за някой с опит, но за някой, който започва от нулата, може да бъде предизвикателство. значителна крива на обучениеОсвен това, след като програмата бъде качена, на платката остава само компилираният двоичен файл; ако загубите изходния файл на компютъра си, не можете да го възстановите от платката, за да го редактирате, защото оригиналният текст вече не е там, а само машинният код.

В CircuitPython всичко се върти около това процесът да бъде максимално опростен. След зареждане на подходящия фърмуер на платката (обикновено специфичен за модела UF2 файл), тя се монтира на компютъра, сякаш е... USB устройство за съхранениеВътре ще намерите файлове като code.pyкоито можете да отворите с редактори като Mu или дори с основни текстови редактори.

За да промените поведението на проекта, просто отворете файла, променете няколко реда и го запазете. В много случаи платката автоматично ще се рестартира и ще стартира новата версия на програмата веднага. Не е необходимо да прекомпилирате или да се затруднявате със сложни инструменти. Това е буквално като редактиране на текстов документ на USB устройство.

Освен това, ако вашият проект изисква допълнителни библиотеки или други файлове, те могат да бъдат добавени чрез просто плъзгане и пускане върху модула CircuitPython. Тази простота прави итеративната разработка много по-бърза и по-приятна, особено когато настройвате детайли, тествате или обучавате някой, който никога преди не е програмирал микроконтролер.

Леснота на обучение и общност

Друг ключов аспект, който трябва да се вземе предвид при избора между CircuitPython и Arduino C, е лекота на учене от нулатаPython, като цяло, се превърна в един от водещите езици за програмиране в образованието, университетите и самостоятелното обучение, именно заради ясния си синтаксис и праволинейността на четене и писане на код. CircuitPython наследява същата тази философия.

За някой, който никога не е програмирал преди, започването с Arduino C може да бъде малко по-предизвикателно. Въпреки че слоят на абстракция на Arduino значително опростява C/C++, Концепциите за типове, имплицитни указатели, структури и по-строг синтаксис все още съществуват. което може да е объркващо в началото. За разлика от това, Python е по-близо до естествения език и е по-толерантен в много аспекти, което помага да се съсредоточим върху логиката на програмата, а не върху детайлите на ниско ниво.

Въпреки това, трябва да се признае, че екосистемата на Arduino има значително предимство и може да се похвали с огромно количество документация, примери, уроци и проекти готов за повторна употреба. Ако търсите сензор, модул или щит, най-вероятно първо ще намерите добре документирани примери в Arduino C, докато еквивалентът в CircuitPython може да не е толкова разпространен или да е по-нов. Например, има ръководства за сензори като Сензор AS7341.

От страна на CircuitPython, общността разчита до голяма степен на духа на отворения код. Полагат се непрекъснати усилия за подобряване на езика, библиотеките и документацията Въз основа на обратната връзка от потребителите, много членове на общността се посвещават на тестване на нови версии, докладване на грешки, подобряване на примери и разширяване на поддръжката за нови форуми. Всичко това означава, че въпреки че екосистемата е сравнително нова, тя се развива с много добри темпове.

Освен това, CircuitPython се възползва пряко от предишната работа на MicroPython. Заслугата за внедряването на Python в микроконтролерите до голяма степен принадлежи на оригиналния проект, който положи техническите и концептуални основи, върху които CircuitPython добави по-лесен за начинаещи и образователен подход.

Преносимост и поддръжка на чинии

Преносимостта на кода е друг фактор, който си струва да се има предвид. В CircuitPython голяма част от привлекателността му се крие във факта, че Една и съща програма може да се изпълнява на различни платки с минимални промени, при условие че тези платки се поддържат от екосистемата и разполагат с достатъчно ресурси. Абстракцията, която езикът предлага спрямо хардуера, значително улеснява прехода от една платка към друга.

Въпреки това, увеличената консумация на RAM и Flash памет означава, че Не всички микроконтролери на пазара могат да работят с CircuitPython.Има много малки или стари платки, които просто не се справят с паметта, така че единственият реалистичен вариант е да продължите да използвате Arduino C (или директно C/C++ без слоя Arduino).

При Arduino C е обратното: по-лек е и зависи от специфичната конструкция за всеки микроконтролер, Може да работи на много по-широк набор от устройстваСтига да има съвместимо ядро ​​или пакет за този микроконтролер в екосистемата на Arduino и инструментите да са добре поддържани, е възможно да се програмира със същия основен синтаксис на Arduino C.

Това има практически последици: ако даден проект абсолютно изисква много специфична платка, например поради размер, консумация на енергия или периферни нужди, тази платка може да е програмируема само с Arduino C и може да не е налична версия на CircuitPython. В този сценарий самият хардуер диктува избора.

От друга страна, има съвременни платки, много добре подготвени за CircuitPython, с достатъчно памет и официална поддръжка, които позволяват възползвайте се максимално от възможностите на преводача без да се влошава твърде много производителността. За учебни проекти, бързо прототипиране или приложения, където скоростта не е критична, тези платки са много удобен вариант.

Примери за употреба от реалния свят и казуси

За да разберете по-добре кога балансът се накланя в едната или другата посока, е полезно да разгледате някои примери за проекти от реалния свят където Arduino C или CircuitPython е избран в зависимост от нуждите.

Представете си например експериментален MIDI инструмент, базиран на платка като Raspberry Pi Pico. В този контекст някои хора са избрали да използват CircuitPython, защото вече са съществували проекти и споделен от общността код, който може да бъде адаптиран. повторно използване почти както еПростото инсталиране на подходящия фърмуер и копирането на правилните файлове на устройството на платката беше достатъчно, за да стартира проекта, изисквайки само малки хардуерни настройки; има дори алтернативи като FlexiPi, клонинг на Raspberry Pi Picoкоито разширяват възможностите.

В подобни ситуации, когато има налични ресурси и хардуерът е достатъчно мощен, CircuitPython спестява огромно количество време за разработка. Можете да се съсредоточите върху творческите аспекти, музикалните настройки и взаимодействието със сензорите, без да се задълбочавате в детайли на ниско ниво или процеси на компилация.

В противоположния край, помислете за много компактен проект, като например миниатюрен MIDI контролер, базиран на микроконтролер ATtiny85 и захранван от малка батерия тип „монета“. Тук ограниченията на ресурсите са брутални: много малко памет, консумация на енергия, която трябва да бъде максимизирана, и необходимостта от много агресивни режими с ниска консумация на енергия, използващи библиотеки като TinySnore за приспиване на микроконтролера.

В такъв контекст CircuitPython не е жизнеспособен. Интерпретаторът просто не би паснал или би оставил толкова малко свободни ресурси, че проектът би станал непрактичен. Решението се крие във внимателното писане на кода на C или Arduino C, като се възползвате от силно оптимизираните библиотеки и максимално използвате възможностите на микроконтролера за ниска консумация на енергия.

Тези два примера илюстрират добре общата идея: когато времето за разработка, гъвкавостта и лекотата на модификация са приоритети И ако хардуерът го позволява, CircuitPython е много удобен инструмент. Когато решаващият фактор е чистата производителност или екстремните ограничения на ресурсите, Arduino C и компилираните решения остават логичният избор.

Основни предимства на Arduino C

Обобщавайки силните страни на Arduino C, първата и най-очевидна е нейната ефективност във времето за изпълнение и използването на паметтаЧрез директно компилиране в машинен код, микроконтролерът изпълнява инструкции с много малко режийни разходи, което води до по-висока скорост и потенциално по-ниска консумация на енергия.

Вторият аргумент в негова полза е, че огромно количество съвместим хардуерБлагодарение на разширяването на екосистемата на Arduino през годините, съществуват ядра и корпуси за множество микроконтролери, от класически AVR до ARM, ESP и други семейства. Това означава, че ако вече имате рядка или много специфична платка, е по-вероятно тя да има поддръжка за Arduino C, отколкото за CircuitPython.

Друг положителен аспект е зрялостта на екосистемата: има изобилие от примерни кодове, библиотеки със сензори и модулии документация на всички нива, от ръководства за начинаещи до съвети и трикове за напреднали. За много разработчици, които са в тази област от години, Arduino C се е превърнал в де факто стандарт; например, ще намерите практически ръководства за работа с Сензор за налягане DPS310 с Arduino.

Разбира се, има и недостатъци: необходимостта от компилиране и качване на всяка промяна, зависимостта от правилното конфигуриране на информацията за платката и библиотеката в IDE и фактът, че платката не съхранява изходния код в текст, означава, че модифицирането на вече инсталирана програма изисква повторно търсене на оригиналните файлове или повторно извършване на част от работата.

Ключови предимства на CircuitPython

От страна на CircuitPython, основният кукинг е лекота на използване и бързина на итерацияПростият факт, че платката се появява като USB устройство, където плъзгате и пускате файлове, редактирате code.py и виждате промените веднага, значително намалява триенето при експериментиране и обучение.

Освен това, Python, като език, често се счита за по-удобен за ползване от тези, които правят първите си стъпки В програмирането, чистият синтаксис, липсата на сложни детайли за управление на паметта и четимостта на кода помагат на хора без предишен опит да създават функционални проекти за по-кратко време.

Друго очевидно предимство е, че кодът се съхранява на самата платка в текстов формат. Това позволява възстановете и променете проект, дори ако нямате оригиналния файл на компютъра сиПросто свържете платката, отворете файла и започнете да редактирате. Това е особено полезно в образователни среди или за бързи експерименти, където нещата са склонни да се губят или презаписват.

И накрая, фактът, че CircuitPython разчита на отворен и постоянно развиващ се модел на разработка, с непрекъсната обратна връзка от общността, го прави подобренията идват редовноНови функции, оптимизации, подобрена поддръжка на платки и актуализирани библиотеки са част от ежедневната рутина на проекта, поддържайки го жив.

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

В крайна сметка, изборът между Arduino C и CircuitPython не е въпрос на черно или бяло, а по-скоро на оценка... нуждите на проекта, хардуерните ограничения и опитът на човека, който ще програмираАко идвате от света на Arduino и искате нещо по-гъвкаво и гъвкаво, CircuitPython е много естествена отправна точка. Ако вече имате добри познания по C и се чувствате комфортно да работите с малки или високоспециализирани микроконтролери, вероятно пак ще се чувствате по-спокойно с Arduino C, но това не ви пречи да използвате и двата подхода, когато е необходимо.


Добавяне като предпочитан източник