三、W5100S/W5500+RP2040之MicroPython开发<DNS示例>_w5500 w5100s 代码一样吗-程序员宅基地

技术标签: W5100S/W5500+RP2040之Python开发  RP2040  W5100S/W5500  MicroPython  

1. 前言

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

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

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

2. 相关网络信息

2.1 简介

  DNS,即域名系统,是因特网中的一项核心服务。它是用于实现域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。

  在互联网中,每台计算机都有一个唯一的标识,称为IP地址。然而,IP地址是由数字组成的,不便于人们记忆。因此,我们通常使用域名来访问网站。例如,我们可以通过输入 www.microsoft.com 来访问微软的官方网站,而不需要记住其IP地址。

  当我们在浏览器中输入一个域名时,计算机会向DNS服务器发送一个请求,询问这个域名对应的IP地址是什么。DNS服务器会查找其数据库,找到对应的IP地址并返回给计算机。然后,计算机就可以通过这个IP地址来访问网站。

  总的来说,DNS协议就是一个将域名转换为IP地址的过程,使得人们可以通过易于理解和记忆的域名来访问互联网,而不是复杂的IP地址。这大大提高了互联网的易用性,并且使得网站可以在不影响用户的情况下更改其服务器的IP地址。

在这里插入图片描述

2.2 DNS工作过程

  1. 客户机提出域名解析请求,并将该请求发送给本地的域名服务器。
  2. 当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。
  3. 如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址。
  4. 本地域名服务器再向上一步返回的域名服务器发送请求。
  5. 主域名服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。重复第四步,直到找到正确的纪录。
  6. 本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。

在这里插入图片描述

2.3 优点

  • 易于记忆:人们通常发现记住单词和短语比记住数字更容易。因此,使用域名(例如www.microsoft.com)比使用IP地址(例如207.46.197.32)更方便。
  • 灵活性:如果一个网站需要更改其服务器的IP地址,只需要在DNS服务器上更新记录,而无需通知所有用户新的IP地址。用户仍然可以通过同样的域名访问网站。
  • 负载均衡:DNS可以将一个域名解析为多个IP地址,这些IP地址对应的服务器可以分担处理用户请求的负载。这样可以提高网站的可用性和性能。
  • 安全性:DNSSEC(域名系统安全扩展)是一种用于保护DNS查询结果不被篡改的技术。这可以防止DNS欺骗攻击,提高了DNS的安全性。

2.4 应用

DNS协议可以使我们通过易于理解和记忆的域名来访问互联网,而不是复杂的IP地址。因此,DNS在以下场景中被广泛使用。

  • 网页浏览:当我们在浏览器中输入一个URL(如www.microsoft.com)并按下回车键时,计算机会向DNS服务器发送一个请求,询问这个URL对应的IP地址。DNS服务器会查找其数据库,找到对应的IP地址并返回给计算机。然后,计算机就可以通过这个IP地址来访问网站。
  • 电子邮件:当我们发送电子邮件时,邮件服务器需要知道收件人邮箱的邮件服务器的IP地址。这是通过查询DNS服务器来完成的。
  • 网络电话:当我们使用网络电话(如Skype或VoIP)时,我们的设备需要知道对方设备的IP地址。这也是通过查询DNS服务器来完成的。
  • 在线游戏:当我们玩在线游戏时,我们的游戏客户端需要知道游戏服务器的IP地址。这也是通过查询DNS服务器来完成的。
  • 云服务:当我们使用云服务(如AWS或Azure)时,我们需要知道云服务器的IP地址。这也是通过查询DNS服务器来完成的。

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的硬件协议栈以太网芯片有以下优点

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

在这里插入图片描述

4. DNS解析示例讲解以及使用

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 相关代码

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

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

第二步:然后是进行DNS解析操作,并将解析的IP地址打印。

#import library
import usocket
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=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)
    
    try:
        #DHCP
        print("\r\nConfiguring DHCP")
        nic.ifconfig('dhcp')
    except:
        #None DHCP
        print("\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 information
    print("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 printed
    while not nic.isconnected():
        time.sleep(1)
        print(nic.regs())
        
"""
DNS Domain Name Resolution.
 
param: domain name
returns: IP Address

"""    
def dns_query(domain):
    ip = usocket.getaddrinfo(domain, 80,0, usocket.SOCK_STREAM)
    return ip[0][4][0]

def main():
    print("WIZnet chip DNS example");
    domain = "www.wiznet.io"
    
    w5x00_init()
    ip = dns_query(domain)
    print("IP address of %s is %s"%(domain,ip))

    while True:
        led.value(1)
        time.sleep(1)
        led.value(0)
        time.sleep(1)

if __name__ == "__main__":
    main()

4.5 烧录验证

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

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

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

在这里插入图片描述

5. 注意事项

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

6. 相关链接

WIZnet官网

本章例程链接

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/WIZnet2012/article/details/135085823

智能推荐

Python#Flask#Mysql水质监测预警系统10148-计算机毕业设计(附源码)_水位在线监测预警系统开发-程序员宅基地

文章浏览阅读178次,点赞3次,收藏2次。本系统前端部分基于MVVM模式进行开发,采用B/S模式,后端部分基于python的Flask框架进行开发。前端部分:前端框架采用了比较流行的渐进式JavaScript框架Vue.js。使用Vue-Router和Vuex实现动态路由和全局状态管理,Ajax实现前后端通信,Element UI组件库使页面快速成型,项目前端通过栅格布局实现响应式,可适应PC端、平板端、手机端等不同屏幕大小尺寸的完美布局展示。后端部分:基于python语言以Flask作为开发框架,同时集成Redis,Echarts等相关技。_水位在线监测预警系统开发

wxpython,窗口,控件,事件_wxpython 调用窗口控件-程序员宅基地

文章浏览阅读2.3k次。介绍一个python的图形化界面,wxpython。 wxpython是Python语言对流行的wxWidgets跨平台GUI工具库的绑定。而wxWidgets是用C++语言写成的。 wxPython是跨平台的。这意味着同一个程序可以不经修改地在多种平台上运行。现今支持的平台有:32/64位微软Windows操作系统、大多数Unix或类Unix系统、苹果Mac OS_wxpython 调用窗口控件

PanDownload复活了!60MB/s!-程序员宅基地

文章浏览阅读405次。(软件下载方式在文末)自从 PanDownload 被处理之后一直没有超越它的可替代的应用出来但是最近,竟然有人接盘了!重新制作上线推出了更加强劲的复活版!放张图,大家先感受下60MB/..._.较好的容灾处理(眼神暗示)

俺也来祭祭熊猫-程序员宅基地

文章浏览阅读5.2k次。最近熊猫烧香肆虐,WC里CIM那群人集体中招,俺的机子裸奔竟然也没事,呵呵。刚好python的邮件列表上有人给“熊猫”玩文字游戏,觉得特有意思,拿出来和大家分享一下 。 床前明月光,熊猫在烧香。专杀杀不尽,两眼泪汪汪。 熊猫烧不尽,关机开又生。   宝剑锋从磨砺出,熊猫香自网上来。   无边香火烧烧下,不尽熊猫滚滚来。身心俱疲终不悔,为猫烧得人憔悴。 相见时难杀亦难,熊猫烧

影响力在职场的重要性_职权影响力-程序员宅基地

文章浏览阅读7.8k次。前端时间参加了公司的管理培训,讲非职权影响力。对于领导者来讲,如果不能提高自己的影响力,那么是没办法做到让下属信服和追随的。整理了一下培训的收获。 影响力的定义运用一些别人所乐于接受的方式,改变他人的思想和行动,具体有个性、思想,以及行动。这些方式包括:举例引证、造成恐惧、赞美肯定、权势财富等。 影响力的6大武器互惠 承诺一致 社会认同 喜好 权威 稀缺另外次要..._职权影响力

用Vue制作记事本_vue选中文字做笔记-程序员宅基地

文章浏览阅读765次,点赞2次,收藏7次。先放个效果图吧制作记事本一共分为五个部分。1、第一部分就是添加内容。目的是输入内容后按下enter能够在目录下出现对应的内容,此部分应用v-for,v-model以及v-text完成,html程序如下<div id="app"> <input id="text" type="text" v-model="addValue" @keyup.enter="add" placeholder="请输入内容"> <ul> <li v-f_vue选中文字做笔记

随便推点

linux 磁盘盘符改变,硬盘盘符重启后 自动切换——根据UUID挂载磁盘-程序员宅基地

文章浏览阅读997次。[root@platform-103 ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTvda 252:0 0 60G 0 disk├─vda1 252:1 0 500M 0 part /boo..._linux重启后盘符交换

数据结构与算法详解——散列表篇(附c++实现代码)_设计算法,将数组a 进行散列存储,以解决-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏15次。目录散列表散列函数哈希冲突开放地址法线性探测二次探测双重散列链表法装载因子散列表  前面数组、链表、栈、队列都是序列式容器,存储的都是一个元素。而散列表又叫哈希表(hash table),是一种关联式容器,存储的是一对值,一般是一个key对应一个value(又叫键值对)。  c++ stl中的map就是一个散列表,举个例子:std::map<std::string,int> m;m["小明"]=170;std::cout<<"小明的身高是"<<m["小明"]&_设计算法,将数组a 进行散列存储,以解决

域名讲解(一)域名基础概念-程序员宅基地

文章浏览阅读8k次,点赞4次,收藏26次。它作为可以将域名和IP地址相互映射的一个分布式数据库,是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的系统,搭载域名系统的机器称之为域名服务器,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP地址数串。,并通过网域名称系统(DNS,Domain Name System)来将域名和IP地址相互映射,使人更方便地访问互联网,而不用去记住能够被机器直接读取的IP地址数串。对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。..._域名

CVPR 2021 | 250 FPS!让实时语义分割飞起!重新思考BiSeNet-程序员宅基地

文章浏览阅读3.3k次。点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达本文转载自:AI人工智能初学者Rethinking BiSeNet For Real-time Semantic Seg..._语义分割的fps

VC++6.0 使用TeeChart v8.0 绘制多条曲线及圆滑处理._vc 6.0 teechart8-程序员宅基地

文章浏览阅读6.6k次,点赞2次,收藏27次。 根据网络资源整合了一份, 并开发了自己的demo。http://download.csdn.net/detail/zdw86/9833470 一、添加控件(一)创建工程 (二)插入控件 (三)添加类 点完确认之后,要等很长一段时间.期间不要触碰VC++6.0否则程序..._vc 6.0 teechart8

分布式计算中的数据一致性:Paxos 与 Raft 对比-程序员宅基地

文章浏览阅读888次,点赞8次,收藏23次。1.背景介绍分布式系统是现代计算机系统的基础设施之一,它允许多个计算节点在网络中协同工作。随着分布式系统的发展和应用,数据一致性问题变得越来越重要。在分布式计算中,数据一致性是指在分布式系统中的多个节点能够同步获取和更新相同的数据,以确保数据的一致性。在分布式系统中,数据一致性问题主要由于节点之间的异步通信和故障导致的数据不一致。为了解决这个问题,人们提出了一种称为Paxos和Raft的一...

推荐文章

热门文章

相关标签