廣博帶你玩esp8266-WIFI芯片(三)(lua開發)--WIFI芯片不用WIFI算什麼WIFI芯片?(WIFI熱點模式與終端模式)


經過了點燈的洗禮,大家對lua腳本語言與esp8266的使用有了一些的瞭解。
但是,一個WIFI模塊最重要的是什麼呢!當然是WIFI啦!
esp8266支持WIFI的AP(熱點模式)STATION(終端模式),你可以用它來產生一個2.4G的WIFI也可以用它來連接一個已有的WIFI讓它可以通過互聯網進行通信,爲以後的TCP、UDP傳輸做基礎。
如果有需要官方API:官方API網站

還記得GPIO點燈的操作麼,先複習下

led = 4
gpio.mode(led,gpio.OUTPUT,gpio.PULLUP)
while (true) 
do
     gpio.write(led,gpio.LOW)
     tmr.delay(1000*1000)
     gpio.write(led,gpio.HIGH)
     tmr.delay(1000*1000)
end

好,我們先放出一個示例然後再分析吧!
(不要慌,雖然對比第一個程序來說,這個示例有點多,但是其實很簡單,分析一下就好了!)

WIFI程序示例

wifi.setmode(wifi.STATION)
wifi.sta.config({ssid="@PHICOMM_D",pwd="123321000"})

t = tmr.create()
t:register(1000,tmr.ALARM_AUTO,function()
     if wifi.sta.getip() == nil then
            print("connecting...")
     else 
            print("connected,Ip is "..wifi.sta.getip()) 
            t:stop()
     end
end)
t:start()

分析開始!

wifi.setmode()

以官方手冊爲基礎。
在這裏插入圖片描述
在這裏插入圖片描述
這個函數就是說,你可以選擇以終端模式,或者熱點模式,或者終端熱點模式。

終端模式
wifi.setmode(wifi.STATION)
熱點模式
wifi.setmode(wifi.SOFTAP)
終端熱點模式
wifi.setmode(wifi.STATIONAP)

一般我們保存到閃存所以第二個參數不要,默認就好了(默認爲保存)

wifi.sta.config({ssid="@PHICOMM_D",pwd=“123321000”})

既然我們選擇了終端模式,那就需要連接一個WIFI,這個函數就是連接之前的配置,就像你要選擇WIFI名和密碼一樣
在這裏插入圖片描述
它太長了,我猜你一定不想看,這很正常,等你需要的時候再看就好了。
在使用時,大多用的就是用戶名和密碼了,所以在{ssid="(我是WIFI名字)",pwd="(我是WIFI密碼)"} 這個裏面添加WIFI名,和密碼。
需要注意是在這個函數中有一個參數是auto ,這個意思是,讓你選擇是否自動連接 ,默認爲true,也就是調用wifi.sta.config後,自動就會連接到你添的WIFI
在這裏插入圖片描述
這個函數有返回值,可以通過判斷他的返回值來判斷成功或者失敗。
在這裏插入圖片描述

t = tmr.create()以及之後

你想問,雖然我不太會,但我知道這肯定不是WIFI啊!
這這這,確實不是WIFI啊,這是tmr定時器的創建。
你一聽???啥??我WIFI跟定時器有啥關係?
不要急,你想想你連接WIFI是一下就連上了麼,是不是需要幾秒時間,那如果密碼錯了,名字錯了,是不是就連不上了呢?那你怎麼知道聯上沒有呢?
記不記得WIFI在連接以後會給每個人分配一個IP地址,我們通過判斷IP地址是否分配不就知道是否連接成功了麼。
我們通過定時器來定時查看是否有IP地址不久可以自動判斷是否連接成功了嘛
看看官方的API吧
(使用翻譯後)在這裏插入圖片描述
在這裏插入圖片描述
既然要使用定時器,一定要設置定時器,一個,是定時時間(計時器間隔)
計時器的模式,(一次報警,手動重複報警,自動報警)
回調函數(時間到了要做的事情)
在這裏插入圖片描述

t:register(1000,tmr.ALARM_AUTO,function()

分析下我們的示例代碼

t:register(1000,tmr.ALARM_AUTO,function()
     if wifi.sta.getip() == nil then
            print("connecting...")
     else 
            print("connected,Ip is "..wifi.sta.getip()) 
            t:stop()
     end
end)
t:register(1000,tmr.ALARM_AUTO,function() --1000就是定時時間(ms單位)
										  --tmr.ALARM_AUTO 自動報警模式
										  --function()時間到了需要調用的			
										  --函數(主體在下面)
										  
end)									   --函數定義結束

function()內部

 if wifi.sta.getip() == nil then           --判斷IP地址是否是空的
            print("connecting...")			--如果是空的執行這句,串口輸出connecting...
     else 
            print("connected,Ip is "..wifi.sta.getip())  --如果IP地不是空,就打印IP地址
            t:stop()		--已經連接上了WIFI,可以把定時器停掉了
     end	                 --這個if結構的結束

t:start()

這個函數,就是將定時器打開。可以通過返回值判斷調用情況。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章