25-ESP8266 SDK開發基礎入門篇--控制WIFI連接路由器


https://www.cnblogs.com/yangfengwu/p/11324411.html

說個事情,現在SDK的版本已經出到3.0了,但是我還是使用2.0

如果只是為了學習研究   選擇3.0吧!

如果要做產品或者項目   選擇2.0或者更低版本

大家應該都明白為什么要這樣.如果你不明白,那說明你還是小白.

 

前面幾節都是連接Wi-Fi發出的無線,然后實現通信.后面的章節咱都是讓模塊連接路由器,然后實現通信

大家首先要明確,WIFI模塊和手機同時連接路由器通信,實際上以前的所有網絡通信代碼都可以使用,只不過通信的IP不再是

192.168.4.1  需要換成路由器分得的IP,     WIFI模塊連接路由器.路由器會分給模塊一個IP地址

 

這節咱寫個讓模塊連接路由器的程序

 

學了這么長時間了,不知道大家自己寫實現的功能的代碼是怎么寫的(看官方API自己組合 或者 百度 ???),我給大家說個可靠的地方!(絕對的穩定可靠)

大家都知道有個團隊嵌入了lua,使得WIFI可以用lua 開發,如果大家看過我寫過的關於lua 的一些文章,大家應該知道實際上lua 只不過是在咱SDK開發的基礎上又進行了一次封裝(實際上lua的源碼就是寫好了SDK的各種功能了,而且lua版本的也是使用的2.0的,咱可以直接拷貝使用)

首先需要lua 的源碼,大家可以

https://www.cnblogs.com/yangfengwu/p/10840517.html

 

 

 

 

 我下載了,放到了這節了

 

 

 然后導入到工程里面

 

 

lua的源碼本身就是使用的make指令編譯的,所以選擇這個

 

 

 

 

 

 

 

 

 咱現在這節是控制WIFI連接路由器,我給大家說怎么找

還記得咱lua開發的時候,連接路由器是

https://nodemcu.readthedocs.io/en/master/modules/wifi/#wifistaconfig

 

 

 

 

 

 

 

 

 

 

 

 

 

 知道步驟之后呢,最好把用到的函數在API文檔里面看一下,看看有沒有特殊要求的

 

 

 介紹說,如果這個函數放到user_init里面,那么就不需要調用wifi_station_connect,而且還是自動重連

所以

 

 

 

#define APssid "qqqqq"
#define APpassword "11223344"
struct station_config stationConf;

 

 

 

stationConf.bssid_set = 0;
    memcpy(stationConf.ssid,APssid,strlen(APssid));
    memcpy(stationConf.password,APpassword,strlen(APpassword));//熱點密碼設置
    wifi_station_disconnect();
    wifi_station_set_config(&stationConf);

 

下載進去

 

 不過這是源碼自帶的打印,咱呢想自己打印

這樣就需要監控下WIFI的連接狀態

看lua 的源碼

 

 

 

 

 

 

 

 

 咱先拷貝這個函數

static void wifi_event_monitor_handle_event_cb(System_Event_t *evt)
{

}

 

 

 

wifi_set_event_handler_cb(wifi_event_monitor_handle_event_cb);

 

 其實這樣看過去就是注冊一個回調函數

回調信息肯定靠這個讀取

 

 

 

 那就是說

static void wifi_event_monitor_handle_event_cb(System_Event_t *evt)
{
    switch (evt->event_id)
    {
    case EVENT_STAMODE_CONNECTED://連接上路由器
      break;

    case EVENT_STAMODE_DISCONNECTED://和路由器斷開

      break;

    case EVENT_STAMODE_AUTHMODE_CHANGE://這個是 啥..

      break;

    case EVENT_STAMODE_GOT_IP://連接上路由器,並獲取了IP

      break;

    case EVENT_STAMODE_DHCP_TIMEOUT://連接上路由器,但是路由器給WIFI模塊分配IP等信息超時了

      break;

    case EVENT_SOFTAPMODE_STACONNECTED://AP模式下,有設備連接WIFI模塊的無線

      break;

    case EVENT_SOFTAPMODE_STADISCONNECTED://AP模式下,有設備斷開和WIFI模塊的無線連接

      break;

    case EVENT_SOFTAPMODE_PROBEREQRECVED://這是啥??

      break;

    default://其它錯誤

      break;
    }
}

 

 

 打印點東西,這樣吧,一次性說完吧!

其實現在直接可以看lua版本的那個程序,肯定有現成的可以借鑒

 

 

 

 

 

 需要稍微改改,只留下自己用的

 

 

 我就直接大刀闊斧的復制粘貼

static void wifi_event_monitor_handle_event_cb(System_Event_t *evt)
{
  switch (evt->event_id)
  {
    case EVENT_STAMODE_CONNECTED://連接上路由器
        printf("\n\tSTAMODE_CONNECTED\n");

        printf("\tConnected to SSID %s, Channel %d\n",
          evt->event_info.connected.ssid,
          evt->event_info.connected.channel);
      break;

    case EVENT_STAMODE_DISCONNECTED://和路由器斷開
        printf("\n\tSTAMODE_DISCONNECTED\n");

        printf("\tDisconnect from SSID %s, reason %d\n",
          evt->event_info.disconnected.ssid,
          evt->event_info.disconnected.reason);
      break;

    case EVENT_STAMODE_AUTHMODE_CHANGE://這個是 啥..
        printf("\n\tSTAMODE_AUTHMODE_CHANGE\n");

        printf("\tAuthmode: %u -> %u\n",
          evt->event_info.auth_change.old_mode,
          evt->event_info.auth_change.new_mode);
      break;

    case EVENT_STAMODE_GOT_IP://連接上路由器,並獲取了IP
        printf("\n\tGOT_IP\n");

        printf("\tIP:" IPSTR ",Mask:" IPSTR ",GW:" IPSTR "\n",
          IP2STR(&evt->event_info.got_ip.ip),
          IP2STR(&evt->event_info.got_ip.mask),
          IP2STR(&evt->event_info.got_ip.gw));
      break;

    case EVENT_STAMODE_DHCP_TIMEOUT://連接上路由器,但是路由器給WIFI模塊分配IP等信息超時了
        printf("\n\tSTAMODE_DHCP_TIMEOUT\n");
      break;

    case EVENT_SOFTAPMODE_STACONNECTED://AP模式下,有設備連接WIFI模塊的無線
        printf("\n\tSOFTAPMODE_STACONNECTED\n");

        printf("\tStation: " MACSTR "join, AID = %d\n",
          MAC2STR(evt->event_info.sta_connected.mac),
          evt->event_info.sta_connected.aid);
      break;

    case EVENT_SOFTAPMODE_STADISCONNECTED://AP模式下,有設備斷開和WIFI模塊的無線連接
        printf("\n\tSOFTAPMODE_STADISCONNECTED\n");

        printf("\tstation: " MACSTR "leave, AID = %d\n",
          MAC2STR(evt->event_info.sta_disconnected.mac),
          evt->event_info.sta_disconnected.aid);
      break;

    case EVENT_SOFTAPMODE_PROBEREQRECVED://這是啥??,,,信號強度改變了
        printf("\n\tSOFTAPMODE_PROBEREQRECVED\n");

        printf("Station PROBEREQ: " MACSTR " RSSI = %d\n",
          MAC2STR(evt->event_info.ap_probereqrecved.mac),
          evt->event_info.ap_probereqrecved.rssi);
      break;

    default://其它錯誤
        printf("\n\tswitch/case default\n");
      break;
  }
}

 

 

下載進去

 

 好了,自己消化吧,如果想通過路由器實現以前的功能,只需要把IP地址修改為 上面打印的就可以 我的是192.168.0.100  (根據自己的修改哈)

 

下節咱用SmartConfig/Airkiss 來配網

 

大家一開始可能感覺看lua的不如直接看官方給的API文檔,怎么說呢!站在不同的層次上,眼光和思想不一樣....

站在巨人的肩上!

 

https://www.cnblogs.com/yangfengwu/p/11429007.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM