还记得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.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.STATION)
wifi.setmode(wifi.SOFTAP)
wifi.setmode(wifi.STATIONAP)
一般我们保存到闪存所以第二个参数不要,默认就好了(默认为保存)
既然我们选择了终端模式,那就需要连接一个WIFI,这个函数就是连接之前的配置,就像你要选择WIFI名和密码一样
它太长了,我猜你一定不想看,这很正常,等你需要的时候再看就好了。
在使用时,大多用的就是用户名和密码了,所以在{ssid="(我是WIFI名字)",pwd="(我是WIFI密码)"} 这个里面添加WIFI名,和密码。
需要注意是在这个函数中有一个参数是auto ,这个意思是,让你选择是否自动连接 ,默认为true,也就是调用wifi.sta.config后,自动就会连接到你添的WIFI
这个函数有返回值,可以通过判断他的返回值来判断成功或者失败。
你想问,虽然我不太会,但我知道这肯定不是WIFI啊!
这这这,确实不是WIFI啊,这是tmr定时器的创建。
你一听???啥??我WIFI跟定时器有啥关系?
不要急,你想想你连接WIFI是一下就连上了么,是不是需要几秒时间,那如果密码错了,名字错了,是不是就连不上了呢?那你怎么知道联上没有呢?
记不记得WIFI在连接以后会给每个人分配一个IP地址,我们通过判断IP地址是否分配不就知道是否连接成功了么。
我们通过定时器来定时查看是否有IP地址不久可以自动判断是否连接成功了嘛
看看官方的API吧
(使用翻译后)
既然要使用定时器,一定要设置定时器,一个,是定时时间(计时器间隔)
计时器的模式,(一次报警,手动重复报警,自动报警)
回调函数(时间到了要做的事情)
分析下我们的示例代码
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结构的结束