最近从某宝到手了一款性价比很高的物联网开以板NodeMCU,现将使用和调试过程写成日志,以方便大家。
首先是GPIO引脚定义:
到手实物是这个样子的:
刚到手时,出广固件是安信可的AT指令固件,当然,这并不是我想要的。
接下来,就是更新我想要支持Lua语言的NodeMCU固件。
第一步,构建固件,有兴趣的朋友可以自己从官方Github下载源文件,自己根据需求构建,笔者为图方便,是使用的在线构建固件的网站构建的,网址如下NodeMCU custom builds。
笔者构建的固件包含adc, file, gpio, http, net, node, pwm, tmr, uart, wifi模块,如果想使用相同固件,可下载:
nodemcu-master-10-modules-2016-09-21-05-51-13-float.bin
nodemcu-master-10-modules-2016-09-21-05-51-13-integer.bin
两个固件功能是一样,可根据喜好自行选择。
第二步,下载固件刷写工具NodeMCU-flasher,可从官方Github下载Release版本。
运行Flasher,在Config选项如下选择已下载的固件:
然后回到Operation下,点击Flash(F),等待进度条完成即可:
到此,你已经完成了固件的更新,此时,NodeMCU可以启动,但并不能正常运行,因为,NodeMCU在启动时,会主动去寻找一个名为“init.lua"的文件,此时并不存在,所以会出错。
为了使固件能正常运行,我们需要上传代码到模块上。官方文档提到了多种上传工具,笔者使用的是Esplorer。
注意:该工具是用JAVA代码写的,要正常使用,还需要配置JAVA环境,具体操作自行百度,这里不再描述。
下载解压,在JAVA环境下,运行ESPlorer.jar,如下:
选好COM端口和比特率,然后点击RST按下,再点击一次松开,
在这个图上可以清楚的看到,缺少"init.lua"文件。
接下来我们编辑好init.lua文件,上传到模块。
官方提供的代码:
-- load credentials, 'SSID' and 'PASSWORD' declared and initialize in there -- dofile("credentials.lua") function startup() if file.open("init.lua") == nil then print("init.lua deleted or renamed") else print("Running") file.close("init.lua") -- the actual application is stored in 'application.lua' -- dofile("application.lua") end end print("Connecting to WiFi access point...") wifi.setmode(wifi.STATION) wifi.sta.config(SSID, PASSWORD) -- wifi.sta.connect() not necessary because config() uses auto-connect=true by default tmr.alarm(1, 1000, 1, function() if wifi.sta.getip() == nil then print("Waiting for IP address...") else tmr.stop(1) print("WiFi connection established, IP address: " .. wifi.sta.getip()) print("You have 3 seconds to abort") -- 特别注意 print("Waiting...") tmr.alarm(0, 3000, 0, startup) end end)
特别注意:
官方文档中已经说明,为防止模块启动后进入死循环,上面代码有一行是延时3S,否则一但开机开往死循环,后果很严重,你将无法停下程序,也无法上传程序。
复制上面代码,把SSID和PASSWORD修改好,然后保存为init.lua,注意要写全名,该软件不支持自动后缀,再然后就可以上传了。
点击Upload,选择init.lua文件,打开,就可以上传了。
了解更多内容,可以查阅NodeMCU官方文档: