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

这篇具有很好参考价值的文章主要介绍了WIZnet W5500-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网络通信。

为什么要使用DHCP?

        在IP网络中,每个连接Internet的设备都需要分配唯一的IP地址。DHCP使网络管理员能从中心结点监控和分配IP地址。当某台计算机移到网络中的其它位置时,能自动收到新的IP地址。DHCP实现的自动化分配IP地址不仅降低了配置和部署设备的时间,同时也降低了发生配置错误的可能性。另外DHCP服务器可以管理多个网段的配置信息,当某个网段的配置发生变化时,管理员只需要更新DHCP服务器上的相关配置即可,实现了集中化管理。

        总体来看,DHCP相比设置静态IP地址带来了如下优势:

  • 准确的IP配置:IP地址配置参数必须准确,并且在处理“ 192.168.XXX.XXX”之类的输入时,很容易出错。另外印刷错误通常很难解决,使用DHCP服务器可以最大程度地降低这种风险。
  • 减少IP地址冲突:每个连接的设备都必须有一个IP地址。但是,每个地址只能使用一次,重复的地址将导致无法连接一个或两个设备的冲突。当手动分配地址时,尤其是在存在大量仅定期连接的端点(例如移动设备)时,可能会发生这种情况。DHCP的使用可确保每个地址仅使用一次。
  • IP地址管理的自动化:如果没有DHCP,网络管理员将需要手动分配和撤消地址。跟踪哪个设备具有什么地址可能是徒劳的,因为几乎无法理解设备何时需要访问网络以及何时需要离开网络。DHCP允许将其自动化和集中化,因此网络专业人员可以从一个位置管理所有位置。
  • 高效的变更管理:DHCP的使用使更改地址,范围或端点变得非常简单。例如,组织可能希望将其IP寻址方案从一个范围更改为另一个范围。DHCP服务器配置有新信息,该信息将传播到新端点。同样,如果升级并更换了网络设备,则不需要网络配置。

        劣势:可能会导致同一设备的IP地址不固定,例如我们的服务器或者是一些设备想固定IP地址的话,这个时候就只能采取静态IP地址来配置了。

硬件准备

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

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

软件环境

  • Visual Studio Code

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

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

        添加“dhcp.h”头文件

#include "dhcp.h"

        配置网络信息结构体内容,将.dhcp的内容设置为NETINFO_DHCP

//配置网络配置信息结构体
wiz_NetInfo net_info = {
    .mac = {0x00, 0x08, 0xdc, 0x16, 0xed, 0x2e},
    .ip = {192, 168, 1, 120},
    .sn = {255, 255, 255, 0},
    .gw = {192, 168, 1, 1},
    .dns = {8, 8, 8, 8},
    .dhcp = NETINFO_DHCP};
        编写四个DHCP功能函数
//DHCP初始化函数
static void dhcp_init(void)
{
    printf(" DHCP client running \r\n");
    DHCP_init(SOCKET_DHCP,ethernet_buf);
    reg_dhcp_cbfunc(dhcp_assign,dhcp_assign,dhcp_conflict);
}

//IP地址冲突函数
static void dhcp_conflict(void)
{
    printf("CONFLICT IP from DHCP\r\n");
    while(1);
}

//请求IP地址函数
static void 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(net_info);
    print_network_information(net_info);
    printf("DHCP LEASED TIME:%ld Sec.\r\n",getDHCPLeasetime());
}

//定时器回调函数,目的是调用DHCP定时中断函数
bool repeating_timer_callback(struct repeating_timer *t) {
    DHCP_time_handler();
    return true;
}

//DHCP获取IP地址
void do_dhcp(void)
{
    uint8_t retval = 0;
    uint8_t dhcp_retry = 0;
    if (net_info.dhcp == NETINFO_DHCP)
    {
        retval = DHCP_run();
        if (retval == DHCP_IP_LEASED)
        {
            if (dhcp_get_ip_flag == 0)
            {
                printf("DHCP success\r\n");
                dhcp_get_ip_flag = 1;
            }
        }
        else if (retval == DHCP_FAILED)
        {
            dhcp_get_ip_flag = 0;
            dhcp_retry++;
            if (dhcp_retry <= DHCP_RETRY_COUNT)
            {
                printf(" DHCP timeout occurred and retry %d \r\n", dhcp_retry);
            }
        }

        if (dhcp_retry > DHCP_RETRY_COUNT)
        {
            printf(" DHCP failed \r\n");
            DHCP_stop();
            while (true)
                ;
        }
    }
}
        在主函数中,我们只需要进行初始化之后,然后请求DHCP地址即可。因为DHCP是基于设备的MAC地址来分配IP地址的,所以必须设置W5500的mac地址
int main()
{
    
    struct repeating_timer timer;//定义定时器结构体
    stdio_init_all();//重定义串口到printf
    sleep_ms(5000);
    printf("W5500 network install example.\r\n");

    wizchip_initialize();//spi接口初始化,链路初始化检测
    
    add_repeating_timer_ms(1000, repeating_timer_callback, NULL, &timer);//
    setSHAR(net_info.mac);
    if (net_info.dhcp == NETINFO_DHCP)
    {

        dhcp_init();
    }
    else
    {
        network_initialize(net_info);
        print_network_information(net_info);
    }
    while (true)
    {
        do_dhcp();
        sleep_ms(1000);
    }
}

步骤2:编译烧录

  1. 选择GCC arm-none-eabi编译链
  2. 选择编译项目为dhcp_client
  3. 点击Build进行编译

WIZnet W5500-EVB-Pico DHCP 配置教程(三),WIZnet W5500-EVB-Pico  C/C++教程,W5500以太网芯片,树莓派pico,C/C++教程,C SDK,嵌入式设备入网教程

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

WIZnet W5500-EVB-Pico DHCP 配置教程(三),WIZnet W5500-EVB-Pico  C/C++教程,W5500以太网芯片,树莓派pico,C/C++教程,C SDK,嵌入式设备入网教程

步骤3:验证测试

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

WIZnet W5500-EVB-Pico DHCP 配置教程(三),WIZnet W5500-EVB-Pico  C/C++教程,W5500以太网芯片,树莓派pico,C/C++教程,C SDK,嵌入式设备入网教程

WIZnet W5500-EVB-Pico DHCP 配置教程(三),WIZnet W5500-EVB-Pico  C/C++教程,W5500以太网芯片,树莓派pico,C/C++教程,C SDK,嵌入式设备入网教程

示例下载链接

链接:W5500-EVB-Pico示例

        本期内容就分享到这里啦!觉得写的还不错的话给个关注鼓励一下吧!下期我们来讲讲如何通过DNS解析百度的域名地址。文章来源地址https://www.toymoban.com/news/detail-616930.html

到了这里,关于WIZnet W5500-EVB-Pico DHCP 配置教程(三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • W5500-EVB-PICO主动PING主机IP检测连通性(十)

            上一章我们用W5500_EVB_PICO 开发板做UDP组播数据回环测试,那么本章我们进行W5500_EVB_PICO Ping的测试。         Ping (Packet Internet Groper)是一种因特网包探索器,用于测试网络连接量的程序  。Ping是工作在 TCP/IP网络体系结构中应用层的一个服务命令, 主要是向特

    2024年02月10日
    浏览(21)
  • W5500-EVB-PICO作为TCP Client 进行数据回环测试(五)

            上一章我们用W5500-EVB-PICO开发板通过DNS解析www.baidu.com(百度域名)成功得到其IP地址,那么本章我们将用我们的开发板作为客户端去连接服务器,并做数据回环测试:收到服务器发送的数据,并回传给服务器。         TCP (Transmission Control Protocol) 是一种面向连

    2024年02月13日
    浏览(30)
  • W5500-EVB-PICO做UDP Client进行数据回环测试(八)

            上一章我们用开发板作为UDP Server进行数据回环测试,本章我们让我们的开发板作为UDP Client进行数据回环测试。 使开发板和我们的电脑处于同一网段: 开发板通过交叉线直连主机 开发板和主机都接在路由器LAN口 网路调试工具(任意) wireshark抓包工具 我们打开例程

    2024年02月12日
    浏览(28)
  • WIZnet W51000S-EVB-PICO 入门教程(一)

    W5100S-EVB-Pico 是基于树莓派RP2040和全硬件TCP/IP协议栈控制器W5100S的微控制器开发板-基本上与树莓派Pico板相同,但通过W5100S芯片增加了以太网功能。 RP2040 规格参数        双核Arm Cortex-M0 + @133MHz 264KB 高速SRAM和2MB板载内存 通过专用QSPI总线最高支持16MB的片外闪存  DMA控制器 30

    2024年02月15日
    浏览(34)
  • STMicroelectronics的STM32微控制器和WIZnet的W5500以太网通信单片机代码

    单片机代码   #include \\\"stm32f1xx_hal.h\\\" #include \\\"string.h\\\"   #define W5500_CS_GPIO_Port GPIOB #define W5500_CS_Pin GPIO_PIN_12   SPI_HandleTypeDef hspi2;   void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_SPI2_Init(void);   uint8_t W5500_ReadByte(void) {     uint8_t byte;     HAL_SPI_Receive(hspi2, byte, 1, 10);  

    2023年04月13日
    浏览(72)
  • W6100-EVB-PICO进行UDP组播数据回环测试(九)

            上一章我们用我们的开发板作为UDP客户端连接服务器进行数据回环测试,那么本章我们进行UDP组播数据回环测试。         组播是主机间一对多的通讯模式, 组播是一种允许一个或多个组播源发送同一报文到多个接收者的技术。组播源将一份报文发送到特定的

    2024年02月11日
    浏览(30)
  • W6100-EVB-PICO 做TCP Server进行回环测试(六)

            上一章我们用W6100-EVB-PICO开发板做TCP 客户端连接服务器进行数据回环测试,那么本章将用开发板做TCP服务器来进行数据回环测试。         TCP (Transmission Control Protocol) 是一种面向连接的、可靠的、基于字节流的传输协议,用于在计算机网络上传输数据。TCP Se

    2024年02月13日
    浏览(27)
  • W6100-EVB-PICO 做UDP Server进行数据回环测试(七)

            前面我们用W6100-EVB-PICO 开发板在TCP Client和TCP Server模式下,分别进行数据回环测试,本章我们将用开发板在UDP Server模式下进行数据回环测试。         UDP (User Dataqram Protocol) 是一种无连接的、不可靠的传输协议,用于在计算机网络上传输数据UDP Server是指UDP网络

    2024年02月12日
    浏览(25)
  • STM32+W5500实现以太网通信

    STM32系列32位微控制器基于Arm® Cortex®-M处理器,旨在为MCU用户提供新的开发自由度。它包括一系列产品,集高性能、实时功能、数字信号处理、低功耗/低电压操作、连接性等特性于一身,同时还保持了集成度高和易于开发的特点。本例采用STM32作为MCU。 W5500是一款全硬件TCP/

    2023年04月22日
    浏览(32)
  • 如何使用W5100S-EVB-Pico连接Azure物联网中心

    使用Wiznet的W5100S-EVB-Pico板以及X.509证书连接到Azure物联网中心 注:最初发表-by renakim 组成: 硬件设施: W5100S-EVB-Pico ×1 W5100S-EVB-Pico | WIZnet Document System 软件应用程序和在线服务: Azure物联网中心 详细信息: 开发环境(Window 10,Code) 关于设置开发环境的信息可以在官方文档中

    2024年02月05日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包