Esp8266 NodeMcu(Lua入门篇1) - 固件烧录,Lua脚本运行

先看一下板子实物图

ESP8266 NodeMcu实拍图1
ESP8266 NodeMcu实拍图2

以下操作均在Windows端实现
官方Api文档
https://nodemcu.readthedocs.io/en/master/

1.下载固件及烧录工具

#####固件下载地址(https://github.com/nodemcu/nodemcu-firmware)
#####固件烧录工具:
**1.NodeMcu官方固件烧写工具(好像只能在Windows烧录)https://github.com/nodemcu/nodemcu-flasher
2.基于Python的烧录工具(可以跨平台)https://github.com/espressif/esptool
3.安卓上的烧录工具(这方面的帖子很少)https://pan.baidu.com/s/1bHbNhrjuXLKAKXqeBNUfXA 提取码:wv1p

这里面附带的固件不是最新的,这里放上一个自己存的百度云,链接,
本帖子就全程用Windows进行烧录开发,后面会有Macos的烧录与开发。
下载Windows的烧录工具打开后的截图**
烧录工具截图
烧录工具截图
切换到第二张截图的位置填好自己下载的bin固件

2.烧录

传统安卓数据线直接插上电脑,然后直接就自动安装好驱动了,有的可能要手动安装ch340类的驱动,安好后打开电脑设备管理器展开端口栏目
设备管理器截图
知道是com4的端口就行了,最后直接点击Flash,板子上面自带的蓝色的灯会一闪一闪的,大概几十秒钟的烧录时间
烧录工具

3.IDE开发

俄罗斯大佬开发的ESP8266开发工具https://github.com/4refr0nt/ESPlorer需要安装Java环境,最好选择Java8,其它的可能会出错,以下是打开后的截图
IDE截图作为一篇入门教程,还是说仔细一点,我看那些入门教程,半天不说到底点哪,自己瞎点半天
IDE截图点击之后再按一下板子上面的RST键
RST键在这IDE截图发现IDE这里报错cannot open init.lua因为你上面还没有lua脚本,实际原理是固件内部会有lua脚本的执行,最后执行了dofile(init.lua),所以你的脚本名一定得是init.lua
所以咱们随便在哪创建一个init.lua用这个IDE打开
简单的点亮灯的代码

1
2
3
pin=4
gpio.mode(pin,gpio.OUTPUT)
gpio.write(pin,gpio.LOW)

写上后点击下图的位置
IDE截图此时板子上的灯常亮
每一行代码的意思是什么?

1
pin=4

定义一个变量pin的值为4,4对应的引脚是GPIO2
各个整型值与引脚的对应关系如下

对应关系
而板子自带的那个灯刚好是用的这个引脚

1
gpio.mode(pin,gpio.OUTPUT)

设置修改方式为OUTPUT,大致就是以后对这个引脚的操作是更改它的输出,还有gpio.OUTPUT, gpio.OPENDRAIN, gpio.INPUT,和gpio.INT,不过这些我也没有试过,详见官网文档

1
gpio.write(pin,gpio.LOW)

设置pin为4对应的GPIO为低电平,此时即为GPIO2,不过GPIO2低电平为啥是灯亮我也没琢磨透
最后贴一个呼吸灯lua轮子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
IO_BLINK = 0
TMR_BLINK = 5
gpio.mode(IO_BLINK, gpio.OUTPUT)

blink = nil
tmr.register(TMR_BLINK, 100, tmr.ALARM_AUTO, function()
gpio.write(IO_BLINK, blink.i % 2)
tmr.interval(TMR_BLINK, blink[blink.i + 1])
blink.i = (blink.i + 1) % #blink
end)
dutyMAX = 1000
dutyMIN = 0
flag = 0
pwm.setup(pin,100,dutyMAX)
pwm.start(pin)
function changeDuty()
local duty = pwm.getduty(pin)
if(flag == 0) then
if (duty > dutyMIN) then
pwm.setduty(pin,duty - 1)
else
flag = 1
end
else
if (duty < dutyMAX) then
pwm.setduty(pin,duty + 1)
else
flag = 0
end
end
end
tmr.alarm(0 , 1 , tmr.ALARM_AUTO , changeDuty)

原理是使用了PWM脉冲宽度调制技术,后面还会使用到这个,看一下效果
GIF

哪儿写得有问题多多指出!

作者

梦魇兽

发布于

2019-12-13

更新于

2023-03-11

许可协议

评论