NodeMCU之旅(三):响应配置按钮
引言
在之前的代码中,要连接的WIFI信息都已写死在代码里,这显然不能适应我们的需求。所以需要想个办法让用户可以配置这些信息。
WIFI工作模式
NodeMCU支持STATION,SOFTAP,STATIONAP,NULLMODE四种模式。
设置WIFI模式
wifi.setmode()
wifi.STATION当设备需要连接到WIFI路由器时使用。常在访问Internet时使用。wifi.SOFTAP当设备需要作为热点时使用。在此模式下你的设备会创建一个本地局域网,并出现在WIFI列表。在默认情况下,NodeMCU在本地局域网地址为192.168.4.1,其他设备将被分配为下一个的可用IP,比如192.168.4.2。wifi.STATIONAP同时应用以上两者。在此模式下你可以在创建一个热点的同时连接到其他WIFI路由器。wifi.NULLMODE关闭WIFI。
所以可以添加一个按钮,当按钮按下时,转换模式为WIFI.STATIONAP,然后通过手机接入NodeMCU的热点,进入设置页面配置WIFI信息。就像配置路由器一样。
接线

绿色的LED就是未来被远程控制的那颗,正极连接D1。
黄色的LED用于显示当前的WIFI工作模式,正极连接D2。
白色的按钮连接D3。
负极连接GND。
接线完成后,定义这些引脚:
IO_LED = 1
IO_LED_AP = 2
IO_BTN_CFG = 3
gpio.mode(IO_LED, gpio.OUTPUT)
gpio.mode(IO_LED_AP, gpio.OUTPUT)
gpio.mode(IO_BTN_CFG, gpio.INT)
注意,IO_BTN_CFG被设置为了gpio.INT模式,也就是中断模式。
响应按钮
通过gpio.trig()设置响应中断的回调函数。
设置响应中断的回调函数
gpio.trig()
响应按钮抬起时的事件:
function onBtnEvent()
print('up~')
end
gpio.trig(IO_BTN_CFG, 'up', onBtnEvent)
上传代码。测试按下按钮,发现输出正常。
但存在一个问题:有时只按了一次,输出却不止一次。因为按钮的信号会有抖动。
这里提供一种去抖方法:
TMR_BTN = 6
function onBtnEvent()
gpio.trig(IO_BTN_CFG)
tmr.alarm(TMR_BTN, 500, tmr.ALARM_SINGLE, function()
gpio.trig(IO_BTN_CFG, 'up', onBtnEvent)
end)
print('up~')
end
gpio.trig(IO_BTN_CFG, 'up', onBtnEvent)
思路是,在首次触发之后,清除按钮的回调函数,在0.5秒后,恢复回调。
开始与结束配置
正如之前所讲,平常运行时WIFI模式为wifi.STATION,当按下按钮后,WIFI模式转为wifi.STATIONAP,再次按下后恢复wifi.STATION。
gpio.write(IO_LED_AP, gpio.LOW)
function switchCfg()
if wifi.getmode() == wifi.STATION then
wifi.setmode(wifi.STATIONAP)
gpio.write(IO_LED_AP, gpio.HIGH)
else
wifi.setmode(wifi.STATION)
gpio.write(IO_LED_AP, gpio.LOW)
end
end
注意,gpio.write(IO_LED_AP, gpio.LOW)在函数外部,目的是在NodeMCU开机时,重置AP信号灯为熄灭状态。
之后,修改上节按钮事件函数里的print('up~')为:
switchCfg()
这样就可以通过按钮来控制AP的开启关闭了。
配置热点信息
在print('Setting up WIFI...')后添加下行代码,来配置热点名为 'mymcu' ,安全性为开放。
wifi.ap.config({ ssid = 'mymcu', auth = AUTH_OPEN })
关于wifi.ap.config()的更多细节,请参阅:
配置热点信息
wifi.ap.config()
最后,删去之前写死在代码里的WIFI连接配置wifi.sta.config('MY_SSID', 'MY_PASSWORD')。
因为随后,我们将提供操作界面,让用户自己来设置它们。
相关资源
你可以在NodeMCU-Tutorial下载到本文的相关资源和代码。
NodeMCU之旅(三):响应配置按钮的更多相关文章
- NodeMCU之旅(四):实现Web配置页面
引言 利用Web页面做配置可以轻松适应用户的多种设备,如Android, IOS等.本文将介绍如何在NodeMCU中实现配置页面. 接线图请参考NodeMCU之旅(三):响应配置按钮. 配置页面后端 ...
- IIS下PHP的三种配置方式比较
在Windows IIS 6.0下配置PHP,通常有CGI.ISAPI和FastCGI三种配置方式,这三种模式都可以在IIS 6.0下成功运行,下面我就讲一下这三种方式配置的区别和性能上的差异. 1. ...
- NodeMCU之旅(二):断线自动重连,闪烁连接状态
事件监听器 NodeMCU采用了事件响应的方式.也就是说,只需为事件设置一个回调函数,当事件发生时,回调函数就会被调用. 注册事件监听器 wif.sta.eventMonReg() 开始监听 wifi ...
- EBS中启用OAF页面个性化三个配置
启用OAF页面个性化三个配置(Profiles) FND:诊断英文为FND: Diagnostics,用于设置是否显示“关于此页” 个性化自助定义英文为Personalize Self-Service ...
- c3p0三种配置方式(automaticTestTable)
c3p0的配置方式分为三种,分别是http://my.oschina.net/lyzg/blog/551331.setters一个个地设置各个配置项2.类路径下提供一个c3p0.properties文 ...
- Linux操作系统下三种配置环境变量的方法
现在使用linux的朋友越来越多了,在linux下做开发首先就是需要配置环境变量,下面以配置java环境变量为例介绍三种配置环境变量的方法. 1.修改/etc/profile文件 如果你的计算机仅仅作 ...
- AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(三):配置ActiveXForm运行环境
一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...
- struts2拦截器interceptor的三种配置方法
1.struts2拦截器interceptor的三种配置方法 方法1. 普通配置法 <struts> <package name="struts2" extend ...
- Linux操作系统下三种配置环境变量的方法——转载
来源:赛迪网 作者:millio 现在使用linux的朋友越来越多了,在linux下做开发首先就是需要配置环境变量,下面以配置java环境变量为例介绍三种配置环境变量的方法. 1.修改/e ...
随机推荐
- 转 oracle 开发 第03章 sqlplus
目录 1.查看表结构 desc 2.编辑SQL语句 append.list.change.run 3.保存.检索并运行文件 save.get.start.edit.spool 4.格式化列 colum ...
- 使用Metasploit入侵windows之自动扫描
最新版本的metasploit为4.0,可以通过官方网站(www.metasploit.com)直接下载,因为是开源的,所以免费. metasploit很好很强大,集成了700多种exploit,但是 ...
- Chapter 1 First Sight——5
"He's in a wheelchair now," Charlie continued when I didn't respond, 他现在在轮椅上了,没等我回答查理斯就继续说 ...
- 为什么说Neutron不是SDN?
http://vuejs.com.cn/ 这里面有个canvans 画图的js 代码.有意思,研究一下. Neutron 介绍:https://www.ibm.com/developerworks/c ...
- 彻底领悟javascript中的this
this是Javascript语言的一个关键字. 它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用.比如, function test() { this.x = 1; } 随着函数使用场合 ...
- Linux建立信任主机
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1.先在本机上面装一个sshpass 的安装包 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2.ssh-ke ...
- 苹果应用商店AppStore审核中文指南
目录 1. 条款与条件2. 功能3. 元数据.评级与排名4. 位置5. 推送通知6. 游戏中心7. 广告8. 商标与商业外观9. 媒体内容10. 用户界面11. 购买与货币12. 抓取与聚合13. 设 ...
- Ext实现简单计算器
以下是本人原创,如若转载和使用请注明转载地址.本博客信息切勿用于商业,可以个人使用,若喜欢我的博客,请关注我,谢谢!少帅的博客 使用Ext实现简单计算器,网页版实现 1.页面部分calculator. ...
- 单应性(homography)变换的推导
矩阵的一个重要作用是将空间中的点变换到另一个空间中.这个作用在国内的<线性代数>教学中基本没有介绍.要能形像地理解这一作用,比较直观的方法就是图像变换,图像变换的方法很多,单应性变换是其中 ...
- 《数据结构与算法分析:C语言描述》读书笔记------List的C语言实现
List的简单实现.在GCC下测试通过. list.h #ifndef _List_H /*List数据结构的简单实现*/ struct Node; typedef struct Node Node; ...