Вбудоване програмування для початківців: Arduino або Raspberry Pi? [зачинено]


32

Я студент інформатики і хочу розширити свої знання з вбудованого програмування та електротехніки.

Я читав тут, що використання таких інструментів, як мікроконтролер Arduino - хороший спосіб запустити.

Я в першу чергу програміст Java та Python, але маю певний досвід роботи в C ++. Крім того, я грав з ArchLinux.

Невеликий проект, який я хотів би зробити, - це керування лампочками через Wi-Fi через мій Arduino / Pi.

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

Як початківець я зіткнуся з багатьма питаннями, тому велике і корисне співтовариство (яке, як я чую, має Пі) - це великий плюс.

Отже, який з них більше підходить для початківців самоучок: Arduino або Raspberry Pi?

Заздалегідь спасибі.

Редагувати:

З ваших багатьох чудових відповідей, а також цих вартісних статей я дійшов до наступного

Висновки

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

  2. Поглиблення має значення: я можу пізніше вивчити AVR або mbed мікроконтролери, щоб дізнатися більше про деталі низьких рівнів обчислень.

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

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

  5. Крім того, я знайшов цю книгу, яка повинна допомогти мені дізнатися більше про електротехніку під час експериментів з Arduino.

  6. Мабуть, важко зробити мій проект з лампочкою з Arduino. Але це нормально. Я впевнений, що можу придумати інші мотиваційні проекти або отримати натхнення тут чи тут .

Дякую всім за відповіді.


2
Ардуїно простіше. Я припускаю, що це краща відправна точка для «початківця-самовчення». В даний час Arduino має більшу спільноту виробників додатків, наприклад, для "щитів" (плагін-дощок). Pi - це краще співвідношення ціни та якості, але я думаю, що має менше інтерфейсів низького рівня (кількість GPIO, I2C тощо), ніж багато варіантів Arduino. У мене є один з кожного, якщо вас менше цікавлять речі низького рівня, я б використовував Pi.
RedGrittyBrick

Відповіді:


35

Якщо ви дійсно хочете "зрозуміти, як працюють комп'ютери на низькому рівні", то можна стверджувати, що ні Arduino, ні Raspberry Pi не підходять. Обидві ці платформи (їх апаратне та програмне забезпечення) розроблені спеціально для приховування деталей низького рівня, щоб полегшити людям, які не цікавляться цими деталями, досягти своїх цілей вищого рівня шляхом створення вбудованих додатків.

Натомість, я б рекомендував вибрати сім'ю процесорів, яка має відносно "чисту" архітектуру набору інструкцій, і навчитися програмувати її мовою складання. Наприклад, я зробив багато свого раннього кодування на мінікомп'ютері PDP-11, який мав (ну, мав) дуже чисту 16-бітну архітектуру. Мені кажуть, що сім'я TI MSP430 дуже схожа. У сучасних 8-бітових сім'ях можна стверджувати, що AVR трохи чистіший за PIC. Або ви можете піти в стару школу і подивитися на M68K або навіть на Z80.

Отже, це насправді залежить від того, які ваші цілі є насправді: Ви хочете створити вбудовані програми, чи ви хочете вивчити самі процесори?

Якщо ви хочете почати з першого, а потім перейти більше до другого пізніше, можливо, вам слід почати з Arduino зараз, а потім перейти до програмування базового процесора AVR на нижчому рівні пізніше.

Я даю цю рекомендацію частково через простий характер програми, яку ви запропонували, а частково через шлях міграції. Набагато складніше перейти на програмування низького рівня на Pi. Він заснований на складному SoC, який вимагає зовсім небагато програмної "інфраструктури" лише для його роботи. За допомогою AVR ви можете легко запрограмувати прямо до "голого металу", якщо ви так схильні.


Дякую, я хотів би почати зі створення вбудованих додатків і, можливо, пізніше перейти до вивчення процесорів.
Маттіас Браун

1
Ви можете запрограмувати голий метал Pi без будь-яких проблем, не потрібно знати жодної інфраструктури. Просто ігноруйте відео, аудіо та мережу, і у вас є швидкий чіп ARM з великою кількістю оперативної пам’яті, який завантажується для вас з SD-карти. Крім того, поставте завантажувач на SD-карту і завантажте свою програму в оперативну пам'ять за допомогою послідовного порту.
Wouter van Ooijen

2
Для розвитку горілого та аварійного оздоблення металочерепиці Arduino з готовим завантаженням завантажувача і різко спрощеними вимогами до запуску буде набагато простіше розпочати роботу (тобто трактувати це як борт розробників ATMEGA)
Кріс Страттон

13

Arduino може бути використаний з Arduino SDE, який забезпечує певну функціональність у "прихованому" способі, але він також може бути використаний з простим асемблером, C або C ++ (і, мабуть, з багатьма іншими мовами, але такі, здається, є менш поширений). Існує велика різноманітність додаткових плат, званих щитами, в більшості випадків із підтримкою програмного забезпечення, яке інтегрується з Arduino SDE. Об'єднання декількох щитів може бути складним. Ethernet можливо, але це розтягує можливості. Хост USB стека є AFAIK вищий за свої можливості.

Оригінальний Arduino містить чіп AVR, але є альтернативи на основі мікросхем PIC та LPC (ARM).

Raspberry Pi розроблений як одноплановий комп'ютер, на якому працює зменшений Linux. Як такий, він може бути запрограмований на найрізноманітніших мовах (від асемблера до Python і всього між ними, включаючи C і C ++). Це може бути USB-хост, тому додати ключ USB WiFi не повинно бути жодних проблем. На платі Pi є роз'єм IO, на якому доступні деякі штифти, і ви можете отримати доступ до цих штифтів із свого додатка Linux, але це трохи незграбно.

Хоча це не було розроблено для використання таким чином, це не проблема запрограмувати Raspberry Pi на голий метал (= без будь-якої ОС). Тепер у вас є прямий і швидкий доступ до штифтів IO, але ви втрачаєте можливість запускати драйвери Liunux, тому додавати WiFi буде складно. AFAIK поки не так багато апаратних розширень (із супровідними бібліотеками програм) для RaPi, як для Arduino, але я відчуваю, що це може змінитися.

Загалом, я б сказав, що ви не можете помилитися ні з одним, але якщо ви дійсно хочете WiFi, я рекомендую RaPi з Linux.


1
Одним поганим моментом Raspberry Pi є відсутність офіційної документації. Це здебільшого секретно захищені речі Broadcom, які просто смертні не можуть доторкнутися до цього. Якщо потрібна швидкість ARM, існують інші платформи, які мають набагато кращу документацію для роботи з голими металами, які дешевіше і простіше отримати в порівнянні з Raspberry Pi. З іншого боку, Raspberry Pi набагато ближче до "справжнього комп'ютера", ніж різні дешеві комплекти ARM від Texas Instruments, STmicro або Freescale.
AndrejaKo

3
AFAIK відсутність документації на відео, а може бути і на аудіозапчастини (але я читав, що драйвери для цих частин зараз відкриті - тому є хоч якась форма документації, якщо ви хочете використовувати ці частини.) Якщо ви просто робите вигляд цих частин немає там, вам залишається дуже багато удару (оперативна пам'ять і потужність процесора) за ваші гроші. Кого хвилює, що в типовому додатку для мікроконтролера є додаткові речі, які ти все одно не хочеш використовувати? Мені не потрібен повноцінний графічний движок. І якщо мені потрібен інтерфейс рівня пікселів, він є.
Wouter van Ooijen

Це не лише аудіо- та відеозаписи, документація GP pi для піо є дуже рідкою порівняно зі звичайними вбудованими пристроями.
Кріс Страттон

1
У мене не було проблем з використанням графічних відеозаписів з використанням наявної документації. Чи були у вас проблеми?
Wouter van Ooijen

4

На мою думку, це зводиться до цього: ви хочете програмувати в ОС або на самому апаратному забезпеченні (на зразок створення власної ОС)?

З RaspberryPi ви майже використовуєте Debian Linux. Це добре, і Linux справді корисний. Якщо ви дізнаєтесь про це, ви можете перерости на інші ПК, сервери тощо. Ви, ймовірно, знову програмуєте в Python, якщо ви з ним знайомі, тому що це добре і легко робити на Pi.

Якщо ви хочете побачити, як це програмувати щось дійсно крихітне, дешеве і малопотужне, спробуйте Arduino. Весь ваш код працює на тому маленькому мікросхемі, ви навіть можете вийняти його з дошки (якщо це DIP) і покласти його на дошку і переконатися в тому, як мало обладнання потрібно, щоб основний маленький комп'ютер працював. Це було досить дивовижно для мене принаймні. Все, що ви пишете, буде працювати на цьому чіпі, тому вся його "ОС" буде вашою маленькою циклом запуску. Ідентично / мовою Arduino IDE приємно розпочати роботу, але пізніше перейти до C / C ++ буде дуже корисно знати. Якщо ви дійсно ввійдете в нього в цей момент, ви можете легко використовувати свої навички C на інших мікрофонах, таких як мікросхеми ARM Cortex M або TI MSP430 для дійсно низької потужності.

Я б запропонував вам поїхати до Ардуїно, якщо вам більше захочеться вивчати EE та вбудовані мови, головним чином через те, як легко зробити власні схеми для частини EE. Ви не можете дуже легко прибрати чіп Raspberry Pi до власної дошки або сильно заплутатися з обладнанням; також це в значній мірі система Linux. Просто закрутіть VM в цей момент і вивчіть там Linux.


3

Те, що підходить насправді, залежить від деталей завдання.

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

Однак, pi має певну складність - з боку програмного забезпечення, хоча у вас є досвід роботи з конфігурацією linux, а також з обмеженнями його живлення - кілька Wi-Fi-ключів працюватимуть безпосередньо, для інших вам знадобиться вбудований концентратор або паяти обхідні елементи. навколо поліфуз.

На шляху до Arduino, якщо ви не отримаєте адаптер Wi-Fi, який реалізує повний стек мережі та імітує послідовний канал, ви в кінцевому підсумку використовуєте велику частину наявної пам’яті для реалізації мережі; люди це роблять, але це може бути щільно підходить.

Власне кажучи, жодна платформа не є справді ідеальною для цього завдання - пі, виявляється, трохи більше іграшки з обмеженнями потужності, навісним кріпленням SD-карти та позбавленою документацією, ніж було б ідеально як вбудований будівельний блок, і Arduino має мало бортових ресурсів за свою ціну. При цьому, існує не так багато широко популярних альтернатив, які є вищими, хоча існує багаторічна історія злому цифрових вводу-виводу на WiFi-маршрутизатори на базі Linux, а деякі з них зараз є конкурентоспроможними / компактними.


3

Я б рекомендував mbed-процесор. Він має гарний баланс абстракції високого рівня (для початку) в C ++, і тоді ви можете опуститися до C і почати працювати з нижчим рівнем.

Після того, як вам буде швидко і вам зручніше перерви, таймінги та читання інформації (як аналогової, так і цифрової), тоді перейдіть до простого ПОС. Мені подобається 16F886, це дасть вам набагато краще уявлення про те, що відбувається насправді на рівні реєстру. Використовуйте компілятор Hi-Tech C в якості вихідної точки, не потрібно йти на збірку, якщо ви цього не хочете.

За допомогою PIC ви можете почати турбуватися про споживання енергії, розмір програми, пам'ять, затримки часу.

Звідти ви можете повернутися до більшого процесора, наприклад mbed або arduino, знаючи, що ви краще уявляєте, що відбувається всередині.


2

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


2
Я не дивився опублікованого часу, він просто з'явився мені в запропонованих темах, і я хотів лише допомогти.
Мануель Хоакін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.