物联网DIY - 其实也没那么深奥
创作立场声明:作者享受DIY带来的乐趣和自我满足感,由于各种产品、参数纷繁复杂,无法面面俱到,仅适合从个人角度阐述心得,且本文无任何普适性;
作者是DIY小白,不参与任何抬杠话题。值友如有感觉到冒犯之意,请多多包含;中心思想如有雷同,那应该是同道中人吧。
放个视频
1.灵感来源:一个懒到家的女朋友 ··· 【嫌弃的请直接下滑至 3】
广东的天气不比北方,上个月初的降温,很多地方都迎来了第一场雪,朋友们都迫不及待的发照片、发视频,都想第一时间向我们这些永远见不到雪的人炫耀一番,朋友圈里似乎也是“全国都在下雪”,而我们这边还是数次入冬失败的20来度。直到元旦前一周,大寒潮带来的降温才真正把我们带进同一个季节里。虽说不会下雪,但这个冷也实实在在的把我们锁在了被窝里。起床靠勇气,上班靠毅力。
平时下班,吃喝拉撒、洗洗涮涮搞个差不多后,基本就是窝在床上,看电视的看电视,打游戏的打游戏。有天晚上,视频时女朋友委屈巴巴地说:“好冷啊 ,还得起来去门口那里关灯。要是能像哈利波特那样,用魔法关灯就好了。 ”
(0.0) !!
听到这个,我就不淡定了:这必须要宠一宠啊。我想值友们要是遇到类似的情况,肯定也得有所作为的,对吧?
我说的是:【打开值得买】-【搜索智能开关】
但是,这些智能玩意儿我是不满意的。要么贵(支持HomeKit),要么是定时的,要么下个APP,还得注册、同意各种协议、授权各种请求,先把你数字化的“脱”个精光,再满足你一下。。。。
我想要一个能用手机控制的、价格还不贵的、还尽量少获取我个人隐私的一个开关。
然后我就尝试搜了一下DIY智能开关,果然各种网站、各种教程一大堆。可高兴坏了。
2.初识物联网 ··· 【关于ESP8266】
当你搜索到DIY智能开关时,页面上至少有一个条目是关于ESP8266 WiFi模块的。点进去一看,长得全都是不认识的样子,而且里面的文字,每一个都认识,都会读,但连起来的那些话,却是读懂都困难。
视频网站在这个时候就很有用了,它可以让你更直观的去了解一些东西,然后再去读那些相对生硬的文字教程,就会事半功倍。
看过两个视频之后,我就急着去淘宝了几个硬件回来:ESP8266芯片,4.9元一个;NodeMCU,12.8元一个;USB转串口连接器,4.5元一个;继电器,2.8元一个。
但是,真的着急了,甚至我收到快递后,还是不懂我买的东西怎么用。。。
NodeMCU(左上);ESP8266 *2(右上);USB转串口连接器(右下);继电器(蓝色)
我又继续花了两天时间,算是基本上理清楚了一些思路:
ESP8266 是自带 Flash存储和WiFi 功能的芯片,可以理解成一个单片机。
NodeMCU 是一块集成主板,包含ESP8266 芯片、与芯片对应的驱动芯片和一些外围电路等。
其中常见的 WiFi 模块还有ESP32,以及各自下面的细分型号。目前我只了解ESP8266,下面也只针对ESP8266展开。
单片机:一种微型电脑(包含CPU、RAM、ROM、IO接口),使用时保持供电、写入系统、装好要跑的程序,即可。
3.物联网开发
既然ESP8266可以看作是一个单片机,那么就可以直接拿来使用。不过这样会产生两个问题:①ESP8266需要的是3.3V供电,且没有供电插口;②在Flash存储上写入固件(系统)时,需要USB转串口的连接器。
NodeMCU就不一样了,它集成了ESP8266,外围电路也已经设计好了,买回来只需要用MicroUSB 插口接入5V电源就能直接使用,而我们的电脑USB、老式手机充电器,都是5V的直流输出,简直不能更方便。
以前我连单片机是什么都不知道,现在肯定是选NodeMCU 上手做实验。
将NodeMCU与电脑相连,电脑上会提示插入了新设备,在设备管理器中可以看到新增了一个串口设备(例如 COM3);如果没有,则需要安装驱动(如CH340等,具体看NodeMCU 使用的是哪个),另外,如果驱动也安装了,还是没有显示串口设备,就需要换一条 MicroUSB线,有些线没有数据传输功能。
选择你擅长的计算机语言,并在电脑上安装相应的开发环境,为刷固件(固件烧录)做准备。
而像我这种对编程语言零基础的人来说,其实哪个都不简单:打开一个教程,用的是lua;又打开一个教程,哦是Python;再打开一个吧:是C语言。刚开始完全是萌币状态,根本不懂其中的区别,只能感觉到每个人的教程都互不相同。。。过程就不赘述了,个人觉得基于C语言的 Arduino软件刚好可以满足我的要求,资源多,教程多,可参考的案例也多。
Arduino软件的样子,内容是HomeKit 开关的源码。
3.1 在电脑上准备开发环境
安装好软件后,默认的开发板中只有Arduino自家的产品,并没有ESP8266的开发板管理器,需要手动安装:依次打开【文件】-【首选项】,在【附加开发板管理器网址】中添加如下网址。
https://arduino.esp8266.com/stable/package_esp8266com_index.json
在【工具】-【开发板】右侧聊表中选择【开发板管理器】,搜索“ESP8266”,点击安装。
然后在【工具】-【开发板】右侧列表中即可看到ESP8266开发板的选项。将当前开发环境设置为ESP8266:选择【ESP8266 Boards】-【NodeMCU 1.0】
有了开发环境,还要安装相应的库文件,这是各路大神无私奉献的一些开源库文件,可以免费拿来用:在【选项】-【加载库】中选则【管理库】,搜索“HomeKit”点击安装。
至此,关于NodeMCU的整体开发环境已经做好了,接下来就是写固件代码、测试环节,测试无误后,将固件刷入NodeMCU 即得成品。
3.2 局域网HomeKit固件代码编程、测试、烧录
NodeMCU自带一个蓝色的LED等,使用的是GPIO 2 口,我们测试的时候可以根据LED灯的状态,来判断是否实现了我们想要的结果。
首先礼貌性地感谢下HomeKit 库文件的作者“Mixiaoxiao”,万一他也逛值得买,也算是一种缘分。
打开他给的Homekit 开关案例,就可以图一的那个样子了。这里他已经将全部代码写好了,只需要修改一两个地方:①写上你家的wifi 名和密码;②选择性的更改 HomeKit 配对密码。具体如下图:
在没有代码错误的前提下,将固件刷入NodeMCU,刷机过程LED会快速闪烁,完成后去查看家里的路由器,会多了一个名叫 “ESP” 开头的联网设备。此时打开手机的 【家庭APP】-【添加或扫描设备】-【更多选项】-【输入配对密码】,等待片刻就会连接成功。此时APP开关打开:LED常量,APP开关关闭:LED熄灭。
回到Arduino软件,我们的目的是通过手机控制房顶灯的开关,而不是NodeMCU上的LED灯。因此需要修改输出的接口,这是就需要了解一下NodeMCU的工作原理:
我们需要用的是蓝色方框对应的引脚,根据下图的源代码可以看出,板载LED灯用的是2号GPIO接口,把它改成5号,这样就可以控制我们想要控制的设备了。P.S. 截止到我写这篇文章,我也不懂引脚定义图上这么一大堆英文各自都是什么意思。
修改后重新把固件刷入NodeMCU,此时再去控制开关,LED灯就不亮了。
除此之外,NodeMCU的供电需要一个充电宝,或一个5V 的充电器,而且需要将房顶灯开关内的火线接入继电器COM口,从继电器“常开”NO口接出。这么一来,女朋友一定会认为是一个很大的工程。于是我干脆把床底下带夹子的小台灯拿给她了,平时夹在床头,睡前伸手就能关灯
3.3 外网远程控制的测试
实现了局域网HomeKit 控制开关,但是没能派上用场,那不如把它改成控制电脑开关的设备吧,顺便做成外网也能控制的。
首先想到的是用继电器控制主机电源线,同时将主板的通电自启功能打开。不过仔细一想,这样的话,还是需要一个单独的5V供电。能不能用主机后面板的5V USB供电,用短接开机触点实现开机呢?查了一下主板开机原理,理论上是可行的!
面临两个问题:①NodeMCU开关形式是常开、常关,怎样实现点按的功能;②做成外网也能访问的样子。
关于问题①,这里我使用了一个笨方法:将开关 接通时间设置为0.2秒,然后回到常关状态;如果值友有更好的解决方法,还望不吝赐教。
关于问题②,只需要将NodeMCU的联网端口映射出去,即可实现外网远程访问。通过使用ESP8266服务器库文件,可以建立一个具备基础功能的微型服务器,然后在路由器中将ESP8266的端口映射出去。
用杜邦线将主板上的开机针脚与NodeMCU的GPIO4 、 GND引脚连接。
补充一句:主板开机原理实际上是将高电压(高电平)针脚与低电压(低电平)针脚接通,从而实现开机。从开机代码中可以发现,GPIO 4口有0.2秒的时间是低电平状态,因此只需要将GPIO 4与主板高电平针脚连接,即可实现开机。我在后续也验证了,而且目前也采用了只用一根杜邦线的方式。
差不多先写这么多,关于ESP8266还有更多的功能要开发:
准备研究外接红外收发器,目的是实现手机控制空调和电视;外接红外传感器,实现记录猫咪晚上的“蹦迪”轨迹。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
yyrtnn
校验提示文案
琴秀
校验提示文案
sparrow1981
校验提示文案
BigBubbleGum
校验提示文案
BigBubbleGum
校验提示文案
sparrow1981
校验提示文案
琴秀
校验提示文案
yyrtnn
校验提示文案