ESP8266 學習筆記(二)掃瞄 連線WiFi

2021-07-28 15:43:25 字數 3694 閱讀 3021

經過上次的helloworld,我們知道了其實esp8266其實是裡面有個微控制器的模組,我的操作其實就是操作裡面的微控制器,因為是微控制器所以裡面會有各種內建的外設,而我們的重點是使用wifi,所以就直接操作wifi了。

特別需要注意的乙個巨集:

新增了這個巨集的函式就會存放到rom裡面去,cpu僅在呼叫的時候才將它們讀到cache(快取)中執行,沒有新增這個巨集的函式將一開始上電就執行在ram中;由於模組的空間有限,我們無法將所有的**都一次性載入到ram中去執行,因此在大部分函式前新增這個特殊的巨集。

需要注意的是不要在gpio或uart中斷處理函式中呼叫帶有「icache_flash_attr」巨集的函式,否則將引起異常。

然後在入口函式裡面寫業務邏輯**。

一、方法一

怎麼寫呢?沒思路的話就看at-firmware韌體原始碼吧,因為at-firmware韌體就是接受外面傳進來的at指令來執行的,那麼,我們就可以看著它的**來完成我們的掃瞄wifi的功能,at指令為at+cwlap

入口函式為:

可以看到「icache_flash_attr」修飾的功能函式包含了兩種任務,接受任務(at_recvtask)和處理任務(at_proctask)

進入處理任務中去。。。。

二、方法二

還可以根據,工作流程來:

//步驟一

void user_init()

//步驟二

void to_scan(void)

//步驟三

void icache_flash_attr scan_done(void *arg,status status)

else

os_sprintf(temp,"+cwlap:(%d,\"%s\",%d,\""macstr"\",%d)\r\n",

bss_link->authmode, ssid, bss_link->rssi,

mac2str(bss_link->bssid),bss_link->channel);

os_printf("%s",temp);

bss_link = bss_link->next.stqe_next;

}//掃瞄完成以後就開始連線wifi了

}else

}

等到掃瞄完成以後,就可以設定連線wifi了,在scan_done()掃瞄函式中新增如下**,

//掃瞄完成以後就開始連線wifi了

os_memcpy(&stationconf.ssid, "mercury_6398", 32);//wifi名字加入到配置中去

os_memcpy(&stationconf.password, "123456789", 64);//wifi密碼加入到配置中去

wifi_station_set_config_current(&stationconf);//將設定好的配置加入到配置函式中去

wifi_station_connect();//在非user_init()入口函式中連線wifi,需要呼叫這個函式

os_timer_setfn(&connect_timer,wifi_conned,null);//呼叫自己寫的wifi連線函式

os_timer_arm(&connect_timer,2000,null);//設定連線wifi定時器

自己寫的掃瞄函式

void icache_flash_attr wifi_conned(void *arg)else

}os_timer_arm(&connect_timer,2000,null);

}

於是就完成了掃瞄連線的所有功能。

user_main.c的所有**

etstimer connect_timer;

void icache_flash_attr wifi_conned(void *arg)else

}os_timer_arm(&connect_timer,2000,null);

}void icache_flash_attr scan_done(void *arg,status status)

else

os_sprintf(temp,"+cwlap:(%d,\"%s\",%d,\""macstr"\",%d)\r\n",

bss_link->authmode, ssid, bss_link->rssi,

mac2str(bss_link->bssid),bss_link->channel);

os_printf("%s",temp);

bss_link = bss_link->next.stqe_next;

}//掃瞄完成以後就開始連線wifi了

os_memcpy(&stationconf.ssid, "mercury_6398", 32);

os_memcpy(&stationconf.password, "123456789", 64);

wifi_station_set_config_current(&stationconf);

wifi_station_connect();

os_timer_setfn(&connect_timer,wifi_conned,null);//呼叫wifi連線函式

os_timer_arm(&connect_timer,2000,null);

}else

}void to_scan(void)

void user_init()

void user_rf_pre_init(){}

void icache_flash_attr

scan_done(void *arg, status status)

else

os_printf("(%d,\"%s\",%d,\""macstr"\",%d)\r\n",

bss_link->authmode, ssid, bss_link->rssi,

mac2str(bss_link->bssid),bss_link->channel);

bss_link = bss_link->next.stqe_next;

}} else }

void icache_flash_attr

user_scan(void)

wifi_station_scan(null,scan_done);

}void user_init(void)

這裡就是掃瞄特定的wifi名字,然後**要這樣設定:比如要掃瞄乙個為esp8266的wifi名字

void icache_flash_attr

user_scan(void)

struct scan_config config;

os_memset(&config, 0, sizeof(config));

config.ssid = "esp8266";

wifi_station_scan(&config,scan_done);

}

ESP8266學習筆記(二)

上篇文章提到了如何使用usb轉ttl模組除錯esp8266模組以及該模組的幾種工作方式。此篇將會介紹如何實現esp8266模組與微控制器的通訊。功能介紹 esp8266模組與stm32微控制器的串列埠三之間互相通訊,本人測試的是esp8266模組的sta做客戶端的模式。與usb轉ttl模組除錯步驟相...

ESP8266學習筆記

因為此模式可控性高且方便,所以推薦此模式 測試指令 at 應用模式設定 at cwmode 3 ap 模式 1 esp8266模組作為熱點,實現手機或電腦直接與模組通訊,實現區域網無線控制。sta 模式 2 esp8266模組通過路由器連線網際網路,手機或電腦通過網際網路實現對裝置的遠端控制 sta...

esp8266學習筆記

上學以前買了一片esp8266 一直沒用 也是醉了 最近有時間拿出來鼓搗一下 發現功能很強大 是內嵌了 處理器有wifi功能的一款小晶元 還便宜 esp8266 我知道的開發方式 有 可能不全 1 arduino ide for esp8266 2 刷nodemcu 用esploader 進行lua...