基于esp8266的自动开关灯系统-单片机主程序
通过控制连接在单片机上的舵机的旋转角度/速度/方向以实现控制电灯等家用电器的开关。相较于使用继电器控制而言,无需改造家庭电路,更安全,维护更方便。
1.安装 arduinoide
2.打开smartswitch.ino文件。
3.安装blinker库/esp8266库【同时也安装一下esp8266的驱动,不然有可能识别不到串口】
4.修改代码以满足需求(打开源码后,填写点灯账号密码等基础信息并填写无线网络信息后可以按照注释更改实现代码)
5.编译并上传到单片机
6.在点灯app中设计用于控制单片机的前端页面并编写后端代码
手机控制客户端请使用点灯blinker的手机版客户端。
电脑控制可以使用我编写的blinker电脑版客户端,本客户端支持自动登录。
https://github.com/bertwaver/blinker_Win
你可以使用客户端对你的单片机进行控制,但在那之前,我们需要为其编写一个页面以及控制相关的代码。这里提供一个样例:
1.在点灯客户端中点击右上角的添加按钮,并且选择“独立设备”->"网络接入"。
2.进入刚添加的设备页面中,点击右上角的编辑按钮,在“触发器配置”中添加下列代码
[{"source":"switch","source_zh":"开关状态","state":["on","off"],"state_zh":["打开","关闭"]}]
3.在"动作配置"中添加下列代码
[{"cmd":{"switch":"on"},"text":"打开?name"},{"cmd":{"switch":"off"},"text":"关闭?name"}]
4.在"界面配置"中添加下列代码
{¨config¨{¨headerColor¨¨transparent¨¨headerStyle¨¨dark¨¨background¨{¨img¨¨assets/img/headerbg.jpg¨}}¨dashboard¨|{¨type¨¨btn¨¨ico¨¨fad fa-lightbulb-on¨¨mode¨Ê¨t0¨¨开灯¨¨t1¨¨文本2¨¨bg¨Ì¨cols¨Í¨rows¨Í¨key¨¨test¨´x´Ë´y´Í¨speech¨|÷¨cus¨¨on¨¨lstyle¨Ë¨clr¨¨#076EEF¨}{ß9ßAßB¨fad fa-lightbulb¨ßDÉßE¨关灯¨ßGßHßIÌßJÍßKÍßLßM´x´Ë´y´ÒßN|÷ßQËßRßS}{ß9¨deb¨ßDÉßIÉßJÑßKÌßL¨debug¨´x´É´y´É}{ß9ßAßB¨fad fa-house-day¨ßDÉßE¨取消锁定¨ßGßHßIÉßJËßKËßL¨resetc¨´x´Ê´y´¤EßQÉßR¨#00A90C¨}{ß9ßAßB¨fad fa-tachometer-alt-fast¨ßDÉßE¨调节灯温¨ßGßHßIÉßJËßKËßL¨tjdw¨´x´Î´y´¤EßRßa}÷¨actions¨|¦¨cmd¨¦¨switch¨‡¨text¨‡ßP¨打开?name¨¨off¨¨关闭?name¨—÷¨triggers¨|{¨source¨ßg¨source_zh¨¨开关状态¨¨state¨|ßPßj÷¨state_zh¨|¨打开¨¨关闭¨÷}÷¨rt¨|÷}
5.保存并返回。
本项目代码中已经添加了小爱音箱控制的相关代码,如不需要使用改功能,请将下面的代码注释掉。
#define BLINKER_MIOT_LIGHT
void miotPowerState(const String & state)
{
BLINKER_LOG("need set power state: ", state);
if (state == BLINKER_CMD_ON) {
myservo.write(140);
delay(110);
myservo.write(90);
light_state=1;
BlinkerMIOT.powerState("on");
BlinkerMIOT.print();
}
else if (state == BLINKER_CMD_OFF) {
myservo.write(45);
delay(100);
myservo.write(90);
light_state=0;
BlinkerMIOT.powerState("off");
BlinkerMIOT.print();
}
}
void miotColor(int32_t color)
{
BLINKER_LOG("need set color: ", color);
if(light_state==-1 or light_state==1)
{
BlinkerMIOT.print();
myservo.write(45);
delay(100);
myservo.write(90);
light_state=0;
delay(350);
myservo.write(140);
delay(110);
myservo.write(90);
light_state=1;
}
else if(light_state==0)
{
BlinkerMIOT.print();
myservo.write(140);
delay(110);
myservo.write(90);
light_state=1;
}
BlinkerMIOT.color(color);
}
1.单片机控制代码由c++编写,相较于其它语言在执行速度上已经有不小的优势。但是由于esp8266(以nodemcu为例)性能较鸡肋。当代码过多/定义变量过多时,仍然有可能出现指令延迟/死机等问题。
2.在使用的过程中,要注意供电问题。【有时候舵机按不动开关可能不是代码的问题,而可能是接入单片机的电池/充电宝没电了】
3.在接入舵机时,一定要注意,不要将正负极反接。
4.修改io口请更改下方的代码:
myservo.attach(2);
arduino(https://www.arduino.cc/en/software)
点灯(https://www.diandeng.tech/home)