一、W5100S/W5500+RP2040之MicroPython开发<静态网络示例>
文章目录
1. 前言
??在这个智能硬件和物联网时代,MicroPython和树莓派PICO正以其独特的优势引领着嵌入式开发的新潮流。MicroPython作为一种精简优化的Python 3语言,为微控制器和嵌入式设备提供了高效开发和简易调试的
??当我们结合WIZnet W5100S/W5500网络模块,MicroPython和树莓派PICO的开发潜力被进一步放大。这两款模块都内置了TCP/IP协议栈,使得在嵌入式设备上实现网络连接变得更加容易。无论是进行数据传输、远程控制,还是构建物联网应用,它们都提供了强大的支持。
??本章我们将以WIZnet W5100S为例,以MicroPython的开发方式进行设置静态网络地址信息示例。
2. MicroPython介绍
2.1 简介
- Micro Python是一种紧凑且高效的Python实现,可在微控制器和受限环境中运行。它包括Python 3编程语言的一小部分标准库,并针对微控制器和受限环境进行了优化。MicroPython pyboard是一款紧凑的电子电路板,可在裸机上运行MicroPython,为您提供可用于控制各种电子项目的低级Python操作系统。MicroPython充满了高级功能,例如交互式提示符、任意精度整数、闭包、列表推导式、生成器、异常处理等。但它足够紧凑,可以适合仅256k的代码空间和16k的RAM。MicroPython旨在尽可能与普通Python兼容,以便您可以轻松地将代码从桌面传输到微控制器或嵌入式系统。
- Micro Python是完整的Python编译器和运行时,可在裸机上运行。您可以获得交互式提示符(REPL)以立即执行命令,以及从内置文件系统运行和导入脚本的能力。REPL具有历史记录、制表符完成、自动缩进和粘贴模式,以获得出色的用户体验。MicroPython力求尽可能与普通Python(称为CPython)兼容,以便如果您知道Python,则已经知道MicroPython。另一方面,您了解MicroPython的越多,就越能掌握Python。除了实现一些核心Python库之外,MicroPython还包括诸如“machine”之类的模块,用于访问低级硬件。
2.2 优点
- Python编程语言的特性:Python编程语言的学习曲线很短,这使得开发人员非常容易开始使用它。Python为开发人员提供了一种高级编程语言,可以用来构建简单的脚本,也可以用来开发复杂的面向对象体系结构,这些体系结构使用了现代软件项目的所有最佳实践。与C相比,Python还提供了用于创建线程、处理错误和轻松集成到测试工具中的内置机制。
- 库的支持:MicroPython提供了一系列库,为抽象出复杂性的低级微控制器功能提供控制。例如,硬件工程师可以设计电路板,而对微控制器(或C)的工作原理几乎一无所知,开发高级脚本,通过控制GPIO来测试电路板,甚至可以与I2C设备通信。
- 易用性:MicroPython的学习曲线很短,这使得开发人员非常容易开始使用它。MicroPython提供了一种高级编程语言,可以用来构建简单的脚本,也可以用来开发复杂的面向对象体系结构,这些体系结构使用了现代软件项目的所有最佳实践。
- 可移植性:MicroPython可以在多种平台上运行,包括Windows、Linux、Mac OS X、Raspberry Pi等。
- 开源:MicroPython是开源的,这意味着开发人员可以自由地使用、修改和分发它。
2.3 应用
- 物联网设备:MicroPython可以用于物联网设备的开发,例如传感器、智能家居设备、智能城市设备等。
- 机器人:MicroPython可以用于机器人的开发,例如机器人的控制、传感器数据的处理等。
- 自动化:MicroPython可以用于自动化系统的开发,例如自动化家居、自动化工厂等。
- 教育:MicroPython可以用于教育领域,例如教授编程、机器人、物联网等。
- 科学研究:MicroPython可以用于科学研究,例如数据采集、数据分析等。
3. WIZnet以太网芯片
WIZnet 主流硬件协议栈以太网芯片参数对比
Model | Embedded Core | Host I/F | TX/RX Buffer | HW Socket | Network Performance |
---|---|---|---|---|---|
W5100S | TCP/IPv4, MAC & PHY | 8bit BUS, SPI | 16KB | 4 | Max 25Mbps |
W6100 | TCP/IPv4/IPv6, MAC & PHY | 8bit BUS, Fast SPI | 32KB | 8 | Max 25Mbps |
W5500 | TCP/IPv4, MAC & PHY | Fast SPI | 32KB | 8 | Max 15Mbps |
- W5100S/W6100 支持 8bit数据总线接口,网络传输速度会优于W5500。
- W6100 支持IPV6,与W5100S 硬件兼容,若已使用W5100S的用户需要支持IPv6,可以Pin to Pin兼容。
- W5500 拥有比 W5100S更多的 Socket数量以及发送与接收缓存
相较于软件协议栈,WIZnet的硬件协议栈以太网芯片有以下优点:
- 硬件TCP/IP协议栈:WIZnet的硬件协议栈芯片提供了一种硬件实现的TCP/IP协议栈,这种硬件实现的协议栈比软件实现的协议栈具有更好的性能和稳定性。
- 不需要额外的嵌入式系统软件栈和内存资源:由于所有的以太网传输和接收操作都由独立的以太网控制器处理,因此不需要额外的嵌入式系统软件栈和内存资源。
- 抵抗网络环境变化和DDoS攻击:与易受网络环境变化和DDoS攻击影响的软件TCP/IP协议栈相比,硬件协议栈芯片能够提供更稳定的以太网性能。
- 适用于低规格的嵌入式系统:即使在低规格的嵌入式系统中,使用WIZnet的硬件协议栈芯片也可以比使用软件TCP/IP协议栈的高规格系统显示出更高效的互联网应用操作性能。
4. 静态IP网络设置示例讲解以及使用
??本例程包含RP2040和WIZnet芯片进行SPI通信,通过给WIZnet芯片配置静态IP地址并通过电脑ping通。
4.1 程序流程图
4.2 测试准备
软件:
- Thonny
硬件:
- W5100S IO模块 + RP2040 树莓派Pico开发板 或者 WIZnet W5100S-EVB-Pico开发板
- Micro USB 接口的数据线
- 网线
4.3 连接方式
- 通过数据线连接PC的USB口
- 当使用W5100S/W5500 IO模块连接RP2040时
- RP2040 GPIO 16 <----> W5100S/W5500 MISO
- RP2040 GPIO 17 <----> W5100S/W5500 CS
- RP2040 GPIO 18 <----> W5100S/W5500 SCK
- RP2040 GPIO 19 <----> W5100S/W5500 MOSI
- RP2040 GPIO 20 <----> W5100S/W5500 RST
- 通过网线直接连接PC网口(或:PC和设备都通过网线连接交换机或路由器LAN口)
4.4 相关代码
??我们直接打开network_install.py文件,可以看到在w5x00_init()函数中,进行了SPI的初始化。以及将spi相关引脚和复位引脚注册到库中,后续则是激活网络,并配置静态网络地址信息。当未配置成功时,会打印出网络地址相关寄存器的信息,可以帮助我们更好的排查问题。最后则是打印出配置好的网络地址信息啦。
#import library
from usocket import socket
from machine import Pin,SPI
import network
import time
#LED define
led = Pin(25, Pin.OUT)
"""
W5x00 chip initialization.
param: None
returns: None
"""
def w5x00_init():
#spi init
spi=SPI(0,2_000_000, mosi=Pin(19),miso=Pin(16),sck=Pin(18))
nic = network.WIZNET5K(spi,Pin(17),Pin(20)) #spi,cs,reset pin
nic.active(True)#network active
nic.ifconfig(('192.168.1.20','255.255.255.0','192.168.1.1','8.8.8.8'))#Set static network address information
while not nic.isconnected():
time.sleep(1)
print(nic.regs())#Print register information
#Print network address information
print("IP Address:",nic.ifconfig()[0])
print("Subnet Mask:",nic.ifconfig()[1])
print("Gateway:",nic.ifconfig()[2])
print("DNS:",nic.ifconfig()[3])
return nic
def main():
print("WIZnet chip network install example");
nic = w5x00_init()
while True:
led.value(1)
time.sleep(1)
led.value(0)
time.sleep(1)
print("try ping",nic.ifconfig()[0])
if __name__ == "__main__":
main()
4.5 烧录验证
要测试以太网示例,必须将开发环境配置为使用Raspberry Pi Pico。
- 所需的开发环境
- 如果你必须编译MicroPython,则必须使用Linux或Unix环境。
步骤1:将固件部署到设备
W5100S和W5500对应的固件如下:
必须将固件烧录到RP2040树莓派Pico中,才能运行我们编写的Python脚本文件。
烧录的方式可以参考下图:
步骤2:运行network_install.py程序
??在Thonny中打开network_install.py程序,并选择开发板之后,点击运行。
步骤3:Ping测试验证
5. 注意事项
-
静态配置的IP设置应避免IP重复导致IP冲突。
-
如果采用的是WIZnet的W5500来实现本章的示例,则只需烧录W5500的固件并运行示例程序即可。
6. 相关链接
想了解更多,评论留言哦!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!