脚本下载:MicroPython的负面清单一

2018-03-31  本文已影响93人  小鱼儿他老汉

何为负面清单

我喜欢Python,也在实际工程中使用。Python用于Web和数据分析已经积累了大量经验。但是在嵌入式领域依然是比较新的。MicroPython作为主流的嵌入式Python,我们必须要明确它的边界和对策,否则,许多朋友会步入一些误区。

MicroPython ESP8266 Port 问题

除了最初的STM32F4的PyBoard,ESP8266版本可能是最普及的MicroPython硬件,甚至多过BBC的MicroBit。但是ESP8266的廉价却有着对应的缺陷:

ESP8266内部有Bootcode,而用户固件放置在外部Flash中。应该说ESP8266几乎不会变砖。但是MicroPython需要二级Boot。

  1. Bootcode,启动MicroPython运行时固件;
  2. MicroPython,通过WebREPL,串口来加载用户脚本。

用户脚本下载途径

然而,这三种方式都有对应的问题:

基于串口的脚本下载

嵌入式系统中,串口是普遍存在的,即使没有硬件串口,也可以使用软件模拟串口。所以MicroPython虽然拥有五花八门各种传输方式。但是我个人觉得应该将某种终端软件普遍支持的文件传输方式固化在MicroPython标准库中。比如:Kermit/X/Y/Z-Modem或者基于网络的FTP/SCP方式。

当然实现方式越简单越好。其实128B字符串配合ACK/NACK确认的X-Modem实现起来非常简单,且占用资源很少,此外利用base64来传输二进制文件。整体流程是:

b2a_base64(local_file),转换为ASCII进行传输;
a2b_base64(remote_file),转换为BIN存储到ESP闪存中。

我参考了uPyLoader的实现方式,准备设计一些简单的命令行操作。和uPyLoader采用自定义协议不同,我想使用Terminal软件已经支持的协议来实现。

由于这种方式需要预先在用户脚本空间先下载一个upload.py脚本。可以通过REPL的Ctrl-E方式先行下载(脚本不能太大,也不能有回车和换行符)。当然也可以在编译固件时直接编译进去。

既然要预先编译脚本,不如将常见的操作以模块形式一起加载到用户脚本空间。届时,只需要在REPL中调用一些函数,既可以实现操作系统的常见操作。

>>> from helper import ls, cat
>>> ls()
['download.py', 'webrepl_cfg.py', 'simple_web_server.py', 'upload.py', 'helper.py', 'libs']
>>> cat('webrepl_cfg.py')
PASS = 'allan'
上一篇下一篇

猜你喜欢

热点阅读