在使用Pi进行原型设计和使用微控制器之间有很大的跳跃吗?


25

这个问题除其他事项外,询问在Raspberry Pi上使用Python进行端点原型设计和使用微控制器之间是否存在较大的学习曲线。

显然,功耗有很大的改善(以降低处理器吞吐量为代价),因此有充分的理由将MCU方法用于需要电池供电的产品。

坚持使用运行Linux的单板计算机的潜在原因之一是,假设该应用程序可以用高级语言(应该有很多标准)编写,则没有新的软件需要学习(python或类似版本以上)。库)。

在嵌入式开发平台上,可能的选择是C ++(mbed或arduino)或micropython。我的印象是,尽管平台确实具有各自的优势,但它们与编写在Linux下运行的代码相比并没有明显不同或更为复杂。我是否错过了与软件开发人员相关的任何内容?

具体来说,我想问的是IoT端点-因此,对于我在这里感兴趣的应用程序来说,拥有Linux系统的全部资源并不是必需的。还需要强调的是,功率和延迟方面的考虑使mcu实施成为此类应用程序中的硬性要求。

Answers:


12

添加到George的全面答案和要点2)硬件支持。即使通过屏蔽板或类似的扩展板将所需的硬件(例如,以太网,WiFi,SD卡)添加到微控制器/ Arduino,用于操作它们的库也会对小内存(例如ATMEGA328(典型的Arduino控制器))造成很大的压力。具有32Kb的FLASH和2Kb的RAM)。尤其是在组合多个功能(联网,显示,SD卡)时,这可能是一个严重的限制。

Arduino世界的一些示例:

支持SD卡和简单文件系统(FAT):

  • SD卡(代码大小未知,但如果使用硬件SPI,可能不会成为大问题),至少512字节RAM缓冲区
  • Petit FAT FS要求〜2..4 kB闪存和〜44字节RAM

使用矩阵显示:

带有TCP / IP协议栈的以太网:

  • uIP:RAM的要求在典型的数据包大小(> 1 kB)范围内,但是,单芯片以太网控制器通常带有可容纳几个最大大小的以太网帧的片上缓冲器。

    只需200字节的RAM即可运行uIP实现,但是这种配置将提供极低的吞吐量,并且仅允许少量同时连接。(来源

  • 带有TCP和UDP协议的Arduino IP堆栈:至少128 kB外部存储器

  • 串行接口上​​的IP:SerialIP〜9 kB闪存和足够的 RAM

总而言之,受这些限制的编程需要完全不同的方法,并且需要在程序空间和代码大小(FLASH),运行时数据(RAM)和执行速度方面进行优化。这个答案很好地充实了。

正如这个问题专门针对mbed平台提出的问题,值得注意的是,它包括与IoT最相关的功能,即连接以及加密,身份验证和授权。据称,它通过低功耗无线个人局域网提供了蓝牙低功耗和IPv6的硬件支持。尽管这些连接功能仅在列出的开发板上具有> = 128 kB FLASH和> = 16 kB RAM的情况下才可用。另一方面,较小的开发板包括带有ARM Cortex-M0 + Core的小型微控制器的系统,具有16KB闪存,4KB RAM(即不比中型Arduino多很多)而没有专用连接。


在我的假设中,资源限制是最大的缺口-容易忘记,大多数人在大多数时间没有这些问题的情况下发展。
肖恩·霍利哈内

20

这取决于您要执行的操作。

  1. 最大的差距是您提到的微控制器(例如Arduino)没有运行多任务操作系统(例如Linux)。这意味着,如果您的应用程序依赖于多任务或多线程,那么在Arduino上运行可能会变得更加困难甚至无法实现。

  2. 第二个差距是硬件支持。例如,Raspberry Pi开箱即用地支持相机,USB音频,以太网,WiFi。Arduino并没有直接支持这些功能,虽然您可以使用各种屏蔽(例如USB主机,以太网或WiFi),但是使用它们并不像在Raspberry Pi上使用网络那样简单。

  3. 第三个缺口是可用资源。大多数微控制器甚至无法接近Raspberry Pi提供的资源。例如,即使是第一台Raspberry Pi也提供了运行在700MHz的CPU和256Mb的RAM,并可以用于32Gb的存储。典型的基于ATMEGA328的Arduino Uno运行于16MHz,具有32Kb的存储和2Kb的RAM。

因此,对于来自PC的开发人员来说,使用Raspberry Pi绝对容易得多。使用微控制器的主要优点是:

  • 成本(中文版的Arduino Nano的单价不到2美元,含运费)
  • 功耗(可以很好地优化微控制器以降低功耗-如果必须依靠电池供电,则很重要);
  • 实时可用性,即实时响应信号变化的能力;
  • 尺寸(Arduino Mini的宽度是Raspberry Pi Zero的两倍,如果您不需要那么多的引脚,则ATTINY85的尺寸不到一美分,并且无需晶体即可工作)。

如果这些都不重要,那么使用Raspberry Pi绝对更有意义。


3
电池供电和大量资源需求并不是使用MCU的驱动力-因此,我假设10-100 MHz处理器就足够了。尽管SPI可能等同于USB的mcu,但是使用外设的有效点。
肖恩·霍利哈内

2
仅仅拥有一辆公共汽车是不够的。考虑在Linux上使用WiFi,您的应用不需要任何特定知识,与以太网配合使用的相同代码也可以与WiFi接口配合使用。微控制器不是这种情况,您必须使用不同的库,学习如何使用它们并更改代码。
乔治Y.

1
好的,没有意识到使用其他库会成为很大的障碍。
肖恩·霍利哈内

2
如果不需要很多别针,您可以得到一个ATtiny4,它相当于米粒的大小:P
Nick T

1
它显然不比Attiny85小很多:),但是您是对的,如果我们考虑使用非DIP,那么即使是85也是指尖。
乔治Y.

9

是的,这是从Python编程到使用微控制器上典型的基于C语言工具进行编程的巨大飞跃。实际上,在很多情况下,您可能需要用汇编语言编写一些(如果不是全部)应用程序。

正如在其他答案中已经指出的那样,微控制器非常受资源限制,因此您失去了Linux操作系统的所有便利以及可以在本地运行的所有工具。与运行本地脚本相比,使用Arduino IDE进行迭代非常慢。

尽管我在微控制器和微处理器方面拥有丰富的专业经验,但我更喜欢将RPi硬件与一些Arduino一起用于运行实时项目的个人项目。我还涉猎了Beagle Bone Black,在某些方面,它比将RPi与一个或多个Arduino结合使用更方便。


9

是的,差异很大

就硬件和软件而言,区别就像白天和黑夜。根本没有有效的比较。

什么时候使用

使用Arduino,如果...

  • 空间限制使Pi不可行。
  • Pi的功耗会太大。
  • 金钱是一个问题(特别是如果您在项目中需要多个或多个单独的控制器,每个控制器仅执行非常简单的逻辑)。
  • 您想获得一点点坚韧和坚韧,并在一个低得多的水平上工作以获取乐趣或获取知识。
  • 您需要极端的简单性和/或100%定义的实时行为,并需要零失控的机会杀死您的程序。
  • 您不需要以太网,困难的USB主机功能(即访问硬盘驱动器;可以在客户端(例如,将其用作HID设备)使用它)等等。其中大多数都可以安装到Arduino(非常笨拙),但是在RAM / EPROM和功能方面却要付出高昂的代价。由于没有抢先式多任务处理,因此解除阻塞的任务很快就会变得非常复杂。
  • 您可以使用简单的Arduino开发IDE,也可以进行更深入的研究(例如,自己构建程序),并且-如果您不打算购买Pro Micro等USB上传设备,则可以购买或自制的开发套件/燃烧器。

在所有其他情况下,Pi更加易于使用。Pi只是另一台(慢速)计算机。

不要误会我的意思。我拥有一台Pi,并将其用于网络中的几种Linux服务。我也经常编程Arduino(主要是Pro Micros)。两者都很棒,我喜欢它们一样,但是它们的使用场景非常不同。

关于您的难度问题-这是相对的。Arduino对我来说唯一的困难是难以调试时序问题,尤其是在与可疑的电子产品(例如EM干扰,电缆太长等)结合使用时。如果您坚定所选择的语言(即Arduino IDE的C),那么您应该能够破解您正在使用的所有库。尽管如此,它总是比Pi更复杂,在Pi中,例如,您可以使用自己选择的脚本语言处理对时间要求不严格的事情-这些将总是更易于开发和调试。


我没有问哪个是最好的开发平台-我的用例需要一个mcu,主要是因为功率限制。我认为问题在这一点上还不太清楚。
肖恩·霍利哈内

好吧,那么答案的第一部分就足够了。如果愿意,我将其余部分作为“附录”。
AnoE

7

我相信有些地方尚未明确指定。

开发环境完全不同。您实际上可以在Pi上开发Pi软件-如果愿意,甚至可以使用GUI。内置了高级调试工具,以及任何计算机系统都可以使用的大量工具。

控制器将必须在单独的计算机上进行开发/仿真,然后发送到控制器进行最终测试。

Pi几乎可以运行任何您要编程的语言,微控制器通常只有一两种。

Pi可以运行许多操作系统(包括Windows IoT和许多专用系统),嵌入式控制器往往根本不运行“操作系统”。

同样,就运行时/ OS而言,Pi会花费几秒钟的启动时间。如果您想在最初的几秒钟内真正做某事,那么pi不会为您工作。另外,除非您采取了一些极端的措施来防止对存储进行任何写操作,否则您确实不应该仅仅切断电源,而必须执行“关闭”操作并稍等片刻。这也可能会限制某些用法。

我还没有提到的另一个部署后要点。我不确定如何绝对确定自己正确地保护了Pi-没有代理商在某些情况下在允许未经授权的访问的地方放置一小段代码,而不会从所有网络中删除它并禁用所有无线访问机制。由于您正在编写在事物上运行的几乎所有代码,因此微控制器的安全性相当容易。

当然,您始终可以在没有实际操作系统的情况下开发自己的Pi映像,并接管整个板卡/ CPU,这将使其成为具有强大功能/价格昂贵的微控制器,并具有所有相关的优点/缺点。可能有人已经这样做了,但是最近我没有寻找任何类似的东西。


WRT是您的最后一段,是的,这叫做裸机,很少有人这样做,但是从技术上讲,这是有可能的...欢迎来到该站点!
加纳马'17

3

由于硬件差异以及软件开发工具链差异,使用Pi开发应用程序之间的差异可能非常相似,或者与使用微控制器开发应用程序之间的差异有些相似。

可用的微控制器范围很广,从8位到64位处理器不等,RAM范围从几K到GB到几GB。功能更强大的微控制器提供了更多的Pi体验。能力较弱的微控制器则没有。

即使使用Pi,在Windows 10 IoT操作系统的开发与Raspian,Mate或其他基于Linux的操作系统的开发之间也存在很大差异。Windows 10 IoT需要使用Visual Studio工具链的开发PC,并带有针对通用Windows程序(UWP)环境的远程调试器。实际上,可以使用Pi上可用的工具在Pi上进行Raspian或Mate的开发。

约束应用协议用于与物联网环境下的互联网使用小,受限的设备。要了解各种微控制器硬件和软件,请参阅CoAP协议实现的本页,以了解其目标环境。它提到了我隐约听说过的Contiki操作系统,以及更知名的OS,例如iOS,OSX和Android。提到的编程语言是Java,JavaScript,C,C#,Ruby,Go,Erlang,Rust和Python。

用于微控制器开发的工具链因制造商以及开发社区和开放源代码计划的可用资源而异。在某些情况下,您将获得一个交叉汇编器,在某些情况下,您将获得一个C交叉编译器,在其他情况下,您将获得一个不错的工具链,其中包含所有的细节和仿真器,类似于用于Windows 10 IoT的Visual Studio工具链。

微控制器的实际开发环境可能涉及使用EEPROM编程器和软件工具来创建新映像并将其推送到设备,或者该设备可能具有必要的连接性,以允许通过串行连接或通过该接口下载新映像。网络连接。

我的印象是,大多数微控制器都具有C交叉编译器,尽管该编译器可能仅支持较旧的标准,例如K&R或C98。C交叉编译器通常具有针对微处理器特定功能的非标准关键字,例如,使用旧的8080和8086处理器及其分段存储器的指针的farnear关键字。

还有针对微控制器的专用语言,例如FORTH编程语言。这些语言通常具有针对裸机的运行时设计,因此除语言运行时外没有其他操作系统。

操作系统的范围可能从几乎不存在到裸露的Linux到特殊的操作系统,例如freeRTOS或Windows Embedded或功能完善的Linux或Microsoft Windows。请参阅此Raspberry Pi的SourceForge项目MINIBIAN。另请参阅《Baking Pi:操作系统开发》这本电子书,该书描述了Raspberry Pi汇编器中基本OS的开发。

《 Visual Studio Magazine》的《 Visual Studio 编程物联网》一文概述了许多可用的设备,随后概述了使用Visual Studio IDE进行Linux和Windows开发。

现在,有大量可用的,可编程的,可联网的微控制器器件供人们使用。在非常低的层次上,您可以使用德州仪器(TI)等各种传统芯片制造商提供的各种简单的16位和32位设备。(我使用了SensorTag开发工具包,感觉很有趣,这让我认为Watch DevPack也可能是一个很好的学习工具集。)

一些知名的微控制器设备包括Arduino,BeagleBoard和Raspberry Pi。这些环境都得到了社区的广泛支持,并准备插入大量现成的外部传感器,电机,伺服器以及您可能想到的任何其他产品。由Limor“ Ladyada” Fried创立的电子学习超市Adafruit为这些板提供各种外围设备,以及其自己的轻型Feather开发板系列。

...

对于熟悉Microsoft .NET Framework和Visual Studio的开发人员而言,最有趣的设备可能是Windows 10 IoT核心版兼容的环境。这些是x86和ARM驱动的设备,支持以各种语言(包括C#,Visual Basic,Python和Node.js / JavaScript)编写的通用Windows平台(UWP)应用程序。Windows 10 IoT核心支持包括Raspberry Pi,Arrow DragonBoard 410C,Intel Joule和Compute Stick和MinnowBoard在内的设备。还有一些有趣的产品平台,例如Askey TurboMate E1可穿戴设备。

单片机应用的特定示例

这是来自自动咖啡机的微控制器板的图像。这似乎是中国制造的自动咖啡机的标准组件。制造商的网站印在PCB上。

该图像由两个视图组成。左侧的视图是包含微控制器和支持电路的电路板的背面。右边的视图是带有LCD屏幕和一组按钮的板子的正面,这些按钮用于设置当前时间和执行诸如对开始时间进行编程等操作。

右侧的视图适合于一个载体,然后适合于该咖啡机正面的开口。下部PCB上的开关由摇臂开关致动。LCD似乎是专用的,用于在更改咖啡机的设置时显示当前时间和状态以及显示用户界面。红色LED用于指示咖啡壶何时真正在煮咖啡,并通过关闭照明来指示何时完成咖啡。

在此处输入图片说明

该微控制器是ELAN Microelectronics Corp EM78P447NAM(数据表),它是一个8位微控制器。一些基本统计数据表明这是一个很小的设备,但是对于其预期的目的来说效果很好。目的是开发软件,然后在制造过程中将其下载到一次写入ROM中。

•低功耗:

* Less then 2.2 mA at 5V/4MHz

* Typically 35 µA, at 3V/32KHz

* Typically 2 µA, during sleep mode

•4K×13位片上ROM

•三个保护位,防止入侵OTP存储代码

•一个配置寄存器可满足用户需求

•芯片上的148×8位寄存器(SRAM,通用寄存器)


2
我认为这不能解决这个问题。当然,有些产品的包装不好,但这也适用于SBC。
肖恩·霍利哈内

1
@SeanHoulihane我试图用这个答案来解决这个问题,以期提供微控制器的观点,特别是有各种各样符合微控制器标签的设备。还有更多的比Linux操作系统的景观和有更多的编程语言比Python或C
理查德·钱伯斯

1
对我来说,您只是说MCU世界一团糟。我觉得这是一种误导。
肖恩·霍利哈内

1
@SeanHoulihane对不起,您对我的帖子的印象是MCU世界一团糟。另一种解释是,MCU世界是许多绝佳的选择和机遇之一,但是读者会在任何叙述中带来自己的偏见和偏见。
理查德·钱伯斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.