三、W5100S/W5500+RP2040之MicroPython开发<DNS示例>

文章目录

  • 1. 前言
  • 2. 相关网络信息
    • 2.1 简介
    • 2.2 DNS工作过程
    • 2.3 优点
    • 2.4 应用
  • 3. WIZnet以太网芯片
  • 4. DNS解析示例讲解以及使用
    • 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的开发方式进行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 主流硬件协议栈以太网芯片参数对比

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
  • 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。

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

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

在这里插入图片描述

5. 注意事项

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

6. 相关链接

WIZnet官网

本章例程链接

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

隐藏通信隧道技术——防御DNS隧道攻击

隐藏通信隧道技术——防御DNS隧道攻击 DNS协议 ​ DNS协议是一种请求/应答协议&#xff0c;也是一种可用于应用层的隧道技术。虽然激增的DNS流量可能会被发现&#xff0c;但是基于传统Socket隧道已经濒临淘汰及TCP、UDP通信大量被防御系统拦截的状况&#xff0c;DNS、ICMP、H…

消除企业级SSD写抖动的利器:擦写暂停技术

Erase/Program Suspension是1y以及3D Flash提供的一个新的命令接口。该命令可以在Erase/Program操作过程中将其暂停&#xff0c;然后执行其他的操作&#xff0c;并在某个时间重启之前暂停的操作。这篇文章将简述这种Suspension操作对SSD性能改善所起到的作用。 Erase/Program操…

Win系统安装MYSQL5.6安装版和5.7解压版

选择设置类型 双击运行mysql-installer-community-5.6.21.1.msi&#xff0c;这里选择是自定义安装&#xff0c;所以直接选择“Custom”&#xff0c;点击“Next”到下一步&#xff1a; “Developer Default”是开发者默 “Server only”仅作为服务器安装 “Client only”仅作为…

SQL基础:查询的基本使用

上一节我们讲述了记录的基本操作&#xff0c;这一节我们来单独讲一下查询。 查询基本结构 首先我们来看下查询的基本结构 SELECTcolumn1,column2,... FROMtable_name [WHEREcondition] [GROUP BYcolumn1, column2, ...] [HAVINGaggregate_function(column) condition] [ORDE…

存在重复元素

题目链接 存在重复元素 题目描述 注意点 无 解答思路 根据Set无法存储相同元素的特点判断nums中是否存在重复元素 代码 class Solution {public boolean containsDuplicate(int[] nums) {Set<Integer> set new HashSet<Integer>();for (int x : nums) {if …

ADS学习笔记(二)——更新中

八、中途容性负载的时延累加 1.原理简述 中途容性负载产生的第一位影响就是下冲噪声&#xff0c;第二位影响是远端信号的接收时间被延迟。电容器与传输线的组合就像一个RC滤波器&#xff0c;所以传输信号10&#xff05;&#xff5e;90&#xff05;上升边将增加&#xff0c;信…

爬虫入门--爬取电影TOP250-附源码解析

爬取电影TOP250 1 知识小课堂1.1 什么是爬虫1.2 爬虫能做什么 2 代码解析2.1 运行环境2.2 过程解析2.2.1 第一步&#xff1a;引入两个模块2.2.2 找到网址2.2.3 拉去页面全内容 2.2.42.3 完整代码 1 知识小课堂 1.1 什么是爬虫 爬虫&#xff0c;也叫网络蜘蛛&#xff0c;如果把…

Python---端口和端口号的介绍

1. 问题思考 不同电脑上的飞秋之间进行数据通信&#xff0c;它是如何保证把数据给飞秋而不是给其它软件呢? 其实&#xff0c;每运行一个网络程序都会有一个端口&#xff0c;想要给对应的程序发送数据&#xff0c;找到对应的端口即可。 端口效果图: 2. 什么是端口 端口是传…

HarmonyOS自学-Day2(ArkTS生命周期)

目录 文章声明⭐⭐⭐让我们开始今天的学习吧&#xff01;生命周期组件生命周期谁可以调用组件生命周期&#xff1f;组件生命周期有哪些&#xff1f; 页面生命周期谁可以调用页面生命周期&#xff1f;页面生命周期有哪些&#xff1f; 生命周期执行顺序&#xff08;非常重要&…

Jackson 注解及配置大全

Jackson JSON 框架中包含了大量的注解来让我们可以干预 Jackson 的 JSON 处理过程&#xff0c; 例如我们可以通过注解指定 java pojo 的某些属性在生成 json 时被忽略。。本文主要介绍如何使用 Jackson 提供的注解。 Jackson注解主要分成三类&#xff0c;一是只在序列化时生效的…

腾讯云服务器上传文件 :Permission denied (os error 13) ,由于权限无法上传

根据网上的修改云服务器上传文件目录的权限&#xff0c;或是用root权限上传本地文件&#xff0c;均失败。 正解办法&#xff1a; ubuntu:/home/wwwroot# sudo passwd root Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully首先修…

【lesson21】MySQL复合查询(2)子查询

文章目录 子查询测试要用到的表测试要用到的数据单行子查询案例 多行子查询案例 多列子查询案例 在from子句中使用子查询案例 合并查询union案例union all案例 子查询 子查询是指嵌入在其他sql语句中的select语句&#xff0c;也叫嵌套查询 测试要用到的表 测试要用到的数据 单…

变量覆盖漏洞 [BJDCTF2020]Mark loves cat 1

打开题目 我们拿dirsearch扫描一下看看 扫描得到 看见有git字眼&#xff0c;那我们就访问 用githack去扒一下源代码看看 可以看到确实有flag.php结合index.php存在 但是当我去翻源代码的时候却没有翻到 去网上找到了这道题目的源代码 <?phpinclude flag.php;$yds &qu…

第二十二章 : Spring Boot 集成定时任务(一)

第二十二章 &#xff1a; Spring Boot 集成定时任务&#xff08;一&#xff09; 前言 本章知识点&#xff1a; 介绍使用Spring Boot内置的Scheduled注解来实现定时任务-单线程和多线程&#xff1b;以及介绍Quartz定时任务调度框架&#xff1a;简单定时调度器&#xff08;Simp…

【EI会议征稿通知】2024年计算机与多媒体技术国际学术会议(ICCMT 2024)

2024年计算机与多媒体技术国际学术会议&#xff08;ICCMT 2024&#xff09; 2024 International Conference on Computer and Multimedia Technology (ICCMT 2024) 2024年计算机与多媒体技术国际学术会议&#xff08;ICCMT2024&#xff09;将于3月1日-3日在福建三明举办。会议…

Atium Designer 23 全新功能-丝印制备,解决DFM问题

进行PCB设计时需要养成良好的设计习惯&#xff0c;才能保证后期的生产效果。例如整板上需要保证丝印跟阻焊的间距规则避免产生丝印重叠造成的PCB制造设计&#xff08;DFM&#xff09;问题。丝印重叠阻焊的影响有如下&#xff1a; 1&#xff09;PCB板后期打样&#xff0c;一般是…

基础题总结(三)

一.0的个数 代码如下 二.序列求和

解决苹果应用商城审核拒绝的Guideline 2.5.4 - Performance - Software Requirements问题

当您的应用程序在苹果应用商城审核过程中被拒绝时&#xff0c;苹果会向您发送一封邮件&#xff0c;其中提供了关于拒绝原因的详细信息。本文将深入探讨如何正确处理Guideline 2.5.4 - Performance - Software Requirements问题&#xff0c;并提供解决方案&#xff0c;以确保您的…

gitee的学习

1.git下载 下载地址&#xff1a;https://git-scm.com/ 2.建立远程仓库 访问&#xff1a;gitee.com 在此网站上创建 3.本地操作 在本地找一个任意文件&#xff0c;克隆git 执行命令&#xff1a;git clone https://gitee.com/beijing-jiaxin-times_0/test_zsx_cang_ku.git …

tcp vegas 为什么好

我吹捧 bbr 时曾论证过它在和 buffer 拧巴的时候表现如何优秀&#xff0c;但这一次说 vegas 时&#xff0c;我说的是从拥塞控制这个问题本身看来&#xff0c;vegas 为什么好&#xff0c;并且正确。 接着昨天 tcp vegas 鉴赏 继续扯。 假设一群共享带宽的流量中有流量退出或有…