MicroPython 交互终端

Table of contents

前言

很多单片机没有 USB控制器,只有一个 UART/TTL/RS232 串口,所以在开发阶段的大部分交互依赖于单片机串口。 通常情况下,串口用来上传源代码文件或输出调试信息。

串口交互软件

串口需要使用串口软件方可交互。Windows 下有很多为人熟知的工具,不过我个人用得不多。GNU/Linux 用户可以使用 screen 当作临时的终端,但各个方面都差一点意思。这里我习惯了使用 terminal-s,简单又好用。

不过上传文件的时候就都不怎么方便了。这里可以用 adafruit-ampy 进行文件操作。这个程序我就先不介绍了。

通过串口输入程序

下面给出了一个交互实例,开关 GPIO12 所连接的 led,最后打印了默认的帮助信息。

> terminal-s
--- /dev/ttyACM0 is connected. Press Ctrl+] to quit ---

MPY: soft reboot
MicroPython v1.18-422-g7c0402338 on 2022-05-11; LuatOS C3 CORE with ESP32C3
Type "help()" for more information.
>>> from machine import Pin
>>> led = Pin(12, Pin.OUT, value=0)
>>> led.on()
>>> led.off()
>>> help()
Welcome to MicroPython on the ESP32!

For generic online docs please visit http://docs.micropython.org/

For access to the hardware use the 'machine' module:

import machine
pin12 = machine.Pin(12, machine.Pin.OUT)
pin12.value(1)
pin13 = machine.Pin(13, machine.Pin.IN, machine.Pin.PULL_UP)
print(pin13.value())
i2c = machine.I2C(scl=machine.Pin(21), sda=machine.Pin(22))
i2c.scan()
i2c.writeto(addr, b'1234')
i2c.readfrom(addr, 4)

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

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)
For a list of available modules, type help('modules')

根据帮助信息,REPL 有几个快捷键:

  • Ctrl+A:在空行的情况下输入,用于进入 raw 模式;
  • Ctrl+B:在空行的情况下输入,用于进入 normal 模式,也就是默认模式;
  • Ctrl+C:在任意情况下输入,用于中断当前运行的程序,即为 Python 程序员熟知的 KeyboardInterrupt;
  • Ctrl+D:在空行的情况下输入,软重启开发板,换言之 Python 解释器环境重置了;
  • Ctrl+E:在空行的情况下输入,进入粘贴模式,适合用来粘贴测试代码,原默认情况下会自动缩进,这个模式就没有了;

通过串口上传文件

使用 adafruit-ampy 进行文件传输是比较常见的做法,此外还有使用 WebREPL 在网页上上传内容、使用编辑器插件等等多种方法。此处暂不详叙。BTW 不少编辑器插件其实也是 ampy 包装来的。

为了延长 Flash 整体寿命、增强稳定性,可以使用 LittleFS 取代 FAT,不过 v1 和 v2 版可能在特殊情况下不稳定。MicroPython 的文档在这里