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