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

目录

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

在本项目中,我们将探索如何使用智能音箱"小爱同学"或"天猫精灵"通过ESP8266 WiFi模块和Arduino控制器来实现对舵机的远程控制,这是一次将物联网技术与人工智能语音助手结合的有趣尝试。"点科技"在这里可能指的是整个项目的创意和技术实现,它旨在为DIY爱好者提供一种新颖的互动方式。 ESP8266是一款低成本且功能强大的WiFi模块,常被用于物联网项目。它能够使Arduino这样的微控制器接入无线网络,从而实现远程数据传输和控制ESP8266具有丰富的GPIO(通用输入/输出)引脚,可以连接各种传感器和执行器,比如舵机。通过编程,我们可以设置ESP8266接收来自智能音箱的指令,并将其转换为控制舵机的动作信号。 舵机是一种常见的伺服电机,能够精确地转动到特定的角度。在机器人和模型制作等领域,舵机广泛用于实现精确的机械运动。在本项目中,舵机将作为被控制的执行机构,根据智能音箱的指令改变其角度。 Arduino是一个开源电子平台,基于易于使用的硬件和软件,适合初学者和专业人士进行原型开发。在本项目中,Arduino作为主控制器,接收ESP8266接收到的网络指令,并负责驱动舵机动作。用户需要编写Arduino程序,处理从ESP8266接收的数据,并控制舵机的旋转。 为了实现智能音箱与系统的交互,我们需要配置特定的API或者使用第三方服务,如IFTTT(If This Then That),让智能音箱能理解并执行特定的语音命令。例如,用户可以说“小爱同学,让舵机转到90度”,音箱会将这个命令转化为HTTP请求发送到ESP8266,然后ESP8266解析请求并指示Arduino控制舵机转动到相应角度。 在提供的文件名中,“8266天猫精灵点科技”可能包含ESP8266与天猫精灵集成的示例代码或教程,而“esp8266舵机控制小爱同学科技”可能涉及到ESP8266小爱同学的交互以及舵机控制部分的代码。这些文件是实施该项目的关键资源,包括电路设计、编程代码和可能的硬件组装指南。 这个项目融合了物联网、语音识别、Arduino编程和机械控制等多个领域的知识,对于想要提升自己在这些领域技能的爱好者来说,这是一个非常有价值的实践项目。通过学习和实现这个项目,不仅可以掌握ESP8266与Arduino的协同工作,还能了解智能音箱的语音控制接口,同时也能享受到DIY的乐趣。
固件下载完成后就在电脑打开MQTT服务器脚本和HTTP服务器脚本: 打开MQTT服务器: 然后就是运行界面: 打开HTTP服务器: 启动成功就会看到上面界面了,必须先启动MQTT服务器再启动HTTP服务器脚本,因为HTTP服务器脚本要连接MQTT服务器。 注意这里的IP地址和端口,接下来要用的; 接下来用你的手机连上路由器,打开微信扫一扫,扫描配网二维码: 注:如果路由器无法上网就先用数据上网扫了配网二维码,然后再连接路由器 接着点击配置设备上网: 然后接填写热点的密码,这个时候不要点击连接,只输入密码就行了: 打开资料根目录里面的XCOM串口调试助手: 选择你电脑对应的串口号,波特率选择115200,打开串口 然后按一下ESP8266模块的复位按键,就会看到有数据: 接收框显示SC_STATUS_FIND_CHANNEL时,就点击手机上的连接按钮: 然后大概十秒钟左右就会看到ESP8266模块收到wifi账号和密码了 如果30秒钟后还是没有收到账号和密码,就是配网失败了,按一下模块的复位,手机返回重新点击连接进行配网 配网成功后就是等待模块自动连接热点,然后等到出现Connection failed!后,就在发送框输入*+你电脑MQTT服务器IP,例如我的IP地址是:192.168.199.181,所以我输入*192.168.199.181,然后点击发送 接着模块会自动复位,等模块复位完了就接着发送#+MQTT服务器端口号: 发送完端口号,模块也会自动复位,并自动连接MQTT服务器: 看到上图就是说明连接MQTT服务器成功了。MQTT订阅的主题是本模块的ID号。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值