面向初学者的嵌入式编程:Arduino 还是 Raspberry Pi?

电器工程 Arduino 嵌入式 树莓派
2022-01-11 14:11:27

我是一名计算机科学专业的学生,​​我渴望扩展我在嵌入式编程和电气工程方面的知识。

我在这里读到使用像 Arduino 微控制器这样的工具是一个很好的开始方式。

我主要是一名 Java 和 Python 程序员,但在 C++ 方面有一些经验。此外,我还玩弄了 ArchLinux。

我想做的一个小项目是通过我的 Arduino/Pi 上的 Wi-Fi控制一些灯泡。

从我读过的内容来看,Pi 和 Arduino 都是为学生设计的,但我不知道哪个更适合像我这样想了解计算机如何在底层工作的人。

作为一个初学者,我会遇到很多问题,所以一个大而有用的社区(我听说 Pi 有)是一个很大的优势。

那么哪个更适合自学初学者:Arduino 还是 Raspberry Pi?

提前致谢。

编辑:

从您的许多出色答案以及这些有价值的 文章中,我得出以下结论

结论

  1. 我选择 Arduino 作为嵌入式编程的入口点,因为它是一个比 Pi 更简单的系统,并且让我更容易接近金属。

  2. 深入研究是有价值的:我以后可能会研究AVRmbed微控制器,以了解更多关于计算的低级细节。

  3. 这两种设备都允许我在没有操作系统的情况下进行编程,这是我想要的(起初)。

  4. 我还发现 了使用一个 Pi 来控制 Arduino 的项目。我觉得这很有趣,因为这两种设备都很实惠,而且我喜欢使用可以在 Pi 上运行的 Linux 的强大功能。

  5. 此外,我发现这本书可以帮助我在试验 Arduino 时了解更多关于电气工程的知识。

  6. 用 Arduino 做我的灯泡项目似乎很困难。但没关系。我相信我可以在这里这里想到其他激励项目或获得灵感。

谢谢大家的答案。

4个回答

如果您真的想“了解计算机如何在底层工作”,那么可以说 Arduino 和 Raspberry Pi 都不适合。这两个平台(它们的硬件和软件)都是专门为隐藏低级细节而设计的,以便让关心这些细节的人通过创建嵌入式应用程序来实现更高层次的目标。

相反,我建议选择具有相对“干净”的指令集架构的 CPU 系列,并学习如何用汇编语言对其进行编程。例如,我在 PDP-11 小型计算机上进行了很多早期编码,它有(嗯,有)非常干净的 16 位架构。我听说 TI MSP430 系列非常相似。在现代 8 位系列中,可以说 AVR 比 PIC 更干净一些。或者你可以去老派看看 M68K 甚至 Z80。

所以,这真的取决于你的实际目标是什么:你想创建嵌入式应用程序,还是想研究处理器本身?

如果您想从前者开始,然后再转向后者,也许您现在应该从 Arduino 开始,然后再迁移到对底层 AVR 处理器进行编程。

我提出这个建议的部分原因是您建议的应用程序的简单性,部分原因是迁移路径。在 Pi 上迁移到低级编程要困难得多。它基于一个复杂的 SoC,需要相当多的软件“基础设施”才能运行。如果您愿意,可以使用 AVR 轻松编程到“裸机”。

Arduino 可以与 Arduino SDE 一起使用,它以“隐藏”的方式提供一些功能,但它也可以与普通汇编程序、C 或 C++ 一起使用(并且可能与许多其他语言一起使用,但那些似乎是不常见)。有多种称为屏蔽的附加板可用,大多数情况下都带有与 Arduino SDE 集成的支持软件。组合多个盾牌可能很棘手。以太网是可能的,但这会扩展功能。USB 主机堆栈超出了它的能力范围。

最初的 Arduino 包含一个 AVR 芯片,但也有基于 PIC 和 LPC (ARM) 芯片的替代品。

Raspberry Pi 被设计为运行缩小版 Linux 的单板计算机。因此,它可以用多种语言进行编程(从汇编程序到 Python,以及介于两者之间的所有语言,包括 C 和 C++)。它可以是一个USB主机,所以添加一个USB WiFi加密狗应该没有问题。Pi PCB 有一个 IO 连接器,上面有一些引脚可用,您可以从 Linux 应用程序访问这些引脚,但感觉有点笨拙。

虽然它的设计初衷不是为了以这种方式使用,但对 Raspberry Pi 裸机(= 没有任何操作系统)进行编程是没有问题的。现在您可以直接快速地访问 IO 引脚,但是您失去了运行 Liunux 驱动程序的能力,因此添加 WiFi 将很困难。AFAIK 到目前为止,RaPi 的硬件扩展(附带软件库)没有 Arduino 那么多,但我的直觉是这可能会改变。

总而言之,我会说你不会出错,但如果你真的想要 WiFi,我会推荐使用 Linux 的 RaPi。

在我看来,它归结为:你想在操作系统中编程还是在硬件本身上编程(有点像制作你自己的操作系统)?

使用 RaspberryPi,您几乎可以使用 Debian Linux。这很好,Linux 真的很有用。如果你学会了这一点,你可以发展到其他 PC、服务器等。如果你熟悉它,你可能会再次用 Python 编程,因为它在 Pi 上很好而且很容易做到。

另一方面,如果您想了解对非常小的、便宜且低功耗的东西进行编程是什么感觉,请尝试使用 Arduino。你所有的代码都在那个小芯片上运行,你甚至可以把它从板上取下来(如果它是一个 DIP 芯片),然后把它放在一个面包板上,你自己看看你需要多少硬件才能让一台基本的小型计算机正常工作。这至少对我来说是相当惊人的。您编写的所有内容都将在该芯片本身上运行,因此其整个“操作系统”将成为您的小运行循环。Arduino IDE/语言很容易上手,但以后了解 C/C++ 会非常有用。如果你真的在那个时候开始使用它,你可以很容易地在其他微型芯片上使用你的 C 技能,比如 ARM Cortex M 芯片或 TI 的 MSP430 以实现真正的低功耗。

如果你更关心学习 EE 和嵌入式语言,我建议你去 Arduino,主要是因为为 EE 部分制作自己的电路是多么容易。你不能很容易地把 Raspberry Pi 的芯片移到你自己的板上,或者把硬件弄得乱七八糟。它也几乎是一个Linux系统。那时只需启动一个 VM 并在那里学习 Linux。

什么是合适的实际上取决于任务的细节。

如果您需要 wifi,您可能会发现 Raspberry Pi 是一种更具成本效益的解决方案,因为您可以使用便宜的 wifi 加密狗。

然而,pi 有一些复杂性——在软件方面,虽然你有一些 linux 配置经验,而且在它的电源限制方面——一些 wifi 加密狗可以直接工作,对于其他人你需要一个有源集线器或焊接旁路在 polyfuses 周围。

在 Arduino 路径上,除非您获得一个实现完整网络堆栈并模拟串行通道的 wifi 适配器,否则您最终将使用大部分可用内存用于网络实现;人们会这样做,但它可能会很紧。

就意见而言,这两个平台都不是这个任务的理想选择 - 与作为嵌入式构建块的理想相比,pi 因其功率限制、悬垂的 SD 卡安装和隐藏的文档而更像是一个玩具,并且 Arduino 的板载资源很少。就是说,没有很多广受欢迎的替代品是优越的,尽管将数字 I/O 入侵到基于 linux 的 wifi 路由器上的历史悠久,其中一些现在具有竞争力的便宜/紧凑。