这个问题询问,除其他事项外,在Raspberry Pi上使用Python进行端点原型设计和使用微控制器之间是否有很大的学习曲线。以降低处理器吞吐量为代价),因此有充分的理由对需要电池供电的产品采用MCU方法。运行Linux的是,假设可以使用高级语言(应该有很多标准库)编写应用程序,则没有新的软件需要学习(在python或类似版本之上)。

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

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

#1 楼

添加到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

使用矩阵显示:


各种显示通常为0.5 .. 3 kB RAM
<带有TCP / IP协议栈的以太网: 1 kB)范围内的RAM需求,但是通常会出现单芯片以太网控制器带有可容纳几个最大大小的以太网帧的片上缓冲器。

运行uIP的实现可能只需要200字节的RAM,但是这种配置将提供极低的吞吐量和将只允许少量同时连接。
(源。)<带有用于Arduino的TCP和UDP协议的IP堆栈:至少128 kB外部存储器
9 kB FLASH和“足够的” RAM


总而言之,具有这些限制的编程需要完全不同的方法,并且需要在程序空间和代码大小(FLASH),运行时方面进行优化数据(RAM)和执行速度。这个答案很充实。
正如这个问题专门针对mbed平台提出的问题,值得注意的是,它包括与IoT最相关的功能,即连接以及加密,身份验证和授权。据称它通过低功耗无线个人局域网提供了蓝牙低功耗和IPv6的硬件支持。尽管这些连接功能仅在列出的开发板上具有> = 128 kB FLASH和> = 16 kB RAM的情况下才可用。另一方面,较小的开发板包括具有像ARM Cortex-M0 +内核这样的微控制器的系统,该系统具有16KB闪存,4KB RAM(即不超过中型Arduino),而没有专用连接。

评论


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

– Sean Houlihane
17年5月2日,9:27

#2 楼

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


最大的差距是您提到的微控制器(例如Arduino)不运行Linux等多任务操作系统。这意味着,如果您的应用程序依赖于多任务或多线程,那么在Arduino上运行可能会变得更加困难甚至无法实现。例如,Raspberry Pi开箱即用地支持相机,USB音频,以太网,WiFi。 Arduino并没有直接支持这些功能,虽然您可以使用各种屏蔽(例如USB Host,以太网或WiFi),但使用它们并不像在Raspberry Pi上使用网络那样简单。 。大多数微控制器甚至没有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的大小不到一美分,并且无需晶体即可工作。

评论


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

– Sean Houlihane
17年4月30日在22:47

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

–乔治Y。
17年5月1日,0:22

好的,没有意识到使用其他库会遇到很多障碍。

– Sean Houlihane
17年5月1日晚上8:45

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

–尼克T
17年5月1日19:27

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

–乔治Y。
17年5月1日在22:55

#3 楼

是的,这是从Python编程到使用微控制器上典型的基于C语言工具进行编程的巨大飞跃。实际上,在很多情况下,您可能需要用汇编语言编写一些(如果不是全部)应用程序。因此,您将失去Linux操作系统的所有便利以及可以在本地运行的所有工具。与运行本地脚本相比,使用Arduino IDE进行迭代的速度非常慢。 Arduinos用于实时关键内容。我还涉猎了Beagle Bone Black,在某些方面,它比将RPi与一个或多个Arduino结合使用更方便。

#4 楼

是的,差异很大

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

何时使用哪种

使用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,主要是因为功率限制。我认为问题在这一点上还不太清楚。

– Sean Houlihane
17年5月2日,9:18

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

– AnoE
17年5月2日,13:30

#5 楼

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

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

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

Pi可以运行几乎任何您想要的语言用它进行编程,微控制器通常会有一个或两个。完全没有操作系统。为您工作。另外,除非您采取了一些极端的措施来防止对存储进行任何写操作,否则您真的不应该只是切断电源,而必须执行“关机”并稍等片刻。这可能还会限制某些用法。

我还没有提到过另一个部署后要点。我不确定如何绝对确定自己正确地保护了Pi-没有代理商在某些情况下在允许未经授权的访问的地方放置一小段代码,而不会从所有网络中删除它并禁用所有无线访问机制。微控制器非常容易保护,因为您正在编写运行在该事物上的几乎所有代码。 CPU几乎可以使其成为具有所有相关优点/缺点的强大/昂贵的微控制器。也许有人甚至已经做过这件事,但最近我再也没有寻找过类似的东西。

评论


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

–加纳马
17年5月1日在21:03



#6 楼

由于硬件差异以及软件开发工具链的差异,使用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编程语言。这些语言通常具有针对裸机的运行时设计,因此除了语言运行时外没有其他操作系统。专用操作系统,例如freeRTOS或Windows Embedded或功能完善的Linux或Microsoft Windows。请参阅此SourceForge项目MINIBIAN for Raspberry Pi。另请参阅这本电子书,《烘焙Pi:操作系统开发》,其中描述了在汇编器中为Raspberry Pi开发基本OS的过程。提供了许多可用设备的概述,然后概述了使用Visual Studio IDE进行Linux和Windows的开发。现成的,可编程的,可联网的微控制器设备。在很低的水平上,您可以使用德州仪器等各种传统芯片制造商提供的各种简单的16位和32位设备。 (我和
玩过SensorTag开发套件,它很有趣,这让我觉得
Watch DevPack也可能是一个很好的学习工具集。)

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


对于熟悉Microsoft .NET Framework和Visual Studio的开发人员来说,最有趣的设备类别可能是Windows 10 IoT
核心兼容环境。这些是x86和ARM驱动的设备,它们支持以多种语言编写的通用Windows平台(UWP)应用程序,包括C#,Visual Basic,Python和Node.js / JavaScript。 Windows 10 IoT核心支持设备,包括
Raspberry Pi,Arrow DragonBoard 410C,英特尔Joule和Compute Stick
以及MinnowBoard。还有一些有趣的产品平台,例如
Askey TurboMate E1可穿戴设备。自动咖啡机的微控制器板的图示。这似乎是中国制造的自动咖啡机的标准组件。制造商的网站印在PCB上。

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

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

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存储代码的入侵

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

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


评论


我认为这不能解决问题。当然,有些产品的包装不好,但这也适用于SBC。

– Sean Houlihane
17-10-15在17:23

@SeanHoulihane我试图用这个答案来解决这个问题,以期为微控制器提供一个观点,特别是有各种各样符合微控制器标签的设备。 OS领域要比Linux多得多,编程语言要比python或C多得多。

–理查德·钱伯斯(Richard Chambers)
17-10-15在17:32

对我来说,您只是说MCU世界一团糟。我觉得这是一种误导。

– Sean Houlihane
17-10-15在17:35

@SeanHoulihane对不起,您对我的帖子的印象是MCU世界一团糟。另一种解释是,MCU世界是许多绝佳的选择和机遇之一,但是读者会将自己的偏见和偏见带入任何叙述中。

–理查德·钱伯斯(Richard Chambers)
17-10-15在17:38