1. ESP8266 上的 MicroPython 入门

使用 MicroPython 是充分利用 ESP8266 开发板的好方法。反之亦然,ESP8266 芯片是使用 MicroPython 的绝佳平台。本教程将指导您设置 MicroPython、获取提示、使用 WebREPL、连接到网络并与 Internet 通信、使用硬件外设以及控制一些外部组件。

让我们开始吧!

1.1. 要求

您首先需要的是一块带有 ESP8266 芯片的电路板。MicroPython 软件支持 ESP8266 芯片本身,任何板子都可以工作。电路板的主要特征是它有多少闪存、GPIO 引脚如何连接到外部世界,以及它是否包含内置 USB 串行转换器以使 UART 可用于您的 PC。

闪存大小的最低要求是 1Mbyte。还有一个针对 512KB 的板子的特殊构建,但与普通构建相比,它非常有限:不支持文件系统,因此依赖于它的功能将不起作用(WebREPL、upip 等)。因此,对于从源代码构建并为特定应用程序微调参数的用户而言,512KB 构建将更有趣。

本教程中将使用芯片名称(例如 GPIO0)给出引脚名称,在您的特定板上找到对应的引脚应该很简单。

1.2. 为电路板供电

如果您的板上有一个 USB 连接器,那么当连接到您的 PC 时,它很可能是通过这个连接器供电的。否则,您将需要直接为其供电。有关详细信息,请参阅您的电路板的文档。

1.3. 获取固件

您需要做的第一件事是下载最新的 MicroPython 固件 .bin 文件以加载到您的 ESP8266 设备上。您可以从 MicroPython 下载页面下载它 。从这里,您有 3 个主要选择

  • 为 1024kb 及以上模块构建稳定的固件。

  • 每天为 1024kb 及以上模块构建固件。

  • 每天为 512kb 模块构建固件。

如果您刚开始使用 MicroPython,最好的办法是使用稳定的固件版本。如果您是一位高级、经验丰富的 MicroPython ESP8266 用户,希望密切关注开发并帮助测试新功能,那么每天都有构建(注意:您实际上可能需要一些开发经验,例如准备好关注 git 历史以了解新功能)引入了更改和功能)。

在功能预览的基础上提供对 512kb 模块的支持。对于最终用户,建议使用闪存为 1024kb 或更大的模块。因此,仅提供 512kb 模块的每日构建。

1.4. 部署固件

获得 MicroPython 固件(编译代码)后,您需要将其加载到 ESP8266 设备上。执行此操作有两个主要步骤:首先您需要将设备置于引导加载程序模式,其次您需要跨固件复制。这些步骤的确切过程高度依赖于特定的电路板,您需要参考其文档以了解详细信息。

如果您的开发板带有 USB 连接器、USB 串行转换器,并且 DTR 和 RTS 引脚以特殊方式连接,那么部署固件应该很容易,因为所有步骤都可以自动完成。具有此类功能的开发板包括 Adafruit Feather HUZZAH 和 NodeMCU 开发板。

如果你没有这样的板子,你需要保持GPIO0拉到地并通过将reset引脚拉到地并再次释放它来重置设备以进入编程模式。

为获得最佳效果,建议先擦除设备的整个闪存,然后再安装新的 MicroPython 固件。

目前我们只支持 esptool.py 跨固件复制。你可以在这里找到这个工具:https://github.com/espressif/esptool/,或者使用 pip 安装它:

pip install esptool

从 1.3 开始的版本支持 Python 2.7 和 Python 3.4(或更新版本)。旧版本(至少需要 1.2.1)工作正常,但需要 Python 2.7。

任何其他刷机程序都应该可以工作,所以请随意尝试它们或参考您的电路板的文档以查看其建议。

使用 esptool.py 您可以使用以下命令擦除闪存:

esptool.py --port /dev/ttyUSB0 erase_flash

然后使用以下命令部署新固件:

esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 esp8266-20170108-v1.8.7.bin

您可能需要将“端口”设置更改为与您的 PC 相关的其他设置。如果在闪烁时出错(例如降低到 115200),您可能还需要降低波特率。固件的文件名也应与您拥有的文件相匹配。

对于某些具有特定 FlashROM 配置的板(例如 NodeMCU 板的某些变体),您可能需要手动设置兼容的 SPI 闪存模式. 。您通常会选择与您的设备兼容的最快选项,但该选项(最慢的选项)应该具有最佳兼容性: -fm dout

esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect -fm dout 0 esp8266-20170108-v1.8.7.bin

如果上述命令运行没有错误,那么 MicroPython 应该安装在您的板上!

如果您手动将 GPIO0 拉至接地以进入编程模式,请立即释放它并通过再次将复位引脚拉至接地一小段时间来复位设备。

1.5. 串口提示

在设备上安装固件后,您可以通过 UART0(GPIO1=TX,GPIO3=RX)访问 REPL(Python 提示符),它可能连接到 USB 串行转换器,具体取决于您的电路板。波特率为 115200。本教程的下一部分将更详细地讨论提示。

1.6. 无线上网

全新安装并启动后,设备会将自身配置为您可以连接的 WiFi 接入点 (AP)。ESSID 的格式为 MicroPython-xxxxxx,其中 x 替换为您设备的部分 MAC 地址(因此每次都相同,并且很可能对于所有 ESP8266 芯片都不同)。WiFi 的密码是 micropythoN(注意大写的 N)。连接到其网络后,其 IP 地址将为 192.168.4.1。WiFi 配置将在本教程后面更详细地讨论。

1.7. 排除安装问题

如果您在刷机过程中或在刷机后立即运行固件时遇到问题,以下是故障排除建议:

  • 注意并尝试排除硬件问题。有 2 个常见问题:电源质量差和 FlashROM 磨损/有缺陷。说到电源,不仅原始安培数很重要,低纹波和噪声/EMI 也很重要。如果您在使用自制电源或壁式电源时遇到问题,请尝试通过计算机使用 USB 电源。众所周知,未接地的电源会导致问题,因为它们会增加 EMI(电磁干扰)——至少,可能会导致电气设备故障。因此,建议您在使用 ESP8266 和其他板时避免使用未接地的电源连接。关于 FlashROM 硬件问题,有独立的(与 MicroPython 没有任何关系)报告 (例如) 在某些 ESP8266 模块上,FlashROM 可以在发生编程错误之前编程少至 20 次。这远少于 100,000 次编程周期,对于知名供应商与 ESP8266 一起使用的类型的 FlashROM 芯片,这表明要么生产不合格,要么在某些(显然便宜)模块/板上使用二手磨损的闪存芯片. 您可能希望对您购买的模块/板的来源、价格、文档、保修、售后支持进行最佳判断。

  • 上面的刷机说明使用的是460800波特的刷机速度,很好的兼顾了速度和稳定性。但是,根据您的模块/板、USB-UART 转换器、电缆、主机操作系统等,上述波特率可能过高并导致错误。在这种情况下,请尝试使用更常见的 115200 波特率。

  • 如果较低的波特率没有帮助,您可能想尝试旧版本的 esptool.py,它具有不同的编程算法:

    pip install esptool==1.0.1
    

    此版本不支持--flash_size=detect选项,因此您需要明确指定 FlashROM 大小(以兆位为单位)。它还需要 Python 2.7,因此您可能需要在上面的命令中使用pip2代替 pip

  • --flash_size 上述命令中的选项是强制性的。忽略它会导致固件损坏。

  • 要捕获不正确的闪存内容(例如,来自芯片上有缺陷的扇区),请--verify 在上面的命令中添加switch。

  • 此外,您可以从 MicroPython REPL 提示检查固件完整性(假设您能够刷新它并且 --verify 选项不报告错误):

    import esp
    esp.check_fw()
    

    如果最后一个输出值为 True,则固件正常。否则,它已损坏,需要正确刷新。

  • 如果您在使用其他刷机应用程序(不是 esptool.py)时遇到任何问题,请尝试 esptool.py,它是 ESP8266 社区中普遍接受的刷机应用程序。

  • 如果您在刷新固件时仍然遇到问题,请参阅 esptool.py 项目页面,https://github.com/espressif/esptool 以获取其他文档和错误跟踪器,您可以在其中报告问题。

  • 如果您能够刷新固件,但即使在多次重试后仍出现--verify 选项或esp.check_fw()返回错误,则您的 FlashROM 芯片可能有缺陷,如上所述。