广博带你玩esp8266-WIFI芯片(三)(lua开发)--WIFI芯片不用WIFI算什么WIFI芯片?(WIFI热点模式与终端模式)

没啥用的目录

    • WIFI程序示例
      • 分析开始!
        • wifi.setmode()
          • 终端模式
          • 热点模式
          • 终端热点模式
      • wifi.sta.config({ssid="@PHICOMM_D",pwd="123321000"})
      • t = tmr.create()以及之后
        • t:register(1000,tmr.ALARM_AUTO,function()
      • t:start()

经过了点灯的洗礼,大家对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()

以官方手册为基础。
广博带你玩esp8266-WIFI芯片(三)(lua开发)--WIFI芯片不用WIFI算什么WIFI芯片?(WIFI热点模式与终端模式)_第1张图片
广博带你玩esp8266-WIFI芯片(三)(lua开发)--WIFI芯片不用WIFI算什么WIFI芯片?(WIFI热点模式与终端模式)_第2张图片
这个函数就是说,你可以选择以终端模式,或者热点模式,或者终端热点模式。

终端模式
wifi.setmode(wifi.STATION)
热点模式
wifi.setmode(wifi.SOFTAP)
终端热点模式
wifi.setmode(wifi.STATIONAP)

一般我们保存到闪存所以第二个参数不要,默认就好了(默认为保存)

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

既然我们选择了终端模式,那就需要连接一个WIFI,这个函数就是连接之前的配置,就像你要选择WIFI名和密码一样
广博带你玩esp8266-WIFI芯片(三)(lua开发)--WIFI芯片不用WIFI算什么WIFI芯片?(WIFI热点模式与终端模式)_第3张图片
它太长了,我猜你一定不想看,这很正常,等你需要的时候再看就好了。
在使用时,大多用的就是用户名和密码了,所以在{ssid="(我是WIFI名字)",pwd="(我是WIFI密码)"} 这个里面添加WIFI名,和密码。
需要注意是在这个函数中有一个参数是auto ,这个意思是,让你选择是否自动连接 ,默认为true,也就是调用wifi.sta.config后,自动就会连接到你添的WIFI
在这里插入图片描述
这个函数有返回值,可以通过判断他的返回值来判断成功或者失败。
在这里插入图片描述

t = tmr.create()以及之后

你想问,虽然我不太会,但我知道这肯定不是WIFI啊!
这这这,确实不是WIFI啊,这是tmr定时器的创建。
你一听???啥??我WIFI跟定时器有啥关系?
不要急,你想想你连接WIFI是一下就连上了么,是不是需要几秒时间,那如果密码错了,名字错了,是不是就连不上了呢?那你怎么知道联上没有呢?
记不记得WIFI在连接以后会给每个人分配一个IP地址,我们通过判断IP地址是否分配不就知道是否连接成功了么。
我们通过定时器来定时查看是否有IP地址不久可以自动判断是否连接成功了嘛
看看官方的API吧
(使用翻译后)广博带你玩esp8266-WIFI芯片(三)(lua开发)--WIFI芯片不用WIFI算什么WIFI芯片?(WIFI热点模式与终端模式)_第4张图片
广博带你玩esp8266-WIFI芯片(三)(lua开发)--WIFI芯片不用WIFI算什么WIFI芯片?(WIFI热点模式与终端模式)_第5张图片
既然要使用定时器,一定要设置定时器,一个,是定时时间(计时器间隔)
计时器的模式,(一次报警,手动重复报警,自动报警)
回调函数(时间到了要做的事情)
广博带你玩esp8266-WIFI芯片(三)(lua开发)--WIFI芯片不用WIFI算什么WIFI芯片?(WIFI热点模式与终端模式)_第6张图片

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()

这个函数,就是将定时器打开。可以通过返回值判断调用情况。
广博带你玩esp8266-WIFI芯片(三)(lua开发)--WIFI芯片不用WIFI算什么WIFI芯片?(WIFI热点模式与终端模式)_第7张图片

你可能感兴趣的:(esp8266)