引言做嵌入式物联网项目的开发者大多都踩过软件 TCP/IP 协议栈的坑移植繁琐、调试排错困难网络通信还会持续占用主控算力稍微叠加复杂业务逻辑就容易出现卡顿、丢包甚至协议栈崩溃。WIZnet 凭借全硬件 TCP/IP 协议栈技术在工业联网领域深耕多年从经典的外置 W5500 以太网芯片到如今推出集成主控的单芯片方案 W55MH32直接把 Cortex-M3 内核、硬件 TOE 卸载引擎、MAC 与 PHY 全部整合进一颗芯片从根源上降低了单片机联网的开发门槛与运行风险。最近我们拿到了基于 W55MH32L 打造的官方评估板 W55MH32L-EVB。它不仅完整引出了芯片全部外设资源还板载了 AHT20 温湿度传感器、有源蜂鸣器、EEPROM、SD 卡插槽与 Arduino 兼容排针甚至集成了 WIZ-Link 调试器一根 USB 线就能完成烧录、调试、串口输出开箱即可上手开发。更值得关注的是官方已经推出了完整适配的 MicroPython 固件不用啃寄存器、不用手写底层驱动用 Python 脚本就能快速实现外设控制与以太网通信。本文就从硬件规格拆解入手基于 MicroPython 开发环境依次实测 GPIO 输入输出、I2C 传感器读取、SPI 屏幕驱动、基础网络通信等核心功能完整呈现这块开发板的上手门槛、实际表现和适用场景给打算入门硬件物联网项目的读者做一份全面参考。一、W55MH32 芯片介绍1.1 简介W55MH32 是 WIZnet 新推出的高性能以太网单片机。它采用高性能 Arm® Cortex-M3 内核主频最高达 216MHz内置 1024KB FLASH、96KB SRAM 。尤为突出的是其搭载 WIZnet TCP/IP offload 引擎TOE集成全硬件 TCP/IP 协议栈、MAC 及 PHY 还配备 32KB 独立以太网收发缓存供 8 个硬件 socket 使用是真正的 All-in-One 解决方案。W55MH32 有两种封装一种为 100QFN(12x12mm)即上图(左)W55MH32L另外一种为 68QFN(8x8mm)即上图(右)W55MH32Q本教程所使用的 W55MH32L-EVB 使用的是 W55MH32L关于另外一种封装我们将不会详细讲解1.2 系统框架W55MH32 芯片支持丰富的外部接口包括 GPIO、ADC、UART、SPI、I2S、I2C 和 SDIO 等便于与传感器、执行器和其他外围设备进行连接和交互。这些特性使得 W55MH32 芯片适用于各种需要高效网络通信和数据处理的应用场景如智能家居、工业自动化、智能电网等。1.3 资源封装W55MH32L:100QFN(12x12mm)W55MH32Q:68QFN(8x8mm)32 位 Arm Cortex-M3 核心主频最高可达 216MHz1024KB FLASH, 96KB SRAM3 个 12 位 ADC2 个 12 位 DAC12 通道 DMA 控制器10/100 兆以太网 MAC 和 PHY全硬件 TCP/IP 协议栈支持TCPUDPICMPIPv4ARPIGMPPPPoE8 个独立的硬件 socket独立 32KB 以太网收发缓存支持自动协商LED 状态显示最多 66 个多功能双向 IO 口全部可映射到 16 个外部中断上。17 个定时器10 个通用定时器2 个带死区控制的高级定时器2 个基本定时器2 个看门狗定时器1 个系统滴答定时器最多 12 个通信接口2 个 I2C 接口5 个 USART 接口2 个 SPI 接口1 个带 I2S 接口复用1 个 CAN 接口1 个 USB2.0 全速接口可选内部 1.5K 上拉电阻1 个 SDIO 接口支持硬件加密算法单元(DES、AES、SHA 等1.4 引脚分布W55MH32L 引脚分布W55MH32Q 引脚分布二、W55MH32L-EVB 开发板介绍2.1 简介W55MH32L-EVB 是基于 W55MH32L 芯片开发的一款功能丰富的开发板已将芯片上的所有外设和 IO 引出方便评估芯片和学习。W55MH32L-EVB 正面W55MH32L-EVB 背面2.2 板载资源开发板集成了 TF 卡座温湿度传感器EEPROM用户按钮用户 LED 等外设资源丰富。还有一套 ARDUINO 插排可以外接 ARDUINO 接口的扩展板无论是开发板自身的功能性和兼容性还是拓展性都非常强大。此外开发板上还集成了一个 WIZ-Link 仿真器支持调试程序下载以及虚拟串口功能再也无须外接仿真器和串口调试工具只需一根 TYPE C 数据线和一块开发板即可轻松搞定单片机 以太网部分的学习内容。W55MH32L-EVB 硬件资源配置图W55MH32L-EVB 硬件资源配置表三、实验前的准备-MicroPython 开发环境的搭建3.1 烧录 MicroPython 固件和 Thonny IDE 的下载安装这里我们主要参考文档W55MH32 MicroPython documentation — W55MH32 MicroPython documentation 中内容搭建 MicroPython 开发环境关于Thonny IDE的基本介绍和使用可以看教程FreakStudio - 02 MicroPython开发环境的搭建——文档教程初稿首先需要准备一个Type-C数据线连接到开发板上的DAPLINK-USB接口建议在已有 python 环境下pip下载thonnypip install thonny接着下载固件W55MH32烧录方式基本和树莓派Pico的UF2固件烧录方式一模一样操作简单无需额外操作使用Type-C数据线连接开发板与电脑待电脑识别出名为 WIZLINK 的 U 盘将下载好的 w55mh32_1_27_mpy_260326.hex(实际固件名可能改变) 固件文件拖拽到 U 盘中开发板会自动重启固件烧录完成注意如果电脑没有识别出 WIZLINK U 盘请尝试更换 USB 数据线、重新插拔开发板或更换电脑 USB 接口。接着打开Thonny IDE我们可以在Thonny的右下角解释器选择中看到您的开发板了然后选择开发板3.2 uPyPI-Thonny 插件的安装thonny-upypi-manager是FreakStudio专为Thonny IDE打造的第三方插件核心作用是对接FreakStudio团队维护的 uPyPiMicroPython 风格包仓库实现 MicroPython 包的全流程可视化管理适配 Thonny 4.1.7 及以上版本。简单来说它就是 uPyPi 仓库的 “Thonny 客户端”让你不用再切换网页、复制终端命令在 IDE 里就能搞定所有包管理操作。详细介绍和使用可看教程FreakStudio - Thonny中Mpy包管理器插件的安装和使用四、GPIO 快速实验按键、LED 和蜂鸣器在下列代码中我们首先导入Pin类和time类在初始化配置中设置PG6为按键输入引脚设置PD14为 LED 输出引脚下拉电阻使能。在主循环中不断检测按键是否按下如果按键没有按下不进行任何操作如果按键已经按下在硬件电路中按键按下时GPIO 引脚读取的电平为低0在按键按下检测到后延时 50 毫秒time.sleep_ms(50)进行按键消抖如果LED当前状态为熄灭则切换为点亮终端输出The LED is ON如果LED当前状态为点亮则切换为熄灭终端输出The LED is OFF这里的延时 50ms 主要是因为按键在闭合和断开时触点会存在抖动现象如图所示:实际波形在按键按下的那一刻前后有 50ms 的抖动因此这里通过延时 50ms 跳过抖动的区域获取中间稳定区域的电平。# Python env : MicroPython v1.27.0# -*- coding: utf-8 -*-# Time : 2026/5/7 下午1:34# Author : 李清水# File : main.py# Description : GPIO读写实验完成驱动板载LED灯和按键读取的任务# 导入相关模块 # 硬件相关的模块from machine import Pin# 时间相关的模块import time# 全局变量 # 初始化LED的状态为关闭Falseled_state False# 功能函数 # 自定义类 # 初始化配置 # 上电延时3stime.sleep(3)# 打印调试消息print(FreakStudio: Using GPIO to control LED and read KEY)# 需要注意的是 MicroPython 中Pin类的构造函数不支持关键字参数仅支持位置参数# 因此下列定义KEY将会产生一个报错# TypeError: function missing 1 required positional arguments# key Pin(id 2, mode Pin.IN, pull Pin.PULL_DOWN)# 设置PG6 为按键输入引脚开启内部上拉电阻让按键检测更稳定KEY Pin(PG6, Pin.IN, Pin.PULL_UP)# 设置PD14为LED输出引脚下拉电阻使能LED Pin(PD14, Pin.OUT, Pin.PULL_DOWN)# 主程序 # 循环检测按键是否按下while True:# 检测到KEY引脚按下if KEY.value() 0:# 按键消抖延时50ms跳过抖动的区域time.sleep_ms(50)# 确保按键仍然处于按下状态if KEY.value() 0:# 切换LED的状态led_state not led_state# 根据状态变量设置LED亮或灭if led_state:LED.value(0)print(The LED is ON)else:LED.value(1)print(The LED is OFF)# 等待按键松开避免连续检测到按键按下while KEY.value() 0:pass这里需要注意的是MicroPython中 Pin 类的构造函数在传入参数时不支持关键字参数仅支持位置参数因此下列定义 KEY 将会产生报错 TypeError: function missing 1 required positional argumentsKEY Pin(id 2, mode Pin.IN, pull Pin.PULL_DOWN)将上述代码烧录到 MicroPython 中可以看到实验现象当第一次按下按键时切换led_state为TrueLED 灯点亮并且终端输出如下
硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
发布时间:2026/7/6 20:35:27
引言做嵌入式物联网项目的开发者大多都踩过软件 TCP/IP 协议栈的坑移植繁琐、调试排错困难网络通信还会持续占用主控算力稍微叠加复杂业务逻辑就容易出现卡顿、丢包甚至协议栈崩溃。WIZnet 凭借全硬件 TCP/IP 协议栈技术在工业联网领域深耕多年从经典的外置 W5500 以太网芯片到如今推出集成主控的单芯片方案 W55MH32直接把 Cortex-M3 内核、硬件 TOE 卸载引擎、MAC 与 PHY 全部整合进一颗芯片从根源上降低了单片机联网的开发门槛与运行风险。最近我们拿到了基于 W55MH32L 打造的官方评估板 W55MH32L-EVB。它不仅完整引出了芯片全部外设资源还板载了 AHT20 温湿度传感器、有源蜂鸣器、EEPROM、SD 卡插槽与 Arduino 兼容排针甚至集成了 WIZ-Link 调试器一根 USB 线就能完成烧录、调试、串口输出开箱即可上手开发。更值得关注的是官方已经推出了完整适配的 MicroPython 固件不用啃寄存器、不用手写底层驱动用 Python 脚本就能快速实现外设控制与以太网通信。本文就从硬件规格拆解入手基于 MicroPython 开发环境依次实测 GPIO 输入输出、I2C 传感器读取、SPI 屏幕驱动、基础网络通信等核心功能完整呈现这块开发板的上手门槛、实际表现和适用场景给打算入门硬件物联网项目的读者做一份全面参考。一、W55MH32 芯片介绍1.1 简介W55MH32 是 WIZnet 新推出的高性能以太网单片机。它采用高性能 Arm® Cortex-M3 内核主频最高达 216MHz内置 1024KB FLASH、96KB SRAM 。尤为突出的是其搭载 WIZnet TCP/IP offload 引擎TOE集成全硬件 TCP/IP 协议栈、MAC 及 PHY 还配备 32KB 独立以太网收发缓存供 8 个硬件 socket 使用是真正的 All-in-One 解决方案。W55MH32 有两种封装一种为 100QFN(12x12mm)即上图(左)W55MH32L另外一种为 68QFN(8x8mm)即上图(右)W55MH32Q本教程所使用的 W55MH32L-EVB 使用的是 W55MH32L关于另外一种封装我们将不会详细讲解1.2 系统框架W55MH32 芯片支持丰富的外部接口包括 GPIO、ADC、UART、SPI、I2S、I2C 和 SDIO 等便于与传感器、执行器和其他外围设备进行连接和交互。这些特性使得 W55MH32 芯片适用于各种需要高效网络通信和数据处理的应用场景如智能家居、工业自动化、智能电网等。1.3 资源封装W55MH32L:100QFN(12x12mm)W55MH32Q:68QFN(8x8mm)32 位 Arm Cortex-M3 核心主频最高可达 216MHz1024KB FLASH, 96KB SRAM3 个 12 位 ADC2 个 12 位 DAC12 通道 DMA 控制器10/100 兆以太网 MAC 和 PHY全硬件 TCP/IP 协议栈支持TCPUDPICMPIPv4ARPIGMPPPPoE8 个独立的硬件 socket独立 32KB 以太网收发缓存支持自动协商LED 状态显示最多 66 个多功能双向 IO 口全部可映射到 16 个外部中断上。17 个定时器10 个通用定时器2 个带死区控制的高级定时器2 个基本定时器2 个看门狗定时器1 个系统滴答定时器最多 12 个通信接口2 个 I2C 接口5 个 USART 接口2 个 SPI 接口1 个带 I2S 接口复用1 个 CAN 接口1 个 USB2.0 全速接口可选内部 1.5K 上拉电阻1 个 SDIO 接口支持硬件加密算法单元(DES、AES、SHA 等1.4 引脚分布W55MH32L 引脚分布W55MH32Q 引脚分布二、W55MH32L-EVB 开发板介绍2.1 简介W55MH32L-EVB 是基于 W55MH32L 芯片开发的一款功能丰富的开发板已将芯片上的所有外设和 IO 引出方便评估芯片和学习。W55MH32L-EVB 正面W55MH32L-EVB 背面2.2 板载资源开发板集成了 TF 卡座温湿度传感器EEPROM用户按钮用户 LED 等外设资源丰富。还有一套 ARDUINO 插排可以外接 ARDUINO 接口的扩展板无论是开发板自身的功能性和兼容性还是拓展性都非常强大。此外开发板上还集成了一个 WIZ-Link 仿真器支持调试程序下载以及虚拟串口功能再也无须外接仿真器和串口调试工具只需一根 TYPE C 数据线和一块开发板即可轻松搞定单片机 以太网部分的学习内容。W55MH32L-EVB 硬件资源配置图W55MH32L-EVB 硬件资源配置表三、实验前的准备-MicroPython 开发环境的搭建3.1 烧录 MicroPython 固件和 Thonny IDE 的下载安装这里我们主要参考文档W55MH32 MicroPython documentation — W55MH32 MicroPython documentation 中内容搭建 MicroPython 开发环境关于Thonny IDE的基本介绍和使用可以看教程FreakStudio - 02 MicroPython开发环境的搭建——文档教程初稿首先需要准备一个Type-C数据线连接到开发板上的DAPLINK-USB接口建议在已有 python 环境下pip下载thonnypip install thonny接着下载固件W55MH32烧录方式基本和树莓派Pico的UF2固件烧录方式一模一样操作简单无需额外操作使用Type-C数据线连接开发板与电脑待电脑识别出名为 WIZLINK 的 U 盘将下载好的 w55mh32_1_27_mpy_260326.hex(实际固件名可能改变) 固件文件拖拽到 U 盘中开发板会自动重启固件烧录完成注意如果电脑没有识别出 WIZLINK U 盘请尝试更换 USB 数据线、重新插拔开发板或更换电脑 USB 接口。接着打开Thonny IDE我们可以在Thonny的右下角解释器选择中看到您的开发板了然后选择开发板3.2 uPyPI-Thonny 插件的安装thonny-upypi-manager是FreakStudio专为Thonny IDE打造的第三方插件核心作用是对接FreakStudio团队维护的 uPyPiMicroPython 风格包仓库实现 MicroPython 包的全流程可视化管理适配 Thonny 4.1.7 及以上版本。简单来说它就是 uPyPi 仓库的 “Thonny 客户端”让你不用再切换网页、复制终端命令在 IDE 里就能搞定所有包管理操作。详细介绍和使用可看教程FreakStudio - Thonny中Mpy包管理器插件的安装和使用四、GPIO 快速实验按键、LED 和蜂鸣器在下列代码中我们首先导入Pin类和time类在初始化配置中设置PG6为按键输入引脚设置PD14为 LED 输出引脚下拉电阻使能。在主循环中不断检测按键是否按下如果按键没有按下不进行任何操作如果按键已经按下在硬件电路中按键按下时GPIO 引脚读取的电平为低0在按键按下检测到后延时 50 毫秒time.sleep_ms(50)进行按键消抖如果LED当前状态为熄灭则切换为点亮终端输出The LED is ON如果LED当前状态为点亮则切换为熄灭终端输出The LED is OFF这里的延时 50ms 主要是因为按键在闭合和断开时触点会存在抖动现象如图所示:实际波形在按键按下的那一刻前后有 50ms 的抖动因此这里通过延时 50ms 跳过抖动的区域获取中间稳定区域的电平。# Python env : MicroPython v1.27.0# -*- coding: utf-8 -*-# Time : 2026/5/7 下午1:34# Author : 李清水# File : main.py# Description : GPIO读写实验完成驱动板载LED灯和按键读取的任务# 导入相关模块 # 硬件相关的模块from machine import Pin# 时间相关的模块import time# 全局变量 # 初始化LED的状态为关闭Falseled_state False# 功能函数 # 自定义类 # 初始化配置 # 上电延时3stime.sleep(3)# 打印调试消息print(FreakStudio: Using GPIO to control LED and read KEY)# 需要注意的是 MicroPython 中Pin类的构造函数不支持关键字参数仅支持位置参数# 因此下列定义KEY将会产生一个报错# TypeError: function missing 1 required positional arguments# key Pin(id 2, mode Pin.IN, pull Pin.PULL_DOWN)# 设置PG6 为按键输入引脚开启内部上拉电阻让按键检测更稳定KEY Pin(PG6, Pin.IN, Pin.PULL_UP)# 设置PD14为LED输出引脚下拉电阻使能LED Pin(PD14, Pin.OUT, Pin.PULL_DOWN)# 主程序 # 循环检测按键是否按下while True:# 检测到KEY引脚按下if KEY.value() 0:# 按键消抖延时50ms跳过抖动的区域time.sleep_ms(50)# 确保按键仍然处于按下状态if KEY.value() 0:# 切换LED的状态led_state not led_state# 根据状态变量设置LED亮或灭if led_state:LED.value(0)print(The LED is ON)else:LED.value(1)print(The LED is OFF)# 等待按键松开避免连续检测到按键按下while KEY.value() 0:pass这里需要注意的是MicroPython中 Pin 类的构造函数在传入参数时不支持关键字参数仅支持位置参数因此下列定义 KEY 将会产生报错 TypeError: function missing 1 required positional argumentsKEY Pin(id 2, mode Pin.IN, pull Pin.PULL_DOWN)将上述代码烧录到 MicroPython 中可以看到实验现象当第一次按下按键时切换led_state为TrueLED 灯点亮并且终端输出如下