MicroPython 学习笔记 (1) - 开发环境配置

MicroPython 学习笔记 (1) - 开发环境配置

前期入手了一块 MicroPython-ESP32 开发板,第一件事是配置开发环境。笔者日常使用的是 Manjaro Linux 操作系统,在此文记录下配置开发环境的过程。

Mu Editor

开发板厂家提供的资料里推荐使用 Mu Editor 作为开发工具,所以首先尝试安装 Mu Editor。

官网地址:https://codewith.mu/

官网上提供了 Windows 系统的安装包,直接下载安装即可。对于 Linux 系统没有提供安装包,需要根据官网的安装教程使用 Python 的 pip 工具安装。

根据官网提供的建议,为了防止和主机上的 Python 环境发生依赖冲突,可使用虚拟环境安装 Mu Editor。创建和管理 Python 虚拟环境使用 virtualenv 包,如果还没有安装该包可使用 pip install virtualenvpip3 install virtualenv 安装。Python 虚拟环境提供了一个独立的存放 Python 解释器和第三方包的目录,其与主机的 Python 环境相互隔离,可使用虚拟环境指定 Python 解释器的版本和第三方包的版本,从而很好地解决版本冲突。

安装

在创建虚拟环境前,首先指定创建虚拟环境的位置,在本示例中,虚拟环境存放在用户家目录下的 venv 目录下。

mkdir -p ~/venv # 在家目录下创建 venv 目录用于存放虚拟环境
cd ~/venv       # 将终端切换到 venv 目录下

创建一个名为 mueditor 的虚拟环境,并且指定 Python 解释器版本为 3.7。

virtualenv mueditor --python=python3.7

注意事项:

  • 如系统默认的 Python 版本高于 3.7,请使用 3.7 版本创建虚拟环境。过高的版本会造成后续安装错误。
  • 创建虚拟环境前需保证 3.7 版本的 Python 解释器 python3.7 已经位于 PATH 中,如果尚未安装需先安装 Python 3.7。

创建完成后,运行以下命令激活虚拟环境:

source ~/venv/mueditor/bin/activate

执行完成后,终端提示符将增加一个 (mueditor) 标识,表示当前终端正在处于虚拟环境下(虚拟环境只会作用于当前终端)。

如需退出虚拟环境,只需在当前终端下执行 deactivate,而后 (mueditor) 虚拟环境标记消失。

在虚拟环境下使用 pip 命令安装 mu-editor 包。由于官方 pip 源访问速度较慢,安装时可使用 -i 参数临时指定国内源,这里采用清华源。同时可添加 --default-timeout 参数避免由于下载超时导致的安装失败。

pip install mu-editor -i https://pypi.tuna.tsinghua.edu.cn/simple --default-timeout=100000

之后只需漫长的等待直到安装完成即可。

先前提到安装 mu-editor 的虚拟环境需使用 3.7 版本的 Python,如果使用了更高版本,在安装依赖时可能遇到错误,无法安装要求版本 <2.0, >=1.9.2pygame 包。经笔者实测,使用 3.7 版本的 Python 无此问题。

安装完成后,在激活虚拟环境的终端中执行 mu-editor 即可启动。

运行效果:

mueditor

使用

在使用 Mu Editor 进行开发时,笔者遇到了一个意想不到的情况:Mu Editor 无法检测到 MicroPython 开发板(在 Windows 系统中,如果 Mu Editor 检测到了 MicroPython 硬件连接,在选择 Mode 的窗口中会有 MicroPython 选项,但 Linux 下没有),所以笔者决定放弃 Mu Editor,换用命令行工具进行开发。

命令行工具

开发 MicroPython 所需的命令行工具主要包括:

  • picocom: 串口调试软件,用于访问 MicroPython 开发板的 REPL 交互终端。
  • adafruit-ampy: 用于访问 MicroPython 开发板上的文件系统。
  • rshell: Remote Shell for MicroPython,用于访问 MicroPython 开发板的 REPL 交互终端。

安装

其中 picocom 为 Linux 常用软件,使用系统自带的包管理器安装:

sudo apt install picocom    # Ubuntu / Debian
sudo pacman -S picocom      # Arch / Manjaro

adafruit-ampyrshell 为 Python 第三方包,使用 pip 安装(建议安装在虚拟环境中):

pip install adafruit-ampy rshell -i https://pypi.tuna.tsinghua.edu.cn/simple --default-timeout=100000

picocom 串口调试

使用 picocom 连接 MicroPython 开发板的调试串口,通常 MicroPython 调试串口的波特率为 115200 (请参考实际开发板的文档)。在本示例中,该串口位于 /dev/ttyUSB0

查看 picocom 帮助:picocom -h

运行以下命令启动 picocom 进入串口调试界面:

picocom /dev/ttyUSB0 -b 115200

在 picocom 运行中,键入 Ctrl+A Ctrl+H 查看命令帮助,键入 Ctrl+A Ctrl+Q 退出。

按下开发板上的 reset 按键,如果板内固件及程序正常启动,可能会有类似以下的输出:

ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:4928
ho 0 tail 12 room 4
load:0x40078000,len:9332
load:0x40080400,len:6216
entry 0x400806e8
I (434) cpu_start: Pro cpu up.
I (434) cpu_start: Application information:
I (434) cpu_start: Compile time:     07:44:16
I (436) cpu_start: Compile date:     May 29 2019
I (442) cpu_start: ESP-IDF:          v3.3-beta1-268-g5c88c5996
I (448) cpu_start: Starting app cpu, entry point is 0x4008294c
I (0) cpu_start: App cpu up.
I (459) heap_init: Initializing. RAM available for dynamic allocation:
I (465) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
I (471) heap_init: At 3FFB9B88 len 00026478 (153 KiB): DRAM
I (478) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
I (484) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (490) heap_init: At 40093398 len 0000CC68 (51 KiB): IRAM
I (497) cpu_start: Pro cpu start user code
I (67) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.

此时串口并没有显示 REPL 交互终端,这是因为装载的用户程序 main.py 正在运行,在终端键入 Ctrl+C 停止程序运行,即可回到 MicroPython REPL 交互终端:

MicroPython v1.11 on 2019-05-29; ESP32 module with ESP32
Type "help()" for more information.
>>> 

ampy 访问文件系统

MicroPython 开发板内自带一个小文件系统,但是在一些型号的开发板上,其内部的文件系统不能以常规的外接存储设备(如 U 盘或移动硬盘)的方式访问,即不能使用操作系统自带的文件管理器进行管理,而是只能通过 MicroPython 自己的接口(通过调试串口)进行管理,需要用到的工具为 adafruit-ampy,其可执行命令为 ampy

终端执行 ampy --help 查看帮助。使用 -p 选项指定 MicroPython 设备位置,-b 选项指定串口波特率,而后使用相应的文件操作命令来访问开发板的文件系统。

一些示例:

$ ampy -p /dev/ttyUSB0 -b 115200 ls          # 列出开发板上已经存在的文件
/boot.py
/main.py
$ ampy -p /dev/ttyUSB0 -b 115200 get main.py # 获取开发板上的 main.py,内容显示在标准输出
from machine import Pin
import time

LED = Pin(2, Pin.OUT)

while True:
    LED.value(1)
    time.sleep_ms(1000)
    LED.value(0)
    time.sleep_ms(1000)
$ ampy -p /dev/ttyUSB0 -b 115200 put main.py # 上传当前目录下的 main.py 至开发板
$ ampy -p /dev/ttyUSB0 -b 115200 rm boot.py  # 删除开发板上的 boot.py

注意: ampy 无法在用户程序 (如 main.py) 正在运行时访问 MicroPython 文件系统,否则执行 ampy 将无反应。如遇执行无反应,应先使用 picocom 进入串口,使用 Ctrl+C 停止用户程序的运行,得到 REPL 终端,令硬件处于调试状态,然后 Ctrl+A Ctrl+Q 退出 picocom 后再执行 ampy 即可正确访问 MicroPython 文件系统。

rshell

利用 rshell 访问 MicroPython 开发板上的 repl 交互终端,并管理开发板上的文件。

示例:

rshell -p /dev/ttyUSB0

运行 rshell -h 查看帮助。

VSCode 插件

使用 Visual Studio Code 也可进行 MicroPython 开发,例如使用 MicroPython IDE 插件(需安装好上一节中所提到的命令行工具)进行程序上传(烧写)等工作。

注:使用 VSCode 编写代码会遇到 machine 等 MicroPython 特有的库在导入时有高亮警告提示,无需理会即可(因为这些代码并不需要在计算机上的 Python 环境运行)。

Thonny IDE

Thonny 也是一款 MicroPython 开发工具,官方文档。该 IDE 可以在 Linux 下检测到 MicroPython 开发板并进行 REPL 调试,同时支持 MicroPython 相关库的自动补全(Mu Editor 由于在 Linux 上没有检测到开发板从而没有 MicroPython 特有库的自动补全,VSCode 也没有)

posted @ 2022-01-18 23:52  Dong_HY  阅读(775)  评论(1编辑  收藏  举报