关于nodemcu的点点滴滴
继续上一节的内容
step2
lua是脚本语言,我们可以把每一条语言存储到.lua文件中,然后用dofile()一起执行。
- 把我们上一节的代码输入到ESplore的左侧空白窗口(如果窗口已经有代码了,就选择file/New新建空白文档),代码为:
list = {1, 2, "You want"};
record = {a=1, b=2, d = " high a big news!"};
list[4] = " high a big news!";
record.c = "You want";
print(list[3]..list[4]);
print(record.c..record["d"]);
- 选择file-save to disk, 存为bignews.lua,如下图
- ESPlor会自动上传.lua文件,逐行读取代码,并执行,最后给出回显。
-
你也可以手动执行文件,在右侧下方命令行输入并回车:
dofile("bignews.lua")
在命令行中使用dofile(),可以执行已上传的.lua文件,
- 同样我们也可以在.lua文件中调用dofile()。
- 这一点非常有用,通常用在初始化文件init.lua中
step3
这一部分,我们了解一下lua的文件系统操作
- 在右下方命令行输入一下代码,得到nodemcu的信息:
majorVer, minorVer, devVer, chipid, flashid, flashsize, flashmode, flashspeed = node.info();
print("NodeMCU "..majorVer.."."..minorVer.."."..devVer)
-
在命令行输入一下代码,得到文件系统中保存的文件信息。
l = file.list();
for k,v in pairs(l) do
print("name:"..k..", size:"..v)
end
在Lua的文件系统中,init.lua为初始化文件。当nodemcu上点或重启,就自动执行。
- #### 在init.lua 文件中加入dofile()命令,就可以自动执行已经上传的.lua文件。
step4
- 在原init.lua文件最后,增加dofile()命令,代码如下所示,点击esplore最下方一行的save to ESP,如下图所示:
lighton=0
pin=4
gpio.mode(pin,gpio.OUTPUT)
tmr.alarm(1,5000,1,function()
if lighton==0 then
lighton=1
gpio.write(pin,gpio.HIGH)
else
lighton=0
gpio.write(pin,gpio.LOW)
end
end)
dofile("connect.lua")
-
你还要上传文件conncet.lua,代码如下:
SSID = "NETGEAR56"
password = "greenjungle5"
print(wifi.sta.getip())
--nil
wifi.setmode(wifi.STATION)
wifi.sta.config(SSID,password)
wifi.sta.connect()
tmr.alarm(1, 1000, 1, function()
if wifi.sta.getip() == nil then
print("Connecting...")
else
tmr.stop(1)
print("Connected, IP is "..wifi.sta.getip())
end
end)
uart.setup(0,9600,8,0,1,0)
sv=net.createServer(net.TCP, 2880)
print("creat server")
global_c = nil
sv:listen(8080, function(c)
if global_c~=nil then
global_c:close()
end
global_c=c
c:on("receive",function(sck,pl) uart.write(0,pl) end)
end)
uart.on("data",4, function(data)
if global_c~=nil then
global_c:send(data)
end
end, 0) conncet.lua 代码的前两行, SSID和password为路由器的账号和密码。
- init.lua和conncet.luay已经上传文件系统;nodemcu重新上电,或者重启(即按nodemcu板上的RST按键)。nodemcu将自动执行init.lua,自动连接路由,返回
nodemcu的IP
地址,并创建服务器。 - 打开USR-TCP232-Test.exe,在界面窗口右上角,server IP输入刚才返回的
nodemcu的IP
(注意是你自己的nodemcuIP,不是图中所示的),如下图设置,点击connect
然后就可以通过USR-TCP232-Test.exe右侧下方的窗口,向nodemcu发送消息,如下图
同样,你也可以通过Esplore右侧下方的命令行,向USR-TCP232-Test发送消息,如下图
这里,也许你发现了不对劲的地方,
- 你的.lua文件没法上传执行了,
- 可能你的串口命令行也用不了。
这是因为,
- uart口一直被conect程序占用,没法向flash上传,
- 因为uart被占用,也没法用串口输入命令。
如果你需要更新.lua文件,你能做的可能之有
- ### 重新烧写固件
step5
这一部分介绍一下如何快速烧写硬件
- 首先你要下载nodemcu的一键烧写程序,点击这里
- 在文件夹中nodemcu-flasher-master\Win64\Release
打开exe程序,如果是32位windows,请选择Win32文件夹下的文件
- 打开后,界面自动识别nodemcu的连接串口,更新最新版的modemcu固件,只需点击flash
系统将自动烧写固件,下方显示二维码和进度条,如下图所示:
进度条满格后,下载成功,就可以重新上传.lua文件了。
到这里,恭喜你已经完成了一个完整的开发流程,包括:
- 运行IDE ESPlorer
- 运行lua命令行
- 运行 .lua文件
- 烧写(为了上传新的程序)
所以,为了避免反复刷固件,在init.lua中dofile()命令通常用--
注释。调试时在命令行中使用dofile(),调试无误后再取消注释
最后,我们做个好玩的东西,用网络客户端远程控制nodemcu的LED或者GPIO端口,甚至更新.lua文件,做你任何想做的事情
我们需要用到node.input,它可以将接收到的字符串送到lua解释器进行执行,你完全可以用它对nodemcu进行云端控制和云端升级
STEP 6
我们把之前的代码做点少量的修改
- 新建conncet_wifi.lua
,代码如下,点击Save to Esp
SSID = "Your SSID"
password = "Your password"
print(wifi.sta.getip())
--nil
wifi.setmode(wifi.STATION)
wifi.sta.config(SSID,password)
wifi.sta.connect()
tmr.alarm(1, 1000, 1, function()
if wifi.sta.getip() == nil then
print("Connecting...")
else
tmr.stop(1)
print("Connected, IP is "..wifi.sta.getip())
end
end)
-
新建
client_command.lua
, 代码如下,点击Save to Espuart.setup(0,9600,8,0,1,0)
sv=net.createServer(net.TCP, 2880)
print("creat server")
global_c = nil
sv:listen(8080, function(c)
if global_c~=nil then
global_c:close()
end
global_c=c
c:on("receive",function(sck,pl) node.input(pl) end)
end) -
新建
init.lua
,代码如下,点击Save to Esplighton=0
pin=4
gpio.mode(pin,gpio.OUTPUT)
tmr.alarm(1,5000,1,function()
if lighton==0 then
lighton=1
gpio.write(pin,gpio.HIGH)
else
lighton=0
gpio.write(pin,gpio.LOW)
end
end)
dofile("connect.wifi")
dofile("client_command.lua") 可以在串口发送窗口上练习一下mode模块和file模块指令的操作,但是不要删除上述三个文件
- 如果没有收到IP地址,可以在命令行中手动执行dofile(“connect_wifi.lua”)
- 关闭串口连接,拔下usb线,找一个5V手机充电器,连到nodemcu的usb线上,给nodemcu上电
- 上电后,nodemcu自动执行init.lua程序,蓝色LED以10秒为周期闪烁;
- 保险起见,按一下板子上的RST按键
- 打开USR-TCP232-Test.exe 完全按step4的步骤操作,连接客户端
- 当LED亮时,在USR-TCP232-Test输入gpio.write(pin,gpio.HIGH)并发送。如果发送成功,LED立刻熄灭,否则LED持续点亮5秒
- 当LED亮时,在USR-TCP232-Test输入gpio.write(pin,gpio.LOW)并发送。如果发送成功,LED立刻点亮,否者LED持续熄灭5秒
- 此外,通过USR-TCP232-Test命令行,也可以执行dofile(),node.restart()等命令;控制其它GPIO等硬件外设;上传或删除.lua文件