2. 获取 MicroPython REPL 提示¶
REPL 代表 Read Evaluate Print Loop,是您可以在 ESP8266 上访问的交互式 MicroPython 提示的名称。到目前为止,使用 REPL 是测试代码和运行命令的最简单方法。
有两种访问 REPL 的方法:通过 UART 串行端口的有线连接,或通过 WiFi。
2.1. 通过串口进行 REPL¶
REPL 在 UART0 串行外围设备上始终可用,该外围设备连接到用于 TX 的引脚 GPIO1 和用于 RX 的 GPIO3。REPL 的波特率为 115200。如果您的板上有 USB 串行转换器,那么您应该能够直接从您的 PC 访问 REPL。否则,您将需要一种与 UART 通信的方法。
要通过 USB 串行访问提示,您需要使用终端仿真程序。在 Windows 上 TeraTerm 是一个不错的选择,在 Mac 上可以使用内置的屏幕程序,Linux 上有 picocom 和 minicom。当然,还有许多其他终端程序可以使用,所以请选择您最喜欢的!
例如,在 Linux 上,您可以尝试运行:
picocom /dev/ttyUSB0 -b115200
通过串行端口建立连接后,您可以通过按几次 Enter 来测试它是否正常工作。您应该会看到 Python REPL 提示,由 >>>
.
2.2. WebREPL - WiFi 提示¶
WebREPL 允许您通过 WiFi 使用 Python 提示,通过浏览器连接。支持最新版本的 Firefox 和 Chrome。
为方便起见,WebREPL 客户端托管在 http://micropython.org/webrepl。或者,您可以从 GitHub 存储库 https://github.com/micropython/webrepl本地安装它 。
在连接到 WebREPL 之前,您应该设置一个密码并通过正常的串行连接启用它。用于 ESP8266 的 MicroPython 的初始版本在启动时自动启用 WebREPL,并能够在第一次连接时通过 WiFi 设置密码,但随着 WebREPL 变得越来越广为人知和流行,初始设置已切换到有线连接提高安全性:
import webrepl_setup
按照屏幕上的说明和提示进行操作。要进行任何更改,您需要重新启动设备。
要使用 WebREPL,请将您的计算机连接到 ESP8266 的接入点(MicroPython-xxxxxx,请参阅上一节)。如果您已经将 ESP8266 重新配置为连接到路由器,那么您可以跳过这一部分。
与 ESP8266 处于同一网络后,单击“连接”按钮(如果您通过路由器连接,则可能需要更改 IP 地址,默认情况下,连接到 ESP8266 的接入点时 IP 地址是正确的) . 如果连接成功,您应该会看到密码提示。
输入在上述设置步骤中配置的密码后,再次按 Enter 键,您应该会看到类似 的提示>>>
。您现在可以开始输入 Python 命令了!
2.3. 使用 REPL¶
收到提示后,您就可以开始尝试了!在按 Enter 键后,您在提示符下键入的任何内容都将被执行。MicroPython 将运行您输入的代码并打印结果(如果有)。如果您输入的文本有错误,则会打印一条错误消息。
尝试在提示符下键入以下内容:
>>> print('hello esp8266!')
hello esp8266!
请注意,您不应该键入 >>>
箭头,它们在那里表示您应该在提示符后键入文本。然后接下来的行是设备应该响应的内容。最后,一旦您输入文本 并按下 Enter 键,屏幕上的输出应该与上面的完全一样。
print("hello esp8266!")
如果您已经了解一些 Python,您现在可以在这里尝试一些基本命令。例如:
>>> 1 + 2
3
>>> 1 / 2
0.5
>>> 12**34
4922235242952026704037113243122008064
如果您的开发板有一个 LED 连接到 GPIO2(ESP-12 模块有),那么您可以使用以下代码打开和关闭它:
>>> import machine
>>> pin = machine.Pin(2, 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 会记住您之前输入的一定数量的文本行(在 ESP8266 上最多 8 行)。要调用以前的行,请使用向上和向下箭头键。
2.3.3. 标签完成¶
按 Tab 键将自动完成您输入的当前单词。这对于找出模块或对象具有的函数和方法非常有用。通过键入“ma”然后按 Tab 来尝试一下。它应该完成“机器”(假设您在上面的示例中导入了机器)。然后输入“.” 并再次按 Tab 键查看机器模块具有的所有功能的列表。
2.3.4. 行继续和自动缩进¶
您键入的某些内容需要“继续”,即需要更多行文本来生成正确的 Python 语句。在这种情况下,提示将更改为 ...
并且光标将自动缩进正确的数量,以便您可以立即开始输入下一行。通过定义以下函数来尝试此操作:
>>> def toggle(p):
... p.value(not p.value())
...
...
...
>>>
在上面,您需要连续按三次 Enter 键才能完成复合语句(即三行,上面只有点)。完成复合语句的另一种方法是按退格键到达行首,然后按 Enter 键。(如果您做错了什么并想退出延续模式,请按 ctrl-C;所有行都将被忽略。)
您刚刚定义的功能允许您切换引脚。您之前创建的 pin 对象应该仍然存在(如果不存在则重新创建),您可以使用以下方法切换 LED:
>>> toggle(pin)
现在让我们循环切换 LED(如果您没有 LED,那么您可以只打印一些文本而不是调用 toggle,以查看效果):
>>> import time
>>> while True:
... toggle(pin)
... time.sleep_ms(500)
...
...
...
>>>
这将以 1Hz 的频率切换 LED(打开半秒,关闭半秒)。要停止切换,请按 ctrl-C,这将引发 KeyboardInterrupt 异常并跳出循环。
time 模块提供了一些有用的函数来进行延迟和计时。使用制表符补全来找出它们是什么并玩弄它们!
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。