沒啥用的目錄
經過了點燈的洗禮,大家對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()
這個函數,就是將定時器打開。可以通過返回值判斷調用情況。