WIZnet W5100S-EVB-Pico DHCP 配置教程(三)

DHCP协议介绍

什么是DHCP?

        动态主机配置协议DHCP(Dynamic Host Configuration Protocol)是一种网络管理协议,用于集中对用户IP地址进行动态管理和配置。

        DHCP于1993年10月成为标准协议,其前身是BOOTP协议。DHCP协议由RFC 2131定义,采用客户端/服务器通信模式,由客户端(DHCP Client)向服务器(DHCP Server)提出配置申请,DHCP Server基于请求的客户端(DHCP Client)的mac地址为它动态分配IP地址、子网掩码、默认网关地址,域名服务器(DNS)地址和其他相关配置参数,以便可以与其他IP网络通信。

        与静态IP地址相反的,而关于静态IP和动态IP地址一直以来都是网络技术人员们热议的话题,动态IP地址是一个不断变化的地址,若是要创建动态IP地址,网络必须配置并运行DHCP服务器。DHCP服务器为连接到网络的所有设备分配了一个空闲的IP地址。DHCP是一种向物理网络上的网络设备自动分配动态IP地址的方法,它能自动为网络设备分配或更新IP地址,以及其他配置信息。

        静态IP地址允许网络设备始终保持相同的IP地址,网络管理员必须跟踪每个静态分配的设备,从而避免再次使用该IP地址。由于静态IP地址需要手动配置,因此若是对TCP/IP协议不太了解,则可能会出现网络问题。

        DHCP是用于自动分配IP地址的协议,对网络管理员来说是非常有利的,因为它能避免网络上的每台设备分配多个IP地址(也就是重复分配IP地址)。通常配置可能只需要一分钟,但是当您配置数百个网络设备时,确实比较麻烦。当网络中接入无线接入点时可利用DHCP自动获取动态IP地址,无需再做配置。对于无线接入点,PoE交换机通常可支持用户定义进行动态绑定,为连接在一起的各个设备分配IP地址。此外,相对于静态IP地址而言,DHCP维护较少且便宜,对于用户而言具备吸引力

动态ip优点

1、成本低。由于静态IP数量有限,所以价格相对而言高一些。由于动态ip可以循环使用,所以使用动态IP更加经济。

2、自动配置。使用动态IP地址,服务器会自动为设备分配可用的IP地址,非常适合家庭使用。

3、更安全。每一次用户登录都会为设备分配一个新的IP地址,相对而言比较安全。

动态ip缺点

1、不太准确的地理定位。很难找到设备的准确位置,因为动态ip地址会变化。

2、限制远程访问。如果您使用动态IP地址,您的程序可能无法连接。

硬件准备

  • W5500-EVB-Pico开发板
  • 网线
  • Micro USB数据线

    注意:需将W5500-EVB-Pico通过RJ45网口接入到路由器上,电脑也接入到同一路由器下。路由器必须开启DHCP服务

软件环境

  • Visual Studio Code

W5100S-EVB-Pico使用DHCP协议获取IP地址

步骤1:找到dhcp_client示例程序并打开

主要引用到dhcp.h中的几个函数

void DHCP_init(uint8_t s, uint8_t * buf);
void DHCP_time_handler(void);
uint8_t DHCP_run(void);
void reg_dhcp_cbfunc(void(*ip_assign)(void), void(*ip_update)(void), void(*ip_conflict)(void));

修改网络信息结构体内容,将.dhcp的内容改为NETINFO_DHCP

uint8_t wizchip_version = 0x00;wiz_NetInfo net_info = {.mac = {0x00, 0x08, 0xdc, 0x1e, 0xed, 0x2e},.ip = {192, 168, 1, 235},.sn = {255, 255, 255, 0},.gw = {192, 168, 1, 1},.dhcp = NETINFO_DHCP                      // DHCP enable/disable};

定时器函数

bool repeating_timer_callback(struct repeating_timer *t) {DHCP_time_handler();return true;
}

DHCP运行函数

int main()
{/* Initialize */uint8_t retval = 0;uint8_t dhcp_retry = 0;stdio_init_all();gpio_config();// Enable SPI 0 at 8 MHz and co,nnect to GPIOsspi_init(SIP_ID, 8 * 1000 * 1000);struct repeating_timer timer;add_repeating_timer_ms(1000, repeating_timer_callback, NULL, &timer);wizchip_version = getVER();printf("wizchip_version = %02X\r\n", wizchip_version);sleep_ms(1000);if (net_info.dhcp == NETINFO_DHCP) // DHCP{wizchip_dhcp_init();}else // static{wizchip_setnetinfo(&net_info); // apply from DHCPprintf("mac: %02X%02X%02X%02X%02X%02X\r\n", net_info.mac[0], net_info.mac[1], net_info.mac[2], net_info.mac[3], net_info.mac[4], net_info.mac[5]);printf("ip: %d.%d.%d.%d\r\n", net_info.ip[0], net_info.ip[1], net_info.ip[2], net_info.ip[3]);printf("mask: %d.%d.%d.%d\r\n", net_info.sn[0], net_info.sn[1], net_info.sn[2], net_info.sn[3]);printf("gw: %d.%d.%d.%d\r\n", net_info.gw[0], net_info.gw[1], net_info.gw[2], net_info.gw[3]);}while (1){if (net_info.dhcp == NETINFO_DHCP){retval = DHCP_run();if (retval == DHCP_IP_LEASED){if (g_dhcp_get_ip_flag == 0){printf(" DHCP success\n");g_dhcp_get_ip_flag = 1;}}else if (retval == DHCP_FAILED){g_dhcp_get_ip_flag = 0;dhcp_retry++;if (dhcp_retry <= DHCP_RETRY_COUNT){printf(" DHCP timeout occurred and retry %d\n", dhcp_retry);}}if (dhcp_retry > DHCP_RETRY_COUNT){printf(" DHCP failed\n");DHCP_stop();while (1)                   ;}wiz_delay_ms(1000); // wait for 1 second}}
}

IP地址请求和更新回调函数

static void wizchip_dhcp_assign(void)
{getIPfromDHCP(net_info.ip);getGWfromDHCP(net_info.gw);getSNfromDHCP(net_info.sn);getDNSfromDHCP(net_info.dns);net_info.dhcp = NETINFO_DHCP;/* Network initialize */wizchip_setnetinfo(&net_info); // apply from DHCPprintf("mac: %02X%02X%02X%02X%02X%02X\r\n", net_info.mac[0], net_info.mac[1], net_info.mac[2], net_info.mac[3], net_info.mac[4], net_info.mac[5]);printf("ip: %d.%d.%d.%d\r\n", net_info.ip[0], net_info.ip[1], net_info.ip[2], net_info.ip[3]);printf("mask: %d.%d.%d.%d\r\n", net_info.sn[0], net_info.sn[1], net_info.sn[2], net_info.sn[3]);printf("gw: %d.%d.%d.%d\r\n", net_info.gw[0], net_info.gw[1], net_info.gw[2], net_info.gw[3]);printf(" DHCP leased time : %ld seconds\n", getDHCPLeasetime());
}

步骤2:编译烧录

        选择编译器,选择编译项目为dhcp_client,点击Build进行编译

        编译之后,按住boot按钮把开发板连接到电脑上,此时电脑将开发板识别为大容量存储器,我们将build/examples/dhcp_client文件夹下面的uf2文件拖入开发板的大容量存储器中,就烧录好了。

步骤3:验证测试

        此时串口会打印获取到的IP地址信息,我们也能直接ping通获取到的IP地址

 

示例下载链接 

例程下载WIZnet-EVB-PICO资源

本期内容到此结束,谢谢大家的观看,下期我们将对W5100S-EVB-PICO解析域名这一知识点进行讲解。

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

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

相关文章

Python批量下载主播照片,实现人脸识别, 进行颜值评分,制作颜值排行榜

昨晚一回家&#xff0c;表弟就神神秘秘的跟我说&#xff0c;发现一个高颜值网站&#xff0c;非要拉着我研究一下她们的颜值高低。 我心想&#xff0c;这还得要我一个个慢慢看&#xff0c;太麻烦了~ 于是反手用Python给他写了一个人脸识别代码&#xff0c;把她们的照片全部爬下…

【TiDB理论知识 07】SQL执行流程

一 DML语句读写流程 1 DML语句读流程概要 用户发出SQL 被协议层接收 Protocal Layer 通过PD获取时间戳 parse模块 解析SQL&#xff0c;通过词法解析 与 语法解析 生成AST语法树 编译SQL Compile模块 ,区分点查 与 非点查&#xff0c;生成执行计划 发送给Executor,从TIKV获…

AAOS 音频焦点请求

文章目录 前言基本概念提供给应用来获取音频焦点的apiAAOS中的音频焦点管理交互矩阵duck的实现流程AAOS 测试应用kitchensink焦点相关 前言 本文章的目标是首先了解Android中音频焦点的基本概念&#xff0c;理解代码中相关音频焦点的使用方法。其次理解AAOS 中相关交互矩阵概念…

【Linux】Centos的一些快捷操作

Centos的一些快捷操作 一个窗口多个终端GVIM 一个窗口多个文件 一个窗口多个终端 GVIM 一个窗口多个文件

Hadoop学习指南:探索大数据时代的重要组成——Hadoop概述

前言 在当今大数据时代&#xff0c;处理海量数据成为了一项关键任务。Hadoop作为一种开源的分布式计算框架&#xff0c;为大规模数据处理和存储提供了强大的解决方案。本文将介绍Hadoop的组成和其在大数据处理中的重要作用&#xff0c;让我们一同踏上学习Hadoop的旅程。 Hado…

Jenkins集成SonarQube保姆级教程

Jenkins是自动化部署平台&#xff0c;一个粗眉大眼的糙汉子&#xff01; SonarQube是代码扫描平台&#xff0c;一个眉目清秀的小女子&#xff01; 有一天&#xff0c;上天交给我一个任务&#xff0c;去撮合撮合他们&#xff01; 我抬头看了看天&#xff0c; 不&#xff0c;…

2023-07-30 LeetCode每日一题(环形链表 II)

2023-07-30每日一题 一、题目编号 142. 环形链表 II二、题目链接 点击跳转到题目位置 三、题目描述 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 n…

Centos7中实现脚本使用mysqldump实现分库分表备份

脚本 #!/bash/bin userroot #用户名 password123456 #密码 back_path/backup/db databases_file/backup/databases.list [ -f $databases_file ] || touch /backup/databases.list if [[ ! -s ${databases_file} ]] then while read line do[ -d ${back_path}/$line ] …

【Python】数据分析+数据挖掘——探索Pandas中的数据筛选

1. 前言 当涉及数据处理和分析时&#xff0c;Pandas是Python编程语言中最强大、灵活且广泛使用的工具之一。Pandas提供了丰富的功能和方法&#xff0c;使得数据的选择、筛选和处理变得简单而高效。在本博客中&#xff0c;我们将重点介绍Pandas中数据筛选的关键知识点&#xff…

Git的.gitignore文件、标签管理以及给命令起别名

文章目录 1. 前言2. .gitignore文件3. 标签管理4. 给命令起别名 1. 前言 本文主要讲解Git中容易被忽略但比较重要一些知识:.gitignore文件、标签管理以及给命令起别名. 2. .gitignore文件 在新建仓库时,有一个添加.gitignore 模板: .gitignore 是一个用于指定 Git 忽略特定文…

第 356 场力扣周赛题解

A 满足目标工作时长的员工数目 签到题 class Solution { public:int numberOfEmployeesWhoMetTarget(vector<int> &hours, int target) {int res 0;for (auto x: hours)if (x > target)res;return res;} };B 统计完全子数组的数目 枚举子数组&#xff1a;枚举子数…

web-暴力破解密码

Burte Force&#xff08;暴力破解&#xff09;概述 暴力破解”是一攻击具手段&#xff0c;在web攻击中&#xff0c;一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录&#xff0c;直到得到正确的结果。 为了提高效率&…

【iOS】KVOKVC原理

1 KVO 键值监听 1.1 KVO简介 KVO的全称是Key-Value Observing&#xff0c;俗称"键值监听"&#xff0c;可以用于监听摸个对象属性值得改变。 KVO一般通过以下三个步骤使用&#xff1a; // 1. 添加监听 [self.student1 addObserver:self forKeyPath:"age"…

protobuf数据类型

protobuf特殊数据类型 一&#xff0c;特殊数据类型1&#xff0c;enum使用规则注意事项 2&#xff0c;Any3&#xff0c;oneof4&#xff0c;map通讯录demo升级 二&#xff0c;默认值三&#xff0c;更新消息更新规则保留字段reserved未知字段获取未知字段 四&#xff0c;选项optio…

时频分析方法的matlab实现

傅里叶变换 function [ output_args ] example3_7( input_args ) %EXAMPLE3_7 Summary of this function goes here % Detailed explanation goes here clc; clear; fs12800;%采样频率 s1load(Sig1.txt); s2load(Sig2.txt); lslength(s1); figure(1) subplot(211) plot…

Cilium 系列-7-Cilium 的 NodePort 实现从 SNAT 改为 DSR

系列文章 Cilium 系列文章 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能。但是通过对 Cilium 不同模式的切换/功能的启用&#xff0c;可以进一步提升 Cilium 的网络性能。具体调优项包括不限于&#xff1a; 启用本地路由 (Native Rou…

西安市未央区地方财政支出绩效管理研究_kaic

摘 要 目前传统的地方财政绩效管理研究普遍上主要集中在有关收入研究方面上&#xff0c;而对其支出的规模以及各类结构的研究较少。我国大部分地方财政政府的财政收入低下&#xff0c;财政支出效率有限&#xff0c;不能很好的为其地方经济提供较为稳定的社会支撑和经济保障。造…

SQL基础使用

SQL的概述 SQL全称&#xff1a; Structured Query Language&#xff0c;结构化查询语言&#xff0c;用于访问和处理数据库的标准的计算机语言。 SQL语言1974年由Boyce和Chamberlin提出&#xff0c;并首先在IBM公司研制的关系数据库系统SystemR上实现。 经过多年发…

PostgreSQL构建时间

– PostgreSQL构建时间 select make_timestamp(2023,7,27,7,34,16);

K8s-资源管理(二)

文章目录 2. 资源管理2.1 资源管理介绍2.2 YAML语言介绍2.3 资源管理方式2.3.1 命令式对象管理2.3.2 命令式对象配置2.3.3 声明式对象配置 2.4. 模拟使用普通用户来操作2.5 kubectl 一些基本命令2.6 使用个人的 docker 仓库的镜像 2. 资源管理 2.1 资源管理介绍 在kubernetes…