esp8266入門(二)連接WIFI路由

2021-12-24 嵌入式小書蟲

用esp8266連接路由器時,要設置成station工作模式,然後配置好熱點名字 和密碼就可以連接了。

那我們首先 講一下8266的工作模式。

1、esp8266的工作模式

首先,我們 去樂鑫官網下載SDK編程手冊,如下

《2C-ESP8266__SDK__Programming Guide__CN_v1.2.0.pdf》

打開SDK編程手冊,如下圖,找到wifi_get_opmode函數

void ICACHE_FLASH_ATTR user_init() {  uint8 opmode;  uart_init(115200,115200);  ||模式查看函數  opmode = wifi_get_opmode();     ||列印當前的模式         os_printf("\r\n當前模式為:%d\r\n", opmode);        }

2、ICACHE_FLASH_ATTR宏定義


細心的同學已經注意到了,上面的程序 用了一個宏ICACHE_FLASH_ATTR 來修飾user_init() 函數,那這個宏到底有什麼用呢?

由於空間有限,我們無法將所有代碼都一次性加載到IRAM中運行,因此大部分函數放在IROM中,運行時再加載到IRAM中。

(1)對於ESP8266_NONOS_SDK,

加了「ICACHE_FLASH_ATTR」宏的函數,將存放在IROM中,CPU僅在調用到它們的時候,將它們讀到緩存中運行; 

沒有加「ICACHE_FLASH_ATTR」宏的函數,將在一開始上電運行時,就加載到IRAM中運行; 

注意,不要在中斷函數中調用帶有ICACHE_FLASH_ATTR函數,因為它可能與快閃記憶體R / W操作衝突。

(2)對於ESP8266_RTOS_SDK

函數默認都存放在IROM中,所以無需再添加「ICACHE_FLASH_ATTR」宏。

中斷處理函數也是可以定義在IROM中。

如果需要將一些頻繁調用的函數定義在IRAM中,在函數前添加「IRAM_ATTR」宏就可以。

我現在使用的是ESP8266_RTOS_SDK,所以加和不加這個宏都可以。

3、掃描WIFI

esp8266設置為station模式,並在初始化完成後調用WiFi掃描函數。程序如下:

void ICACHE_FLASH_ATTR scan_done(void *arg, STATUS status){  uint8 ssid[33];
if (status == OK) { struct bss_info *bss_link = (struct bss_info *) arg;    bss_link = bss_link->next.stqe_next;  while (bss_link != NULL) { os_memset(ssid, 0, 33); if (os_strlen(bss_link->ssid) <= 32) { os_memcpy(ssid, bss_link->ssid, os_strlen(bss_link->ssid)); } else { os_memcpy(ssid, bss_link->ssid, 32); } ||輸出AP的信息 os_printf("+CWLAP:(%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;    }            } }
void ICACHE_FLASH_ATTR scan_wifi(void) { ||獲取 AP 的信息 wifi_station_scan(NULL, scan_done);}
void user_init() { uint8 opmode; uart_init(115200,115200);  opmode = wifi_get_opmode();         os_printf("\r\n當前模式為:%d\r\n", opmode); ||設置模式為station模式 wifi_set_opmode (0x01); opmode = wifi_get_opmode(); os_printf("\r\n當前模式為:%d\r\n", opmode); ||初始化完成後註冊回調函數scan_wifi  system_init_done_cb(scan_wifi);  }

編譯、下載後, 串口1輸出的信息如下圖:

+CWLAP:(4,"TP-LINK_501",-68,"dc:fe:18:05:da:da",6)

第一個4表示加密類型,

"TP-LINK_501"為WiFi熱點名字,

-68為信號強度,

"dc:fe:18:05:da:da"為mac地址,

最後一個6為信道號。

4、連接路由與定時器的用法


設置 WiFi密碼,用esp8266連接路由,使用定時器查看是否連接成功,超時返回連接失敗。

定時器使用的函數如下:

||定義一個定時器變量ETSTimer connect_timer;||設置定時器回調函數os_timer_setfn(&connect_timer, Wifi_conned, NULL);          ||使能定時器os_timer_arm(&connect_timer, 2000, NULL);   ||關閉定時器,       os_timer_disarm(&connect_timer); 

路由器wifi連接程序如下

||定義結構體stationConfstruct station_config stationConf;  ||連接的路由器         os_memcpy(&stationConf.ssid, "TP-LINK", 32);          ||密碼os_memcpy(&stationConf.password, "123******", 64);  ||wifi來連接的接口配置。sdk有例子        wifi_station_set_config(&stationConf);   ||wifi連接函數 wifi_station_connect();           ||定時器回調函數os_timer_setfn(&connect_timer, Wifi_conned, NULL);  ||定時器2s掃描一次        os_timer_arm(&connect_timer, 2000, NULL);

定時器回調函數為:

void ICACHE_FLASH_ATTR Wifi_conned(void *arg){  static uint8 count = 0;   uint8 status;   ||關閉定時器connect_timer  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;    }  }  ||使能定時器connect_timer  os_timer_arm(&connect_timer, 2000, NULL);}

程序下載後,連接路由成功後列印的信息如下圖:

好了,今天就講這麼多,明天繼續。

原創不易,如果你喜歡我的公眾號、覺得我 文章對你有所啟發,

請務必「點讚、收藏、轉發」,這對我很重要,謝謝!

歡迎訂閱    嵌入式小書蟲


相關焦點

  • ESP8266 Wi-Fi到底傳多遠_esp8266 wifi信號強度測距
    打開APP ESP8266 Wi-Fi到底傳多遠_esp8266 wifi信號強度測距 發表於 2018-04-12 10:39:37
  • ESP8266固件燒寫及連接TFT屏
    esptool.py --port COM4 erase_flashesptool.py --port COM4 --baud 115200 write_flash --flash_size=detect 0 esp8266-20210902-v1.17.bin注意:COM4需要改為開發板連接電腦後的實際埠號
  • 簡明搭建大戶型WiFi——美國網件MK63 WiFi6路由上手
    老生常談一下什麼是wifi6,wifi6的另一個名稱是802.11ax,ta之前的五代,分別叫作:802.11 a/b/g/n/ac,這次終於開竅了,直接用wifi6來代替這些複雜的符號,讓消費者一眼看明白這是新一代的wifi設備。而wifi6兼容2.4G和5G wifi標準,使用更方便。
  • STM32 ESP8266的WIFI TFT自動校時天氣預報 (含AD設計 燒錄文件 DIY030)
    本設計使用stm32作為主控,採用esp8266作為網絡接入模組,可實現自動校準時間以及獲取天氣信息等功能!該項目成本低廉,主要功能為自動校時與天氣預報,改方案解決了現有電子時鐘走時偏差的問題(可降低時鐘部分硬體要求),具備本地溫溼度測量、天氣預報數據獲取功能,可擴展實現節氣提醒,自動報時,鬧鐘等功能。
  • 阿里雲物聯網新手指南:利用ESP8266遠程啟動電腦
    有位讀者朋友提出了一個很實際的問題:「能用esp8266弄一個遠程開電腦的教程嗎?需要設置路由器嗎?公司路由器設置不了。」當然可以!而且很簡單~ESP8266是一個非常適合用於物聯網和家庭智能項目的帶wifi模塊的單片機。
  • 筆記本電腦怎麼連接wifi?
    下面我就分享一下,我最近設置Win7系統wifi上網的的經驗給大家。工具/原料方法/步驟第一步,你要使用筆記本用wifi上網,首先要為你的筆記本創建無線網絡連接,以win7為例,點擊右下角的」開始按鈕菜單「,然後點擊」控制面板「進入」控制面板「裡面,大家可以看到」網絡和Internet」的文字,
  • 使用ESP-8266模塊做一個可攜式wifi殺手
    5.找到packages\esp8266\hardware\esp8266\2.0.0\tools\sdk\include目錄將下載的esp8266_deauther源碼裡的sdk_fix下的user_interface.h複製到該目錄,替換原來的文件。
  • 斷網讓女神求你:製作一個廉價的WIFI幹擾器
    模塊放狗找資料,偶然發現一個幹擾wifi信號的廉價方法,特與大家分享。esp8266_deauther是使用arduino開發的因此也是開源的我們需要準備arduion IDE、esp8266開發包、nodemcu一塊。下面開始安裝arduino。
  • 嘗鮮wifi6,輕鬆搭建私有雲——華碩WIFI6電競路由RT-AX56U上手
    而wifi6作為另一門「黑科技」,其兼容2.4G和5G wifi標準,除速度提升外上下行的mu-mimo,ofdma這些特性,無不讓對網絡有更高要求的朋友望眼欲穿,奈何價格一直高高在上成為了攔路虎。而令人更想不到的是,2020年伊始,華碩WIFI6路由RT-AX56U便大幾百元的價格出現在我們面前。現在上車wifi6麼?我們一起來分析一下。
  • 不方便拉網線時,兩個路由無線橋接讓wifi無死角
    材料/工具無線路由器兩臺(至少一臺具備WDS功能方便設置橋接)電腦(或智慧型手機)文章中有詳細介紹,這裡以電腦連接路由器然後瀏覽器輸入主路由ip地址,帳號密碼,進入主路由器的設置界面為例,然後在左側選項條中點擊「運行狀態」,在WAN口狀態欄可以找到DNS伺服器,一共有兩個,主DNS和備選DNS伺服器,把它寫在紙上待會兒用。注意:主路由器不能開啟WDS,否則會導致主路由器故障
  • ESP8266連接DHT11,開發微信小程序實時顯示溫溼度
    第一步,先讀取DHT11溫溼度數值,第二步,新建主題,然後esp8266往這個主題發送消息,第三步。小程序通過http API接口獲取數據。小程序控制原理:esp8266訂閱了一個主題,小程序往這個主題發消息,esp8266就可以收到消息,就可以執行相關控制指令了(開/關函數)關於發布訂閱:訂閱(訂閱):訂閱給定的一個主題/頻道的信息。
  • 如何禁止wifi萬能鑰匙連接我的路由器?
    但是很多人總覺得網速不夠,經常卡頓,絕大多數是因為有其他人破解了你的wifi密碼,分擔了你的寬帶。接入的人多了,自己的寬帶速率肯定會下降,如果遇到有人下載文件,你的寬帶速率會嚴重下降,因為一般路由後臺默認設置是下載優先。所以很多人就很疑惑,為啥其他人總能蹭到自己的wifi,修改密碼也沒有。
  • 網件入門級WiFi 6 Mesh路由,MK63評測:普通用戶嘗鮮之選
    為了迎合中國國情,作為路由大廠的網件在4月底便推出了入門級的WiFi 6路由MK63 AX5400。MK63 AX5400除了支持最新的WiFi 6技術外,還支持Mesh技術,是一套真正的WiFi 6 Mesh系統。
  • 手機連接wifi不穩定是什麼原因?手機連接wifi不穩定解決方法
    一、無線wifi不穩定怎麼解決?   二、無線wifi路由器的設置方法:  首先如果有個 無線路由 器,那麼就先把電源接通,然後插上 網線 ,進線插在wan口(一般是藍色口),然後跟電腦連接的網線就隨便插哪一個lan口啦,做好這些工作後,然後你會看到路由器後面有個地址跟帳號密碼,連接好後在瀏覽器輸入在路由器看到的地址,一般是192.168.1.1(當然如果你家是用 電話線 上網那就還要多準備一個調製調解器,俗稱「貓」)  然後進入,輸入相應的帳號跟密碼,一般新買來的都是admin  確實後進入操作界面,你會在左邊看到一個設置嚮導
  • Tenda騰達AC11,家庭WiFi防蹭網必備路由
    打開APP Tenda騰達AC11,家庭WiFi防蹭網必備路由 發表於 2018-12-05 12:00:04       最簡單粗暴的方法就是查看路由器當前連接的設備是否有陌生設備。       下面以騰達路由器AC11為例,教大家如何查看路由器是否連接了陌生設備。       電腦端:打開瀏覽器,在地址欄輸入tendawifi.com 或192.168.0.1,按回車鍵——輸入路由器管理員密碼,登錄——點擊「在線設備」即可查看。
  • 如何設置LED燈或5V繼電器並使用亞馬遜AlexaEcho和ESP8266控制它...
    對於此項目,您將需要以下程序: Arduino IDE(在此處下載最新版本) NodeMCU 除ESP8266板支持(NodeMCU)外,還應安裝以下Arduino庫(在庫管理器中搜索或手動將文件夾放在Arduino/庫中): fauxmoESP ESPAsyncTCP ESPAsyncWebServer 連接和原理圖
  • 這一次,不給WIFI信號留死角——360WIFI6全屋路由體驗
    這款360WIFI6全屋路由考慮下唄!同樣進行全面的測試,在第一個測試點,360WIFI6全屋路由的5G WIFI型號表現也一樣優秀,延遲低,速度快,連接穩定。咳咳,那麼接下來就要說360WIFI6全屋路由的大招了,Mesh組網,這一次我拿到的是雙只裝Mesh組網的套裝,而且兩個路由器都是主路由,這是我沒想到的,一般來說這種設備都是一個母路由,一個子路由。兩個都是母路由著實是良心。
  • 全千兆子母路由電力線組網,華為路由Q2 Pro真讓全屋無死角!
    針對家裡有網絡死角、無線wifi經過承重牆(內有鋼筋會對無線信號屏蔽)衰減嚴重的情況,不外乎兩種低成本解決方案:再買一臺帶無線中繼的路由器來擴展,或者直接買更大功率無線路由器「強力穿牆」。不過華為路由Q2 Pro給出了更先進的性價比之選,那就是用字母路由套裝直接實現0延遲的房間全覆蓋。
  • 【網絡技術】wifi網絡中自動切換信號強度更好的信號源
    於是人們就想到了多架幾個wifi熱點,也就是ap,來擴展無線的覆蓋面積。很快,大家又發現這樣架設的無線網絡,由於wifi基點的不同,需要手工在手機或者筆記本上選擇信號更強的wifi基點,感覺相當的不便。        其實,這種問題解決相當簡單,反正本人做的無線覆蓋,在6層的辦公樓,只要有wifi信號的地方,就會自動選擇信號強的wifi基點連接,而設備是完全沒有斷線重連的需要。
  • 搭建無線路由中繼,讓你的WiFi信號更強大!
    原因竟然是……》的文章(點擊可查看),介紹了一些影響WiFi信號的因素,其中也粗略地講到了如何增強wifi信號。一、準備工作無線路由器1(主路由器)無線路由器2(副路由器)二、搭建步驟1、首先設置路由器2,連上電腦,輸入路由器管理ip地址(一般為192.168.1.1或192.168.0.1),輸入登錄帳號和密碼(一般帳號和密碼都為admin),進入後臺。