当前位置:网站首页>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地址
边栏推荐
- Database interim (II)
- c语言实现动态顺序表的增删查改
- Unity CharacterController
- 基于485总线的评分系统
- 报错信息 WARNING: IPv4 forwarding is disabled. Networking will not work.
- #问题反馈 手机 app 同步失败:数据仓库外部变更损坏 ipad app 也是一打开就下载仓库,然后闪退
- 基本的DOS命令
- ks 怎么抓salt值?api,did?
- How can Tencent cloud live plug-in mlvb make use of these advantages to become the divine assistant of anchor Live Streaming?
- Choose RTMP or RTC protocol for mobile live broadcast
猜你喜欢

Zhimi Tencent cloud live mlvb plug-in optimization tutorial: six steps to improve streaming speed + reduce live delay

Li Hongyi machine learning (2017 Edition)_ P3-4: Regression

MySQL关闭连接事务自动提交的问题

玩客云刷机 5.9
![[CTF attack and defense world] questions about backup in the web area](/img/af/b78eb3522160896d77d9e82f7e7810.png)
[CTF attack and defense world] questions about backup in the web area

As 5g becomes more and more popular, what positive effects will our lives be affected

Unity常用的一些简易扩展方法

Unity Line接入

Solve the problem that rsyslog service occupies too much memory

Solve the problem that CUDA cannot accelerate GPU in pytoch
随机推荐
Square root of X
Play guest cloud brush machine 5.9
1. Mode
RS485 signal measurement
Li Hongyi machine learning (2017 Edition)_ P3-4: Regression
SQL learning (1) - table related operations
Unity Line接入
Unity引擎基础
PlantCV中文文档
Unity Twitter登录接入
Unity uses navmesh to realize simple rocker function
Naive Bayes Multiclass训练模型
Database interim (II)
物联网改善我们生活的 6 种方式
How does KS catch salt value? api,did?
MTCNN
最大公约数的求法
#MarkDown语法学习总结
Next generation Internet: Video Networking
Pit encountered by AssetBundle

