2. 获取MicroPython REPL

REPL意为读取-求值-打印-循环(Read Evaluate Print Loop),是交互式提示的名称,您可在ESP32上访问此交互式终端。 目前测试代码和运行指令的最简便方法即使用REPL。

访问REPL方法有二:通过UART串行接口进行有线连接或通过WiFi。

2.1. 串口上的REPL

REPL可在UART0串口外设上使用,该外设与TX的GPIO1引脚和RX的GPIO3引脚相连接。REPL的波特率为115200。 若您的板上有USB转串口芯片,您就可以从个人电脑直接访问REPL。否则您需另觅途径与UART通信。

通过USB-串口访问REPL,您需使用终端模拟器。Windows系统中您可使用TeraTerm,Mac则需内置终端程序, Linux则有picocom和minicom。当然,除上述选项外,还有许多好用的终端程序,您可根据个人偏好选择! 例如,在Linux上您可尝试运行:

picocom /dev/ttyUSB0 -b 115200

您通过串行端口成功连接后,就可检测它是否是通过多次点击Enter键来工作。您应该看到用``>>>``表示的Python REPL提示。

2.2. WebREPL - 通过 WiFi

WebREPL使您可在WiFi中通过浏览器连接使用Python 交互式终端。支持最新版本的火狐和谷歌浏览器。

为方便使用,WebREPL客户端托管在这里 http://micropython.org/webrepl . 或者您也可以从GitHub库本地安装: https://github.com/micropython/webrepl .

在连接到WebREPL之前,您应通过一个串口上的REPL设置一个密码并启用此密码。 ESP32的初始版本MicroPython在启动时自动启用WebREP,并可在首次通过WiFi连接时设置密码。 但是由于WebREPL的知名度和普及度日渐提高,初始安装已切换到有线连接,以提高安全性:

import webrepl_setup

按照屏幕上的说明和提示操作。任何更改都需在重启后生效。

使用WebREPL需将您的个人电脑与ESP32的访问点(MicroPython-xxxxxx,详见前章)连接。 若您已将ESP32配置为与路由器连接,即可跳过此步骤。

您与ESP32进入同一网络后,请点击页面的”连接”按钮(若您通过路由器连接,则您需要更改IP地址, 默认情况下,连接到ESP32的热点时,此IP地址是正确的)。若成功连接,您应看到一个密码提示。

您键入在安装时设置的密码后,再次点击Enter键,您应获得一个形如>>>的提示。现在您就可以开始键入Python指令了!

2.3. 使用REPL

获得提示后,您即可开始!您在提示中键入的任何对象都将在您点击Enter键后执行。 将运行您输入的代码并打印出结果(若存在结果)。若您输入的文本有误,则将打印错误信息。

尝试在提示中输入以下内容:

>>> print('hello esp32!')
hello esp32!

注意:您不应输入 >>> 箭头,此处表示您应在提示中该符号后输入文本。下一行即为设备应响应的内容。 在末尾,您输入print(“hello esp32!”)文本后并点击Enter键后,屏幕上的输出结果应与上相同。

若您已对Python有所了解,可尝试一些基本指令。例如:

>>> 1 + 2
3
>>> 1 / 2
0.5
>>> 12**34
4922235242952026704037113243122008064

若您的板上有与GPIO13连接的LED(Adafruit ESP32 Feather会如此),您可使用以下编码将其开启或关闭:

>>> import machine
>>> pin = machine.Pin(13, machine.Pin.OUT)
>>> pin.on()
>>> pin.off()

注意:某一引脚的on方法可能会关闭LED,而其off方法可能会开启(反之亦然),取决于LED是怎样连接到您的板上。 解决此问题,请参见 machine.Signal 类。

2.3.1. 编辑行

您可使用左右箭头移动光标、删除键和退格键来编辑您输入的当前行。 您可以点击Home键或ctrl-A来将光标移到行的开始,点击End键或ctrl-E将光标移到行的末尾。

2.3.2. 输入历史

REPL储存您输入的前几行文本(在ESP32上可达8行)。您可使用上下箭头键来召回之前输入的内容。

2.3.3. Tab补齐

点击Tab键将自动补齐您正在输入的当前字。这对查找模块或对象的函数很有帮助。 您可尝试输入”ma”并点击Tab键,则会自动将其补齐为”machine”(假设您在上一示例中输入”machine”)。 然后输入”.”,再次点击Tab键即可显示machine模块的所有函数的列表。

2.3.4. 换行和自动缩进

您输入的某些内容将需要”换行”,即需要更多的文本行来创建适当的Python语句。 此时提示将变为…,光标将自动缩进正确数量,您即可直接开始输入下一行。您可通过定义以下函数来尝试使用此功能:

>>> def toggle(p):
...    p.value(not p.value())
...
...
...
>>>

您需要在一行中连续三次输入Enter键以完成复合语句(这是仅由点组成的三行)。 完成复合语句的另一方式为点击退格键回到行的起始处,再点击Enter键(若您操作有误,且欲避免模式的延续,点击ctrl-C可忽略所有行)。

您定义的函数允许您切换引脚状态。您先前创建的引脚对象应仍存在(若不存在,请再次创建),您可使用以下内容来切换LED状态:

>>> toggle(pin)

现在循环切换LED状态(若您的板子无LED,您不必调用LED,可打印一些文本以查看效果):

>>> import time
>>> while True:
...     toggle(pin)
...     time.sleep_ms(500)
...
...
...
>>>

此时切换LED的频率为1Hz(半秒钟开,半秒钟关)。停止切换请点击ctrl-C,这会引起键盘中断异常并打断循环。

时间模块提供可用于延迟和计时的函数。您可使用Tab补齐来查找这些函数。

2.3.5. 粘贴模式

点击ctrl-E将进入特殊的粘贴模式。这允许您将文本块复制并粘贴如REPL。点击ctrl-E,您将看到粘贴模式提示:

paste mode; Ctrl-C to cancel, Ctrl-D to finish ===

现在您可粘贴(或输入)文本了。注意:任何特殊键或指令都无法再粘贴模式下运行(例如Tab或退格键)。点击ctrl-D键以结束文本输入并执行文本。

2.3.6. 其他控制指令

另有四种控制指令:

  • 空白行中的Ctrl-A键可进入原始REPL模式。这一模式类似于永久粘贴模式,只是字符不会回显。
  • 空白行中的Ctrl-B键可开启常规REPL模式。
  • Ctrl-C取消所有输入,或中断当前运行代码。
  • 空白行中的Ctrl-D键会启动软复位。

注意:ctrl-A和ctrl-D对WebREPL无效。