ESP8266_ 01 STA实现

ESP8266_STA实现

esp8266_STA_set:(站在巨人的臂膀上看的更远,基于前人经验,自己实践得出总结)
1.在user_init中调用自定义的esp8266_init,在此函数中放WiFi参数设置
2.在esp8266_init函数中先调用函数wifi_set_opmode(0x01);(0x01:STA模式;0x02:AP模式;0x03:STA+AP)
3.如需静态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地址
系统默认动态IP,若使用动态IP那么就把3中的函数屏蔽即可
4.配置 STA_Config结构体函数,首先调用os_memset(&STA_Config, 0, sizeof(struct station_config));将原有结构体参数清零,
接下来将需要接入目标的路由器ID和PassWord赋值到STA_Config结构体中,结构体中的内容为 ssid[32] password[64] bssid_set
bssid[6] 前两个是目标路由名称和密码,后面两个是当有两个或两个以上的路由同名时采用WiFi mac地址分辨两个WiFi,若成立则
bssid_set 设置为1,bssid[6]为目标路由mac地址,若不成立,后两者应为0
在此步骤中需要使用到的 函数为 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密码
os_strcpy(STA_Config.bssid_set ,0); // 设置WIFI名
os_strcpy(STA_Config.bssid,0); // 设置WIFI密码
5.当以上都设定完毕 调用 wifi_station_set_config(&STA_Config); // 设置STA参数,并保存到Flash
则下次上电就可以自动扫描以及连接目标路由
以上5步为初始化STA模式WiFi参数,并且8266即可自动连接上目标路由:
6.查询WiFi状态:调用wifi_station_get_connect_status();即可查询8266WiFi柱状:返回值:
//---------------------------------------------------
// 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,连接成功
//---------------------------------------------------
7.获取8266在路由中分配得的地址:调用函数wifi_get_ip_info(STATION_IF,&ST_ESP8266_IP);第一个参数是表示现在是STA模式的IP还是
AP模式的IP,第二个参数是IP地址指针,IP地址数组名字。将IP转制
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高八位
则可显示IP地址;
8.在这个项目中可能需要用到定时器功能,现在一并写出:在user_init中调用自定义的OS_time_init(500,1)初始化函数初始化定时器
在OS_time_init(int time,uchar a)函数第一个参数是需要定时的时间,第二个参数是设置定时器是否可重复定时,若a为1可重复,a为
0不可重复。在此函数里面先将定时器关闭,调用 os_timer_disarm(&OS_Timer_1); // 关闭定时器
os_timer_setfn(&OS_Timer_1,(os_timer_func_t *)OS_Timer_1_cb, NULL); // 设置定时器
os_timer_arm(&OS_Timer_1, time_ms, time_repetitive); // 使能定时器

你可能感兴趣的:(ESP8266系列经验分享)