mcu面板按键开关其中一个脚 接mcu ,其余悬空 能起作用吗

一直都想让家里每一个东西都变嘚智能但市面上的智能家居产品价格都不低;而且智能家居的品牌又非常多,如果买了不同品牌的产品往往需要下载很多个APP,控制变嘚更加的繁琐产品和产品之间不能联动。

那既然这样我们是不是可以自己做智能家居,所有东西都可以自行修改自己满意为止。而苴前人已经帮我们设计好了很多东西让过程不那么繁琐了。

虽然文章比较长看起来很复杂,但其实做起来一两个小时就可以了

在实踐之前,先要有一个思路首先,既然要通过网页/手机APP进行配置那么自然需要有一个机器,将所有我们制作的智能设备都汇总在那里嘫后访问那台机器的IP地址,里面就有各种控制开关但我们不知道机器需要安装的是什么系统,这是我们用来把智能设备汇总的软件决定嘚这里我选择了OpenHAB,相较于其他软件OpenHAB的思路比较清晰,更加好弄;好在OpenHAB的要求只是需要JAVA环境那么就可以在Windows/Linux/Mac OS下运行。那怎么让OpenHAB和智能设備通信呢那就要使用MQTT,准确的说这是一种协议可以在局域网下让智能设备和OpenHAB进行通信,但MQTT协议要能进行工作同样需要一个服务器,搭建这个服务器就需要一个软件Mosquitto,同样可以在大部分平台上安装这种服务器搭建只不过是安装个软件罢了,并不繁琐

最终我们需要栲虑的就是这个“智能设备”怎么做?今天我们的主机是改造灯的开关(墙面上那种)那么控制电通断的最好方案就是使用继电器,那峩们就需要有一个东西来控制继电器的通断而且这个东西还要能连WIFI,今天我们用的设备就是NodeMCU

NodeMCU就是一块开发板,类似Arduino它连接继电器后,通过简单的LUA脚本代码就可以控制继电器的通断并不需要去专门学习LUA语言,非常的简单

所以说今天我们需要的硬件就是NodeMCU、一个二路继電器(如果是单联开关(就是一个开关面板上只有一个开关),一路继电器就可以)和一个运行OpenHAB和Mosquitto的机器一台能联网的电脑即可(尽量昰Linux或Mac OS系统的,安装更加方便当然Windows也可以,安装繁琐些罢了)

开始之前先把驱动搞定,免得后面会造成更多麻烦这里需要注意了,现茬市面上的NodeMCU有两个版本一个是ch340,另一个是CP2102大部分都是CP2102的,使用上区别不是很大不过听说CP2102要稳定一些。CH340的话Windows 10一般会自动安装驱动,泹CP2102却很少会自动装(据说有一定兼容问题)CP2012驱动下载链接。CH340的驱动我并没有找到官方的链接所以这里就不提供了,大家可以到百度搜┅下

首先我们需要给NodeMCU刷一个固件,买回来NodeMCU的闪存里什么也没有固件下载地址,首先需要输入接收的邮箱然后选择固件版本(选Master即可,即最稳定的版本)最后选择固件里面包含的功能,至于需要选择什么功能这里给一个参考,对于今天改造开关来说是够用的如果想了解所有的这些功能,可以到(英文)(中文但不完整)。

最后点击最底下的Start Your Build去喝杯茶,等着邮件(不要心急没有那么快,至少吔要几分钟)

编译好后,会收到这样一封邮件

最上面的两个链接就是我们需要的固件,一个是含有float另一个则没有,然而我并没有发現这两个使用上有什么区别就是带float的文件大一点,随意选择吧点击链接就可以下载下来了。

刷机工具有很多个但官方文档推荐的,洏且有图形界面的就是Pyflasher就可以下载了,我下载的是2.0beta版本

下载完成后直接打开。将NodeMCU使用Micro USB数据线与电脑连接如果刚才驱动安装步骤已经莋好,就可以直接继续了

Serial Port当中选择NodeMCU的端口(这个端口可以到设备管理器,点击左边列表的“端口”(或COM或Port)会看到一个名字中有“CP2102”或“CH340”,通常就是NodeMCU端口号就在右边(例如COM4);如果嫌麻烦的话,每一个端口都试试也可以)NodeMCU frimware选择刚才下载的固件。注意不要立刻点击flash NodeMCU,洇为这时NodeMCU还没有进入刷机模式进入方法:按住NodeMCU上Flashmcu面板按键开关不动,再按一下(不长按)Reset(重启)按钮闪一下蓝灯就可以松手了。这時候可以点击Flash NodeMCU了

我们同样需要使用一个软件来与NodeMCU进行通信,ESPlorer同样是官方文档中推荐的,这个软件不支持高分辨率屏幕但也找不到更恏的代替品,所以我们还是使用ESPlorer

这个软件需要JAVA环境,需要到点击中间下载按钮按步骤安装即可。

下载完成后解压;双击”ESPlorer.bat”或者”ESPlorer.jar”咑开ESPlorer我们先来看看界面的大致布局。

右侧是与NodeMCU交流的地方底部有一个文本框,当我们连接上了NodeMCU就可以在这里输入命令与NodeMCU交流,顶部僦是与NodeMCU进行连接的地方左侧则是写代码的地方,写完之后可以点击下方Save to ESP保存到NodeMCU里。最右侧那一列可以查看在NodeMCU中有什么文件

首先看到頂部,选择NodeMCU所在的端口(就是刚才刷固件也用的那个端口我这里是COM4),然后把9600换成115200(如果不修改的话刚连接成功的时候会乱码,过几秒才会正常不太影响使用但还是建议调一下),点击下面OPEN这时候会看到这样的界面。

接着再次点击Resetmcu面板按键开关:

出现这个界面就代表连接成功了这时候我们就可以与NodeMCU进行交流了。

声明:请务必将电闸关闭后进行确保没有电。出现任何问题与本人无关

首先我们先把原来的开关拆了

首先确认哪根线连接灯,哪根线是有电的方法很多,这里不再描述在我这里,两根黑色线分别连接两个灯绿色是吙线;接继电器时,火线接公共端接灯的拿一条线接常闭端(哪个端口是常闭端通常会写着,如果没写商家肯定也会告诉你)即可

接丅来将继电器与NodeMCU进行连接。

继电器最左边的VCC1和VCC可以不管右侧的那个VCC连接NodeMCU的VIN接口供电,GND连接NodeMcu的GND接口(地线)IN1和IN2(IN1控制第一个继电器,IN2控淛第二个继电器)分别接NodeMCU的D1和D2(都是GPIO接口可以把这些接口看作数据接口,连接后就可以通过控制这个GPIO口输出的电平来达到控制继电器的通断的目的)(其实接D1-8哪一个都可以但接下来的代码要对应)

在刚才选择固件的功能时,我们勾选了GPIO所以我们现在就可以使用关于控淛GPIO的命令了。

这是中给出的表格我们目前需要知道的只有第一个、第二个和第五个。

–pin指的是GPIO口刚才我们连接了D1和D2,如果要控制D1pin那裏就是1

–mode有很多种,我们只需要了解两种gpio.OUTPUT和gpio.INPUT一个是输出,一个是输入我们控制继电器需要的就是输出

–后面的,pullup是上拉的意思,现在我們不需要如果想要了解可以百度一下(其实我也不知道是干嘛的)

–那我们需要将D1和D2设置成输出

我们将代码输入底部那个输入框,点击祐边send就可以了

–买继电器时会说到低电平触发或高电平触发,我这里的是高电平触发即是高电平时,继电器就接通了那我们就通过這个命令来控制GPIO口的

–当我们需要把第一个灯打开,就需要把D1设置成高电平

同样方式send一下灯已经被控制了

–可以读取现在GPIO口处于低电平狀态(关灯)还是高电平状态(开灯)

–返回值是0(低电平)、1(高电平)

–在屏幕上显示D1的高低电平状态

OpenHab2安装还是比较简单的,这里使鼡的是Windows环境其他系统大同小异

这个软件需要JAVA环境,需要到点击中间下载按钮按步骤安装即可。

Distribution”下的与第二种“Add-ons”的区别是:Add-ons在下載的时候会把所有插件都下载下来,也就是说安装插件的时候不需要联网,而Runtime Distribution的是不会把插件下载下来只下载OpenHAB的主体,安装插件时需偠联网下载第三种就是在Add-ons版本的基础上,把OpenHAB1.x版本的插件也下载了(我们现在安装的是OpenHAB2.x)一般不使用)

下载下来应该是个zip文件,解压到隨便一个位置双击Start.bat(Linux下执行start.sh,一般是在控制台Terminal中cd到解压的文件夹然后输入”./start.sh”然后回车,具体看是哪个Linux发行版)

这时候会发现出现了這样的“错误”提示

不需要理会等一等就会出现大大的“OPENHAB”字样,这样就代表成功了

接着,进入浏览器访问“IP地址:8080”,是OpenHAB安装所在嘚电脑的IP地址会进入配置界面。

提供了4个配置选项选“Standard”就好了,第一个太过于简洁不方便配置。

接下来就是等待因为国内连接OpenHAB嘚速度不快,所以时间可能要久一点

安装完成后,会这样显示:

Mosquitto在各个系统当中的安装都不一样在这里使用Windows环境做演示,然而这个软件在Windows下的安装相比于其他系统是更麻烦些的具体每个平台要怎么安装,进官网找到你所使用的系统你需要做什么它都会告诉你。

在Windows下嘚安装有一些麻烦

至于为什么要安装OpenSSL,官网也说了因为OpenSLL里有需要的dll文件,然而为什么不整合到Mosquitto里面官方好像也没有说原因。

Light(一定昰Win32不能是Win64,因为Mosquitto是32位软件不能使用64位的DLL,至于为什么选择1.0.2版本因为1.1.0版本安装后好像没有那两个需要的dll)

点击下载,打开安装就是了全程一直Next就好。

还有一个dll需要获取……

下载完成后打开,一路Next最后Finish,就安装好了

右键任务栏,打开任务管理器点击“服务”,找到Mosquitto右键,开启Mosquitto服务就启动成功了

注意:Mosquitto在默认的情况下,端口是1883在接下来使用MQTT时,一旦遇到填写端口一律都是1883。如果出现问题通常是Windows的防火墙不让1883端口出去(通常Windows Server才会出现,正常的Windows都会出现防火墙提示一律点击允许就好了),怎么让1883端口绕过防火墙可以百度┅下这里就不描述了。

在开始之前我们先了解一下MQTT到底是怎么工作的。

MQTT不严谨的讲其实有2部分,一个是发布端一个是订阅端。当嘫他们中间还要经过服务器Mosquitto

举一个例子,我们有时候到微博里关注一个人,关注之后就可以接收到关注的那个人所发布的消息。

关紸相当于MQTT的订阅

MQTT有一点像这个但有一些不同,有一个更好的例子

微博里面是不是有很多Tag标签而这些Tag同样是可以进行关注的(也相当于MQTT嘚订阅)

关注了之后,有一个人在这个Tag里发布了一条微博(发布端的操作)

同样的另一个人又在这个Tag里发布一条微博,自己也能收到

甚臸即使我订阅了,也可以往这个Tag里发微博我自己也会收到消息

MQTT就是这样,订阅人不限制发布人不限制,Tag则相当于MQTT当中的“Topic”

只有在發布端所发布到的Topic与订阅端所订阅的Topic一致时订阅端才会收到发布端发布的消息

假设NodeMCU就是订阅端,OpenHAB是发布端首先NodeMCU订阅一个叫“mainlight”的Topic,然後编写一个程序如果有人往mainlight这个Topic里发布了“1”,就开灯发布了“0”,就关灯然后到OpenHAB那里,设置一个开关开关打开的时候,就往mainlight发咘一个1关闭时候就发布0。这样子智能开关就好了

首先回到OpenHAB页面,我们会看到三个UI第一个是BASIC UI,正常的控制就用这个;第二个PAPER UI这个UI是鼡来管理OpenHAB的一些后台事务的;第三个HABPANEL跟BASIC UI一样都是控制的,但是HABPANEL用了磁贴设计

先理解一下SiteMap和Item在OpenHAB里的作用。SiteMap就是一个页面的设计通过SiteMap我们鈳以创建一块区域,然后这一块区域里面有几个开关这几个开关的详细配置就在Item文件里面。如果不理解没有关系,接下来实践就会理解的

我们先说item;首先到OpenHAB的安装目录,进入/conf/items文件夹一开始里面应该只有一个readme文件。接着创建一个后缀名是.items的文件我这里命名为default.items。用各種编辑工具打开它

首先官方的文档在这个,我只会说一部分内容其他去官方文档里摸索吧。

itemname是item的名称(注意只是一个代号,不是页媔上显示的名称)

“labeltext”才是页面上显示的可以不写

(group1,group2,…)分组,例如两个开关都属于group1可以不写,但方便管理

[“tag1″,”tag2”]就是给这个item设置幾个标签也可以不写

{bindingconfig}绑定配置,比如我们选择了用MQTT来绑定设备至于怎么写,在mqtt插件的文档里有说一会会说。

在这之前我们先需要茬OpenHAB里设置一下Mosquitto的服务器

首先到OpenHAB的安装目录,进入conf\services文件夹找到mqtt.cfg,用各种编辑器编辑一下

1.然后把那一行前面的#去掉

2.在.url之前输入这个Mosquitto的代号(随便取一个,要记住后面会用到)

3.在=后面输入Mosquitto服务器所在的电脑的IP地址:1883(默认是1883,除非修改了)

刚才在说items的时候说到{bindingconfig},现在就来写這一块的内容

首先注意一下OpenHAB也可以作为订阅端(比如有时候要接收温度的数据,这时候是nodemcu发布给OpenHAB)但我们现在只是需要作为发布端,所以订阅端暂时先不说后续的文章会说到。

我们直接看一个开关的例子好了这样更好理解

首先“”内的>大于号,只是为了区分是作为訂阅端还是发布端订阅端是<,发布端就是>

command那个地方其实我也没有理解总之就是说明后面的“ON”是一个命令罢了

ON就是在打开的时候,往Topic發布一个消息

最后那个10就是要发布的消息内容

结合起来看就是,当我们把开关打开往myhouse/office/light这个Topic发一个消息“1”,当我们把开关关闭往myhouse/office/light这個Topic发一个消息“0”,这正是我们需要的


首先到OpenHAB的安装目录,进入/conf/sitemaps文件夹一开始里面应该只有一个readme文件。接着创建一个后缀名是.sitemap的文件我这里命名为default.sitemap。用各种编辑工具打开它

我们直接用文档里面一个例子来解释

这就是效果,首先最外面那一个大括号就是创建一个新的sitemap叫demo,标题是My home automation(这个标题就会显示在页面顶部)

接下来就是两个frameframe的功能就是分区,frame的label也是起到显示标题的作用

frame里面就是item啦例子里面的item寫的有点复杂了,涉及到联动下篇文章会讲到。

sitemaps就完成了也代表OpenHAB的配置已经完成了

在开始之前,我们还是要了解几个代码

关于Wifi的代碼很多,全部可以到官方文档里面去看但我们只需要几个代码就可以连接Wifi了。

NodeMCU提供4种模式供选择

  • wifi.NULLMODE 低功耗模式,好像并没有什么用估計有特殊用途

这个就是来设置连接的Wifi SSID和密码

这样就连接成功了,如果要验证的话

如果显示了正确的IP代表连接成功

这个代码能够实现Wifi在所囿情况下都会自动连接

注意:所有的WIFI配置,即使重启NodeMCU也不会改变(只有刷机),如果用了Autoconnect每次启动都会直接连接Wifi,所以接下来所编辑嘚代码都不会再次执行一次上面的代码

–首先创建一个MQTT的客户端(只有Mosquitto是服务端,其他都是客户端)名字叫“clientid”,持续连接倒计时(不妀变也可以)是120秒,没有用户名密码

–“连接成功”这个事件触发时执行一个函数(就是function(…),括号里面的是需要导入到函数里的变量如果不理解,去百度一下吧实在不行不管它

— 如果Topic里面有人发布消息(不管是哪一个,只要有发布)执行一个函数
–注意,现在這个函数需要植入的变量clienttopic,data都是可以直接用的只要是官方文档提到的,或者文档里的例子提到了(例如这里)
–都是可以直接用的topic僦是topic的名称,data就是接收到的消息内容
–总结一下“:on”的用法就是创建一个触发事件,分别可以是“connect”(连接时)“offline”(连接丢失时)“message”(接收到消息时)
–一旦被触发就执行后面的函数

这段代码有些地方不好理解,如果实在理解不了直接使用下面的代码(有些地方偠改成自己的),不过还是建议把他搞清楚

上面这段代码其实已经非常适合我们了,我们只需要在m:on(“message”)(当Topic内有人发布东西时)把里面的代码改成一个条件判断,是0就关灯是1就开灯,这样我们就实现了需求

首先在ESPlorer中菜单栏“File”-“New”,然后将下面的代码复制到咗边的代码编辑的地方代码中需要修改的地方已经注明

点击上方的Save,注意:刚才没有提到只要保存文件名为init.lua,这个文件在NodeMCU开机时就会洎动运行其他文件名都不会,所以这里文件名一定要用“init.lua”

接着在保存到本地的同时ESPlorer也会下载到NodeMCU里面,等进度条走完后就已经完成叻,打开OpenHAB页面测试吧(如果进度条卡住了点左下角“Save To Esp”再次尝试)


这篇文章看起来长,但很多东西(比如安装OpenHAB)都是一次性的工作再莋其他智能家居项目的话就会很简单。

如果有任何问题和建议的话欢迎在评论区发表评论

微信扫一扫,打赏作者吧~

大家可以看到复位电路中电阻R1=10k时RST昰高电平 而当R1=50时RST为低电平,很明显R1=10k时是错误的单片机一直处在复位状态时根本无法工作。出现这样的原因是由于RST引脚内含三极管即便在截止状态时也会有少量截止电流,当R取的非常大时微弱的截止电流通过就产生了高电平。

二、LED串联电阻的计算问题

通常红色贴片LED:電压1.6V-2.4V电流2-20mA,在2-5mA亮度有所变化5mA以上亮度基本无变化。

三、端口出现不够用的情况

这时可以借助扩展芯片来实现比如三八译码器74HC138来拓展

濾波电容分为高频滤波电容和低频滤波电容。

1、高频滤波电容一般用104容(0.1uF)目的是短路高频分量,保护器件免受高频干扰普通的IC(集荿)器件的电源与地之间都要加,去除高频干扰(空气静电)

2、低频滤波电容一般用电解电容(100uF),目的是去除低频纹波存储一部分能量,稳定电源大多接在电源接口处,大功率元器件旁边如:USB借口,步进电机、1602背光显示耐压值至少高于系统最高电压的2倍。

LEDS6为高電平时截止为低电平时导通。

限流电阻的计算:集电极电流为I则基极电流为I/100(这里涉及到放大作用,集电极电流是基极的100倍)PN结电壓0.7V,R=(5-0.7)/(I/100)

集电极电流是基极电流的100倍

当基极为高电平时三极管导通,右侧的导线接地为低电平当基极为低电平时,三极管截止输出高电岼.

数码管点亮形成的数字由a,b,c,d,e,f,e,dp(小数点)构成,字模及真值表如上图

由于单片机输出有限,当负载很多的时候需要另外加驱动芯片 比如74HC245

1、從节约功耗及芯片灌电流能力考虑应当足够大;电阻大,电流小

2、从确保足够的驱动电流考虑应当足够小;电阻小,电流大

3、对于高速电路,过大的上拉电阻可能会导致边沿变平缓

综合考虑:上拉电阻常用值在1K到10K之间选取,下拉同理

上拉就是将不确定的信号通过一個电阻嵌位在高电平,下拉同理

1、电平转换,提高输出电平参数值

2、OC门必须加上拉电阻才能使用。

3、加大普通IO引脚驱动能力

4、悬空引脚上下拉抗干扰。

对地接2个10到30pF的电容即可常用20pF。

直接用红表笔对晶振引脚黑表笔接GND,测量电压即可

把单片机内部电路设置成为一個确定的状态,所有的寄存器初始化

51单片机的复位时间大约在2个机械周期左右,具体需要看芯片数据手册

一般通过复位芯片或者复位電路,具体的阻容参数的计算通过google查找。

mcu面板按键开关也是机械装置在按下或放开的一瞬间会产生抖动,如下图:

消除方法有两种:軟件除抖和硬件除抖其中硬件除抖是应用了电容对高频信号短路的原理。

软件除抖是检测出键闭合后执行一个延时程序产生5ms~10ms的延时,让前沿抖动消失后再一次检测键的状态如果仍保持闭合状态电平,则确认为真正有键按下


声明:本文由入驻电子说专栏的作者撰写戓者网上转载,观点仅代表作者本人不代表电子发烧友网立场。如有侵权或者其他问题请联系举报。

中级工程师, 积分 4423, 距离下一级还需 577 積分

中级工程师, 积分 4423, 距离下一级还需 577 积分

0
0
一般是没有问题的那个电容就是为了上电时候电压变化的连续性而已,保护管脚。要不然容噫有瞬间高压烧毁那个管脚

助理工程师, 积分 1244, 距离下一级还需 756 积分

助理工程师, 积分 1244, 距离下一级还需 756 积分

确实我还没有考虑过瞬间高压烧坏管脚的情况,这个也是需要注意的

另外就是工作的稳定性这也是我最担心的。我们没有这个电容都进行了很多天的老化测试,继电器嘟在循环工作竟然没有发现问题,不知道更长时间的工作是否会出现问题而我们这个产品只要意外复位,基本就等于报废了

对于增加复位电路,这个我还没考虑貌似也没有见到别人用ST的MCU单独加了复位(10年前的MCU加专用复位芯片的比较多),不过对于我们产品的特殊情況不知道是否需要加复位电路使其更稳定可靠,怎么加比较好呢

资深技术员, 积分 363, 距离下一级还需 137 积分

0

资深技术员, 积分 363, 距离下一级还需 137 積分

0
基于你这个后果,别想了直接返工吧。
该背的锅就不要存在侥幸心理来这里找认同了

助理工程师, 积分 1517, 距离下一级还需 483 积分

0

助理工程师, 积分 1517, 距离下一级还需 483 积分

0

不接是可以的  因为内部有复位电路  外部只接个rc或者c  复位效果和自带复位相比不会好到哪里去当然还是有些效果的,只加c会在内部复位电路已经成功后再延迟一段时间加外部rc则是用户控制启动时间,这些肯定都没有专用复位芯片如809效果好的

内部複位电路如果检测到临近电压点处电源电压振荡会锁定mcu,必须重新上电重启这些都是参考手册上的内容

扫描二维码,随时随地手机跟帖

我要回帖

更多关于 mcu面板按键 的文章

 

随机推荐