Esp8266 从WiFi连接讲解其中的必备函数

来源:互联网 发布:数据分析师修炼 编辑:程序博客网 时间:2024/05/16 16:57
   对于关注物联网的同志们,这款芯片并不陌生!然而,对于比较系统的讲解还是较少。对于这款芯片的关注者及测试者,决定对这款芯片做一些系统的讲解。   首先,我希望通过下面简短的程序来做一些说明,这段程序的函数几乎是每个Esp8266程序编写需要用到的,并且对于里面的一些参数进行解释。
#include "driver/uart.h"#include "user_main.h"void ICACHE_FLASH_ATTR wifi_conned(void *arg){    uint8 status;    static uint8 count=0;    os_timer_disarm(&connect_timer);    count++;    status=wifi_station_get_connect_status();    if(status==STATION_GOT_IP){        os_printf("wifi connect success!!");        return;    }else{        if(count>=7){            os_printf("wifi connect fail!!");            return;        }    }    os_timer_arm(&connect_timer,2000,NULL);}void ICACHE_FLASH_ATTR scan_done(void *arg,STATUS status){    uint8 ssid[33];    struct station_config config;    if(status==OK)    {        struct bss_info *bss=(struct bss_info *)arg;        bss=bss->next.stqe_next;        while(bss!=NULL)        {            os_memset(ssid,0,33);            if(os_strlen(bss->ssid)<=32)            {                os_memcpy(ssid,bss->ssid,os_strlen(bss->ssid));            }else{                os_memcpy(ssid,bss->ssid,32);            }            os_printf("+CWLAP:(%d,\"%s\",%d,\""MACSTR"\",%d)\r\n",                                 bss->authmode, ssid, bss->rssi,                                 MAC2STR(bss->bssid),bss->channel);                      bss = bss->next.stqe_next;        }        os_memcpy(&config.ssid,"PLK-UL00",32);        os_memcpy(&config.password,"",64);        wifi_station_set_config_current(&config);        wifi_station_connect();        os_timer_setfn(&connect_timer,wifi_conned,NULL);        os_timer_arm(&connect_timer,2000,NULL);    }else{    }}void to_scan(void) { wifi_station_scan(NULL,scan_done); }void user_init(){    uart_init(115200,115200);    uint8 opmode;    opmode=wifi_get_opmode();    os_printf("当前模式为:%d",opmode);    opmode=wifi_set_opmode(0x01);    os_printf("当前模式为:%d",opmode);    system_init_done_cb(to_scan);}void user_rf_pre_init(){}

*1. 初始化*
对于初始化函数,初学者也都会知道在user_main.c中有两个必备初始化函数,user_init()和user_rf_pre_init()函数。其中,user_init()是将近乎一切需要初始化的东西放入其中,除此外,就是设置这款芯片的工作模式。对于最后的 system_init_done_cb(init_done_cb_t cb)函数,在 user_init 中调用,注册系统初始化完成的回调函数。即对初始化之后该干什么有个交代,通常为WiFi扫描函数。

初始化完成回调函数

system_init_done_cb(init_done_cb_t cb)函数中的init_done_cb_t cb回调函数此处to_scan函数,为系统初始化完成后注册的wifi扫描函数。

2. WiFi扫描

在to_scan中,对WiFi扫描,利用的是乐鑫提供的wifi_station_scan函数,其中注册扫描完成的callback。

3. 扫描完成回调

扫描完成回调函数即在wifi_station_scan注册的scan_done函数,该函数的作用就是判断扫描状态以及station的参数struct station_config进行配置,是十分关键的一步。

* 定时器函数*

配置之后,就要连接了,那么连接只连接一次吗?不是的,如果连接一次不成功就要时时刻刻的重复连接,那么对于这种,我们都要放在定时器来完成。对于定时器函数,os_timer_setfn 必须在 timer 未使能的情况下调用,在 os_timer_arm 或 os_timer_arm_us 之前或者os_timer_disarm 之后,并在os_timer_setfn注册回调函数,即需要利用定时器完成的方法或动作,此处注册的是wifi_conned。

4. WiFi连接

wifi_conned即判断是否连接成功,连接如果不成功,由定时器完成反复连接。

小结:

其实就是初始化,扫描,参数配置,连接。几个工作用以不同函数连接,用回调函数显现。这几个绝对是ESP8266必备的函数,可以直接入库,根据不同需要来变化使用。如果有任何疑问或者技术交流可以加我qq1279915333,告诉我来自CSDN,欢迎指教!

0 0
原创粉丝点击