ESP8266_RTOS修改AP模式下IP地址和主机名

ESP8266修改AP模式下IP地址

修改IP地址

方法一:tcpip_adapter_init

在ESP8266_RTOS下初始化wifi时需要调用初始化tcpip函数tcpip_adapter_init()

AP模式下的IP地址就是在这个函数中设置的,所以修改ESP8266下AP模式的IP的第一个方法是直接在该函数中修改IP地址。

注意:如果在这里修改IP,会导致所有工程的IP都被修改,因为这是全局的组件

void tcpip_adapter_init(void)
{
    if (tcpip_inited == false) {
        tcpip_inited = true;
        tcpip_init(NULL, NULL);

        memset(esp_ip, 0, sizeof(tcpip_adapter_ip_info_t)*TCPIP_ADAPTER_IF_MAX);
        memset(esp_ip_old, 0, sizeof(tcpip_adapter_ip_info_t)*TCPIP_ADAPTER_IF_MAX);

        IP4_ADDR(&esp_ip[TCPIP_ADAPTER_IF_AP].ip, 192, 168 , 4, 1);
        IP4_ADDR(&esp_ip[TCPIP_ADAPTER_IF_AP].gw, 192, 168 , 4, 1);
        IP4_ADDR(&esp_ip[TCPIP_ADAPTER_IF_AP].netmask, 255, 255 , 255, 0);

        dhcp_check_timer = xTimerCreate("check_dhcp", 500 / portTICK_RATE_MS, true, NULL, tcpip_adapter_dhcpc_done);
        if (!dhcp_check_timer) {
            ESP_LOGI(TAG, "TCPIP adapter timer create error");
        }
    }
}

方法二:IP4_ADDR

在 tcpip_adapter_init() 中可以看到,SDK是通过宏定义的IP4_ADDR设置IP地址,所以参考调用即可修改IP地址。

在设置IP前需要先停止DHCP服务器,在设置完毕后再开启,才会使用新设置的IP网段进行分配。

注意:IP地址的修改要在tcpip_adapter_init()调用后执行,否则会被函数中设置的默认地址覆盖

static void set_ipv4_address(){
    
    tcpip_adapter_ip_info_t local_ip;
    tcpip_adapter_dhcps_stop(TCPIP_ADAPTER_IF_AP); 

    IP4_ADDR(&local_ip.ip, 10, 10 , 100, 254);
    IP4_ADDR(&local_ip.gw, 10, 10 , 100, 254);
    IP4_ADDR(&local_ip.netmask, 255, 255 , 255, 0);

    tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_AP, &local_ip);

    tcpip_adapter_dhcps_start(TCPIP_ADAPTER_IF_AP);
}

修改主机名

调用 tcpip_adapter_set_hostname即可修改AP模式下的主机名

函数定义如下

esp_err_t tcpip_adapter_set_hostname(tcpip_adapter_if_t tcpip_if, const char *hostname)
{
#if LWIP_NETIF_HOSTNAME
    struct netif *p_netif;
    static char hostinfo[TCPIP_ADAPTER_IF_MAX][TCPIP_HOSTNAME_MAX_SIZE + 1];

    if (tcpip_if >= TCPIP_ADAPTER_IF_MAX || hostname == NULL) {
        return ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS;
    }

    if (strlen(hostname) > TCPIP_HOSTNAME_MAX_SIZE) {
        return ESP_ERR_TCPIP_ADAPTER_INVALID_PARAMS;
    }

    p_netif = esp_netif[tcpip_if];
    if (p_netif != NULL) {
        memset(hostinfo[tcpip_if], 0, sizeof(hostinfo[tcpip_if]));
        strlcpy(hostinfo[tcpip_if], hostname, sizeof(hostinfo[tcpip_if]));
        p_netif->hostname = hostinfo[tcpip_if];
        return ESP_OK;
    } else {
        return ESP_ERR_TCPIP_ADAPTER_IF_NOT_READY;
    }
#else
    return ESP_ERR_TCPIP_ADAPTER_IF_NOT_READY;
#endif
}

参考链接

https://docs.espressif.com/projects/esp8266-rtos-sdk/en/latest/api-reference/tcpip/tcpip_adapter.html

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值