TA的每日心情 | 无聊 2021-7-15 17:25 |
---|
签到天数: 21 天 连续签到: 1 天 [LV.4]偶尔看看III
|
在这篇经验里会提到NodeMCU的使用方法。
上一节试用忘记放资料地址了,这里放一下:https://pan.baidu.com/s/1bpFWOFX
NodeMCU使用LUA进行编程,提供命令行交互式的运行命令,也提供flash中文件的运行方式,NodeMCU会上电默认运行init.lua文件,所以可以在init.lua文件内编写初始化程序,在执行完初始化之后,可以使用dofile(“”)来执行其他的脚本。
首先介绍命令行交互模式,我使用LuaLoader这款软件来进行编程,他的界面是贼个样子的:
软件的使用时比较简单的,只要用串口连接到小板,然后再这里配置好端口和波特率即可:
下面是我的配置:
然后就可以使用了,软件右侧提供了一些快捷键,大多数是好用的,如果想知道完全的NodeMCU支持的函数可以到NodeMCU的github的wiki上面查看。
想把NodeMCU作为主控制器,就不能再使用命令行交互模式了,所以文件执行就很重要了,因为不能直接向esp8266的文件系统中写入文件,所以需要使用NodeMCU的命令行交互模式使用文件函数写入,为了方便,这里也使用LuaLoder的文件上传功能:
点击打开,即可。
下面实现一个NodeMCU编写的服务器,使用收件连接NodeMCU的热点后,访问服务器来控制继电器的程序:
首先需要编写init.lua文件,代码如下:
-- @Author: Nicot-- @Date: 2016-06-06 21:14:41-- @Last Modified by: Nicot-- @Last Modified time: 2016-10-07 23:12:44gpio.mode(0, gpio.OUTPUT);gpio.mode(5, gpio.OUTPUT);gpio.mode(6, gpio.OUTPUT);gpio.mode(7, gpio.OUTPUT);if(wifi.ap.getip() ~= nil) then local ip = wifi.ap.getip() print("*#IP:"..ip..",s:wificonf,pwd:123456789".."#*") dofile("server.lua") returnendwifi.setmode(wifi.SOFTAP);local cfg={}cfg.ssid="wificonf"cfg.pwd="123456789"wifi.ap.config(cfg)if(wifi.ap.getip() ~= nil) then local ip = wifi.ap.getip() print("*#IP:"..ip..",s:wificonf,pwd:123456789".."#*") dofile("server.lua") returnend
然后是服务器的程序:
-- @Author: Nicot-- @Date: 2016-06-07 00:05:58-- @Last Modified by: Nicot-- @Last Modified time: 2016-10-07 23:13:37sv=net.createServer(net.TCP,30)print("*#SERVER:OK#*")sv:listen(80,function(c) cn("receive",function(c, pl) if pl:find("favicon") then c:close(); return end if pl:find("JDQ") then local setInfoStart = string.find(pl,"JDQ",1) local setInfoEnd = string.find(pl,"HTTP/1.1",1) local setInfo = string.sub(pl,setInfoStart + 4,setInfoEnd - 2) print("*#INFO:"..setInfo.."#*") local map = {0,5,6,7}; for k,v in pairs({'Ja','Jb','Jc','Jd'}) do local start = string.find(setInfo,v,1); print(v.." : "..string.sub(setInfo,start + 3,start + 3)); start = string.sub(setInfo,start + 3,start + 3); if(start == "0") then gpio.write(map[k], gpio.LOW); else gpio.write(map[k], gpio.HIGH); end end return else file.open("index.html") local html = "" local temp = "" temp = file.readline() while(temp ~= nil) do html = html..temp temp = file.readline() end c:send(html) file.close() return end end)end)最后是index网页的程序:<!DOCTYPE html><html lang="en"> <head> <meta charset="utf-8"> <title>继电器控制台</title> </head> <body> <h1>欢迎使用继电器控制台</h1> <form action="/JDQ" method="get" accept-charset="utf-8"> <p>一号继电器: <select name="Ja"> <option value="0">OFF</option> <option value="1">ON</option> </select> </p> <p>二号继电器: <select name="Jb"> <option value="0">OFF</option> <option value="1">ON</option> </select> </p> <p>三号继电器: <select name="Jc"> <option value="0">OFF</option> <option value="1">ON</option> </select> </p> <p>四号继电器: <select name="Jd"> <option value="0">OFF</option> <option value="1">ON</option> </select> </p> <input type="Submit" value="Submit"> </form> </body></html>下面是运行的状态图,包括控制网页和lualoder的串口打印数据:
下面是程序和lualoder的连接:https://pan.baidu.com/s/1c2btqUk |
|