Есть большой скачок между прототипированием на Pi и использованием микроконтроллера?

25

Этот вопрос , среди прочего, спрашивает, существует ли большая кривая обучения между использованием Python на Raspberry Pi для создания прототипа конечной точки и использованием микроконтроллера.

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

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

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

В частности, я спрашиваю о конечных точках IoT - поэтому не обязательно иметь полные ресурсы системы Linux для приложений, которые меня интересуют здесь. Стоит также подчеркнуть, что из-за проблем с питанием и задержкой реализация mcu является жестким требованием для приложений такого типа.

Шон Хулихейн
источник

Ответы:

12

Добавление к исчерпывающему ответу Джорджа и пункту 2) аппаратная поддержка. Даже если желаемое оборудование (например, Ethernet, WiFi, SD-карта) добавляется в микроконтроллер / Arduino через экраны или аналогичные платы расширения, библиотеки для их работы создают большую нагрузку на небольшую память (например, ATMEGA328 (типичный контроллер Arduino) имеет 32 КБ FLASH и 2 КБ ОЗУ). Особенно при объединении нескольких функций (сеть, дисплей, SD-карта) это может быть серьезным ограничением.

Несколько примеров из мира Arduino:

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

  • SD - карты (размер кода неизвестен , но , вероятно , не то, что большая проблема , если аппаратный SPI используется), по меньшей мере , 512 байт буфера RAM
  • Petit FAT FS требует ~ 2..4 кБ FLASH и ~ 44 байта оперативной памяти

Используя матричный дисплей:

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

  • uIP : требования к ОЗУ в диапазоне типичного размера пакета (> 1 кБ), однако, одночиповые контроллеры Ethernet, как правило, поставляются с встроенным буфером, который может содержать несколько кадров Ethernet максимального размера.

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

  • Стек IP с протоколами TCP и UDP для Arduino : минимум 128 КБ внешней памяти

  • IP через последовательный интерфейс: SerialIP ~ 9 КБ FLASH и «достаточно» RAM

В целом, программирование с такими ограничениями требует совершенно другого подхода и требует оптимизации с точки зрения пространства программы и размера кода (FLASH), данных времени выполнения (RAM) и скорости выполнения. Этот ответ хорошо продуман.

Поскольку вопрос, в частности, задается о платформе mbed, конечно, следует отметить, что она включает в себя функции, наиболее важные для IoT, а именно подключение, а также шифрование, аутентификацию и авторизацию. Он предположительно предлагает аппаратную поддержку Bluetooth Low Energy и IPv6 через беспроводную персональную сеть с низким энергопотреблением. Хотя эти функции подключения доступны только на перечисленных платах разработки с обычно> = 128 кБ FLASH и> = 16 кБ RAM. С другой стороны, меньшие по размеру платы разработки включают в себя системы с такими же маленькими микроконтроллерами, как ядро ​​ARM Cortex-M0 + с 16 КБ флэш-памяти, 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
Ник Т
1
он явно не намного меньше, чем Attiny85 :), но вы правы, если мы думаем, что не DIP, даже 85 - это кончик пальца.
Джордж Ю.
9

Да, это большой переход от программирования на Python к программированию с использованием типичных языковых инструментов на основе C на микроконтроллере. Фактически, во многих случаях вам может понадобиться написать некоторые, если не все, ваши приложения на ассемблере.

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

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

CyberFonic
источник
9

Да большая разница

Разница как днем, так и ночью, как в отношении аппаратного, так и программного обеспечения. Нет действительного сравнения вообще.

Когда использовать какой

Используйте Arduino, если ...

  • Ограниченность пространства делает Пи недопустимым.
  • Потребление энергии Пи было бы слишком много.
  • Деньги - это проблема (особенно если вам нужно несколько или несколько отдельных контроллеров в вашем проекте, каждый из которых выполняет очень простую логику).
  • Вы хотите стать мелким и грубым и работать на гораздо более низком уровне ради развлечения или получения знаний.
  • Вам нужна предельная простота и / или 100% -ное поведение в реальном времени и нулевая вероятность того, что что-то вне вашего контроля убьет вашу программу.
  • Вам не нужен Ethernet, сложные функции USB-хоста (то есть доступ к жестким дискам; использование его на стороне клиента, например, в качестве устройства HID, все в порядке) и так далее. Большинство из них могут быть установлены на Arduino (verrry slooowly), но с высокой стоимостью с точки зрения RAM / EPROM, а также функциональности. Поскольку нет вытесняющей многозадачности, задачи по разблокировке очень быстро усложняются.
  • У вас все в порядке с упрощенной средой разработки Arduino или с более глубоким копанием (т. Е. Сборкой программ самостоятельно), и - если вы не собираетесь использовать устройство с USB-загрузкой, например, Pro Micro, - купленный или самодельный комплект разработки / горелки.

Во всех остальных случаях Pi значительно удобнее для пользователя. Пи просто другой (медленный) компьютер.

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

На ваш вопрос о сложности - это относительно. Единственное время, когда Arduino стал для меня трудным, было трудно отладить проблемы синхронизации, особенно если он сочетался с сомнительной электроникой (например, электромагнитные помехи, слишком длинные кабели и т. Д.). Если вы не сомневаетесь в выборе языка (например, C для Arduino IDE), то вы сможете взломать любые библиотеки, которые используете. Тем не менее, он всегда будет более сложным, чем Pi, где вы можете, например, использовать язык сценариев по вашему выбору для не критичных ко времени вещей - их всегда будет легче разрабатывать и отлаживать.

Anoe
источник
Я не спрашиваю, какая платформа является лучшей - мой вариант использования требует mcu, в первую очередь из-за ограничений по мощности. Я вижу, что вопрос не был слишком ясен в этом вопросе.
Шон
Хорошо, тогда первой части ответа будет достаточно. Я оставлю все остальное как "дополнение", если хотите.
AnoE
7

Я считаю, что есть несколько моментов, которые еще не были указаны явно.

Среда разработки совершенно иная. На самом деле вы можете разрабатывать ПО Pi на 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.

Протокол ограниченных приложений используется для небольших ограниченных устройств, используемых в среде Интернета вещей. Чтобы получить представление о разнообразии аппаратного и программного обеспечения микроконтроллера, на этой странице о реализации протокола CoAP дается представление о среде, на которую он ориентирован. В нем упоминается операционная система Contiki, о которой я смутно слышал, а также более известные ОС, такие как iOS, OSX и Android. Упоминаются следующие языки программирования: Java, JavaScript, C, C #, Ruby, Go, Erlang, Rust и Python.

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

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

У меня сложилось впечатление, что большинство микроконтроллеров имеют кросс-компилятор C, хотя компилятор может поддерживать только более старые стандарты, такие как K & R или, возможно, C98. C кросс - компиляторы часто имеют нестандартные ключевые слова для микропроцессорных специфических особенностей, например, farи nearключевых слов для указателей со старыми 8080 и 8086 процессоров с их сегментированной памятью.

Есть также специальные языки, предназначенные для микроконтроллеров, такие как язык программирования FORTH . Эти языки часто имеют дизайн во время выполнения, который ориентирован на «голое железо», так что нет другой операционной системы, кроме времени выполнения языка.

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

В этой статье из журнала Visual Studio, « Программирование Интернета вещей с помощью Visual Studio» , представлен обзор множества доступных устройств, а также обзор использования Visual Studio IDE для разработки для Linux и Windows.

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

Некоторые более известные микроконтроллерные устройства включают Arduino, BeagleBoard и Raspberry Pi. Все эти среды имеют широкую поддержку сообщества и готовы подключить огромное количество готовых внешних датчиков, двигателей, сервоприводов и всего, что вы можете себе представить. Adafruit, супермаркет обучения электронике, основанный Лимором "Ladyada" Fried, предоставляет всевозможные периферийные устройства для этих плат, а также собственную линейку облегченных плат разработки Feather.

...

Наиболее интересным набором устройств для разработчиков, знакомых с 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 бит на чипе ПЗУ

• Три защитных бита для предотвращения вторжения кодов памяти OTP

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

• 148 × 8 битов в регистрах чипов (SRAM, регистр общего назначения)

Ричард Чемберс
источник
2
Я не думаю, что это решает вопрос. Конечно, некоторые продукты не очень хорошо упакованы, но это касается и SBC.
Шон
1
@SeanHoulihane, то, что я пытался сделать с этим ответом, состоит в том, чтобы предоставить точку зрения микроконтроллера по этому вопросу, в частности, что существует широкий спектр устройств, которые соответствуют метке микроконтроллера. В ландшафте ОС больше, чем в Linux, и в языке программирования больше, чем в python или C.
Ричард Чамберс
1
Для меня вы просто говорите, что мир MCU - это беспорядок. Что я чувствую, вводит в заблуждение.
Шон
1
@SeanHoulihane Мне очень жаль, что у меня сложилось впечатление, что мир MCU - это беспорядок. Другая интерпретация заключается в том, что мир MCU является одной из многих замечательных альтернатив и возможностей, однако читатель привносит свои предубеждения и предубеждения в любое повествование.
Ричард Чемберс