如前所述,NodeMCU的WiFi具有AP(Access Point)、STA(STATION)、AP+STA三种模式。下面的代码演示了如何通过Lua代码设置这三种模式。
资料包中文件名为“ap.lua”。
将“init.lua”文件中“fileName.lua”修改为“ap.lua”,“fileName.lc”修改为“ap.lc”。修改完成后下载。
程序代码:
1 print("Ready to start soft ap")
2
3 local str=wifi.ap.getmac();
4 local ssidTemp=string.format("%s%s%s",string.sub(str,10,11),string.sub(str,13,14),string.sub(str,16,17));
5
6 cfg={}
7 cfg.ssid="ESP8266_"..ssidTemp;
8 cfg.pwd="12345678"
9 wifi.ap.config(cfg)
10
11 cfg={}
12 cfg.ip="192.168.1.1";
13 cfg.netmask="255.255.255.0";
14 cfg.gateway="192.168.1.1";
15 wifi.ap.setip(cfg);
16 wifi.setmode(wifi.SOFTAP)
17
18 str=nil;
19 ssidTemp=nil;
20 collectgarbage();
21
22 print("Soft AP started")
23 print("Heep:(bytes)"..node.heap());
24 print("MAC:"..wifi.ap.getmac().."\r\nIP:"..wifi.ap.getip());
程序第1行打印字符信息。
第3、4行是获取AP模式下的MAC地址,以MAC地址后6位为AP的SSID,当然你也可以使用其他作为ID,比如通过node.chipid()得到ESP8266的芯片ID。
第6~9行设置AP模式下的SSID。SSID格式为“ESP8266_XXXXXX”,其中XXXXXX为MAC地址后6位。
第11~15行为设置模块的IP地址、子网掩码以及网关地址。
第16行调用wifi.setmode()函数设置执行。
第23行打印当前内存。
第24行打印mac地址和ip地址。
下载该程序,执行结果是使用无线网络设备可以搜索到NodeMCU发出来的AP信号。通过电脑连接到该SSID,见下图。
执行程序的Log如下:
1 NodeMCU 0.9.6 build 20150406 powered by Lua 5.1.4
2
3
4 ESP8266 Started
5 Compile File:ap.lua
6 Remove File:ap.lua
7 Readly to start soft ap
8 Soft AP started
9 Heep:(bytes)15328
10 MAC:1A-FE-34-A1-14-A7
11 IP:192.168.1.1
12 >
从上面可以看到ap.lua在被编译后删除了。
如果重新启动NodeMCU,程序Log如下:
1 NodeMCU 0.9.6 build 20150406 powered by Lua 5.1.4 2 3 4 ESP8266 Started 5 Ready to start soft ap 6 Soft AP started 7 Heep:(bytes)15048 8 MAC:1A-FE-34-A1-14-A7 9 IP:192.168.1.1 10 >
关于更多函数的功能请查阅:
https://github.com/nodemcu/nodemcu-firmware/wiki/nodemcu_api_cn。
资料包中文件名为“sta.lua”。
将“init.lua”文件中“fileName.lua”修改为“sta.lua”,“fileName.lc”修改为“sta.lc”。修改完成后下载。
程序代码:
1 print("Ready to Set up wifi mode")
2 wifi.setmode(wifi.STATION)
3
4 wifi.sta.config("MERCURY_1013","123456789")
5 wifi.sta.connect()
6 local cnt = 0
7 tmr.alarm(3, 1000, 1, function()
8 if (wifi.sta.getip() == nil) and (cnt < 20) then
9 print("Trying Connect to Router, Waiting...")
10 cnt = cnt + 1
11 else
12 tmr.stop(3)
13 if (cnt < 20) then print("Config done, IP is "..wifi.sta.getip())
14 else print("Wifi setup time more than 20s, Please verify wifi.sta.config() function. Then re-download the file.")
15 end
16 cnt = nil;
17 collectgarbage();
18 end
19 end)
程序第1行打印字符信息。
第2行设置WiFi为STA模式。
第4行设置STA模式下,将要连接的无线路由器SSID和密码。
第5行是发起连接。
第6~19行是启动3号定时器,每隔1000毫秒检查一次连接,如果超过20秒钟没有连接上无线路由器,则提示连接失败。如果在20秒内连接成功,则停止3号定时器,打印IP地址。
执行程序的Log如下:
1 NodeMCU 0.9.6 build 20150406 powered by Lua 5.1.4
2
3
4 ESP8266 Started
5 Compile File:sta.lua
6 Remove File:sta.lua
7 Ready to Set up wifi mode
8 > Trying Connect to Router, Waiting...
9 Trying Connect to Router, Waiting...
10 Config done, IP is 192.168.1.100
可以看到NodeMCU获取到IP地址为“192.168.1.100”。
资料包中文件名为“apsta.lua”。
将“init.lua”文件中“fileName.lua”修改为“apsta.lua”,“fileName.lc”修改为“apsta.lc”。修改完成后下载。
程序代码:
1 print("Ready to start soft ap AND station")
2 local str=wifi.ap.getmac();
3 local ssidTemp=string.format("%s%s%s",string.sub(str,10,11),string.sub(str,13,14),string.sub(str,16,17));
4 wifi.setmode(wifi.STATIONAP)
5
6 local cfg={}
7 cfg.ssid="ESP8266_"..ssidTemp;
8 cfg.pwd="12345678"
9 wifi.ap.config(cfg)
10 cfg={}
11 cfg.ip="192.168.2.1";
12 cfg.netmask="255.255.255.0";
13 cfg.gateway="192.168.2.1";
14 wifi.ap.setip(cfg);
15
16 wifi.sta.config("MERCURY_1013","123456789")
17 wifi.sta.connect()
18
19 local cnt = 0
20 gpio.mode(0,gpio.OUTPUT);
21 tmr.alarm(0, 1000, 1, function()
22 if (wifi.sta.getip() == nil) and (cnt < 20) then
23 print("Trying Connect to Router, Waiting...")
24 cnt = cnt + 1
25 if cnt%2==1 then gpio.write(0,gpio.LOW);
26 else gpio.write(0,gpio.HIGH); end
27 else
28 tmr.stop(0);
29 print("Soft AP started")
30 print("Heep:(bytes)"..node.heap());
31 print("MAC:"..wifi.ap.getmac().."\r\nIP:"..wifi.ap.getip());
32 if (cnt < 20) then print("Conected to Router\r\nMAC:"..wifi.sta.getmac().."\r\nIP:"..wifi.sta.getip())
33 else print("Conected to Router Timeout")
34 End
35 gpio.write(0,gpio.LOW);
36 cnt = nil;cfg=nil;str=nil;ssidTemp=nil;
37 collectgarbage()
38 end
39 end)
程序第1行打印字符信息。
第2~14行设置AP;第16~17行设置STA参数。
第19~39行是设置定时器0,每隔1秒钟检查一次模块是否连接到无线路由器。
第20行设置D0即GPIO16为输出模式,改端口连接到NodeMCU的LED灯,通过第25~26行代码指示模块WiFi连接情况。
执行程序的Log如下:
1 NodeMCU 0.9.6 build 20150406 powered by Lua 5.1.4
2
3
4 ESP8266 Started
5 Compile File:apsta.lua
6 Remove File:apsta.lua
7 Ready to start soft ap AND station
8 > Trying Connect to Router, Waiting...
9 Trying Connect to Router, Waiting...
10 Trying Connect to Router, Waiting...
11 Soft AP started
12 Heep:(bytes)16192
13 MAC:1A-FE-34-A1-14-A7
14 IP:192.168.2.1
15 Conected to Router
16 MAC:18-FE-34-A1-14-A7
17 IP:192.168.1.100