用Micropython点亮ESP8266:从固件刷写到第一个LED控制程序
在物联网开发的世界里,ESP8266凭借其低廉的价格和强大的功能,成为了众多开发者的首选。而Micropython的出现,更是让Python开发者能够轻松上手嵌入式开发。本文将带你从零开始,完成ESP8266的Micropython固件刷写,并编写第一个LED控制程序,体验物联网开发的乐趣。
1. 准备工作
在开始之前,我们需要准备以下工具和材料:
- ESP8266开发板:市面上常见的型号包括NodeMCU、Wemos D1 mini等
- Micro USB数据线:用于连接电脑和ESP8266
- Micropython固件:针对ESP8266的专用版本
- 固件刷写工具:如esptool.py或NodeMCU Flasher
- 串口终端工具:如PuTTY、Tera Term等
固件下载注意事项:
务必从Micropython官网下载对应ESP8266的固件版本,不同型号的ESP8266可能需要不同的固件。
2. 刷写Micropython固件
2.1 安装刷写工具
对于Windows用户,推荐使用NodeMCU Flasher,它提供了图形化界面,操作简单:
- 从GitHub下载最新版本的NodeMCU Flasher
- 解压后直接运行可执行文件,无需安装
- 确保ESP8266已通过USB连接电脑
对于macOS或Linux用户,可以使用esptool.py,这是一个基于Python的命令行工具:
pip install esptool
2.2 刷写固件步骤
使用NodeMCU Flasher的步骤如下:
- 打开NodeMCU Flasher
- 在"Config"选项卡中选择下载好的Micropython固件
- 在"Operation"选项卡中选择正确的串口
- 点击"Flash"按钮开始刷写
刷写过程中可能需要手动进入刷机模式:
- 按住FLASH按钮不松开
- 按下并松开RST按钮
- 松开FLASH按钮
刷写成功后,工具会显示"Finished"状态。
使用esptool.py的命令如下:
esptool.py --port /dev/ttyUSB0 erase_flash
esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 esp8266-xxx.bin
3. 验证固件刷写
3.1 连接串口终端
刷写完成后,我们可以通过串口终端与ESP8266交互:
- 打开PuTTY或Tera Term
- 选择正确的串口
- 设置波特率为115200
- 点击连接
成功连接后,按ESP8266上的RST按钮,应该能看到Micropython的REPL提示符:
>>>
3.2 测试基本功能
在REPL中尝试输入以下命令:
print("Hello, ESP8266!")
如果能看到输出,说明Micropython已经成功运行。
4. 控制板载LED
4.1 了解硬件
大多数ESP8266开发板都带有板载LED,通常连接到GPIO2。在NodeMCU开发板上,这个LED是蓝色的,当GPIO2输出低电平时点亮。
4.2 编写LED控制程序
在REPL中直接输入以下代码:
import machine
import time
led = machine.Pin(2, machine.Pin.OUT)
while True:
led.on() # 关闭LED
time.sleep(1)
led.off() # 点亮LED
time.sleep(1)
这段代码会让LED以1秒的间隔闪烁。需要注意的是,在大多数ESP8266开发板上,LED是低电平有效,所以on()方法实际上会关闭LED,而off()会点亮LED。
4.3 将程序保存为启动脚本
如果想让程序在开发板启动时自动运行,可以将代码保存为main.py:
- 首先在REPL中初始化文件系统:
import uos
uos.mkfs('/flash')
- 然后创建并编辑
main.py:
with open('main.py', 'w') as f:
f.write('''
import machine
import time
led = machine.Pin(2, machine.Pin.OUT)
while True:
led.on()
time.sleep(1)
led.off()
time.sleep(1)
''')
- 重启开发板,程序会自动运行。
5. 进阶应用
5.1 使用WebREPL
Micropython提供了WebREPL功能,允许通过网页与ESP8266交互:
- 首先在REPL中启用WebREPL:
import webrepl_setup
- 按照提示设置密码并启用
- 连接同一网络的电脑访问
http://micropython.org/webrepl/ - 输入ESP8266的IP地址和密码即可连接
5.2 文件传输
WebREPL还可以用于文件传输,方便开发:
- 在WebREPL界面点击"Send a file"或"Get a file"
- 选择要传输的文件
- 文件会被传输到ESP8266的文件系统中
5.3 使用外部LED
除了板载LED,我们还可以连接外部LED:
- 准备一个LED和220Ω电阻
- 将电阻一端连接到ESP8266的GPIO引脚(如GPIO4)
- 将LED正极连接到电阻另一端,负极连接到GND
- 修改代码控制新的GPIO:
import machine
import time
led = machine.Pin(4, machine.Pin.OUT)
while True:
led.on()
time.sleep(0.5)
led.off()
time.sleep(0.5)
6. 常见问题解决
6.1 刷写失败
可能原因及解决方案:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 无法识别串口 | 驱动未安装 | 安装CH340或CP2102驱动 |
| 刷写进度不前进 | 未进入刷机模式 | 按正确顺序操作FLASH和RST按钮 |
| 刷写中途失败 | 波特率过高 | 降低波特率至115200 |
6.2 REPL无响应
如果连接串口后没有看到>>>提示符:
- 检查波特率是否正确(通常为115200)
- 尝试按RST按钮重置开发板
- 检查USB线是否接触良好
6.3 LED不亮
如果LED没有按预期工作:
- 确认GPIO号是否正确
- 检查LED极性是否接反
- 确认LED是否损坏
7. 项目扩展思路
掌握了基本的LED控制后,可以尝试以下扩展项目:
- 物联网气象站:连接温湿度传感器,将数据上传到云平台
- 智能家居控制:通过继电器控制家电开关
- 无线遥控车:用ESP8266控制电机驱动模块
- 网页控制LED:搭建简单的Web服务器,通过浏览器控制LED
实现网页控制LED的简单示例:
import machine
import socket
led = machine.Pin(2, machine.Pin.OUT)
def web_page():
if led.value():
gpio_state="ON"
else:
gpio_state="OFF"
html = """<html><body>
<p>GPIO state: <strong>""" + gpio_state + """</strong></p>
<p><a href="/on"><button>ON</button></a></p>
<p><a href="/off"><button>OFF</button></a></p>
</body></html>"""
return html
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80))
s.listen(5)
while True:
conn, addr = s.accept()
request = conn.recv(1024)
if '/on' in request:
led.on()
elif '/off' in request:
led.off()
response = web_page()
conn.send('HTTP/1.1 200 OK\n')
conn.send('Content-Type: text/html\n')
conn.send('Connection: close\n\n')
conn.sendall(response)
conn.close()
将这段代码保存为main.py并重启ESP8266,然后通过浏览器访问ESP8266的IP地址,就能看到控制界面了。
2774



被折叠的 条评论
为什么被折叠?



