当前位置:网站首页>ESP8266 STA_Mode
ESP8266 STA_Mode
2022-07-26 22:44:00 【Paradise_Violet】
目录
user_init
在user_init当中执行完初始化之后调用ESP8266_STA_Init_JX(); 来设置ESP8266_STA初始化
void ICACHE_FLASH_ATTR user_init(void)
{
uart_init(115200,115200); // 初始化串口波特率
os_delay_us(10000); // 等待串口稳定
os_printf("\r\n=================================================\r\n");
os_printf("\t Project:\t%s\r\n", ProjectName);
os_printf("\t SDK version:\t%s", system_get_sdk_version());
os_printf("\r\n=================================================\r\n");
// OLED初始化
//---------------------
OLED_Init(); // |
OLED_ShowString(0,0,"ESP8266 = STA"); // |
OLED_ShowString(0,2,"IP:"); // |
//---------------------
LED_Init_JX(); // LED初始化
ESP8266_STA_Init_JX(); // ESP8266_STA初始化
OS_Timer_1_Init_JX(1000,1); // 定时查询WIFI接入状态
}ESP8266_STA初始化
// ESP8266_STA初始化
//==============================================================================
void ICACHE_FLASH_ATTR ESP8266_STA_Init_JX()
{
struct station_config STA_Config; // STA参数结构体
struct ip_info ST_ESP8266_IP; // STA信息结构体
// 设置ESP8266的工作模式
//------------------------------------------------------------------------
wifi_set_opmode(0x01); // 设置为STA模式,并保存到Flash
/*
// 设置STA模式下的IP地址【ESP8266默认开启DHCP Client,接入WIFI时会自动分配IP地址】
//--------------------------------------------------------------------------------
wifi_station_dhcpc_stop(); // 关闭 DHCP Client
IP4_ADDR(&ST_ESP8266_IP.ip,192,168,8,88); // 配置IP地址
IP4_ADDR(&ST_ESP8266_IP.netmask,255,255,255,0); // 配置子网掩码
IP4_ADDR(&ST_ESP8266_IP.gw,192,168,8,1); // 配置网关地址
wifi_set_ip_info(STATION_IF,&ST_ESP8266_IP); // 设置STA模式下的IP地址
*/
// 结构体赋值,配置STA模式参数
//-------------------------------------------------------------------------------
os_memset(&STA_Config, 0, sizeof(struct station_config)); // STA参数结构体 = 0
os_strcpy(STA_Config.ssid,ESP8266_STA_SSID); // 设置WIFI名
os_strcpy(STA_Config.password,ESP8266_STA_PASS); // 设置WIFI密码
wifi_station_set_config(&STA_Config); // 设置STA参数,并保存到Flash
// 此API不能在user_init初始化中调用
// 如果user_init中调用wifi_station_set_config(...)的话,内核会自动将ESP8266接入WIFI
//----------------------------------------------------------------------------------
// wifi_station_connect(); // ESP8266连接WIFI
}注意wifi_station_set_config(&STA_Config); // 设置STA参数,并保存到Flash 这个API
如果它没有这user_init这个API中,则还需调用wifi_station_connect(); // ESP8266连接WIFI
我们来看下struct station_config STA_Config; 这个 STA参数结构体
struct station_config { uint8 ssid[32]; uint8 password[64]; uint8 bssid_set; // Note: If bssid_set is 1, station will just connect to the router // with both ssid[] and bssid[] matched. Please check about this. uint8 bssid[6]; wifi_fast_scan_threshold_t threshold; };注意这里面的 uint8 bssid_set;
uint8 bssid[6];设置我们将要连接的ap的mac地址
一般情况之下没有重名ap的话,上面两个参数设置为0就可以了。
最后一个参数wifi_fast_scan_threshold_t threshold;
typedef struct { int8 rssi; //信号强度 AUTH_MODE authmode; //加密模式 } wifi_fast_scan_threshold_t;
如果我们不想自动分配ip地址,想自己设置ip地址的话,我们使用下面几段话就可以
wifi_station_dhcpc_stop(); // 关闭 DHCP Client IP4_ADDR(&ST_ESP8266_IP.ip,192,168,8,88); // 配置IP地址 IP4_ADDR(&ST_ESP8266_IP.netmask,255,255,255,0); // 配置子网掩码 IP4_ADDR(&ST_ESP8266_IP.gw,192,168,8,1); // 配置网关地址 wifi_set_ip_info(STATION_IF,&ST_ESP8266_IP); // 设置STA模式下的IP地址IP4_ADDR这是个宏定义,他将点分十进制形式的数据,转换为32位的二进制数据,也就不需要我们进行移位操作了
#define IP4_ADDR(ipaddr, a,b,c,d) \ (ipaddr)->addr = ((uint32)((d) & 0xff) << 24) | \ ((uint32)((c) & 0xff) << 16) | \ ((uint32)((b) & 0xff) << 8) | \ (uint32)((a) & 0xff)之后我们调用wifi_set_ip_info(STATION_IF,&ST_ESP8266_IP); // 设置STA模式下的IP地址
这个API,参数一设为STATION_IF也就是0x00,来设置8266STA模式下ip地址,参数二就是STA信息结构体指针
#define STATION_IF 0x00 #define SOFTAP_IF 0x01调用以上几句话就可以手动设置8266STA模式下的IP地址
软件定时的回调函数
// 软件定时的回调函数
//========================================================================================================
void ICACHE_FLASH_ATTR OS_Timer_1_cb(void)
{
u8 C_LED_Flash = 0; // LED闪烁计次
u8 S_WIFI_STA_Connect; // WIFI接入状态标志
struct ip_info ST_ESP8266_IP; // ESP8266的IP信息
u8 ESP8266_IP[4]; // ESP8266的IP地址
// 查询STA接入WIFI状态
//-----------------------------------------------------
S_WIFI_STA_Connect = wifi_station_get_connect_status();
//---------------------------------------------------
// Station连接状态表
// 0 == STATION_IDLE -------------- STATION闲置
// 1 == STATION_CONNECTING -------- 正在连接WIFI
// 2 == STATION_WRONG_PASSWORD ---- WIFI密码错误
// 3 == STATION_NO_AP_FOUND ------- 未发现指定WIFI
// 4 == STATION_CONNECT_FAIL ------ 连接失败
// 5 == STATION_GOT_IP ------------ 获得IP,连接成功
//---------------------------------------------------
switch(S_WIFI_STA_Connect)
{
case 0 : os_printf("\nSTATION_IDLE\n"); break;
case 1 : os_printf("\nSTATION_CONNECTING\n"); break;
case 2 : os_printf("\nSTATION_WRONG_PASSWORD\n"); break;
case 3 : os_printf("\nSTATION_NO_AP_FOUND\n"); break;
case 4 : os_printf("\nSTATION_CONNECT_FAIL\n"); break;
case 5 : os_printf("\nSTATION_GOT_IP\n"); break;
}
// 成功接入WIFI【STA模式下,如果开启DHCP(默认),则ESO8266的IP地址由WIFI路由器自动分配】
//----------------------------------------------------------------------------------------
if( S_WIFI_STA_Connect == STATION_GOT_IP ) // 判断是否获取IP
{
// 获取ESP8266_Station模式下的IP地址
// DHCP-Client默认开启,ESP8266接入WIFI后,由路由器分配IP地址,IP地址不确定
//--------------------------------------------------------------------------
wifi_get_ip_info(STATION_IF,&ST_ESP8266_IP); // 参数2:IP信息结构体指针
// ESP8266_AP_IP.ip.addr是32位二进制代码,转换为点分十进制形式
//----------------------------------------------------------------------------
ESP8266_IP[0] = ST_ESP8266_IP.ip.addr; // IP地址高八位 == addr低八位
ESP8266_IP[1] = ST_ESP8266_IP.ip.addr>>8; // IP地址次高八位 == addr次低八位
ESP8266_IP[2] = ST_ESP8266_IP.ip.addr>>16; // IP地址次低八位 == addr次高八位
ESP8266_IP[3] = ST_ESP8266_IP.ip.addr>>24; // IP地址低八位 == addr高八位
// 显示ESP8266的IP地址
//-----------------------------------------------------------------------------------------------
os_printf("ESP8266_IP = %d.%d.%d.%d\n",ESP8266_IP[0],ESP8266_IP[1],ESP8266_IP[2],ESP8266_IP[3]);
OLED_ShowIP(24,2,ESP8266_IP); // OLED显示ESP8266的IP地址
//-----------------------------------------------------------------------------------------------
// 接入WIFI成功后,LED快闪3次
//----------------------------------------------------
for(; C_LED_Flash<=5; C_LED_Flash++)
{
GPIO_OUTPUT_SET(GPIO_ID_PIN(4),(C_LED_Flash%2));
delay_ms(100);
}
os_timer_disarm(&OS_Timer_1); // 关闭定时器
}
} 8266成功获取到ip地址
他们两个是在一个局域网下的ip地址,如果8266想通过无线路由器向互联网发送数据或请求数据的话,他使用这个ip地址还需要NAT路由器地址转换
手动设置固定ip地址192,168,8,88


成功!!!
这样的话就说明我们8266成功地设置为sta模式并且成功的接入到我们无线路由器创建的WiFi局域网中,也成功地设置了自己的静态ip地址
边栏推荐
- Pit encountered by AssetBundle
- SQL learning (1) - table related operations
- 玩客云搭配zerotier保姆级教学,保证学废
- Flinksql window triggered in advance
- 链表常规OJ
- Come on: encourage college graduates to return home to start businesses and employment, and help rural revitalization
- 快来帮你三分钟了解物联网
- What is kubernetes?
- Choose RTMP or RTC protocol for mobile live broadcast
- Unity常用的一些简易扩展方法
猜你喜欢

SQL learning (3) -- complex query and function operation of tables

什么是数字经济,它是如何改变商业模式的?

最大公约数的求法

Surrounded area

FaceNet

Unity CharacterController

【无标题】

Li Hongyi machine learning (2017 Edition)_ P6-8: gradient descent

SQL learning (2) -- basic query and sorting of tables

How can Tencent cloud live plug-in mlvb make use of these advantages to become the divine assistant of anchor Live Streaming?
随机推荐
记一次RawImage渲染出来的场景错乱
Iptables detailed explanation and practical cases
5. Legal bracket string
创建MDK工程
顺序表之OJ题
初中高三部曲音视频下载Pronunciation Pairs+Ship or Sheep+Tree or Three
MQTT----下(注意事项)
Li Kou brushes 300 record posts
Basic syntax of Verilog
Square root of X
Next generation Internet: Video Networking
10 - deploy MySQL on CentOS 7
大四老学长的自我批评记录
Database interim (II)
【无标题】
1. Mode
Mqtt---- bottom (precautions)
Wu Enda's in-depth learning series teaching video learning notes (I) -- logistic regression function for binary classification
markdown
随着5G越来越普及,我们的生活会受到哪些积极的影响

