Встроенное программирование для начинающих: Arduino или Raspberry Pi? [закрыто]

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

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

Я в основном программист на Java и Python, но имею некоторый опыт работы с C++. Кроме того, я играл с ArchLinux.

Небольшой проект, который я хотел бы сделать, — это управление некоторыми лампочками через Wi-Fi через мой Arduino/Pi.

Из того, что я прочитал, и Pi, и Arduino предназначены для студентов, но я не могу понять, что больше подходит для кого-то вроде меня, кто хочет понять, как работают компьютеры на низком уровне.

Как новичок, я столкнусь со многими вопросами, поэтому большое и полезное сообщество (которое, как я слышал, есть у Pi) — это большой плюс.

Итак, что больше подходит для новичка-самоучки: Arduino или Raspberry Pi?

Заранее спасибо.

Редактировать:

Из ваших многочисленных замечательных ответов, а также из этих полезных статей я пришел к следующему

Выводы

  1. Я выбираю Arduino в качестве отправной точки для встроенного программирования, потому что это более простая система, чем Pi, и она позволяет мне легче работать ближе к металлу.

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

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

  4. Я также нашел проекты , которые используют один Pi для управления Arduino. Я нахожу это интригующим, поскольку оба устройства вполне доступны по цене, и мне нравится использовать возможности Linux, которые могут работать на Pi.

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

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

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

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

Ответы (6)

Если вы действительно хотите «понять, как работают компьютеры на низком уровне», то можно возразить, что ни Arduino, ни Raspberry Pi не подходят. Обе эти платформы (их аппаратное и программное обеспечение) разработаны специально для сокрытия деталей низкого уровня, чтобы облегчить людям, которым эти детали не важны, достижение целей более высокого уровня путем создания встроенных приложений.

Вместо этого я бы рекомендовал выбрать семейство ЦП с относительно «чистой» архитектурой набора инструкций и научиться программировать его на языке ассемблера. Например, большую часть своего раннего кода я выполнял на миникомпьютере PDP-11, который имел (ну, имел) очень чистую 16-битную архитектуру. Мне сказали, что семейство TI MSP430 очень похоже. В современных 8-битных семействах можно утверждать, что AVR немного чище, чем PIC. Или вы можете пойти по старинке и посмотреть на M68K или даже на Z80.

Так что это действительно зависит от того, какие у вас цели на самом деле: хотите ли вы создавать встраиваемые приложения или хотите изучить сами процессоры?

Если вы хотите начать с первого, а затем перейти ко второму позже, возможно, вам следует начать с Arduino сейчас, а затем перейти к программированию базового процессора AVR на более низком уровне позже.

Я даю эту рекомендацию отчасти из-за простоты предложенного вами приложения, а отчасти из-за пути миграции. Гораздо сложнее перейти на низкоуровневое программирование на Pi. Он основан на сложной SoC, для работы которой требуется довольно много программной «инфраструктуры». С AVR вы можете легко программировать вплоть до «голого железа», если хотите.

Спасибо, я хотел бы начать с создания встроенных приложений и, возможно, позже перейти к изучению процессоров.
Вы можете запрограммировать Pi без каких-либо проблем, вам не нужно знать какую-либо инфраструктуру. Просто не обращайте внимания на видео, аудио и работу в сети, и вы получите быстрый чип ARM с большим объемом оперативной памяти, которая загружается для вас с SD-карты. Или поместите загрузчик на SD-карту и загрузите приложение в ОЗУ через последовательный порт.
Для разработки «голого железа» Arduino с готовым к работе загрузчиком и значительно более простыми требованиями к запуску будет намного проще (т. Е. Рассматривая его как плату разработчика ATMEGA).

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

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

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

Хотя он не был разработан для использования таким образом, программировать Raspberry Pi на «голом железе» (= без какой-либо ОС) не проблема. Теперь у вас есть прямой и быстрый доступ к контактам ввода-вывода, но вы теряете возможность запуска драйверов Liunux, поэтому добавить WiFi будет сложно. Насколько я знаю, пока не так много аппаратных расширений (с соответствующими программными библиотеками) для RaPi, как для Arduino, но я чувствую, что это может измениться.

В целом, я бы сказал, что вы не ошибетесь ни с тем, ни с другим, но если вам действительно нужен WiFi, я бы порекомендовал RaPi с Linux.

Одним из недостатков Raspberry Pi является отсутствие официальной документации. В основном это сверхсекретные проприетарные разработки Broadcom, к которым простые смертные не имеют права прикасаться. Если требуется скорость ARM, есть другие платформы, которые имеют гораздо лучшую документацию для работы с «голым железом», которые дешевы и их легче получить по сравнению с Raspberry Pi. С другой стороны, Raspberry Pi гораздо ближе к «настоящему компьютеру», чем различные дешевые наборы ARM от Texas Instruments, STmicro или Freescale.
Насколько я знаю, отсутствие документации связано с видео и, возможно, аудио частями (но я читал, что драйверы для этих частей теперь с открытым исходным кодом, так что есть хоть какая-то документация, если вы хотите использовать эти части.) Если вы просто притворяетесь, этих частей нет, у вас остается очень много энергии (оперативная память и мощность процессора) за ваши деньги. Кого волнует, что есть дополнительные вещи, которые вы все равно не хотите использовать в типичном приложении микроконтроллера? Мне не нужен полноценный графический движок. И если мне нужен интерфейс на уровне пикселей, он есть.
Это не только аудио и видео, документация GPIO pi очень скудна по сравнению с обычными встроенными устройствами.
У меня не было проблем с использованием GPIO, используя доступную документацию. Вы нашли какие-либо проблемы?

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

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

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

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

То, что подходит, действительно зависит от деталей задачи.

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

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

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

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

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

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

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

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

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

Я не следил за временем размещения, оно просто появилось у меня в предложенных темах и я хотел только помочь.