ESP32——WIFI静态IP设置方法(官方)
官方例程: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设置方法(官方)相关推荐
- Android手机静态ip地址网关,安卓手机Android 4.0系统静态ip设置方法【详解】
安卓系统Android 4.0推出之后,很多网友都进行了版本的更新,但是,一些更新了Android 4.0系统的用户,表示,自从版本升级之后,就不能使用静态IP,这是怎么回事呢?小编经过研究后发现,并 ...
- ifconfig不显示ip,虚拟机静态IP设置方法
在使用虚拟机时 ifconfig 不显示ip 地址,或者每次开机ubuntu的IP都在变化,如何解决呢?需要设置虚拟机的静态IP,具体设置方法如下: 如果你 ifconfig 看不到IP的话,需要 ...
- Android设置WIFI静态IP
想要在代码中实现设置WIFI静态IP需要有系统权限,要在manifest文件添加android:sharedUserId="android.uid.system",还要有系统签名. ...
- Linux学习笔记——远程ssh(putty)登录linux + wifi配置与静态ip设置
最近学习了一段时间linux的基本操作,但在pc机上使用虚拟机学习比较麻烦.在实验室找到了块树莓派zero w,它的操作系统是raspbian,是一种基于debian的linux操作系统,于是尝试利用 ...
- 【Linux】18.设置静态ip的方法(Ubuntu系统、nas、Red-Hat系统)
Ubuntu系统.nas.Red-Hat系统 各自设置静态ip的方法 1.Ubuntu系统设置静态ip 首先打开终端,输入命令 sudo vim /etc/network/interfaces 进入到 ...
- linux服务器静态ip,Ubuntu Linux系统下设置静态IP的方法
Ubuntu的网络参数保存在文件 /etc/network/interfaces中,默认设置使用dhcp,内容如下: # The primary network interface auto eth0 ...
- linux 的ip 设置lo_Linux服务器设置静态IP的方法
这里以CentOS 7系列为例设置静态IP,原来RedHat系列的Linux发行版可以通过setup工具方便的设置静态IP,但是在版本7之后setup工具的功能就逐渐减弱了,所以这时候采用修改配置文件 ...
- 设置WiFi静态ip、网关、子网掩码、dns
/*** 设置WiFi静态ip等配置** @param context* @param ip* @param gateWay* @param dns1* @param dns2*/ public bo ...
- 无线dhcp服务器静态,wifi的ip设置dhcp和静态的区别
大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 以网络为例,wifi的ip设置dhcp和静态的区别如下: 1.静态IP地址(又称固定IP地址)是长期分配给一台计算机或网络设备使用 ...
最新文章
- dstat用法;利用awk求dstat所有列每列的和;linux系统监控
- 弹出窗口, 不显示工具栏等。
- node jsonwebtoken
- scala使用zip合并两个集合为二元组集合
- java.library.path到底指什么
- mysql 5.7.15 union order by 子查询排序不生效
- html dot标签,html – CSS Dot符号命名约定
- linux C/C++开发环境搭建指南
- Install VMware tools 解决(物理主机WIN7X64和VM下的REHAT LINUX AS4共享文件)
- Swift语言指南(二)--语言基础之注释和分号
- Mac OS X 11中的/usr/bin 的“Operation not permitted”
- 微软与 OpenAI 达成合作,获得 GPT-3 独家使用授权!
- 1001. 害死人不偿命的(3n+1)猜想 (15)-PAT乙级真题
- 39、【华为HCIE-Storage】--对象存储原理
- linux polkitd 漏洞,Ubuntu Linux中的特权提升漏洞Dirty Sock分析(含PoC)
- CATIA常用的26个小技巧
- 采用flv.js与dplayer播放器来播放http-flv格式视频
- Pytorch(三):数据变换 Transforms
- 氢原子光谱、类氢原子光谱和类氢离子光谱
- 微星GE62 2QC-264XCN刷黑苹果详细教程亲测有效,完美双系统,双屏!
热门文章
- Mysql binlog数据恢复(使用mysqlbinlog_flashback逆向生成SQL语句)
- java毕业生设计高校毕业生就业满意度调查统计系统计算机源码+系统+mysql+调试部署+lw
- Linux系统 Ubuntu18.04安装的详细教程(提供18.04ubuntu镜像)
- python发送超大附件邮件_Python实现发送邮件
- prefetch 和preload_使用 Preload/Prefetch 优化你的应用
- 中南林业科技大学Java实验报告二:基本数据类型的使用和数据输入、输出
- php重定向3中方式
- 粉尘传感器ZPH01驱动
- 基本类型数组与包装类型数组相互转换
- EMO-DB数据集介绍(即berlin的那个数据集)