NodeMCU实现远程控制LED灯
NodeMCU是一块集成了ESP8266的单片机,它具有体积小,扩展性强的特点。在物联网应用领域将迸发出强大的能量。我们通过入门一个NodeMCU的程序来展示一下它的强大功能。
NodeMCU的WIFI模块有三种模式,AP模式(即路由器模式),STA模式(我的理解是无线网卡模式),AP+STA模式。我们下面要讲的一个案例是用STA模式。在该种模式下,你可以把NodeMCU当作一个无线网中的一个客户端,这个客户端连上一个无线热点,然后通过无线路由器的DHCP功能获取客户端IP地址,然后我们写上简单的一个Web Server服务器,主要是处理控制GPIO设备的响应。
我们直接进入LuaLoader程序调试工具。关于串口驱动与固件烧写,建议先去看NodeMCU入门教程,本文不再阐述。
一般拿到手的NodeMCU里面应该是空的,也有个别是存在init.lua文件,这个文件就相当于以前我们DOS系统里的autoexec.bat文件和linux系统中的rc.local文件,即开机运行的意思。
下面我们开始编写Lua程序,init.lua:
wifi.setmode(wifi.STATION) wifi.sta.config("YOUR_NETWORK_NAME","YOUR_NETWORK_PASSWORD") print(wifi.sta.getip()) led1 = 3 led2 = 4 gpio.mode(led1, gpio.OUTPUT) gpio.mode(led2, gpio.OUTPUT) srv=net.createServer(net.TCP) srv:listen(80,function(conn) conn:on("receive", function(client,request) local buf = ""; local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP"); if(method == nil)then _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP"); end local _GET = {} if (vars ~= nil)then for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do _GET[k] = v end end buf = buf.."<h1> ESP8266 Web Server</h1>"; buf = buf.."<p>GPIO0 <a href=\"?pin=ON1\"><button>ON</button></a> <a href=\"?pin=OFF1\"><button>OFF</button></a></p>"; buf = buf.."<p>GPIO2 <a href=\"?pin=ON2\"><button>ON</button></a> <a href=\"?pin=OFF2\"><button>OFF</button></a></p>"; local _on,_off = "","" if(_GET.pin == "ON1")then gpio.write(led1, gpio.HIGH); elseif(_GET.pin == "OFF1")then gpio.write(led1, gpio.LOW); elseif(_GET.pin == "ON2")then gpio.write(led2, gpio.HIGH); elseif(_GET.pin == "OFF2")then gpio.write(led2, gpio.LOW); end client:send(buf); client:close(); collectgarbage(); end) end)
我们将以上代码的第二行的YOUR_NETWORK_NAME与YOUR_NETWORK_PASSWORD分别替换成我们自己的无线热点的名称和密码,然后通过上面工具的Upload FIle...按钮来上传到NodeMcu板子,最后按dofile执行刚才上传的程序。
在信息框中会显示出接入之后取得的 IP地址,然后我们就可以通过这个IP地址来进行远程的LED灯控制。
这样我们已经通过一个简单的例子来演示如何远程控制物联网设备,也让大家见证了这个板子的强大功能,可以说是麻雀虽小,五脏俱全。可贵的是这块板子还只有40多元,大家可以发挥想象力来做一些更好的应用。
转载自:http://blog.csdn.net/dingzz/article/details/46876503