官方例程:examples\protocols\static_ip

为了便于更改IP和WIFI设置,修改后的完整代码如下:

#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/event_groups.h"
#include "esp_system.h"
#include "esp_wifi.h"
#include "esp_event.h"
#include "esp_log.h"
#include <netdb.h>
#include "nvs_flash.h"#define EXAMPLE_MAXIMUM_RETRY         CONFIG_EXAMPLE_MAXIMUM_RETRY
#ifdef CONFIG_EXAMPLE_STATIC_DNS_AUTO
#define EXAMPLE_BACKUP_DNS_SERVER     "0.0.0.0"
#else
#define EXAMPLE_MAIN_DNS_SERVER       CONFIG_EXAMPLE_STATIC_DNS_SERVER_MAIN
#define EXAMPLE_BACKUP_DNS_SERVER     CONFIG_EXAMPLE_STATIC_DNS_SERVER_BACKUP
#endif/* FreeRTOS event group to signal when we are connected*/
static EventGroupHandle_t s_wifi_event_group;/* The event group allows multiple bits for each event, but we only care about two events:* - we are connected to the AP with an IP* - we failed to connect after the maximum amount of retries */
#define WIFI_CONNECTED_BIT BIT0
#define WIFI_FAIL_BIT      BIT1static const char *TAG = "WIFI";static const char *ip_ip,*ip_netmask,*ip_gw;static int s_retry_num = 0;static esp_err_t example_set_dns_server(esp_netif_t *netif, uint32_t addr, esp_netif_dns_type_t type)
{if (addr && (addr != IPADDR_NONE)) {esp_netif_dns_info_t dns;dns.ip.u_addr.ip4.addr = addr;dns.ip.type = IPADDR_TYPE_V4;ESP_ERROR_CHECK(esp_netif_set_dns_info(netif, type, &dns));}return ESP_OK;
}static void example_set_static_ip(esp_netif_t *netif)
{if (esp_netif_dhcpc_stop(netif) != ESP_OK) {ESP_LOGE(TAG, "Failed to stop dhcp client");return;}esp_netif_ip_info_t ip;memset(&ip, 0 , sizeof(esp_netif_ip_info_t));ip.ip.addr = ipaddr_addr(ip_ip);ip.netmask.addr = ipaddr_addr(ip_netmask);ip.gw.addr = ipaddr_addr(ip_gw);if (esp_netif_set_ip_info(netif, &ip) != ESP_OK) {ESP_LOGE(TAG, "Failed to set ip info");return;}ESP_LOGD(TAG, "Success to set static ip: %s, netmask: %s, gw: %s", ip_ip, ip_netmask, ip_gw);ESP_ERROR_CHECK(example_set_dns_server(netif, ipaddr_addr(ip_gw), ESP_NETIF_DNS_MAIN));ESP_ERROR_CHECK(example_set_dns_server(netif, ipaddr_addr(EXAMPLE_BACKUP_DNS_SERVER), ESP_NETIF_DNS_BACKUP));
}static void event_handler(void* arg, esp_event_base_t event_base,int32_t event_id, void* event_data)
{if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) {esp_wifi_connect();} else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_CONNECTED) {example_set_static_ip(arg);} else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) {if (s_retry_num < EXAMPLE_MAXIMUM_RETRY) {esp_wifi_connect();s_retry_num++;ESP_LOGI(TAG, "retry to connect to the AP");} else {xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT);}ESP_LOGI(TAG,"connect to the AP fail");} else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) {ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data;ESP_LOGI(TAG, "static ip:" IPSTR, IP2STR(&event->ip_info.ip));s_retry_num = 0;xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT);}
}void ip_set(const char *ip,const char *mask,const char *gw)
{ip_ip = ip;ip_netmask = mask;ip_gw = gw;
}void wifi_init_sta(const char *ssid,const char *password)
{ESP_LOGI(TAG, "ESP_WIFI_MODE_STA");s_wifi_event_group = xEventGroupCreate();ESP_ERROR_CHECK(esp_netif_init());ESP_ERROR_CHECK(esp_event_loop_create_default());esp_netif_t *sta_netif = esp_netif_create_default_wifi_sta();assert(sta_netif);wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();ESP_ERROR_CHECK(esp_wifi_init(&cfg));esp_event_handler_instance_t instance_any_id;esp_event_handler_instance_t instance_got_ip;ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,ESP_EVENT_ANY_ID,&event_handler,sta_netif,&instance_any_id));ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT,IP_EVENT_STA_GOT_IP,&event_handler,sta_netif,&instance_got_ip));wifi_config_t wifi_config = {.sta = {// .ssid = CONFIG_EXAMPLE_WIFI_SSID,// .password = CONFIG_EXAMPLE_WIFI_PASSWORD,/* Setting a password implies station will connect to all security modes including WEP/WPA.* However these modes are deprecated and not advisable to be used. Incase your Access point* doesn't support WPA2, these mode can be enabled by commenting below line */.threshold.authmode = WIFI_AUTH_WPA2_PSK,},};memcpy(wifi_config.sta.ssid,ssid, sizeof(wifi_config.sta.ssid));memcpy(wifi_config.sta.password,password, sizeof(wifi_config.sta.password)); ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA) );ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config) );ESP_ERROR_CHECK(esp_wifi_start() );ESP_LOGI(TAG, "wifi_init_sta finished.");/* Waiting until either the connection is established (WIFI_CONNECTED_BIT) or connection failed for the maximum* number of re-tries (WIFI_FAIL_BIT). The bits are set by event_handler() (see above) */EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group,WIFI_CONNECTED_BIT | WIFI_FAIL_BIT,pdFALSE,pdFALSE,portMAX_DELAY);/* xEventGroupWaitBits() returns the bits before the call returned, hence we can test which event actually* happened. */if (bits & WIFI_CONNECTED_BIT) {ESP_LOGI(TAG, "connected to ap SSID:%s password:%s",ssid, password);} else if (bits & WIFI_FAIL_BIT) {ESP_LOGI(TAG, "Failed to connect to SSID:%s, password:%s",ssid, password);} else {ESP_LOGE(TAG, "UNEXPECTED EVENT");}/* The event will not be processed after unregister */ESP_ERROR_CHECK(esp_event_handler_instance_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, instance_got_ip));ESP_ERROR_CHECK(esp_event_handler_instance_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, instance_any_id));vEventGroupDelete(s_wifi_event_group);
}void app_main(void)
{//Initialize NVSesp_err_t ret = nvs_flash_init();if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {ESP_ERROR_CHECK(nvs_flash_erase());ret = nvs_flash_init();}ESP_ERROR_CHECK(ret);ip_set("192.168.1.120","255.255.255.0","192.168.1.1");wifi_init_sta("Tenda","66888888");
}

ESP32——WIFI静态IP设置方法(官方)相关推荐

  1. Android手机静态ip地址网关,安卓手机Android 4.0系统静态ip设置方法【详解】

    安卓系统Android 4.0推出之后,很多网友都进行了版本的更新,但是,一些更新了Android 4.0系统的用户,表示,自从版本升级之后,就不能使用静态IP,这是怎么回事呢?小编经过研究后发现,并 ...

  2. ifconfig不显示ip,虚拟机静态IP设置方法

    在使用虚拟机时 ifconfig 不显示ip 地址,或者每次开机ubuntu的IP都在变化,如何解决呢?需要设置虚拟机的静态IP,具体设置方法如下:   如果你 ifconfig 看不到IP的话,需要 ...

  3. Android设置WIFI静态IP

    想要在代码中实现设置WIFI静态IP需要有系统权限,要在manifest文件添加android:sharedUserId="android.uid.system",还要有系统签名. ...

  4. Linux学习笔记——远程ssh(putty)登录linux + wifi配置与静态ip设置

    最近学习了一段时间linux的基本操作,但在pc机上使用虚拟机学习比较麻烦.在实验室找到了块树莓派zero w,它的操作系统是raspbian,是一种基于debian的linux操作系统,于是尝试利用 ...

  5. 【Linux】18.设置静态ip的方法(Ubuntu系统、nas、Red-Hat系统)

    Ubuntu系统.nas.Red-Hat系统 各自设置静态ip的方法 1.Ubuntu系统设置静态ip 首先打开终端,输入命令 sudo vim /etc/network/interfaces 进入到 ...

  6. linux服务器静态ip,Ubuntu Linux系统下设置静态IP的方法

    Ubuntu的网络参数保存在文件 /etc/network/interfaces中,默认设置使用dhcp,内容如下: # The primary network interface auto eth0 ...

  7. linux 的ip 设置lo_Linux服务器设置静态IP的方法

    这里以CentOS 7系列为例设置静态IP,原来RedHat系列的Linux发行版可以通过setup工具方便的设置静态IP,但是在版本7之后setup工具的功能就逐渐减弱了,所以这时候采用修改配置文件 ...

  8. 设置WiFi静态ip、网关、子网掩码、dns

    /*** 设置WiFi静态ip等配置** @param context* @param ip* @param gateWay* @param dns1* @param dns2*/ public bo ...

  9. 无线dhcp服务器静态,wifi的ip设置dhcp和静态的区别

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 以网络为例,wifi的ip设置dhcp和静态的区别如下: 1.静态IP地址(又称固定IP地址)是长期分配给一台计算机或网络设备使用 ...

最新文章

  1. dstat用法;利用awk求dstat所有列每列的和;linux系统监控
  2. 弹出窗口, 不显示工具栏等。
  3. node jsonwebtoken
  4. scala使用zip合并两个集合为二元组集合
  5. java.library.path到底指什么
  6. mysql 5.7.15 union order by 子查询排序不生效
  7. html dot标签,html – CSS Dot符号命名约定
  8. linux C/C++开发环境搭建指南
  9. Install VMware tools 解决(物理主机WIN7X64和VM下的REHAT LINUX AS4共享文件)
  10. Swift语言指南(二)--语言基础之注释和分号
  11. Mac OS X 11中的/usr/bin 的“Operation not permitted”
  12. 微软与 OpenAI 达成合作,获得 GPT-3 独家使用授权!
  13. 1001. 害死人不偿命的(3n+1)猜想 (15)-PAT乙级真题
  14. 39、【华为HCIE-Storage】--对象存储原理
  15. linux polkitd 漏洞,Ubuntu Linux中的特权提升漏洞Dirty Sock分析(含PoC)
  16. CATIA常用的26个小技巧
  17. 采用flv.js与dplayer播放器来播放http-flv格式视频
  18. Pytorch(三):数据变换 Transforms
  19. 氢原子光谱、类氢原子光谱和类氢离子光谱
  20. 微星GE62 2QC-264XCN刷黑苹果详细教程亲测有效,完美双系统,双屏!

热门文章

  1. Mysql binlog数据恢复(使用mysqlbinlog_flashback逆向生成SQL语句)
  2. java毕业生设计高校毕业生就业满意度调查统计系统计算机源码+系统+mysql+调试部署+lw
  3. Linux系统 Ubuntu18.04安装的详细教程(提供18.04ubuntu镜像)
  4. python发送超大附件邮件_Python实现发送邮件
  5. prefetch 和preload_使用 Preload/Prefetch 优化你的应用
  6. 中南林业科技大学Java实验报告二:基本数据类型的使用和数据输入、输出
  7. php重定向3中方式
  8. 粉尘传感器ZPH01驱动
  9. 基本类型数组与包装类型数组相互转换
  10. EMO-DB数据集介绍(即berlin的那个数据集)