二、W5100S/W5500+RP2040之MicroPython开发<DHCP示例>

文章目录

  • 1 前言
  • 2 相关网络信息
    • 2 .1 简介
    • 2.2 DHCP工作原理
    • 2.3 DHCP的优点
    • 2.4 应用场景
  • 3 WIZnet以太网芯片
  • 4 DHCP网络设置示例概述以及使用
    • 4.1 流程图
    • 4.2 准备工作核心
    • 4.3 连接方式
    • 4.4 主要代码概述
    • 4.5 结果演示
  • 5 注意事项
  • 6 相关链接

1 前言

  在这个智能硬件和物联网时代,MicroPython和树莓派PICO正以其独特的优势引领着嵌入式开发的新潮流。MicroPython作为一种精简优化的Python 3语言,为微控制器和嵌入式设备提供了高效开发和简易调试的

  当我们结合WIZnet W5100S/W5500网络模块,MicroPython和树莓派PICO的开发潜力被进一步放大。这两款模块都内置了TCP/IP协议栈,使得在嵌入式设备上实现网络连接变得更加容易。无论是进行数据传输、远程控制,还是构建物联网应用,它们都提供了强大的支持。

​ 本章我们将以WIZnet W5100S为例,以MicroPython的开发方式进行DHCP解析示例

2 相关网络信息

2 .1 简介

在这里插入图片描述

  DHCP(Dynamic Host Configuration Protocol)是动态主机配置协议,它是一种针对于IP地址进行动态管理和分配的技术。在DHCP中,主要包括三种角色:DHCP服务器、DHCP客户端和DHCP中继。

  DHCP服务器负责从地址池中选择IP地址分配到DHCP客户端,还可以为DHCP客户端提供其它网络参数,好比默认网关地址,DNS服务器或者WINS服务器地址等。DHCP客户端可以理解为请求IP地址的设备,如IP电话、手机、PC等。很多时候,DHCP服务器并不与DHCP客户端在同一网段,因此就需要一个代理,也就是这里的中继。

2.2 DHCP工作原理

在这里插入图片描述

DHCP基于UDP工作,其通信链路上的步骤如下:

  1. DHCP客户端将广播发送DHCP发现报文(DHCP DISCOVER)事务ID和DHCP客户端的MAC地址,封装该报文的IP数据报的源IP地址为0.0.0.0,这是因为主机目前还未分配到IP地址,因此使用该地址代替,目的IP地址为广播地址255.255.255.255,之所以广播发送,是因为主机现在并不知道网络中有哪几个DHCP服务器。
  2. DHCP客户端在通信链路上发起DHCP请求包,请求包主要是告诉DHCP服务器,它希望使用上一步提供的网络设置,之后DHCP服务器向DHCP客户端发送确认包,表示允许DHCP客户端使用第二步发送的网络设置。至此,DHCP的网络设置结束,然后通信链路上的主机之间就可以进行TCP/IP通信了。
  3. 当不需要IP地址时,客户端可以发送DHCP解除包(DHCPRELEASE)进行解除。另外,DHCP的设置中通常会有一个租期时间的设定,DHCP客户端在这个时限内可以发送DHCP请求包通知想要延长这个期限。

2.3 DHCP的优点

  DHCP的优点主要包括:

  1. 自动配置:DHCP能够自动为客户端分配IP地址、子网掩码、默认网关等网络配置,大大减少了手动配置的工作量和错误率。
  2. 节约IP地址资源:DHCP能够动态地分配IP地址,使得IP地址的利用率更高,避免了IP地址资源的浪费。
  3. 提高网络安全性:DHCP可以限制客户端只能从特定的服务器获取IP地址,避免了未经授权的访问和攻击,提高了网络安全性。
  4. 支持多种操作系统:DHCP可以在多种操作系统上实现和应用,具有很好的兼容性和可移植性。
  5. 方便客户端的配置:DHCP客户端只需要将DHCP服务器的IP地址设置为默认网关,就可以自动获取IP地址和其他网络配置,无需手动配置。
  6. 降低维护成本:使用DHCP可以减少管理员的工作量,降低维护成本。
  7. 提高效率:使用DHCP可以减少由于手动配置而可能出现的错误,极大地提高了工作效率。
  8. 便于管理:当网络使用的IP地址段改变时,只需修改DHCP服务器的IP地址池即可,而不必逐台修改网络内的所有计算机地址。

2.4 应用场景

  DHCP的应用场景如下:

  1. 移动办公:当用户在局域网内移动时,例如从办公室到会议室,或者从一台设备切换到另一台设备,DHCP能够自动为其分配新的IP地址,使用户无需手动更改配置。
  2. 服务器部署:在服务器部署中,DHCP可以自动为服务器分配IP地址,降低了手动配置的复杂性和错误率。
  3. 网络设备配置:DHCP可以用于网络设备的配置,如路由器、交换机等,无需手动输入IP地址,简化了设备配置过程。
  4. 虚拟化环境:在虚拟化环境中,DHCP能够为虚拟机动态分配IP地址,提高了虚拟化环境的灵活性和效率。
  5. 物联网设备:对于数量众多的物联网设备,DHCP能够自动为每个设备分配IP地址,方便了设备的集中管理和监控。

3 WIZnet以太网芯片

WIZnet 主流硬件协议栈以太网芯片参数对比

ModelEmbedded CoreHost I/FTX/RX BufferHW SocketNetwork Performance
W5100STCP/IPv4, MAC & PHY8bit BUS, SPI16KB4Max.25Mbps
W6100TCP/IPv4/IPv6, MAC & PHY8bit BUS, Fast SPI32KB8Max.25Mbps
W5500TCP/IPv4, MAC & PHYFast SPI32KB8Max 15Mbps
  1. W5100S/W6100 支持 8bit数据总线接口,网络传输速度会优于W5500。
  2. W6100 支持IPV6,与W5100S 硬件兼容,若已使用W5100S的用户需要支持IPv6,可以Pin to Pin兼容。
  3. W5500 拥有比 W5100S更多的 Socket数量以及发送与接收缓存。

相较于软件协议栈,WIZnet的硬件协议栈以太网芯片有以下优点

  1. 硬件TCP/IP协议栈:WIZnet的硬件协议栈芯片提供了一种硬件实现的TCP/IP协议栈,这种硬件实现的协议栈比软件实现的协议栈具有更好的性能和稳定性。
  2. 不需要额外的嵌入式系统软件栈和内存资源:由于所有的以太网传输和接收操作都由独立的以太网控制器处理,因此不需要额外的嵌入式系统软件栈和内存资源。
  3. 抵抗网络环境变化和DDoS攻击:与易受网络环境变化和DDoS攻击影响的软件TCP/IP协议栈相比,硬件协议栈芯片能够提供更稳定的以太网性能。
  4. 适用于低规格的嵌入式系统:即使在低规格的嵌入式系统中,使用WIZnet的硬件协议栈芯片也可以比使用软件TCP/IP协议栈的高规格系统显示出更高效的互联网应用操作性能。

在这里插入图片描述

4 DHCP网络设置示例概述以及使用

4.1 流程图

  程序的运行框图如下所示:

在这里插入图片描述

4.2 准备工作核心

软件

  • Thonny

硬件

  • W5100SIO模块 + RP2040 树莓派Pico开发板 或者 WIZnet W5100S-EVB-Pico开发板
  • Micro USB 接口的数据线
  • 网线

4.3 连接方式

  • 通过数据线连接PC的USB口(主要用于烧录程序,也可以虚拟出串口使用)
  • 使用模块连接RP2040 进行接线时
    • RP2040 GPIO16 <----> W5100S MISO
    • RP2040 GPIO17 <----> W5100S CS
    • RP2040 GPIO18 <----> W5100S SCK
    • RP2040 GPIO19 <----> W5100S MOSI
    • RP2040 GPIO20 <----> W5100S RST
  • 通过PC和设备都通过网线连接路由器LAN口

4.4 主要代码概述

  我们直接打开dhcp.py文件。

  可以看到在w5x00_init()函数中,进行了SPI的初始化。以及将spi相关引脚和复位引脚注册到库中,后续则是激活网络,并使用DHCP配置网络地址信息,当DHCP失败时,则配置静态网络地址信息。当未配置成功时,会打印出网络地址相关寄存器的信息,可以帮助我们更好的排查问题。

from usocket import socket
from machine import Pin,SPI
import time,networkdef w5x00_init():spi=SPI(0,2_000_000, mosi=Pin(19),miso=Pin(16),sck=Pin(18))nic = network.WIZNET5K(spi,Pin(17),Pin(20))nic.active(True)try:#DHCPprint("\r\nConfiguring DHCP")nic.ifconfig('dhcp')except:#None DHCPprint("\r\nDHCP fails, use static configuration")nic.ifconfig(('192.168.1.20','255.255.255.0','192.168.1.1','8.8.8.8'))#Set static network address information #Print network address informationprint("IP         :",nic.ifconfig()[0])print("Subnet Mask:",nic.ifconfig()[1])print("Gateway    :",nic.ifconfig()[2])print("DNS        :",nic.ifconfig()[3],"\r\n")#If there is no network connection, the register address information is printedwhile not nic.isconnected():time.sleep(1)print(nic.regs())def main():w5x00_init()if __name__ == "__main__":main()

4.5 结果演示

在这里插入图片描述

要测试以太网示例,必须将开发环境配置为使用Raspberry Pi Pico。

  • 所需的开发环境
    • Thonny
  • 如果你必须编译MicroPython,则必须使用Linux或Unix环境。

将代码复制到Thonny之后,选择运行环境为Raspberry Pi Pico,然后点击运行即可。

5 注意事项

  • 如果采用的是WIZnet的W5500来实现本章的示例,则只需烧录W5500的固件并运行示例程序即可。

6 相关链接

WIZnet官网

本章例程链接

想了解更多,评论留言哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/286678.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux软件管理rpm和yum

rpm方式管理 rpm软件包名称: 软件名称 版本号(主版本、次版本、修订号) 操作系统 -----90%的规律 #有依赖关系,不能自动解决依赖关系。 举例&#xff1a;openssh-6.6.1p1-31.el7.x86_64.rpm 数字前面的是名称 数字是版本号&#xff1a;第一位主版本号&#xff0c;第二位次版本…

C++数据结构——二叉搜索树详解

目录 一&#xff0c;关于二叉搜索树 1.1 概念 1.2 基本结构 二&#xff0c;二叉搜索树接口实现 2.1 插入 2.2 查找 2.3 打印 2.4* 删除 三&#xff0c;二叉搜索树接口递归实现 3.1 查找 3.2 插入 3.3 删除 四&#xff0c;二叉搜索树的默认成员函数 五&#xff0c;…

揭秘`v-if`和`v-show`的区别:选择正确指令的技巧(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

软件测试面试:测试基础题

软件测试的流程是什么&#xff1f;&#xff08;测试流程&#xff09; &#xff08;1&#xff09;需求调查&#xff1a;全面了解系统概况、应用领域、软件开发周期、软件开发环境、开发组织、时间安排、功能需求、性能需求、质量需求及测试要求等。根据系统概况进行项目所需的人…

杰发科技AC7840——SPM电源管理之低功耗模式

0、SPM简介 很早以前就听过低功耗模式&#xff0c;一直没有怎么深入了解&#xff0c;最近遇到几个项目都是跟低功耗有关。正好AutoChips的芯片都有电源管理的功能&#xff0c;在此借用AC7840的SPM对低功耗进行测试。 1、AC7840的5种功耗模式 2、AC7840的模式转换 3、唤醒 在…

iOS问题记录 - iOS 17通过NSUserDefaults设置UserAgent无效

文章目录 前言开发环境问题描述问题分析解决方案最后 前言 最近维护一个老项目时遇到的问题。说起这老项目我就有点头疼&#xff0c;一个快十年前的项目&#xff0c;这么说你可能不觉得有什么&#xff0c;但是你想想Swift也才发布不到十年&#xff08;2014年6月发布&#xff0…

pdm产品设计管理软件哪款好

PDM产品设计管理软件有很多不错的选择&#xff0c;以下是一些被广泛认可和使用的优秀软件&#xff1a; 彩虹PDM软件&#xff1a; 彩虹PDM软件 企业产品数据管理系统 旨在为企业提供一套完善的产品全生命周期管理及协同办公平台&#xff0c;集成PLM、PDM、EDM、ERB等多个 软件功…

springMVC-数据格式化

1、基本介绍 在一个springmvc项目中&#xff0c;当表单提交数据时&#xff0c;如何对表单提交的数据进行格式的转换呢&#xff1f; 只要是数据进行网络传输都是以字符串的形式&#xff0c;进入内存后才有数据类型。 springmvc在上下文环境内置了一些转换器&#xff0c…

Home Assistant 如何开启SSH服务

环境&#xff1a; Home Assistant 11.2 SSH & Web Terminal 17.0 问题描述&#xff1a; Home Assistant 如何开启SSH服务 解决方案&#xff1a; 通过添加一个名为Terminal & SSH的插件来在 Home Assistant 中启用 SSH 服务 下面是启用 SSH 服务的大致步骤&#x…

TransXNet实战:使用TransXNet实现图像分类任务(一)

文章目录 摘要安装包安装timm 数据增强Cutout和MixupEMA项目结构计算mean和std生成数据集 摘要 论文提出了一种名为D-Mixer的轻量级双动态TokenMixer&#xff0c;旨在解决传统卷积的静态性质导致的表示差异和特征融合问题。D-Mixer通过应用高效的全局注意力和输入依赖的深度卷…

【Python炫酷系列】一闪一闪亮星星,漫天都是小星星(完整代码)

文章目录 环境需求完整代码详细分析系列文章环境需求 python3.11.4及以上版本PyCharm Community Edition 2023.2.5pyinstaller6.2.0(可选,这个库用于打包,使程序没有python环境也可以运行,如果想发给好朋友的话需要这个库哦~)【注】 python环境搭建请见:https://want595.…

EasyExcel模板导出(行和列自动合并)

1.需求背景: ①需要从第三方获取数据,第三方接口有两个参数,开始时间和结束时间 ②获取回来的数据并没有入库,所以不能通过数据库将数据归类统计,excel合并大概的流程是判断上一行或者左右相邻列是否相同,然后进行合并,所以不能是零散的数据且客户要求每一个自治区和每一个航站…