NodeMCU 开发板刷入 MicroPython 固件并通过 Atom 进行编程

MicroPython 是对 Python 3 语言的一种精简的实现,主要是为了在微控制器这种硬件资源受限的环境中可以高效地运行,因此做了很多针对性的优化。
它类似于一个小型的 Python 操作系统,可以通过串口与内置的 Python 解释器直接交互,也可以上传程序文件在开机上电后自动运行。
MicroPython 支持多种开发板,包括价格很实惠的基于 ESP8266 芯片的 NodeMCU

一、刷入固件

我这里使用的开发板是从网上购买的 NodeMCU ,出厂时预先刷好了基于 Lua 语言编程的固件。
为了使用 MicroPython ,需要先对该开发板重新刷写固件。


NodeMCU
1. 准备工作

首先进入 MicroPython 官方的下载页面,下载最新版的针对 ESP8266 硬件的固件包。
我这里使用的是 esp8266-20180511-v1.9.4.bin

刷写软件可以使用支持多种操作系统的命令行工具 esptool。对于已经装好 Python 环境的电脑,直接使用 pip 命令安装即可:
pip install esptool

2. 刷入固件

首先将 NodeMCU 开发板连接至电脑,Mac 系统可以使用 ls /dev/tty.usbserial* 命令查看当前系统已经检测到的 USB 串口:

$ ls /dev/tty.usbserial*
/dev/tty.usbserial-14110

使用 esptool.py -p <SerialPort> flash_id 命令确认该串口是否能成功检测到 ESP8266 设备:

$  esptool.py -p /dev/tty.usbserial-14110 flash_id
esptool.py v2.5.1
Serial port /dev/tty.usbserial-14110
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
MAC: 2c:3a:e8:06:aa:7e
Uploading stub...
Running stub...
Stub running...
Manufacturer: c8
Device: 4016
Detected flash size: 4MB
Hard resetting via RTS pin...

使用 esptool.py -p <SerialPort> erase_flash 命令对开发板进行擦除操作(以防万一):

$  esptool.py -p /dev/tty.usbserial-14110 erase_flash
esptool.py v2.5.1
Serial port /dev/tty.usbserial-14110
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
MAC: 2c:3a:e8:06:aa:7e
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 2.5s
Hard resetting via RTS pin...

擦除完成后即可使用 esptool 工具的 write_flash 命令将 MicroPython 固件刷入开发板。
(完整命令为:esptool.py -p <SerialPort> --baud 460800 write_flash --flash_size=detect -fm dio 0 <FirmwareFile>

$ esptool.py -p /dev/tty.usbserial-14110 --baud 460800 write_flash --flash_size=detect -fm dio 0  ~/Downloads/esp8266-20180511-v1.9.4.bin
esptool.py v2.5.1
Serial port /dev/tty.usbserial-14110
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
MAC: 2c:3a:e8:06:aa:7e
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Flash params set to 0x0240
Compressed 604872 bytes to 394893...
Wrote 604872 bytes (394893 compressed) at 0x00000000 in 9.9 seconds (effective 490.0 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

二、固件测试

刷写固件的操作完成后,可以使用 Mac 系统自带的串口调试工具 cu 连接 USB 串口,对刚刷好的开发版进行测试:
sudo cu -l <SerialPort> -s <BaudRateSpeed>
效果如下:

$ sudo cu -l /dev/tty.usbserial-14110 -s 115200
Connected.

终端窗口提示 Connected 之后,按下 NodeMCU 板子上的 RST (Reset) 按钮。
如固件刷写成功,则终端在输出部分乱码后会立即进入 Python 解释器界面:

MicroPython v1.9.4-8-ga9a3caad0 on 2018-05-11; ESP module with ESP8266
Type "help()" for more information.
>>>

在解释器界面下,输入 help() 命令获取基本的帮助信息:

MicroPython v1.9.4-8-ga9a3caad0 on 2018-05-11; ESP module with ESP8266
Type "help()" for more information.
>>> help()
Welcome to MicroPython!

For online docs please visit http://docs.micropython.org/en/latest/esp8266/ .
For diagnostic information to include in bug reports execute 'import port_diag'.

Basic WiFi configuration:

import network
sta_if = network.WLAN(network.STA_IF); sta_if.active(True)
sta_if.scan()                             # Scan for available access points
sta_if.connect("<AP_name>", "<password>") # Connect to an AP
sta_if.isconnected()                      # Check for successful connection
# Change name/password of ESP8266's AP:
ap_if = network.WLAN(network.AP_IF)
ap_if.config(essid="<AP_NAME>", authmode=network.AUTH_WPA_WPA2_PSK, password="<password>")

Control commands:
  CTRL-A        -- on a blank line, enter raw REPL mode
  CTRL-B        -- on a blank line, enter normal REPL mode
  CTRL-C        -- interrupt a running program
  CTRL-D        -- on a blank line, do a soft reset of the board
  CTRL-E        -- on a blank line, enter paste mode

For further help on a specific object, type help(obj)
>>>

更多的交互命令和详细的指导手册可以参考官方文档

使用如下的命令,能够让 GPIO2 上连接的 LED(即 ESP8266 模块内置的蓝色 LED)以 1s 的频率闪烁:

>>> from machine import Pin
>>> import time
>>> p=Pin(2,Pin.OUT)
>>> while True:
...     p.on()
...     time.sleep(1)
...     p.off()
...     time.sleep(1)
...
...
...

三、配置 Atom 编程环境

当前可以使用多种软件作为简单的 IDE 对 MicroPython 开发板进行编程。主要是提供连接串口的终端,可以交互地执行 Python 命令,以及程序文件的上传和下载。

我个人比较喜欢 Atom 编辑器搭配上 pymakr-atom 插件。

Atom

Atom 的配置较简单,主要步骤如下:

  • 从 Atom 官网下载对应系统版本的安装程序并安装
  • 通过 Atom 内置的插件管理器搜索安装 pymakr 插件,安装完成后重启编辑器
  • 编辑器重启后底部自动出现 pymakr 的终端窗口,点击终端右上角设置 - 全局设置,找到设备地址并改为开发板连接的端口号
  • 直接点击终端顶部的连接按钮即可完成串口连接

此时的 Atom 编辑器,可以通过底部的终端窗口直接输入 Python 命令。
也可以在编辑器中新建项目目录,并创建 main.py 源文件。编辑好 Python 代码后,点击执行按钮即可直接运行,或者点击上传按钮将代码文件上传至开发板。

参考资料

MicroPython documentation

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容

  • 玩了IoT好几年了大多数时间都耗在搞4轴上,通信方式一直也就用着2.4G (nrf2401),以前一直认为这是一种...
    梁睿坤阅读 10,928评论 2 26
  • 前几天折腾Zephyr,搭好环境后,在各种开发板之间犹豫不决,正巧,同事买了个ESP8266的开发板,观摩之后感觉...
    四十方知阅读 33,202评论 2 18
  • 最近在看nodemcu相关的一些东西,对于我这样不会C的人来讲似乎天生就跟硬件有一道障碍,索性现在基于esp826...
    NeoYan阅读 5,491评论 6 4
  • 前阵子,micro:bit开始变的很火了,在浙江谢作如、祝良友等老师的推广下,舟山有的小学开始开设micro:bi...
    少儿创客阅读 6,206评论 0 4
  • 半夜两点,感冒的不适让我无法入眠,整个鼻腔、头颅、嗓子仿佛都不是我自己的了。索性我就起来上沙发上 坐一会儿,想想最...
    AAAAA蕙质兰心阅读 183评论 0 0