使用小爱同学+ESP8266+舵机控制家里的电灯

news/2024/11/16 15:23:21/

目录

1.概述

2.环境准备

2.1 ESP8266的Arduino编译环境准备

 2.2 巴法云平台设置

 2.3 米家设置

3.控制程序

3.1 与云平台交互

3.2 与舵机交互

4.增加OTA功能

 5.打印一个外壳并加上一个机械按键

6.源文件


1.概述

        用舵机的角度拨动墙壁的电灯开关实现开关灯功能,利用ESP8266控制舵机的角度。小爱同学通过巴法云云平台和ESP8266进行TCP通讯交互,从而实现语音控制。

2.环境准备

2.1 ESP8266的Arduino编译环境准备

        本人使用的TB上12多块钱一块的ESP8266开发板。安装Arduino开发环境可以参考这篇博客:esp8266开发入门教程(基于Arduino)——环境安装_柒壹漆的博客-CSDN博客_esp8266开发

 2.2 巴法云平台设置

        为了和小爱同学交互,就需要一个云平台进行中转,大概的交互流程如下图:

        这里我使用的云平台是巴法云。以我一年多的使用情况来看,这个平台的稳定性还是很好的,几乎没出现过连接丢失的情况。

        首先去到他家的官网:巴法科技&巴法云-巴法设备云-巴法物联网云平台。注册个账号,按照如下截图步骤操作即可。

        主题可以简单的理解为被控制的一个/一组单片机的抽象:如果单片机已联网,并且订阅了这个主题,在此处推送消息,单片机就可以收到推送的消息。

        这里的主题名字是light002。结尾的002根据巴法云接口文档的定义即是灯泡设备。

巴法云接口文档截图

 2.3 米家设置

        打开米家app,底部--我的---其他平台设备---->点击添加--->找打巴法,登录你的巴法云账号,如果巴法云控制台有创建设备,设备就会自动同步过去了。

        

3.控制程序

3.1 与云平台交互

        对于和巴法云交互的TCP通讯程序,官方已经给出了例程:下载地址

        下载后解压用Arduino IDE打开,我们只需要更改注释中提示需要更改的部分。

         改好后将其烧录到ESP8266中,如果能在巴法云控制台中看到订阅者在线,说明这步成了。

3.2 与舵机交互

        按照如下图进行单片机和舵机的接线。注意舵机最好使用5V引脚供电,我手里这个使用3.3V供电有时舵机不工作。

        代码部分可以基于3.1章节的代码添加舵机控制代码。如下:

#include <Servo.h> //引入舵机库/*开灯*/
void turnOnLed(){Serial.println("Turn ON");//digitalWrite(LED_Pin,LOW); //这行巴法云示例的代码,注释掉,添加下面舵机控制代码myServo.write(60); //开灯时舵机向下走的角度delay(400);myServo.write(40);  //回到中间位置
}/*关灯*/
void turnOffLed(){ Serial.println("Turn OFF");//digitalWrite(LED_Pin,HIGH); //这行巴法云示例的代码,注释掉,添加下面舵机控制代码myServo.write(0); //关灯时舵机向上走的角度delay(400);myServo.write(40); //回到中间位置}

       这其中舵机的角度需要根据舵机在开关上的固定角度来调整。

       至此,如果一切顺利的话。你对小爱同学说“开卧室灯”,那么舵机就会转一定的角度。将舵机粘到灯的开关上即可以实现控制开关灯功能。

4.增加OTA功能

        ESP8266还有一个特性就是可以实现OTA功能。

        a.首先需要在Arduino IDE将代码编译为Bin文件。

         b.接着需要将此Bin文件上传到一个网络地址。如果有云服务器的话可以使用Web服务器发布。如果没有的话使用巴法云的OTA存储也可以,操作如下:

         c.添加OTA升级代码,如下:

#include <ESP8266httpUpdate.h>String upUrl = FirmwareBin; //固件Bin文件的链接void updateBin(){Serial.println("start update");    WiFiClient UpdateClient;t_httpUpdate_return ret = ESPhttpUpdate.update(UpdateClient, upUrl);switch(ret) {case HTTP_UPDATE_FAILED:      //当升级失败Serial.println("[update] Update failed.");break;case HTTP_UPDATE_NO_UPDATES:  //当无升级Serial.println("[update] Update no Update.");break;case HTTP_UPDATE_OK:         //当升级成功Serial.println("[update] Update ok.");break;}
}

        d.添加OTA升级的触发代码。本人的策略是如果收到云平台发的“update”消息,即开始升级。在Base的代码中添加如下即可。

 5.打印一个外壳并加上一个机械按键

        为了让PCB不至于裸露在外面,我建模并3D打印了一个外壳。外壳上面那个窟窿就是安装机械按键的地方。

       安装个机械按键是为了在断网的时候,也能有一个很酷炫的开灯关灯方式。那么经过这一段时间的体验,我发现机械按键来控制开关灯的手感惊人的好。茶轴哒哒的手感和小爱同学一比,后者也不香了。(笑)

        安装后的样子就是这样的:

       机械按键两个脚一个接GND,一个接ESP8266的D5引脚。将D5配置Input上拉即可。这部分代码可以在源文件的KeyCrtLed函数中找到。

6.源文件

        这个小项目的所有文件(包括代码和3D模型)已经上传到github中。

        链接:GitHub - bin96/ESP8266CrtLight


http://www.ppmy.cn/news/675383.html

相关文章

用户体验与结婚教练

我的朋友文敏&#xff0c;在做一个工作——结婚教练。具体就是指导30岁以上&#xff0c;下定决心要结婚的女生&#xff0c;如何在一年半之内搞定结婚。而且她的这套方法&#xff0c;已经帮助30多个30多岁的女生结婚了。 我就很好奇&#xff0c;想了解她的核心方法&#xff0c;然…

一步一步实现自己的GAN

生成式对抗网络是20年来机器学习领域最酷的想法。 ——Yann LeCun 自从两年前蒙特利尔大学的Ian Goodfellow等人提出生成式对抗网络&#xff08;Generative Adversarial Networks&#xff0c;GAN&#xff09;的概念以来&#xff0c;GAN呈现出井喷式发展。 这篇发布在O’Reilly上…

【sketchup 2021】草图大师中二维图像交互(jpeg等格式图像的导入、图像的输出、图像导入变得模糊处理方法)与三维图像交互(其他软件导出的三维导入到草图大师、草图大师导出为三维模型】

文章目录 图像导入变得模糊处理方法让室外场景效果更逼真二维图像交互jpeg等格式图像的导入【给卫星图建立立面模型】图片准备和导入尺寸调整矩形面准备描绘轮廓 导出为jpeg等格式的图像说明导出为二维模型选项说明图像的输出 三维图像交互外置的三维模型导入外置模型说明导入到…

GMF入门资料超全

最近发现一个比较全的GMF资料分享一下&#xff01; 原文地址&#xff1a;http://yiliner.iteye.com/category/34448?show_fulltrue 修改GMF属性视图 博客分类&#xff1a; GMF 上图中紫色的椭圆结点在ecore模型中代表Method&#xff0c;在属性视图中可见它的一些属性。如果要…

整个小东西,在IDEA中自动生成PO、DAO、Mapper

作者&#xff1a;小傅哥 博客&#xff1a;https://bugstack.cn 源码&#xff1a;https://github.com/fuzhengwei/CodeGuide/wiki 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 一、前言 都能用&#xff0c;都能凑活用&#xff01; 一个东…

C++学习之核心编程讲义,仅供学习参考

文章目录 c核心编程1 内存分区模型1.1 程序运行前1.2 程序运行后1.3 new操作符 2 引用2.1 引用的基本使用2.2 引用注意事项2.3 引用做函数参数2.4 引用做函数返回值2.5 引用的本质2.6 常量引用 3 函数提高3.1 函数默认参数3.2 函数占位参数3.3 函数重载3.3.1 函数重载概述3.3.2…

WiFiduino+blinker+小爱同学打造智慧卧室

系列文章目录 文章目录 系列文章目录前言一、实现功能二、所需材料三、导线连接四、软件开发1.开发环境搭建2.编写程序 五 手机操作部分1.blinkerAPP2. 米家APP3.小米音箱APP 六、实物部分1.实物图片 总结 前言 本科二年级时通过一个比赛接触到arduino&#xff0c;怀着对ardui…

Swagge文档根据IP进行授权拦截

我们在上一篇文章中介绍了swagger加密码的方式和代码。 swagger添加访问密码_zlfjavahome的博客-CSDN博客 但是有的公司有更严格的要求&#xff0c;比如限制IP访问&#xff0c;这篇文章就讲一下如何通过IP进行访问控制&#xff0c;只允许特定的IP地址访问Swagger接口。 第一…