Чи є великий стрибок між прототипуванням на Pi та використанням мікроконтролера?


25

Це питання задає, серед іншого, чи існує велика крива навчання між використанням Python на Raspberry Pi для прототипу кінцевої точки та використанням мікроконтролера.

Очевидно, що спостерігається значне поліпшення споживання енергії (за рахунок зменшення пропускної здатності процесора), тому є вагомі причини застосувати підхід MCU до продукту, який потребує живлення від акумулятора.

Однією з потенційних причин зв'язатись з одноплановим комп'ютером, який працює під управлінням Linux, є те, що не існує нового програмного забезпечення для навчання (вище python або подібного), якщо програма може бути написана мовою високого рівня (де повинно бути багато стандартних бібліотеки).

На вбудованій платформі для розробки можливі варіанти C ++ (mbed або arduino) або мікропітон. Моє враження, що це не суттєво відрізняються або складніші за написання коду для роботи під Linux - хоча платформи мають і індивідуальні переваги. Я пропустив щось, що стосується розробника програмного забезпечення?

Зокрема, я запитую про кінцеві точки IoT - тому не важливо мати повноцінні ресурси системи Linux для програм, які мене тут цікавлять. Варто також підкреслити, що міркування щодо потужності та затримки роблять впровадження mcu важкою вимогою в цьому типі додатків.

Відповіді:


12

Додаємо до вичерпної відповіді Джорджа та пункт 2) апаратну підтримку. Навіть якщо потрібне обладнання (наприклад, Ethernet, WiFi, SD-карта) додано до мікроконтролера / Arduino через щити або подібні допоміжні плати, бібліотеки, якими вони керують, дуже напружують малу пам'ять (тобто ATMEGA328 (типовий контролер Arduino)) має 32 Кб FLASH та 2 Кб оперативної пам’яті). Особливо при поєднанні декількох функцій (мережа, дисплей, SD-карта) це може бути серйозним обмеженням.

Кілька прикладів із світу Arduino:

Підтримка SD-карти та простої файлової системи (FAT):

  • SD-карти (розмір коду невідомий, але, ймовірно, не так вже й велика проблема, якщо використовується апаратний SPI), принаймні 512 байт оперативної пам'яті
  • Petit FAT FS вимагає ~ 2..4 кБ флеш-пам'яті та ~ 44 байт оперативної пам’яті

Використання матричного дисплея:

Ethernet з стеком протоколу TCP / IP:

  • uIP : вимоги оперативної пам’яті в діапазоні типового розміру пакету (> 1 кБ), однак, одночипові контролери Ethernet зазвичай поставляються з мікросхемою, яка може містити декілька розмірів Ethernet з максимальним розміром.

    Можна запустити реалізацію uIP лише з 200 байтами оперативної пам'яті, але така конфігурація забезпечить надзвичайно низьку пропускну здатність і дозволить лише невелику кількість одночасних з'єднань. ( Джерело. )

  • IP стек з протоколами TCP та UDP для Arduino : мінімум 128 кБ зовнішньої пам'яті

  • IP через послідовний інтерфейс: SerialIP ~ 9 кБ FLASH та "достатньо" оперативної пам'яті

Загалом, програмування з цими обмеженнями вимагає зовсім іншого підходу та вимагає оптимізації щодо програмного простору та розміру коду (FLASH), даних виконання (RAM) та швидкості виконання. Ця відповідь чудово розігралася.

Оскільки питання спеціально задається щодо платформи mbed, звичайно, слід зазначити, що вона включає функції, найбільш відповідні для IoT, а саме підключення разом із шифруванням, автентифікацією та авторизацією. Він нібито пропонує апаратну підтримку Bluetooth з низькою енергією та IPv6 через бездротову мережу особистої області низької потужності. Хоча ці функції підключення доступні лише на перелічених платах розробки з типовою> = 128 кБ FLASH та> = 16 кБ оперативної пам’яті. З іншого боку, менші плати розробників включають системи з такими ж маленькими мікроконтролерами, як ARM Cortex-M0 + Core з 16 КБ Flash, 4 КБ оперативної пам’яті (тобто не набагато більше, ніж середні розміри Arduinos) без виділеного підключення.


Обмеження ресурсів було найбільшою прогалиною в моїх припущеннях - легко забути більшість людей, що розвиваються без цих проблем більшість часу.
Шон Хуліхане

20

Це залежить від того, що ви намагаєтеся зробити.

  1. Найбільший розрив полягає в тому, що мікроконтролер, про який ви згадали (наприклад, Arduino), не має багатозадачну операційну систему, таку як Linux. Це означає, що якщо ваша програма залежить від багатозадачності чи багатопотоковості, це може бути набагато важче або навіть неможливо запустити на Arduino.

  2. Другий розрив - апаратне забезпечення. Наприклад, Raspberry Pi підтримує камери, аудіо USB, Ethernet, WiFi поза коробкою. Нічого із цього не підтримується Arduino безпосередньо, і хоча ви можете використовувати різні екрани (наприклад, USB Host, Ethernet або WiFi), їх використання не є таким простим, як використання мереж на Raspberry Pi.

  3. Третій розрив - наявні ресурси. Більшість мікроконтролерів навіть не наближаються до ресурсів, які пропонує Raspberry Pi. Наприклад, навіть перший Raspberry Pi запропонував процесор, який працює на частоті 700 МГц з 256 Мб оперативної пам’яті і може використовуватися з 32 Гб пам’яті. Типовий Arduino Uno на базі ATMEGA328 працює на частоті 16 МГц і має 32 Кб пам'яті і 2 Кб оперативної пам’яті.

Тож використання Raspberry Pi, безумовно, набагато простіше для розробників, що надходять з ПК. Основними перевагами використання мікроконтролерів є:

  • витрати (китайський клон Arduino Nano коштує менше 2 доларів за штуку з доставкою)
  • енергоспоживання (мікроконтролери можна було б дуже добре оптимізувати для низького енергоспоживання - важливо, якщо вам потрібно працювати на батареях);
  • наявність у реальному часі, тобто здатність реагувати на зміну сигналу в режимі реального часу;
  • розмір (Arduino Mini вдвічі вужчий, ніж Raspberry Pi Zero, і якщо вам не потрібно стільки штифтів, розмір ATTINY85 менше копійки, і він працює без кристала).

Якщо жодне з них не важливо, використання Raspberry Pi, безумовно, має більше сенсу.


3
Потужність акумулятора та не велика потреба в ресурсах є драйверами для використання mcu - тому я припускаю, що процесора 10-100 МГц достатньо. Дійсна точка щодо використання периферійних пристроїв, хоча SPI, мабуть, є еквівалентом mcu USB.
Шон Хуліхане

2
Просто мати автобус недостатньо. Розглянемо, як використовувати WiFi в Linux, вашій програмі не потрібні конкретні знання про нього, той же код, який працює з Ethernet, буде працювати з інтерфейсом WiFi. Це не так з мікроконтролерами, вам доведеться використовувати різні бібліотеки, навчитися ними користуватися та змінити код.
Джордж Й.

1
Гаразд, не розумів, що використання іншої бібліотеки буде значною мірою бар'єром.
Шон Хуліхане

2
Якщо вам не потрібно багато шпильок, ви можете отримати ATtiny4 розміром із зерна рису: P
Nick T

1
його, мабуть, не набагато менше, ніж Attiny85 :), але ти маєш рацію, якщо ми думаємо, що не DIP, навіть 85 - це кінчик пальця.
Джордж Ю.

9

ТАК, це великий стрибок від програмування в Python до програмування з використанням типових мовних інструментів на основі С на мікроконтролері. Насправді, у багатьох випадках вам може знадобитися написати дещо, якщо не все, свою заяву мовою складання.

Як уже вказувалося в інших відповідях, мікроконтролери дуже обмежені в ресурсах, і, таким чином, ви втрачаєте всі зручності операційної системи Linux та всі інструменти, які можна запустити на локальному рівні. Ітерація з Arduino IDE дуже повільна порівняно із запуском локальних сценаріїв.

Хоча я маю великий досвід роботи з мікроконтролерами та мікропроцесорами, я віддаю перевагу запускати свої особисті проекти, використовуючи апаратні засоби RPi з деякими Arduinos для критичних реальних речей. Я також поспішав з Beagle Bone Black і в чомусь це зручніше, ніж використовувати RPI з одним або декількома Arduinos.


9

Так, велика різниця

Різниця подібна до дня і ночі, як щодо апаратного, так і програмного забезпечення. Дійсного порівняння взагалі немає.

Коли використовувати який

Скористайтеся Arduino, якщо ...

  • Космічні обмеження роблять Pi нездійсненним.
  • Використання енергії Pi буде занадто великим.
  • Гроші - це проблема (особливо якщо у вашому проекті потрібно кілька або декілька індивідуальних контролерів, кожен з яких виконує лише дуже просту логіку).
  • Ви хочете отримати азотну і крупу і працювати на набагато нижчому рівні для розваги або для отримання знань.
  • Вам потрібна надзвичайна простота та / або 100% визначена поведінка в реальному часі та нульовий шанс, що щось з вашого контролю вбиває вашу програму.
  • Вам не потрібна мережа Ethernet, складна функція USB-хоста (тобто доступ до жорстких дисків; використання її на стороні клієнта, наприклад, як HID-пристрій, все в порядку) тощо. Більшість із них може бути прилаштована до Arduino (дуже спокійно), але з високою ціною з точки зору оперативної пам’яті / EPROM, а також функціональності. Оскільки немає попереджувальної багатозадачності, розблокування завдань стає досить складним дуже швидко.
  • Ви все в порядку зі спрощеним IDE Arduino розвитку Ardeino, або з копанням набагато глибше (тобто, створенням програм самостійно), і - якщо ви не збираєтесь на USB-пристрій для завантаження, як Pro Micro, - куплений або саморобний комплект розробки / пальник.

У всіх інших випадках Pi набагато зручніший для користувачів. Pi - просто інший (повільний) комп'ютер.

Не зрозумійте мене неправильно. Я володію Pi і використовую його для декількох служб Linux у своїй мережі. Я також часто програмую Arduinos (в основному Pro Micros). Обидва чудові, я їх однаково люблю, але у них дуже різні сценарії використання.

На ваше запитання про складність - це відносно. Єдиний раз, коли Ардуїну стало важко для мене, було важко налагоджувати проблеми синхронізації, особливо якщо їх поєднували із сумнівною електронікою (тобто, перешкодами ЕМ, занадто довгими кабелями тощо). Якщо ви впевнені у своїй обраній мові (наприклад, C для Arduino IDE), тоді ви маєте змогу зламати будь-які бібліотеки, якими ви користуєтесь. І все-таки це буде завжди складніше, ніж Pi, де ви можете, наприклад, використовувати мову сценаріїв на свій вибір для речей, що не є критичними для часу - це завжди буде легше розробити і налагодити.


Я не запитую, яка найкраща платформа для розробки - для мого використання потрібен mcu, насамперед через обмеження потужності. Я бачу, що питання було не надто чітким з цього приводу.
Шон Хуліхане

Гаразд, тоді першої частини відповіді було б достатньо. Я дозволяю решті "доповненням", якщо хочете.
AnoE

7

Я вважаю, що є кілька моментів, які ще не були чітко визначені.

Середовище розвитку зовсім інше. Насправді ви можете розробити програмне забезпечення Pi ON Pi - ви навіть можете використовувати графічний інтерфейс, якщо хочете. Вбудовані вдосконалені засоби налагодження - також дуже багато того, що доступно для будь-якої комп'ютерної системи.

Контролери повинні бути розроблені / емульовані на окремому комп'ютері, а потім відправлені до контролера для остаточного тестування.

Pi може працювати практично на будь-якій мові, яку ви хочете запрограмувати, мікроконтролери зазвичай мають одну або дві.

Pi може запускати досить багато операційних систем (включаючи Windows IoT та купу спеціальних систем), вбудовані контролери, як правило, не запускають "операційну систему".

Крім того, що стосується часу виконання / ОС - Pi потрібен кілька секунд для завантаження - якщо ви хочете щось зробити за перші кілька секунд, то пі не буде працювати для вас. Крім того, якщо ви не вживали якихось екстремальних заходів, щоб не допустити будь-яких записів на зберігання, ви дійсно не повинні просто вилучати живлення, ви повинні виконати "Вимкнення" і трохи почекати. Це також може обмежити деякі звичаї.

Ще одну точку після розгортання, яку я не бачив. Я не впевнений, як я був би абсолютно впевнений, що я належним чином захистив Pi - що жодне агентство не скріпило кудись коду, який дозволяє при певних обставинах несанкціонований доступ - не вилучаючи його з усіх мереж і не відключаючи всі механізми бездротового доступу . Мікроконтролери досить легко забезпечити, оскільки ви пишете майже весь код, який працює на цій речі.

Звичайно, ви завжди можете розробити власний образ Pi без реальних ОС і взяти на себе всю плату / процесор, що в значній мірі зробить це потужним / дорогим мікроконтролером з усіма пов'язаними з цим перевагами / недоліками. Хтось, мабуть, навіть це вже робив, але останнім часом я нічого такого не шукав.


WRT ваш останній абзац, так, це називається голим металом, і мало хто це робить, але технічно це можливо ... Ласкаво просимо на сайт!
Ганіма

3

Різниця між розробкою програми з Pi може бути дуже різною або дещо схожою на розробку програми з мікроконтролером через розбіжності в апаратному забезпеченні, а також відмінності в ланцюзі інструментів розробки програмного забезпечення.

Існує широкий спектр мікроконтролерів, які мають від 8-ти до 64-бітових процесорів і мають десь від декількох К ОЗП до декількох гігабайт ОЗУ. Більш спроможні мікроконтролери забезпечують більше досвіду, як Pi. Менш здатні мікроконтролери не мають.

І навіть у Pi є великі відмінності між розробкою для операційної системи Windows 10 IoT порівняно з розробкою для Raspian, Mate або іншої ОС на базі Linux. Windows 10 IoT вимагає ПК для розробки, використовуючи ланцюжок інструментів Visual Studio з віддаленим налагоджувачем, орієнтованим на середовище Універсальної програми Windows (UWP). Розробка для Raspian або Mate може бути фактично виконана на Pi з інструментами, доступними на Pi.

Протокол Застосування Constrained використовуються для невеликих, обмежених пристроїв, що використовуються з Інтернетом навколишнього середовища речей. Щоб отримати уявлення про різноманітність апаратного та програмного забезпечення мікроконтролерів, ця сторінка щодо впровадження протоколу CoAP дає уявлення про середовище, на яке вона орієнтована. Він згадує про операційну систему Contiki, про яку я смутно чув, а також з більш відомими ОС, такими як iOS, OSX та Android. Згаданими мовами програмування є Java, JavaScript, C, C #, Ruby, Go, Erlang, Rust і Python.

Ланцюг інструментів, що використовується для розробки мікроконтролерів, варіюється в залежності від виробника, а також того, які види ресурсів є у спільнот розвитку та ініціативи з відкритим кодом. В деяких випадках ви отримуєте хрестоподібний асемблер, в інших випадках ви отримуєте компілятор C cross, а в інших випадках ви отримуєте хороший ланцюжок інструментів зі всіма дзвіночками та емуляторами та подібним до ланцюжка інструментів Visual Studio для Windows 10 IoT.

Фактичне середовище розробки мікроконтролера може включати використання програміста EEPROM та програмних інструментів для створення нового зображення та натискання його на пристрій, або пристрій може мати необхідне підключення, щоб дозволити завантаження нового зображення через послідовне з'єднання або більше мережеве з'єднання.

Моє враження полягає в тому, що більшість мікроконтролерів мають компілятор з перехресною системою, хоча компілятор може підтримувати лише більш старі стандарти, такі як K&R або, можливо, C98. Перехресні компілятори часто мають нестандартні ключові слова для специфічних мікропроцесорних функцій, наприклад, farі nearключові слова для покажчиків зі старими процесорами 8080 та 8086 з їх сегментованою пам'яттю.

Існують також спеціальні мови, націлені на мікроконтролери, такі як мова програмування FORTH . Ці мови часто мають дизайн часу, який орієнтується на голий метал, щоб не було жодної операційної системи, окрім часу виконання мови.

Операційна система може варіюватися від практично неіснуючого до голих кісток Linux до такої спеціальної ОС, як freeRTOS або Windows Embedded або повністю роздутий Linux або Microsoft Windows. Дивіться цей проект SourceForge MINIBIAN для Raspberry Pi . Дивіться також цю електронну книгу, Baking Pi: Розвиток операційних систем, яка описує розробку рудиментарної ОС для Raspberry Pi в асемблері.

У цій статті журналу Visual Studio, Програмування Інтернету речей за допомогою Visual Studio , ви знайдете огляд багатьох різних пристроїв, а також огляд використання ID ID Visual Studio для розробки для Linux, а також Windows.

Зараз існує величезний і зростаючий набір позаштатних, програмованих, функціонуючих мереж мікроконтролерів. На дуже низькому рівні у вас є безліч простих 16- та 32-бітних пристроїв від багатьох традиційних виробників чіпів, таких як Texas Instruments. (Я трохи пограв з набором для розробки SensorTag, і це дуже весело, тому я думаю, що Watch DevPack також може бути чудовим набором інструментів для навчання.)

Деякі більш відомі пристрої мікроконтролера включають Arduino, BeagleBoard та Raspberry Pi. Усі ці середовища мають широку підтримку громади і готові підключити величезну кількість готових зовнішніх датчиків, двигунів, сервоприводів і всього іншого, що ви можете собі уявити. Adafruit, супермаркет для навчання електроніці, заснований Лімором "Ladyada" Fried, забезпечує всілякі периферійні пристрої для цих дощок, а також власну лінійку легких плат для розробки перу.

...

Найцікавішим набором пристроїв для розробників, знайомих з Microsoft .NET Framework та Visual Studio, може бути середовище, сумісне з Windows 10 IoT Core. Це пристрої на базі x86 та ARM, які підтримують програми універсальної платформи Windows (UWP), написані різними мовами, включаючи C #, Visual Basic, Python та Node.js / JavaScript. Ядро Windows 10 IoT підтримує пристрої, включаючи Raspberry Pi, Arrow DragonBoard 410C, Intel Joule та Compute Stick та MinnowBoard. Також є цікаві продуктові платформи, такі як Askey TurboMate E1.

Конкретний приклад програми мікроконтролера

Це зображення мікроконтролерної плати від автоматизованої кавоварки. Схоже, це стандартний компонент для автоматизованих кавоварок виробництва Китаю. Веб-сайт виробника друкується на друкованій платі.

Зображення складається з двох поглядів. Вид зліва - тильна сторона плати, що містить мікроконтролер та підтримуючу схему. Вид справа - це передня панель дошки з РК-екраном та набором кнопок, які використовуються для встановлення поточного часу та для виконання таких дій, як програмування часу початку тощо.

Вид праворуч вписується в носій, який потім вписується у отвір на передній частині кавоварки. Вимикачі на нижній друкованій платі приводяться в дію за допомогою вимикачів рукоятки. РК-дисплей, який видається спеціальним призначенням, використовується для відображення поточного часу та стану, а також для відображення користувальницького інтерфейсу при зміні налаштувань кавоварки. Червоний світлодіод використовується для вказівки, коли кавоварка фактично готує каву, і для вказівки, коли це зроблено, відключивши підсвічування.

введіть тут опис зображення

Мікроконтролер - це ELAN Microelectronics Corp EM78P447NAM (таблиця даних), що є 8-бітовим мікроконтролером. Деякі основні статистичні дані показують, що це маленький і мінімальний пристрій, однак це добре працює за призначенням. Наміром є розробка програмного забезпечення, яке потім завантажується в режим запису одного разу як частина виробництва.

• Низьке енергоспоживання:

* Less then 2.2 mA at 5V/4MHz

* Typically 35 µA, at 3V/32KHz

* Typically 2 µA, during sleep mode

• 4K × 13 біт на мікросхемі ROM

• Три біта захисту для запобігання вторгнення в коди пам'яті OTP

• Один регістр конфігурації для задоволення потреб користувачів

• 148 × 8 біт на мікросхемах (SRAM, загальний регістр)


2
Я не думаю, що це стосується питання. Звичайно, деякі продукти не є добре упакованими, але це стосується і SBC.
Шон Хуліхане

1
@SeanHoulihane, що я намагався зробити з цією відповіддю, це надати точку зору мікроконтролера на питання, зокрема, що існує широкий спектр пристроїв, які відповідають мітці мікроконтролера. Для ландшафту ОС більше, ніж для Linux, і більше мови для програмування, ніж python або C.
Річард Чемберс

1
Мені ви просто говорите, що світ MCU - це безлад. Я вважаю, що вводить в оману.
Шон Хуліхане

1
@SeanHoulihane Мені шкода, що твоє враження від моєї публікації полягає в тому, що світ MCU - це безлад. Інша інтерпретація полягає в тому, що світ MCU є однією з безлічі чудових альтернатив і можливостей, однак читач доводить власні упередження та забобони до будь-якої розповіді.
Річард Чемберс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.