跳到主要内容

MicroPython 开发

本章节包含以下部分,请按需阅读:

MicroPython 入门教程

MicroPython 入门教程

初次接触 ESP32 MicroPython 开发,想要快速上手?我们为您准备了一套通用的 ESP32 MicroPython 入门教程

请注意:该教程使用 ESP32-S3-Zero 作为教学示例,所有硬件代码均基于其引脚布局。在动手实践前,建议您对照手中的开发板引脚图,确认引脚配置无误。

配置开发环境

1. 烧录 MicroPython 固件和配置 Thonny

请参考 搭建 MicroPython 开发环境教程 烧录 MicroPython 固件。

2. 其他提示

示例程序基础例程说明
01_GPIO实现控制指定的左右共 20 个 GPIO 引脚依次循环进行高低电平切换,并串口打印每个引脚的电平变化状态
02_BlinkRGB实现控制 RGB 呈流水灯动态效果
03_GetchipID实现每隔三秒获取并打印 ESP32-c5 芯片的硬件信息,包括芯片型号、版本、核心数量以及芯片 ID
04_BLE实现通过ESP32-C5-Zero 开发板连接蓝牙 BLE 信标并接收广播数据的功能
05_UART实现通过ESP32-C5-Zero 开发板连接 UART 功能
06WIFI_AP实现通过ESP32-C5-Zero 开发板设置为 AP 热点 (2.4G),允许其他 WiFi 设备接入联网
07_WIFI_STA实现通过ESP32-C5-Zero 开发板使用 WIFI 连接,DHCP 分配 IP 地址
08_WIFI_StaticIP实现连接指定 WiFi 并打印连接信息,连接成功后切换为静态 IP 配置,便于局域网内调试和访问。

01_GPIO

代码

01_GPIO.ino
for i in range(13):
pins.append(Pin(i, Pin.OUT))

while True:
for p in pins:
p.value(1)
time.sleep(0.5)

for p in pins:
p.value(0)
time.sleep(0.5)

代码解释

  • 代码先把 0 到 12 号 GPIO 配置为输出口,再统一拉高、拉低实现循环闪烁。
  • time.sleep(0.5) 控制亮灭节奏,便于观察引脚输出效果。

02_BlinkRGB

代码

02_BlinkRGB.ino
def wheel(pos):
if pos < 85:
return (pos * 3, 255 - pos * 3, 0)
elif pos < 170:
pos -= 85
return (255 - pos * 3, 0, pos * 3)
else:
pos -= 170
return (0, pos * 3, 255 - pos * 3)

while True:
for i in range(256):
np[0] = wheel(i)
np.write()
time.sleep(0.02)

代码解释

  • wheel(pos) 根据位置值返回不同 RGB 组合,用于生成彩虹渐变色。
  • np.write() 会把颜色数据真正刷新到灯珠上,循环执行后即可看到流动变色效果。

运行效果

ESP32-C5-Zero
ESP32-C5-Zero
ESP32-C5-Zero

03_GetchipID

代码

03_GetchipID.ino
wlan = network.WLAN(network.STA_IF)
wlan.active(True)

mac = wlan.config('mac')
chip_id = ubinascii.hexlify(mac).decode()

print("Chip Unique ID:", chip_id)

代码解释

  • network.WLAN(network.STA_IF) 用于启用无线网卡的 STA 模式。
  • 读取到的 mac 再经 ubinascii.hexlify() 转成字符串,方便直接打印唯一 ID。

运行效果

ESP32-C5-Zero

04_BLE

代码

04_BLE.ino
def adv_payload(name, tx_power=-4):
name = name.encode()

payload = bytearray()

# Flags
payload += struct.pack("BB", 2, 0x01) + b"\x06"

# TX Power
payload += struct.pack("BBb", 2, 0x0A, tx_power)

# Name
payload += struct.pack("BB", len(name) + 1, 0x09) + name

return payload

ble.gap_advertise(200_000, adv_payload("ESP32-C5-Zero-BLE"))

while True:
time.sleep(1)

代码解释

  • adv_payload() 按 BLE 广播格式拼接设备名和发射功率等字段。
  • ble.gap_advertise() 启动广播后,外部设备就可以扫描到这个 BLE 名称。

运行效果

ESP32-C5-Zero

05_UART

代码

05_UART .ino
# UART1
uart = UART(
1,
baudrate=115200,
tx=Pin(11),
rx=Pin(12)
)

print("UART-Init")

while True:
uart.write("Waveshare\r\n")
time.sleep(1)

代码解释

  • 代码使用 UART(1, ...) 初始化 UART1,并把 TX/RX 分别映射到指定引脚。
  • 主循环中每秒发送一次字符串,可用于最基础的串口连通性测试。

运行效果

ESP32-C5-Zero

06WIFI_AP

代码

06WIFI_AP.ino
# Brief pause to ensure the AP is fully initialized
time.sleep(1)

# Print the AP details in a formatted way
print("-" * 30)
print("AP (Access Point) Started Successfully!")
print("SSID:", ap.config("essid"))
print("Password:", PASSWORD)
# ap.ifconfig() returns a tuple: (IP, Subnet Mask, Gateway, DNS)
# Index [0] is the IP address
print("IP Address:", ap.ifconfig()[0])
print("-" * 30)

代码解释

  • 这段代码主要用于输出热点启动后的 SSID、密码和 IP 地址,确认 AP 模式是否正常工作。
  • ap.ifconfig()[0] 取到的是热点当前的本机 IP。

运行效果

ESP32-C5-Zero

07_WIFI_STA

代码

07_WIFI_STA.ino
def connect_wifi():
sta = network.WLAN(network.STA_IF)
sta.active(True)

if not sta.isconnected():
print("Connecting to WiFi...")
sta.connect(SSID, PASSWORD)

while not sta.isconnected():
time.sleep(0.5)
print(".", end="")

代码解释

  • sta.connect(SSID, PASSWORD) 发起联网,后面的循环持续等待直到连接成功。
  • 这种写法适合示例演示,能直观看到设备正在连接 Wi-Fi。

运行效果

ESP32-C5-Zero

08_WIFI_StaticIP

代码

08_WIFI_StaticIP.ino
if sta.isconnected():
# Step 2: After connection, overwrite configuration to lock static IP
sta.ifconfig((STATIC_IP, SUBNET_MASK, GATEWAY, DNS))

print("-" * 30)
print("WiFi connected successfully!")
print("Connected to SSID:", SSID)
print("Static IP locked to:", sta.ifconfig()[0])
print("Gateway:", sta.ifconfig()[2])
print("-" * 30)
else:
print("Connection failed. Please check hotspot status, credentials, or signal strength.")

代码解释

  • 连接成功后调用 sta.ifconfig(...) 手动写入静态 IP 配置,覆盖 DHCP 分配结果。
  • 这样设备每次联网后都使用固定地址,便于局域网内调试和访问。

运行效果

ESP32-C5-Zero