完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、设计目标
二、电路设计 在上一个版本电路的基础上进行优化,为节省成本去除CH340下载电路,板子喷黑色油漆提高科技感,输出引脚采用一般外设模块较为通用引脚设计,提高电路板通用性。 三个电路板通过铜柱共地并固定,通过一根黑色5V电源线进行板间供电,组成塔式结构。不同层数的电路板执行不同的功能,第一层为点灯科技+小爱对加湿器开关控制。 三、思路介绍 关于加湿器模块是本人于某宝以10元左右的价格购入的,该模块本身是通过USB供电并通过模块自身的按键进行开关的。所以我们要通过ESP8266去控制它开关便需要对该模块进行改造。最简单的方法便是通过GPIO口来替代加湿器模块上的按键实现远程控制加湿器模块的开关,并从电路板上将5V电源线和地线接入加湿器模块的供电端即可实现物联网电路板对加湿器供电。经过测试,该加湿器模块的控制机制为按键输入引脚检测到低电平后一段时间内,要检测到高电平,才能识别为开关。关于哪个引脚是按键输入引脚,通过万用表对加湿器按键引脚进行测量即可得知。懂得这个机制以后就容易多了,我们让ESP8266的D1连接到加湿器模块的按键输入引脚,D1默认为输出高电平,我们先将D1电平拉低,延迟一段时间以后,再将电平拉高,这时候会发现加湿器开启了。同理,该方法也可以使开启时的加湿器模块关闭,所以为了防止将原本处于开启状态的加湿器误关或将原本处于关闭状态的加湿器误开,需对当前加湿器运行状态进行判断,否则会产生bug。感兴趣的小伙伴可以买入加湿器模块然后跟着我的解决思路去改造尝试。 四、ESP8266代码 #define BLINKER_PRINT Serial #define BLINKER_WIFI #define BLINKER_MIOT_OUTLET #include char auth[] = "*********";//设备号 char ssid[] = "*********";//无线账号 char pswd[] = "*********";//无线密码 // 新建组件对象 BlinkerButton Button1("HUM_Button"); int count = 0;//加湿器计数器 int count1 = 0;//led翻转计数器 int HUM_OPEN=0;//加湿器标志位 int HUM_State=0;//加湿器开关状态标志位,0关,1开 #define HUM_Button D1 #define LED1 16 #define LED2 14 // 按下按键即会执行该函数 void button1_callback(const String & state) { BLINKER_LOG("get button state: ", state); digitalWrite(LED2, !digitalRead(LED2)); HUM_OPEN=1;//标志位开启 if(digitalRead(LED2)==0) { Button1.print("off"); } else { Button1.print("on"); } } // 如果未绑定的组件被触发,则会执行其中内容 void dataRead(const String & data) { BLINKER_LOG("Blinker readString: ", data); } //小爱同学处理函数 void miotPowerState(const String & state) { BLINKER_LOG("need set power state: ", state); if (state == BLINKER_CMD_ON) { BlinkerMIOT.powerState("on"); BlinkerMIOT.print(); if(HUM_State==0)//处于关闭状态开启 { digitalWrite(LED2, HIGH); HUM_OPEN=1; HUM_State=1;//开启 } } else if (state == BLINKER_CMD_OFF) { BlinkerMIOT.powerState("off"); BlinkerMIOT.print(); if(HUM_State==1)//处于开启状态关闭 { digitalWrite(LED2, LOW); HUM_OPEN=1; HUM_State=0;//关闭 } } } void setup() { // 初始化串口 Serial.begin(115200); #if defined(BLINKER_PRINT) BLINKER_DEBUG.stream(BLINKER_PRINT); #endif // 初始化有LED的IO pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, HIGH); pinMode(LED1, OUTPUT); digitalWrite(LED1, HIGH); pinMode(LED2, OUTPUT); digitalWrite(LED2, LOW); //初始化加湿器引脚 pinMode(HUM_Button, OUTPUT); digitalWrite(HUM_Button, HIGH);//上电关闭 // 初始化blinker Blinker.begin(auth, ssid, pswd); Blinker.attachData(dataRead); Button1.attach(button1_callback);//按键 //小爱回调函数 BlinkerMIOT.attachPowerState(miotPowerState); } void loop() { Blinker.run(); count1++;//led翻转计数器 if(HUM_OPEN==1) { digitalWrite(HUM_Button, LOW); count++; if(count==30) { digitalWrite(HUM_Button, HIGH); count=0; HUM_OPEN=0; } } if(count1==100) { digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); digitalWrite(LED1, !digitalRead(LED1)); count1=0; } } |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2956 浏览 16 评论
3458 浏览 1 评论
9002 浏览 16 评论
4051 浏览 18 评论
1110浏览 3评论
572浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
569浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2302浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1859浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 23:13 , Processed in 0.990098 second(s), Total 49, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号