技术标签: W5100S/W5500+RP2040之Python开发 RP2040 W5100S/W5500 MicroPython
在这个智能硬件和物联网时代,MicroPython和树莓派PICO正以其独特的优势引领着嵌入式开发的新潮流。MicroPython作为一种精简优化的Python 3语言,为微控制器和嵌入式设备提供了高效开发和简易调试的
当我们结合WIZnet W5100S/W5500网络模块,MicroPython和树莓派PICO的开发潜力被进一步放大。这两款模块都内置了TCP/IP协议栈,使得在嵌入式设备上实现网络连接变得更加容易。无论是进行数据传输、远程控制,还是构建物联网应用,它们都提供了强大的支持。
本章我们将以WIZnet W5100S为例,以MicroPython的开发方式进行DNS解析示例
DNS,即域名系统,是因特网中的一项核心服务。它是用于实现域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
在互联网中,每台计算机都有一个唯一的标识,称为IP地址。然而,IP地址是由数字组成的,不便于人们记忆。因此,我们通常使用域名来访问网站。例如,我们可以通过输入 www.microsoft.com 来访问微软的官方网站,而不需要记住其IP地址。
当我们在浏览器中输入一个域名时,计算机会向DNS服务器发送一个请求,询问这个域名对应的IP地址是什么。DNS服务器会查找其数据库,找到对应的IP地址并返回给计算机。然后,计算机就可以通过这个IP地址来访问网站。
总的来说,DNS协议就是一个将域名转换为IP地址的过程,使得人们可以通过易于理解和记忆的域名来访问互联网,而不是复杂的IP地址。这大大提高了互联网的易用性,并且使得网站可以在不影响用户的情况下更改其服务器的IP地址。
DNS协议可以使我们通过易于理解和记忆的域名来访问互联网,而不是复杂的IP地址。因此,DNS在以下场景中被广泛使用。
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 |
相较于软件协议栈,WIZnet的硬件协议栈以太网芯片有以下优点:
软件:
硬件:
我们直接打开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()
要测试以太网示例,必须将开发环境配置为使用Raspberry Pi Pico。
将代码复制到Thonny之后,选择运行环境为Raspberry Pi Pico,然后点击运行即可。
想了解更多,评论留言哦!
文章浏览阅读178次,点赞3次,收藏2次。本系统前端部分基于MVVM模式进行开发,采用B/S模式,后端部分基于python的Flask框架进行开发。前端部分:前端框架采用了比较流行的渐进式JavaScript框架Vue.js。使用Vue-Router和Vuex实现动态路由和全局状态管理,Ajax实现前后端通信,Element UI组件库使页面快速成型,项目前端通过栅格布局实现响应式,可适应PC端、平板端、手机端等不同屏幕大小尺寸的完美布局展示。后端部分:基于python语言以Flask作为开发框架,同时集成Redis,Echarts等相关技。_水位在线监测预警系统开发
文章浏览阅读2.3k次。介绍一个python的图形化界面,wxpython。 wxpython是Python语言对流行的wxWidgets跨平台GUI工具库的绑定。而wxWidgets是用C++语言写成的。 wxPython是跨平台的。这意味着同一个程序可以不经修改地在多种平台上运行。现今支持的平台有:32/64位微软Windows操作系统、大多数Unix或类Unix系统、苹果Mac OS_wxpython 调用窗口控件
文章浏览阅读405次。(软件下载方式在文末)自从 PanDownload 被处理之后一直没有超越它的可替代的应用出来但是最近,竟然有人接盘了!重新制作上线推出了更加强劲的复活版!放张图,大家先感受下60MB/..._.较好的容灾处理(眼神暗示)
文章浏览阅读5.2k次。最近熊猫烧香肆虐,WC里CIM那群人集体中招,俺的机子裸奔竟然也没事,呵呵。刚好python的邮件列表上有人给“熊猫”玩文字游戏,觉得特有意思,拿出来和大家分享一下 。 床前明月光,熊猫在烧香。专杀杀不尽,两眼泪汪汪。 熊猫烧不尽,关机开又生。 宝剑锋从磨砺出,熊猫香自网上来。 无边香火烧烧下,不尽熊猫滚滚来。身心俱疲终不悔,为猫烧得人憔悴。 相见时难杀亦难,熊猫烧
文章浏览阅读7.8k次。前端时间参加了公司的管理培训,讲非职权影响力。对于领导者来讲,如果不能提高自己的影响力,那么是没办法做到让下属信服和追随的。整理了一下培训的收获。 影响力的定义运用一些别人所乐于接受的方式,改变他人的思想和行动,具体有个性、思想,以及行动。这些方式包括:举例引证、造成恐惧、赞美肯定、权势财富等。 影响力的6大武器互惠 承诺一致 社会认同 喜好 权威 稀缺另外次要..._职权影响力
文章浏览阅读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选中文字做笔记
文章浏览阅读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重启后盘符交换
文章浏览阅读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个字符。..._域名
文章浏览阅读3.3k次。点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达本文转载自:AI人工智能初学者Rethinking BiSeNet For Real-time Semantic Seg..._语义分割的fps
文章浏览阅读6.6k次,点赞2次,收藏27次。 根据网络资源整合了一份, 并开发了自己的demo。http://download.csdn.net/detail/zdw86/9833470 一、添加控件(一)创建工程 (二)插入控件 (三)添加类 点完确认之后,要等很长一段时间.期间不要触碰VC++6.0否则程序..._vc 6.0 teechart8
文章浏览阅读888次,点赞8次,收藏23次。1.背景介绍分布式系统是现代计算机系统的基础设施之一,它允许多个计算节点在网络中协同工作。随着分布式系统的发展和应用,数据一致性问题变得越来越重要。在分布式计算中,数据一致性是指在分布式系统中的多个节点能够同步获取和更新相同的数据,以确保数据的一致性。在分布式系统中,数据一致性问题主要由于节点之间的异步通信和故障导致的数据不一致。为了解决这个问题,人们提出了一种称为Paxos和Raft的一...