NodeMCU之旅(二):断线自动重连,闪烁连接状态
事件监听器
NodeMCU采用了事件响应的方式。也就是说,只需为事件设置一个回调函数,当事件发生时,回调函数就会被调用。
注册事件监听器
wif.sta.eventMonReg()
通过监听器获知wifi连接状态
-- init.lua
print('Setting up WIFI...')
wifi.setmode(wifi.STATION)
wifi.sta.config('MY_SSID', 'MY_PASSWORD')
wifi.sta.connect()
status = nil
wifi.sta.eventMonReg(wifi.STA_GOTIP, function()
status = 'STA_GOTIP'
print(status, wifi.sta.getip())
end)
wifi.sta.eventMonStart(1000)
wifi.sta.eventMonStart(1000)函数表明检测网络状态的间隔是一秒。
不止如此,常用的监听器还有:
wifi.sta.eventMonReg(wifi.STA_WRONGPWD, function()
status = 'STA_WRONGPWD'
print(status)
end)
wifi.sta.eventMonReg(wifi.STA_APNOTFOUND, function()
status = 'STA_APNOTFOUND'
print(status)
end)
wifi.sta.eventMonReg(wifi.STA_CONNECTING, function(previous_State)
status = 'STA_CONNECTING'
print(status)
end)
断线自动重连
有时因为路由器重启等原因,NodeMCU可能会掉线,好在NodeMCU可以设置自动连接:
替换上节代码中的wifi.sta.connect()为
wifi.sta.autoconnect(1)
这样,当配置的wifi有效时,NodeMCU便能自动连入。
控制LED闪烁
在NodeMCU上有一个LED可用。可以用它来显示当前的连接状态。经测试,控制该LED的引脚为D4。
这是一个控制LED以特定延迟序列闪烁的函数。
IO_BLINK = 4
TMR_BLINK = 5
gpio.mode(IO_LED_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)
function blinking(param)
if type(param) == 'table' then
blink = param
blink.i = 0
tmr.interval(TMR_BLINK, 1)
running, _ = tmr.state(TMR_BLINK)
if running ~= true then
tmr.start(TMR_BLINK)
end
else
tmr.stop(TMR_BLINK)
gpio.write(IO_BLINK, param or gpio.LOW)
end
end
blinking()函数需要传入一个数组,数组元素依次表示LED亮灭的延迟。例子:
blinking({300, 300}) -- 循环闪烁:亮300ms,灭300ms
blinking({100, 100 , 100, 500}) -- 循环闪烁:亮100ms,灭100ms,亮100ms,灭500ms
blinking() -- 常亮
blinking(gpio.LOW) -- 常亮
blinking(gpio.HIGH) -- 常灭
闪烁显示连接状态
现在就可以结合监听器用LED显示连接状态了。
在上一节的监听器事件里,各添加一行闪烁的即可。
wifi.sta.eventMonReg(wifi.STA_WRONGPWD, function()
blinking({100, 100 , 100, 500})
status = 'STA_WRONGPWD'
print(status)
end)
wifi.sta.eventMonReg(wifi.STA_APNOTFOUND, function()
blinking({2000, 2000})
status = 'STA_APNOTFOUND'
print(status)
end)
wifi.sta.eventMonReg(wifi.STA_CONNECTING, function(previous_State)
blinking({300, 300})
status = 'STA_CONNECTING'
print(status)
end)
wifi.sta.eventMonReg(wifi.STA_GOTIP, function()
blinking()
status = 'STA_GOTIP'
print(status, wifi.sta.getip())
end)
相关资源
你可以在NodeMCU-Tutorial下载到本文的相关资源和代码。
NodeMCU之旅(二):断线自动重连,闪烁连接状态的更多相关文章
- NodeMCU入门(3):断线自动重连,指示灯显示连接状态
准备工作 1.NodeMCU模块 2.ESPlorer v0.2.0-rc6 事件监听器 NodeMCU采用了事件响应的方式.也就是说,只需为事件设置一个回调函数,当事件发生时,回调函数就会被调用. ...
- 【树莓派】树莓派下WiFi断线自动重连
实现 WiFi 断线自动重连.原理是用 Python 监测网络是否断线,如果断线则重启网络服务. 1.Python 代码 autowifi.py,放在 /home/pi 目录下: #!/usr/bin ...
- golang监听rabbitmq消息队列任务断线自动重连接
需求背景: goalng常驻内存任务脚本监听rbmq执行任务 任务脚本由supervisor来管理 当rabbitmq长时间断开连接会出现如下图 进程处于fatal状态 假如因为不可抗拒因素,rabb ...
- NodeMCU之旅(四):实现Web配置页面
引言 利用Web页面做配置可以轻松适应用户的多种设备,如Android, IOS等.本文将介绍如何在NodeMCU中实现配置页面. 接线图请参考NodeMCU之旅(三):响应配置按钮. 配置页面后端 ...
- 如何解决testng执行用例失败自动重跑问题
注: 以下内容引自 http://blog.csdn.net/MenofGod/article/details/72846649 看过几个相关问题的帖子,内容类似,不过这篇解决问题的步骤和代码比较清晰 ...
- 纯代码实现WordPress上传图片自动重命名的方法
在我们使用 WordPress 发布文章时,经常都需要添加图片.多媒体什么的.然而,大家都知道 WordPress 是舶来物,对于中文用户来说,我们都会把图片命名为中文的,由于 WordPress 机 ...
- Python爬虫实战三之实现山东大学无线网络掉线自动重连
综述 最近山大软件园校区QLSC_STU无线网掉线掉的厉害,连上之后平均十分钟左右掉线一次,很是让人心烦,还能不能愉快地上自习了?能忍吗?反正我是不能忍了,嗯,自己动手,丰衣足食!写个程序解决掉它! ...
- Netty 自动重连
from: http://www.dozer.cc/2015/05/netty-auto-reconnect.html 自动重连 用 Netty 写 Client 和 Server 的时候必须要去处理 ...
- 如何实现Azure虚拟网络中点到站VPN的自动重连
在Windows Azure早期版本中,用户要在某台Azure平台之外的机器与Azure平台内部的机器建立专用连接,可以借助Azure Connect这个功能.当前的Azure版本,已经没有Az ...
随机推荐
- copy ,abs,includes 3个函数
copy: Copy函数原型:标头: <algorithm> OutputIterator copy( InputIterator begin, InputIterator end, o ...
- 请问如何在PS中将一张图标里的各个小图标分离成一个个图标?
1.用切片工具比较简单快捷,把要切的图标一个个的切画出来,切好后存储保存格式为web,导出时候会出现一个images文件里面就是刚切好的图片 2.用裁剪的方式裁剪你要小图标,(你可以记住第一个裁剪的长 ...
- Android音频系统之AudioFlinger(一)
1.1 AudioFlinger 在上面的框架图中,我们可以看到AudioFlinger(下面简称AF)是整个音频系统的核心与难点.作为Android系统中的音频中枢,它同时也是一个系统服务,启到承上 ...
- Ubuntu iptables 设置
在ubuntu中由于不存在 /etc/init.d/iptales文件,所以无法使用service等命令来启动iptables,需要用modprobe命令. 启动iptables modprobe i ...
- [iOS]C语言技术视频-08-结构体的定义
下载地址: 链接: http://pan.baidu.com/s/1dlEFW 密码: 9e5u
- SpringMVC接收页面表单参数-java-电脑编程网
body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...
- Java出现“Error configuring application listener of class...”类似的错误解决
错误如下: Error configuring application listener of class com.jsoft.jblog.listener.SessionListener java. ...
- 求最长连续公共子序列 POJ 3080
Description The Genographic Project is a research partnership between IBM and The National Geographi ...
- awk命令详解二
awk命令详解 简单使用: awk :对于文件中一行行的独处来执行操作 . awk -F :'{print $1,$4}' :使用‘:’来分割这一行,把这一行的第一第四个域打印出来 . 详细介绍: ...
- android测试之——Instrumentation(一)
以下是本人原创,如若转载和使用请注明转载地址.本博客信息切勿用于商业,可以个人使用,若喜欢我的博客,请关注我,谢谢!博客地址 感谢您支持我的博客,我的动力是您的支持和关注!如若转载和使用请注明转载地址 ...