經過上次的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)
進入處理任務中去。。。。
二、方法二
還可以根據,工作流程來:
等到掃瞄完成以後,就可以設定連線wifi了,在scan_done()掃瞄函式中新增如下**,//步驟一
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了
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(){}
這裡就是掃瞄特定的wifi名字,然後**要這樣設定:比如要掃瞄乙個為esp8266的wifi名字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)
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...