物联网DIY - 其实也没那么深奥

2022-01-12 11:07:23 13点赞 91收藏 11评论

创作立场声明:作者享受DIY带来的乐趣和自我满足感,由于各种产品、参数纷繁复杂,无法面面俱到,仅适合从个人角度阐述心得,且本文无任何普适性;

作者是DIY小白,不参与任何抬杠话题。值友如有感觉到冒犯之意,请多多包含;中心思想如有雷同,那应该是同道中人吧。

放个视频



1.灵感来源:一个懒到家的女朋友 ··· 【嫌弃的请直接下滑至 3】

广东的天气不比北方,上个月初的降温,很多地方都迎来了第一场雪,朋友们都迫不及待的发照片、发视频,都想第一时间向我们这些永远见不到雪的人炫耀一番,朋友圈里似乎也是“全国都在下雪”,而我们这边还是数次入冬失败的20来度。直到元旦前一周,大寒潮带来的降温才真正把我们带进同一个季节里。虽说不会下雪,但这个冷也实实在在的把我们锁在了被窝里。起床靠勇气,上班靠毅力。

平时下班,吃喝拉撒、洗洗涮涮搞个差不多后,基本就是窝在床上,看电视的看电视,打游戏的打游戏。有天晚上,视频时女朋友委屈巴巴地说:“好冷啊物联网DIY - 其实也没那么深奥 ,还得起来去门口那里关灯。要是能像哈利波特那样,用魔法关灯就好了。物联网DIY - 其实也没那么深奥

(0.0) !!

听到这个,我就不淡定了:这必须要宠一宠啊。我想值友们要是遇到类似的情况,肯定也得有所作为的,对吧?

我说的是:【打开值得买】-【搜索智能开关】

但是,这些智能玩意儿我是不满意的。要么贵(支持HomeKit),要么是定时的,要么下个APP,还得注册、同意各种协议、授权各种请求,先把你数字化的“脱”个精光,再满足你一下。。。。物联网DIY - 其实也没那么深奥

我想要一个能用手机控制的、价格还不贵的、还尽量少获取我个人隐私的一个开关。

然后我就尝试搜了一下DIY智能开关,果然各种网站、各种教程一大堆。可高兴坏了。

2.初识物联网 ··· 【关于ESP8266】

当你搜索到DIY智能开关时,页面上至少有一个条目是关于ESP8266 WiFi模块的。点进去一看,长得全都是不认识的样子,而且里面的文字,每一个都认识,都会读,但连起来的那些话,却是读懂都困难。

视频网站在这个时候就很有用了,它可以让你更直观的去了解一些东西,然后再去读那些相对生硬的文字教程,就会事半功倍。

看过两个视频之后,我就急着去淘宝了几个硬件回来:ESP8266芯片,4.9元一个;NodeMCU,12.8元一个;USB转串口连接器,4.5元一个;继电器,2.8元一个。

但是,真的着急了,甚至我收到快递后,还是不懂我买的东西怎么用。。。

NodeMCU(左上);ESP8266 *2(右上);USB转串口连接器(右下);继电器(蓝色)NodeMCU(左上);ESP8266 *2(右上);USB转串口连接器(右下);继电器(蓝色)

我又继续花了两天时间,算是基本上理清楚了一些思路:

  1. ESP8266 是自带 Flash存储和WiFi 功能的芯片,可以理解成一个单片机。

  2. 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关于NodeMCU

将NodeMCU与电脑相连,电脑上会提示插入了新设备,在设备管理器中可以看到新增了一个串口设备(例如 COM3);如果没有,则需要安装驱动(如CH340等,具体看NodeMCU 使用的是哪个),另外,如果驱动也安装了,还是没有显示串口设备,就需要换一条 MicroUSB线,有些线没有数据传输功能。

选择你擅长的计算机语言,并在电脑上安装相应的开发环境,为刷固件(固件烧录)做准备。

而像我这种对编程语言零基础的人来说,其实哪个都不简单:打开一个教程,用的是lua;又打开一个教程,哦是Python;再打开一个吧:是C语言。刚开始完全是萌币状态,根本不懂其中的区别,只能感觉到每个人的教程都互不相同。。。过程就不赘述了,个人觉得基于C语言的 Arduino软件刚好可以满足我的要求,资源多,教程多,可参考的案例也多。

Arduino软件的样子,内容是HomeKit 开关的源码。Arduino软件的样子,内容是HomeKit 开关的源码。

3.1 在电脑上准备开发环境

安装好软件后,默认的开发板中只有Arduino自家的产品,并没有ESP8266的开发板管理器,需要手动安装:依次打开【文件】-【首选项】,在【附加开发板管理器网址】中添加如下网址。

https://arduino.esp8266.com/stable/package_esp8266com_index.json

在【工具】-【开发板】右侧聊表中选择【开发板管理器】,搜索“ESP8266”,点击安装。

安装 ESP8266开发板管理器安装 ESP8266开发板管理器

然后在【工具】-【开发板】右侧列表中即可看到ESP8266开发板的选项。将当前开发环境设置为ESP8266:选择【ESP8266 Boards】-【NodeMCU 1.0】

有了开发环境,还要安装相应的库文件,这是各路大神无私奉献的一些开源库文件,可以免费拿来用:在【选项】-【加载库】中选则【管理库】,搜索“HomeKit”点击安装。

安装 HomeKit 库文件安装 HomeKit 库文件

至此,关于NodeMCU的整体开发环境已经做好了,接下来就是写固件代码、测试环节,测试无误后,将固件刷入NodeMCU 即得成品。

3.2 局域网HomeKit固件代码编程、测试、烧录

NodeMCU自带一个蓝色的LED等,使用的是GPIO 2 口,我们测试的时候可以根据LED灯的状态,来判断是否实现了我们想要的结果。

首先礼貌性地感谢下HomeKit 库文件的作者“Mixiaoxiao”,万一他也逛值得买,也算是一种缘分。

打开他给的Homekit 开关案例,就可以图一的那个样子了。这里他已经将全部代码写好了,只需要修改一两个地方:①写上你家的wifi 名和密码;②选择性的更改 HomeKit 配对密码。具体如下图:

修改WiFi 名字 和 密码,NodeMCU 才会自动连接修改WiFi 名字 和 密码,NodeMCU 才会自动连接

选择性修改配对密码,然后验证,最后烧录选择性修改配对密码,然后验证,最后烧录

在没有代码错误的前提下,将固件刷入NodeMCU,刷机过程LED会快速闪烁,完成后去查看家里的路由器,会多了一个名叫 “ESP” 开头的联网设备。此时打开手机的 【家庭APP】-【添加或扫描设备】-【更多选项】-【输入配对密码】,等待片刻就会连接成功。此时APP开关打开:LED常量,APP开关关闭:LED熄灭。

回到Arduino软件,我们的目的是通过手机控制房顶灯的开关,而不是NodeMCU上的LED灯。因此需要修改输出的接口,这是就需要了解一下NodeMCU的工作原理:

NodeMCU 引脚定义NodeMCU 引脚定义

我们需要用的是蓝色方框对应的引脚,根据下图的源代码可以看出,板载LED灯用的是2号GPIO接口,把它改成5号,这样就可以控制我们想要控制的设备了。P.S. 截止到我写这篇文章,我也不懂引脚定义图上这么一大堆英文各自都是什么意思。

把LED灯的2号口,修改成5号把LED灯的2号口,修改成5号

修改后重新把固件刷入NodeMCU,此时再去控制开关,LED灯就不亮了。

灵魂 · 接线原理图灵魂 · 接线原理图

除此之外,NodeMCU的供电需要一个充电宝,或一个5V 的充电器,而且需要将房顶灯开关内的火线接入继电器COM口,从继电器“常开”NO口接出。这么一来,女朋友一定会认为是一个很大的工程。于是我干脆把床底下带夹子的小台灯拿给她了,平时夹在床头,睡前伸手就能关灯物联网DIY - 其实也没那么深奥

3.3 外网远程控制的测试

实现了局域网HomeKit 控制开关,但是没能派上用场,那不如把它改成控制电脑开关的设备吧,顺便做成外网也能控制的。

首先想到的是用继电器控制主机电源线,同时将主板的通电自启功能打开。不过仔细一想,这样的话,还是需要一个单独的5V供电。能不能用主机后面板的5V USB供电,用短接开机触点实现开机呢?查了一下主板开机原理,理论上是可行的!

面临两个问题:①NodeMCU开关形式是常开、常关,怎样实现点按的功能;②做成外网也能访问的样子。

关于问题①,这里我使用了一个笨方法:将开关 接通时间设置为0.2秒,然后回到常关状态;如果值友有更好的解决方法,还望不吝赐教。

问题①  开机代码问题① 开机代码

关于问题②,只需要将NodeMCU的联网端口映射出去,即可实现外网远程访问。通过使用ESP8266服务器库文件,可以建立一个具备基础功能的微型服务器,然后在路由器中将ESP8266的端口映射出去。

问题② 设置外网访问问题② 设置外网访问

用杜邦线将主板上的开机针脚与NodeMCU的GPIO4 、 GND引脚连接。

这时我还没买杜邦线,就用旧电脑上的线临时接了两根。这时我还没买杜邦线,就用旧电脑上的线临时接了两根。

上机实测上机实测

补充一句:主板开机原理实际上是将高电压(高电平)针脚与低电压(低电平)针脚接通,从而实现开机。从开机代码中可以发现,GPIO 4口有0.2秒的时间是低电平状态,因此只需要将GPIO 4与主板高电平针脚连接,即可实现开机。我在后续也验证了,而且目前也采用了只用一根杜邦线的方式。

差不多先写这么多,关于ESP8266还有更多的功能要开发:

准备研究外接红外收发器,目的是实现手机控制空调和电视;外接红外传感器,实现记录猫咪晚上的“蹦迪”轨迹。

猫管家压轴猫管家压轴

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
11评论

  • 精彩
  • 最新
  • 用esphome定制固件更简单些

    校验提示文案

    提交
    刚搜了下esphome,不太懂怎么使用这个网站,但是信息应该挺全的,谢谢大佬

    校验提示文案

    提交
    收起所有回复
  • esphome可以定制开关类型、方式、各种高低电平状态,支持各种传感器,支持mqtt,基本上你想到的控制方式与数据收录方式都有了。

    校验提示文案

    提交
    主要是用什么编程啊,lua还是Arduino?

    校验提示文案

    提交
    不用编程,自己定义好各GPIO,自动实时编译刷机,很方便的,尤其是开发板已装好但需要改动一些东西的时候,你提交后它自己会编译,然后通过wifi刷入。

    校验提示文案

    提交
    还有3条回复
    收起所有回复
  • 去拼夕夕花30元买个涂鸦智能的mini通断器,配上天猫精灵或者小爱同学之类的智能音箱,可以在双控的基础上增加语音控制。很香。

    校验提示文案

    提交
    这东西的原理是利用蓝牙与智能音箱互联,接下来我会专门写一篇文章分析。低成本、容易上手,不过我个人不喜欢用。 [皱眉] [皱眉]

    校验提示文案

    提交
    收起所有回复
  • 红外传感器能用来记录轨迹?

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
91
扫一下,分享更方便,购买更轻松