前言
由于我最新的电脑桌配置,开关在我屏幕的后面,导致我桌前的那个灯开关不好操作,于是我就想着能否整个自动的。
↑我的新配置,开关就在这个屏幕后面,手根本碰不到
这次用的是ESP8266,并使用点灯科技接入小爱同学,可以使用小爱关灯就是好文明。
为什么不用智能开关、智能灯泡,最大原因就是我想同时使用传统开关和智能控制。传统开关关了后就不能使用语音开,再加上我房间是一灯双控开关,是由两个单刀双掷开关组成。
看着这个图,我实在不知道把智能开关加在哪里,可以即使用传统开关,还可以使用智能开关,最后决定返璞归真,让智能开关模仿开关灯的姿势,来控制那个我操控不到的开关。
硬件部分
- 8266开发板一块
- 轻触开关一个
- TD-7015MG舵机一个
- 100Ω电阻两个
为了方便固定,我将走线部分焊在了洞洞板上,焊接工艺实在是不堪入目,但,能用就行。未来肯定会用PCB代替,关键是现在这根信号线实在不牢,但我也懒得改。
8.31日更新为PCB板
原理
按钮
I/O口就是单片机检测的口,高电平有效,在按钮没被按下去之前都是低电平,按钮按下去后,I/O被拉到高电平,单片机收到信号,开始工作。
舵机旋转
红——————————VCC 棕——————————GND 橙——————————信号线
PWM控制
暂无
Arduino控制
直接使用Arduino的Servo库:
#include <Servo.h>
Servo servo_16; //舵机输出口 GIPO16
servo_16.write(135); //舵机旋转角度 具体参数需要结合自身情况修改
delay(1000); //给一个小延时
servo_16.write(95);
几行代码就可以使其转动,角度自己慢慢调就可以。
代码和库
这份代码只是在@CloudBaby_这位大佬的基础上修改了开关方式,可以理解为二分频,就是只记录上次开关位置,而非固定开与关的上下。对于我的情况来说,灯的开关与否,8266是不知道的,他只知道也肯定知道开关现在的位置(我无法控制那个开关),好在单刀双掷开关只要变动开关就可以实现灯的切换状态,所以对小爱同学说开灯和关灯,传回到8266都是按一下开关。也顺便加了一个轻触开关启动,提供手动解决方案。
(上关下开)
(下关上开)
参考
本代码来自@CloudBaby_这个up主,我只是在那位up主的基础上简单了一些功能