lua开发8266API手册:https://nodemcu.readthedocs.io/en/master/
站在应用层写程序就是方便
一. 读取 DHT11数据 使用 lua 只需要一个函数 当时使用stm32读DHT11数据时一个时序问题搞了半天....时钟没弄好/xk
ESP8266之lua操作dht11 ---> status, temp, humi, temp_dec, humi_dec = dht.read11(5) 该函数返回5个数据包含状态位,温度整数位, 湿度整数位, 温度小数位 , 湿度小数位 -------至于读出来的数据怎么使用那是用户的事
但是有个问题 读取数据时经常返回错误状态 ,但是数据还是正常的.......
在程序和打印的数据一会体现出来....
init.lua文件: 这次在这个文件中加载两个文件
gpio.mode(4,gpio.OUTPUT)
gpio.write(4,1)--关闭模块自动的蓝色LED 一会pwm控制时观察这个LED
tmr.alarm(1, 3000, 0, function()
dofile("dht11.lua")
dofile("pwm.lua")
end)
dht11.lua文件: 通过定时器循环读取模块数据并通过串口打印数据
dht11Pin = 5 --定义dht11数据引脚 索引号5 对应GPIO 14
--定时器3 每2s循环读取一次DHT11数据
tmr.alarm(3,2000,1,function()
status, temp, humi, temp_dec, humi_dec = dht.read11(dht11Pin) -- 一句话读取dht11数据
if status == dht.OK then --根据返回的状态
print("DHT OK")
print(string.format("DHT Temperature:%d.%03d;Humidity:%d.%03d\r\n",
math.floor(temp), temp_dec, math.floor(humi), humi_dec))
elseif status == dht.ERROR_CHECKSUM then
print( "DHT Checksum error." )
print(string.format("DHT Temperature:%d.%03d;Humidity:%d.%03d\r\n",
math.floor(temp), temp_dec, math.floor(humi), humi_dec))
elseif status == dht.ERROR_TIMEOUT then
print( "DHT timed out." )
print(string.format("DHT Temperature:%d.%03d;Humidity:%d.%03d\r\n",
math.floor(temp), temp_dec, math.floor(humi), humi_dec))
--通过print组合数据并通过串口打印
end
end)
通过串口打印的数据
二. PWM 也是比较灵活的只要关联号GPIO_Pin 就可以启动PWM了
pwm.lua文件:
PwmValue = 1023 --设置pwm初始值 重置pwm用
pwm.setup(4, 100, 1023) --设置pwm输出引脚 索引号4 GPIO2 ,频率为100 ,初始值范围0~1023
--通过定时器 每10ms循环进入一次回调函数
--回调函数就是不停改变PwmValue 然后通过函数pwm.setduty() 重置占空比
--开始想5ms中断一次但是会重启
tmr.alarm(4,10,1,function()
PwmValue = PwmValue-1
if PwmValue==0 then PwmValue = 1023 end
pwm.setduty(4,PwmValue)
end)
pwm.start(4) --启动pwm输出
把这三个.lua文件上传到木块内 就可以观察 模块上的蓝LED 渐变状态 通过串口观看dht11数据.......