close
当前位置: 物联网在线 > 物联网设计开发 > 技术文章 >

技术干货 基于MicroPython平台MCU快速开发

实时嵌入式系统正变得极为复杂,需要进行了深入的理解不仅复杂的32位微控制器,以及传感器,算法,Internet协议,和广泛变化的最终用户应用程序。随着缩短开发周期和更多的功能,开发团队需要找到办法,既加速设计,同时能够将他们的代码,以新产品:集成和灵活的开发平台是必要的。
有几个特定的​​微控制器平台,可帮助加快开发进程,但这些解决方案的问题是,他们绑开发商单个微控制器供应商。从一个平台移植软件到下一个可能会非常耗时和昂贵。
正在获得广泛的认可和动量独特新颖的解决方案是夫妇低级单片机的硬件与高级语言如Python。一种这样的解决方案是MicroPython。这将运行在几个不同的微控制器厂商,零部件而且是开源的,使其随时可供开发人员使用和定制自己的需求。
MicroPython.org将其描述为一个精干高效的实现,包括优化的微控制器和约束的环境中运行的Python标准库中的一小部分是Python 3的编程语言。MicroPython开始了作为不仅成功资助了一个脚踏启动项目,但长大了大量的追随者,现在已经成功地在多个行业的项目,如工业和空基系统中使用。

选择合适的微控制器

MicroPython运行在多种不同的微控制器,并有对移植MicroPython以提供多个微控制器,他们有足够的RAM,闪存和处理能力来运行解释没有大的限制。这就是说,有一个开发商应该寻找将用于运行MicroPython微控制器的几个关键要求:
  • 闪光的至少256千字节
  • 的RAM至少16千字节
  • 至少一个80MHz的CPU时钟
这些都是一般建议和开发人员可以从他们偏离根据自己的应用需求,以及他们想要多少时间花在定制MicroPython内核。例如,MicroPython可以被修改以使用远小于256的闪光字节。这些建议为用户提供最佳体验的开发商和提供空间在他们的应用程序代码的增长。
MicroPython已经被移植到几个不同的微控制器系列可以作为一个很好的起点移植到一个新的平台,或选择一个已经支持的微控制器。的MicroPython源代码的主目录如图1所示。从这里,读者可以看到几个不同的所支持的微控制器设备,诸如:
例如文件夹的目录结构的图像
图1:示出了目前支持MicroPython可用微控制器平台实施例的文件夹的目录结构。这些措施包括ARM,CC3200,esp8266,Microchip的PIC和STM32。(图像源:Beningo嵌入式集团)
在根目录下的每个文件夹是包含该芯片系列的通用驱动程序和支持高层次的文件夹。有可能是每个文件夹中支持多种不同的开发板或处理器。例如,stmhal夹支持开发板如意法半导体STM32F429发现局中的几个其他如Adafruit的工业和STM32的IoT发现节点(STM32L),STM32F405 pyboard。该ESP8266文件夹包含了ESP8266和Adafruit的的好哇打破出主板支持羽毛好哇栈板。
可以运行MicroPython开发板的价格便宜,而且它是一个开发者购买几个感觉出来他们有多少内存,存储空间和处理能力需要的应用程序是个好主意。例如,开发人员可能会开始就使用STM32F405 pyboard并决定,为了面向未来的功能和升级,他们想搬到一个STM32F429在他们的最终产品。在STM32F429有2兆字节的闪存,RAM中的256个字节,并呼吁CCM特殊0等待状态RAM。
一个开发人员编写的MicroPython应用程序代码不一定必须存储在微控制器的内部闪存。该MicroPython内核必须是在微控制器,但在应用程序代码可以是外部存储介质,如松下 的microSD 8 GB卡。使用外部存储器存储设备,用于存储应用程序代码提供了使用微控制器使用较少的内存,并潜在地节省整体系统成本的机会。

起床,用MicroPython运行

MicroPython预装在Adafruit的STM32F405 pyboard。然而,任何其他开发工具包或定制的硬件,需要开发者下载MicroPython源,建立目标板的来源,然后用闪烁的软件的微控制器。获取访问MicroPython源代码很容易,因为它是所有托管在GitHub上。有迹象表明,开发者需要按照设置工具链,并获得配置打造MicroPython环境的几个步骤。在这个例子中,我们将构建MicroPython的STM32F429发现板。
首先,开发商会想要么创建一个基于Linux的虚拟机或使用本机安装Linux。一旦Linux是可从终端,开发者将会使用以下命令来安装ARM编译器工具链:
sudo易于得到安装gcc-臂无 - EABI
 
如果Linux安装清新,版本控制系统,git的,可能没有安装。GIT中可从使用下面的命令在终端被安装:
 
命令和apt-get安装的git
 
一旦安装GIT中,所述MicroPython源可以被校验输出通过在终端执行以下命令的存储库:
 
混帐克隆https://github.com/micropython/micropython.git
该过程可以执行几分钟但显影剂应该看到序列证实(图2)。
克隆MicroPython库到本地文件系统的图像
图2:克隆的MicroPython库到本地文件系统中,开发者可以再建MicroPython他们的目标板或定制自己的应用程序的内核。(图像源:Beningo嵌入式集团)
一旦MicroPython源已被克隆到本地文件系统,他们应该改变到该目录,然后在终端执行“CD stmhal”。该stmhal目录包含的STM32微控制器为MicroPython makefile文件。还有一个“板”文件夹中,开发人员可以查看显示所有当前支持STM32板。来自终端的开发者可以再构建位于“板”文件夹的任何板。例如,开发者可以通过键入以下命令来构建STM32F4发现板:
使BOARD = STM32F4DISC
MicroPython需要几分钟时间来构建。虽然构建过程中,开发人员需要安装用来MicroPython通过USB到微控制器编程设备固件更新(DFU)工具。该工具只需要安装一次,并且可以通过键入以下命令到终端来完成:
命令和apt-get安装DFU-UTIL
当MicroPython构建完成,DFU-util的已经安装完毕,开发商就准备好装载MicroPython到他们的微控制器。开发人员将需要首先把自己的微控制器进入DFU刷机模式。这可以通过设置在引导销加载引导程序内部上电复位,而不是从闪存执行代码来完成。
在引导加载程序模式,并连接到通过USB主机计算机的微控制器,所述DFU-util的可用于使用以下命令下载MicroPython:
DFU-UTIL -a 0 -d 0483:DF11 -D积聚STM32F4DISC / firmware.dfu
该DFU-UTIL将使用DFU文件是编译过程的输出。这一过程将需要几分钟的时间,因为该微控制器将被完全擦除和重新编程。这一过程将看起来非常相似的过程中显示(图3)的东西。一旦该工具完成,开机跳线应调整为从内部闪存加载,然后微控制器可以重新通电。MicroPython现在在目标微控制器上运行。
被加载到微控制器MicroPython的图像使用DFU-util的
图3:在装上使用DFU-util的微控制器MicroPython。(图像源:Beningo嵌入式集团)

接口的传感器和连接的设备

最大的好处到使用高级语言如MicroPython开发嵌入式软件的实时性,该软件是不可知的底层硬件。这意味着开发人员可以开发出MicroPython脚本在运行pyboard,并且几乎没有修改,也跑在ESP8266或STM32F4探索板上的脚本。让我们来看看基本MicroPython脚本的可能外观对接的博世传感器 BMP280气压和温度传感器到I 2 C总线,然后将数据在使用Microchip Technology的蓝牙串行链路传输RN-42蓝牙模块。
所述BMP280是一个I 2 C基晴雨表和温度具有默认我传感器2的小数119. I2C从地址将它接口到pyboard最简单的方法是使用DFRobot的重力板,它提供了一个坚固的连接器,用于易访问设备和访问我供电2 C.开发人员可以选择I 2 C1或I 2个 C 2总线连接重力板。一旦板被连接时,MicroPython脚本是直截了当的。
首先,开发人员将导入的我2从PYB库C类。所述PYB库提供接入到微控制器外围功能,如SPI,我2 C和UART。可以使用任何外围之前,开发人员必须实例外围类来创建可用于控制外围的对象。一旦外围类已经被初始化,开发者可以执行任何其它初始化诸如验证设备是进入主应用循环之前存在。然后,主应用程序代码将采样每秒一次的传感器。的如何做到这一点的一个例子被示出(代码1)。
从酒馆进口I2C
 
GlobalTemp = 0.0
GlobalBarometer = 0.0
 
#初始化和实例化I2C外设2
I2C2 = I2C(2,I2C.MASTER,波特率= 100000)
 
而真正的:
            SensorSample()
            pyb.delay(1000)
 
DEF SensorSample():
            #阅读的温度数据
            TempSample = I2C2.readfrom_mem(119 0xFA回应3)
 
            #阅读压力数据
            Pressuresnple = I2C2kredfrom_mem(119,0xF7,3)
代码1:MicroPython脚本初始化I 2 I2C外设和与DFRobot重力板通信,以获得温度和气压计的传感器数据。(代码源:Beningo嵌入式集团)
采样传感器数据,并用它做什么不是MicroPython多么强大是开发团队一个非常有用的示范。许多开发团队正在面临着自己的传感器设备连接到互联网或使用蓝牙本地传感器集线器技术挑战。
一个简单的方法,以蓝牙功能添加到项目中是使用RN-42。在RN-42可被放置到其中微控制器简单地发送一个应在蓝牙被发送的UART数据的模式,和RN-42处理整个蓝牙堆栈(图4)。
运行MicroPython pyboard的图像连接至RN-42蓝牙模块在UART
图4:连接运行MicroPython到RN-42蓝牙模块在UART的pyboard。(图像源:Beningo嵌入式集团)
一旦蓝牙板连接,开发者可以创建一个非常简单的脚本,是以接收的传感器数据和通过蓝牙发送它到移动设备那么既可以保存数据,或者将其转发到云用于进一步分析。示例脚本示出(代码2)。在这个例子中,UART1配置为115200,8位传输,无奇偶校验和单个停止位。
从酒馆进口UART
从酒馆进口I2C
 
GlobalTemp = 0.0
GlobalBarometer = 0.0
 
#初始化和实例化I2C外设2
I2C2 = I2C(2,I2C.MASTER,波特率= 100000)
 
#配置UART1通信
UART1 = pyb.UART(1,115200)
Uart1.init(115200,比特= 8,奇偶校验=无,停止= 1)
 
而真正的:
            SampleSensor()
            pyb.delay(1000)
 
DEF SensorSample():
            #阅读的温度数据
            TempSample = I2C2.readfrom_mem(119 0xFA回应3)
 
            #阅读压力数据
            Pressuresnple = I2C2kredfrom_mem(119,0xF7,3)
 
            #Convert样本数据串
            数据=“#,温度=” STR(TempSample)+”,压力” + STR(PressureSample)+”,#\ n \ R”
 
            #Write的数据蓝牙
            Uart1.write(数据)
代码2:实施例MicroPython脚本初始化UART1和与外部设备进行通信。(代码源:Beningo嵌入式集团)
不仅很容易移植到其他硬件平台的Python应用程序代码时,应用程序使用已经实施,以帮助开发人员加快发展公共库和功能。创建上面的应用程序可以在一个小时以内完成,对潜在的一个星期或更多的开发人员从最低软件级别,并具有工作的方式了。

提示和技巧开发实时软件

开发使用MicroPython容易嵌入式应用,但是从系统获得实时性能可能不如人们想象的那样简单。虽然MicroPython简化和重用代码,从系统中获得可预见的和一致的时间可以是具有挑战性的,如果开发者不知道一些有趣的事实和图书馆提供了巨大的优势。
MicroPython包括在后台运行并管理堆和其它存储器资源垃圾收集器。垃圾收集器具有不确定性,因此开发商希望确定性的行为可以让自己陷入困境,如果垃圾收集器开始在一个时间关键的区段执行。有迹象表明,开发商应遵循以确保不会发生这种情况了若干建议。
首先,开发人员可以导入垃圾收集库,GC,并使用启用和禁用方法在垃圾收集器启用或禁用控制。开发人员可以临界区之前禁用垃圾收集和然后随后启用它如图所示(代码3)。
进口GC
 
gc.disable()
 
#我的时间关键代码
 
gc.enable()
代码3:一个时间关键代码段之前禁用MicroPython垃圾收集器。(代码源:Beningo嵌入式集团)
其次,开发人员也可以手动控制垃圾收集过程。当开发人员创建和销毁的对象,它们在堆中分配内存。垃圾收集器运行,并释放未使用的空间。因为它以不规则的间隔这样做时,开发者可以使用collect方法定期运行垃圾收集,以确保堆空间不会成为垃圾过满。当做到这一点,垃圾收集运行可以从10毫秒下降到低于每运行一毫秒。手动调用垃圾收集也保证了开发者的应用程序在非确定性定时代码控制。这让他们来决定何时运行垃圾收集,并确保他们的应用程序的实时性能。
有迹象表明,开发商可以按照其他几个最佳实践谁有兴趣写实时代码。这些包括:
  • 使用的通信信道的预分配的缓冲区
  • 使用readinto方法,使用通信外设时
  • 避免使用传统的### Python文档
  • 尽量缩短运行时间对象的创建和销毁
  • 监控应用程序的执行时间
有兴趣了解更多的“最佳实践”开发人员可以查看MicroPython优化文档在这里。

结论

MicroPython是开发人员希望实现实时嵌入式应用是不可知的底层单片机的硬件有趣的平台。开发人员可以使用MicroPython提供的标准库写他们的高层次的Python脚本和任何支持的微控制器运行它们。这为开发人员提供了许多优势,包括:
  • 改进的应用程序重用
  • 更快的上市时间
  • 解耦从硬件的应用
MicroPython不适合所有的应用,但已成功迄今在工业和空间系统应用,快速原型验证的概念,并沿。 

(责任编辑:ioter)

用户喜欢...

准备挖C/C++墙角的MicroPython到底值不值得学?——pyboard评测

提到MicroPython,可能大家首先想到的会是Python,那这两者有何联系又有何区别呢? Python是我们常见的计算机程序设计...