Встроенное программирование для начинающих: 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. Я также нашел проекты, которые используют один Pi для управления Arduino. Я нахожу это интригующим, поскольку оба устройства вполне доступны, и мне нравится использовать возможности Linux, которые могут работать на Pi.

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

  6. Кажется, трудно сделать мой проект лампочки с Arduino. Но это нормально. Я уверен, что могу придумать другие мотивирующие проекты или получить вдохновение здесь или здесь .

Спасибо всем за ваши ответы.


2
Arduino проще. Я полагаю, что это лучшая отправная точка для "начинающего самоучки". 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
Вы можете без проблем программировать пи-голый металл, не нужно знать никакой инфраструктуры. Просто игнорируйте видео, аудио и сетевое взаимодействие, и у вас есть быстрый чип ARM с большим количеством оперативной памяти, который загружается для вас с SD-карты. В качестве альтернативы, поместите загрузчик на SD-карту и загрузите приложение в оперативную память, используя последовательный порт.
Wouter van Ooijen

2
Для разработки с нуля и сбоев Arduino с готовым к загрузке загрузчиком и радикально более простыми требованиями к запуску будет гораздо проще (например, рассматривая его как плату разработки ATMEGA)
Chris Stratton

13

Arduino можно использовать с Arduino SDE, который предоставляет некоторые функции «скрытым» способом, но он также может использоваться с простым ассемблером, C или C ++ (и, вероятно, со многими другими языками, но они, кажется, реже). Существует большое разнообразие плат add-one, называемых щитами, в большинстве случаев с программным обеспечением поддержки, которое интегрируется с Arduino SDE. Объединить несколько щитов может быть сложно. Ethernet возможен, но это расширяет возможности. USB-хост-стек является AFAIK за пределами своих возможностей.

Оригинальный Arduino содержит чип AVR, но есть альтернативы, основанные на чипах PIC и LPC (ARM).

Raspberry Pi спроектирован как одноплатный компьютер под управлением уменьшенной версии Linux. Как таковой он может быть запрограммирован на самых разных языках (от ассемблера до Python и всего, что между ними, включая C и C ++). Это может быть USB-хост, поэтому не должно быть проблем с добавлением USB WiFi-ключа. Pi PCB имеет разъем ввода-вывода, на котором доступны некоторые контакты, и вы можете получить доступ к этим контактам из вашего приложения Linux, но это немного неуклюже.

Несмотря на то, что он не был разработан для такого использования, нет проблем запрограммировать Raspberry Pi на голое железо (= без какой-либо ОС). Теперь у вас есть прямой и быстрый доступ к выводам ввода-вывода, но вы теряете возможность запуска драйверов 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 отсутствие документации связано с видео и, возможно, с аудио частями (но я читал, что драйверы для этих частей теперь с открытым исходным кодом - так что, по крайней мере, есть какая-то форма документации, если вы хотите использовать эти части.) Если вы просто притворяетесь эти части не там, у вас остаётся очень много (ОЗУ и мощность процессора) за ваши деньги. Кого волнует, что есть дополнительные вещи, которые вы не хотите использовать в любом случае в типичном приложении микроконтроллера? Мне не нужен полноценный графический движок. И если мне нужен интерфейс на уровне пикселей, он есть.
Воутер ван Оойен

Это не только аудио и видео, документация pi GPI очень скудна по сравнению с обычными встроенными устройствами.
Крис Страттон

1
У меня не было проблем с использованием GPIO с использованием доступной документации. Вы нашли какие-либо проблемы?
Воутер ван Оойен

4

На мой взгляд, все сводится к следующему: вы хотите программировать в ОС или на самом оборудовании (что-то вроде создания вашей собственной ОС)?

С RaspberryPi вы почти наверняка будете использовать Debian Linux. Это нормально, а Linux действительно полезен. Если вы узнаете это, вы можете перейти на другие ПК, серверы и т. Д. Вы, вероятно, будете снова программировать на Python, если вы знакомы с ним, потому что это хорошо и легко сделать на Pi.

Если, с другой стороны, вы хотите увидеть, каково это программировать что-то действительно крошечное, дешевое и маломощное, попробуйте Arduino. Весь ваш код работает на этом маленьком чипе, вы можете даже удалить его с платы (если это DIP-код) и поместить его на макетную плату, и вы сами увидите, как мало аппаратного обеспечения вам нужно для работы базового небольшого компьютера. Это было довольно удивительно для меня, по крайней мере. Все, что вы пишете, будет работать на самом чипе, поэтому вся его «ОС» будет вашей маленькой циклом выполнения. С IDE / языком Arduino приятно начинать, но позже будет полезно узнать C / C ++. Если вы действительно в этом разбираетесь, вы можете легко использовать свои навыки C на других микросхемах, таких как ARM Cortex M или TI MSP430, для действительно низкого энергопотребления.

Я бы посоветовал вам пойти в Arduino, если вам нужно больше изучать EE и встроенные языки, в основном из-за того, как легко создавать собственные схемы для EE. Вы не можете очень легко удалить чип Raspberry Pi на свою собственную плату или сильно испортить аппаратное обеспечение; также это в значительной степени система Linux. Просто раскрутите виртуальную машину и изучите Linux там.


3

Что уместно, действительно зависит от деталей задачи.

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

Тем не менее, pi имеет некоторую сложность - со стороны программного обеспечения, хотя у вас есть некоторый опыт работы с конфигурацией Linux, а также с ограничениями по питанию - несколько ключей Wi-Fi будут работать напрямую, для других вам потребуется концентратор с питанием или для пайки байпасов. вокруг полифусов

На пути Arduino, если вы не получите адаптер Wi-Fi, который реализует полный сетевой стек и имитирует последовательный канал, вы в конечном итоге будете использовать большую часть доступной памяти для реализации сети; люди делают это, но это может быть плотно.

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


3

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

Как только вы освоитесь с прерываниями, таймингами и считыванием информации (как аналоговой, так и цифровой), переходите к простой PIC. Мне нравится 16F886, это даст вам гораздо лучшее представление о том, что на самом деле происходит на уровне регистров. Используйте компилятор Hi-Tech C в качестве отправной точки, нет необходимости переходить на сборку, если вы действительно этого не хотите.

С PIC вы можете начать беспокоиться о энергопотреблении, размере программы, памяти, задержках по времени.

Оттуда вы можете вернуться к более крупному процессору, такому как mbed или arduino, зная, что у вас есть лучшее представление о том, что происходит внутри.


2

Я начал с Arduino, и когда я понял, как это работает, я перешел на Pic, и мы могли сказать, что это удалось. Я сделал несколько ярких проектов с Arduino, и это легко, потому что в Интернете у вас есть много примеров кода. Raspberry pi все еще растет, и помощи Arduino не так много. Поэтому, на мой взгляд, я рекомендую вам начать с Arduino, а когда вы достигнете некоторого уровня, перейдите на микроконтроллер.


2
Я не смотрел опубликованное время, оно просто показалось мне в предложенных темах, и я только хотел помочь.
Мануэль Хоакин
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.