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 ...
随机推荐
- sql server 2008 把远程的数据库的数据转移到本地数据数据库里
如题:把远程的数据库对应表里的数据转移到本地数据数据库的对应表里 比如把192.168.188.160的DB的A表的数据转移到本地的DB的A表里 第一步:连接远程服务器前准备 exec sp_addl ...
- 深入浅出Ajax(二)
<script type="text/javascript"> window.onload = initPage; function initPage() { var ...
- MyBatis部分细节归档
1. xml中如果要使用到特殊的字符,比如> 或者< 等,使用 <![CDATA[<]> 进行包裹,避免解析XML的时候出错. 2. 后续还有内容,待总结.
- jQuery之call()方法的使用
最近在做项目时候,写了几行关于DOM操作的代码,在方法中使用了this,在后期重构的时候,想将这段分离出来做成一个方法. 最开始想的很简单,就直接分离出来使用方法名称调用即可. 但是实际操作的时候没有 ...
- Nginx配置文件常用部分详解
原文 #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_processes ; #全局错误日志定义类型,[ debug ...
- dom元素循环绑定事件的技巧
以前总觉得自己写的代码不太规范,尤其是写原生的时候.举个例子: 要为页面上所有".a"的元素绑定事件,当然了用jquery很方便:$('.a').bind("click& ...
- 数据同步方案(附Java源码)
一.问题背景经常碰到要同步数据的情况,而系统自带的复制功能又不能实现增量同步,每次都要做全量复制,发生异常情况后只能重头再来,非常麻烦,优其是对那种大文件的处理,更是耗时.二.解決方案1.计算源目录数 ...
- ASP.NET MVC3中的路由系统(Routes) .
MVC中,用户访问的地址并不映射到服务器中对应的文件,而是映射到对应Control里对应的ActionMethod,由ActionMethod来决定返回用户什么样的信息.而把用户访问的地址对应到对应的 ...
- JAVA基础-- 对象转型 (casting)
1. 一个基类的引用类型变量可以指向其子类的对象: a=new Dog("bigyellow","yellow"); 2. 一个基类的引用不可以访问其子类对象新 ...
- 引用dll文件要复制到本地
引用dll文件要复制到本地,以便发给他人用时缺失dll文件出错.