0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何通过语音命令控制灯光

454398 来源:网络整理 作者:网络整理 2019-11-18 11:37 次阅读

步骤1:Google Assistant控制的家庭自动化项目概述

我正在使用Arduino UNO微控制器端和用于连接互联网的ESP8266模块。老实说,还有很多其他方法可以解决这个问题。您可以将功能更强大的处理器(如Raspberry Pi或其他SOC)与内置Wi-Fi(如ESP12E或ESP32)结合使用。但是我决定使用老式的Arduino和ESP8266板来降低成本,并且不要过度设计任何东西。

对于这个项目,我们还将使用ESP8266贴身地构建一个Arduino WiFi防护罩在Arduino UNO板上。此屏蔽可用于通过AT命令或直接使用Arduino IDE对ESP8266进行编程。它还具有将FTDI模块直接连接到ESP8226的选项,这允许将ESP8266编程为无需Arduino的独立设备,并且还可以根据需要将新固件刷新到ESP8266模块中。因此,该防护罩可用于许多其他需要互联网连接的创意Arduino项目。

为了在手机上与Google助手通信,我们使用了IFTTT服务,该服务将助手配置为侦听特定命令并在收到命令时触发链接。现在,您可能已经知道ESP8266仅可以通过API调用从Internet读取信息,因此我们需要一个可以为我们提供此API选项的平台,这就是ThingSpeak所在的位置。基本上,提供给Google Assistant的语音命令会更改此值相应地在ThingSpeak频道中的字段。 ESP8266使用API调用定期检查此字段的值,然后使用串行通信将此值发送给Arduino。 Arduino然后执行所需的操作,例如根据接收到的值切换继电器。

步骤2:使用ESP8266的Arduino Uno Wi-Fi Shield

让我们开始将Arduino UNO板与ESP8266 Wi-Fi模块连接。 ESP8266是一个棘手的模块。它需要自己的电源和特定的连接设置才能与Arduino通信。如果您是绝对的初学者,则强烈建议您阅读ESP8266入门教程,然后再继续进行操作。

请记住,ESP8266购买时随附带有可与AT通讯的默认固件。命令。但是,如果模块是直接用Arduino编程的,则默认固件将被删除,如果要使用AT命令,则必须再次刷新。

我们将使用LM317作为3.3V稳压器。该3.3V用于为ESP8266模块供电,因为来自Arduino UNO的3.3V将无法为ESP模块提供足够的电流。 LM317输入引脚可以由Arduino UNO板Vin引脚的DC输入桶式插孔供电。

ESP模块的GPIO0引脚连接到跳线引脚,该跳线可以切换为将该引脚接地。这允许用户将ESP模块设置为在AT命令模式或编程模式(Arduino IDE)下工作。 GPIO0和GPIO2都连接到外部连接器,因此这些GPIO引脚也可以使用。

最后在Arduino方面,我们将ESP8266模块的Rx和Tx引脚连接到Arduino的12和13引脚。我们没有使用硬件串行(引脚0和1)来简化调试。您还可以注意到,还提供了连接16x2 LCD的选项,因此可以将其直接安装在屏蔽层的顶部。 LCD由Arduino的5V引脚供电。

步骤3:使用EasyEDA为ESP8266 Wi-Fi模块制作PCB

为Arduino板设计屏蔽层时,一个具有挑战性的部分就是要正确地占用空间。如果尺寸错误,那么屏蔽将无法正确地安装在Arduino UNO板上。但是,幸运的是,EasyEDA几乎可以为市场上的所有组件提供封装。这是由于其庞大的用户社区,用户可以在其中创建足迹并使其可供公众使用以用于其项目。

EasyEDA是一种在线EDA工具,我以前使用过很多次,发现它非常方便可以使用,因为它具有良好的覆盖范围并且是开源的。设计完PCB之后,我们可以通过低成本的PCB制造服务订购PCB样品。他们还提供元件采购服务,其中有大量的电子元件库存,用户可以与PCB订单一起订购所需的元件。

在设计电路和PCB时,您还可以公开电路和PCB设计,以便其他用户可以复制或编辑它们并从您的工作中受益,我们还制作了整个电路和PCB此电路的公共布局,请查看以下链接:

https://easyeda.com/CircuitDigest/Arduino-WiFi-sh 。..

您可以查看任何层(顶部,“底部”,“底部丝绸”,“底部丝绸”等),方法是从“层”窗口中选择层。除此之外,它们还提供PCB在制造后的外观的3D模型视图。 Wi-Fi防护层的顶层和底层的快照看起来像这样

第4步:使用EasyEDA在线计算和订购PCB样品

完成此设计之后Arduino Uno Wi-Fi模块,您可以通过JLCPCB.com订购PCB。要从JLCPCB订购PCB,您需要Gerber File。要下载PCB的Gerber文件,只需单击EasyEDA编辑器页面上的Generate Fabrication File按钮,然后从那里下载Gerber文件,或者您可以单击JLCPCB上的订购,如上图所示。这会将您重定向到JLCPCB.com,您可以在其中选择要订购的PCB数量,所需的铜层数量,PCB厚度,铜重量以及甚至是PCB颜色,如上面的快照所示。

在JLCPCB按钮上单击订购后,它将带您到JLCPCB网站,在此您可以以非常低的价格订购PCB,即2美元。他们的构建时间也非常短,只需DHL交付3-5天即可交付48小时,基本上您可以在订购一周后得到PCB。

订购PCB后,您可以检查生产进度日期和时间对您的PCB的影响。您可以通过在“帐户”页面上进行检查,然后单击PCB下方的“生产进度”链接,如上图所示。

订购PCB几天后,我得到了包装精美的PCB样品,如下图所示以上图片。

确保轨道和足迹正确无误。我开始组装PCB,我使用了母头来放置Arduino Nano和LCD,以便以后在其他项目中需要时可以将它们卸下。完全焊接的电路板看起来像上面的

步骤5:Arduino Wi-Fi Shield编程模式和AT模式

当使用Arduino IDE直接对ESP8266进行编程或对其进行闪烁时,应在每次上传之前将GPIO 0引脚接地,并且每次都要将Reset引脚暂时接地。同样,当ESP8266使用AT指令时,应将GPIO引脚留空,然后再次将Reset引脚暂时接地以将其复位。

为了简化设计,我们设计了Wi-Fi屏蔽具有一个可在编程模式和AT命令模式之间切换的拨动引脚,如上图所示。同样,在每次上传代码之前,只要每次按下复位按钮(红色),就可以将Reset引脚接地。

开发板上还可以选择将FTDI模块直接连接到ESP,这对于刷新ESP8266模块要进行闪烁,请连接FTDI模块,然后将引脚设置为编程模式,如上所示。然后从给定的链接下载ESP8266_Flasher软件和固件bin文件。然后打开软件并使用Bin按钮浏览到bin文件,然后键入右侧的COM端口并将默认地址保留为0x00000。最后单击下载按钮以刷新ESP8266模块。该软件也显示在上图中,但请记住,只有在ESP8266上的默认固件被覆盖后,您才需要刷新它。

步骤6:为Google助手设置ThingSpeak频道

我们在ThingSpeak中需要一个通道,该通道将存储来自Google助手的数据,并允许ESP8266使用API调用来检索这些数据。如果您不熟悉ThingSpeak,请通过在Thingspeak.com上注册并单击新频道来设置帐户,还请查看我们之前的项目,以了解有关将ThingSpeak与Arduino结合使用的更多信息。您可以为您的频道选择任何名称并提供描述。由于我们仅切换一个光源,因此我仅使用了一个字段并将其命名为Light,但同样可以使用任意多个字段。我的频道设置看起来像这样,记下我的情况下的频道ID(683739)和我的情况下的字段号(1),以后我们将需要它。

下一步单击API密钥标签,此处将为您提供两个API密钥,一个用于写入功能,另一个用于读取功能。您只能分别使用这些键将值读取或写入字段。每个键都是唯一的,上面显示的我的键肯定会有所不同。切勿共享您的密钥,因为它可以授予对您的频道进行写入或读取的权限。上面显示的这些键在使用后已销毁。

现在让我们看一下API GET调用,通过这些调用我们可以向刚创建的字段写入和读取数据。

从中读取事物字段:

api.thingspeak.com/channels/683739/fields/1/last.json?api_key=7EK8DHQDV3M0EJ6S&results=2

写入事物字段:

api。 Thingspeak.com/update?api_key=UEI3D4YTWX9OQQ4B&field1=7

这些是我的API,您必须用键替换键值,并根据ThingSpeak通道更改通道ID。如果您选择了如图中所示的第一个字段,则无需更改字段值。

您还可以尝试在您的浏览器上加载这些API调用,并检查其工作方式。在上面的“写物”字段中,我们将7(最后添加)写入通道。您可以在浏览器中加载它,并检查该值是否反映在您的ThingSpeak帐户中。同样,加载到浏览器中时从Thing Field API调用中读取的内容应为您以前发送给Field的值,在这种情况下为7。

步骤7:设置IFTTT小程序

h2》

现在我们知道如何从该字段发送和读取值,接下来我们必须在IFTTT帐户中设置两个applet。如果您不熟悉IFTTT,只需注册并链接您的Gmail帐户,则该Gmail帐户应采用与您使用Google语音助手相同的一种形式。两个小程序中的两个都将通过上述链接用于将值写入字段。但是,使用上面的API调用,一个会监听“打开阅读灯”并将其写入“ 1”,而另一个小程序会监听“关闭阅读灯”并写入“ 0”。

要创建小程序,请进入我的小程序,然后单击“新小程序”。然后在“此”部分中选择Google语音助手,并在“那”部分中选择Webhooks服务。这与我们对基于物联网的门安全项目所做的工作非常相似。如果您对如何操作感到困惑,请参阅本文,下面的图像也将为您提供帮助。

步骤8:为Google Assistant Home Automation编程Arduino

现在应该同时设置IFTTT和ThingSpeak帐户。因此,根据向Google助手发送的命令,IFTTT将向我们的ThingSpeak帐户发送一个值(0或1)。现在,在Arduino方面,我们必须编写一个程序来检查field的值是0还是1。如果0,则必须关闭灯,如果1,则必须打开灯。

最后,给出了完成此操作的完整程序,我将程序分成有意义的代码片段,并在上面进行了解释。我们首先定义将ESP和LCD连接到Arduino的引脚。您可以参考电路图进行验证。

SoftwareSerial ESP(12,13); //ESP is connected to 12 and 13 pin of Arduino

const int rs = 7, en = 6, d4 = 5, d5 = 4, d6 = 3, d7 = 2; //Mention the pin number for LCD connection

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

然后,我们必须输入一些关键参数,例如ESP应该连接到其密码的Wi-Fi名称,最后是我们从中获得的API调用请求我们的话语。确保已根据您的应用程序更改了这些凭据。验证API密钥并将其加载到浏览器中以确保。

String WiFi_SSID = “Oneplus”;

String WiFi_Pass = “nightfury”;

String sendData = “GET /channels/683739/fields/1/last.json?api_key=7EK8DHQDV3M0EJ6S&results=2”;

String output = “”; //Initialize a null string variable

在设置功能中,我们将引脚10声明为输出,这是我们通过继电器连接负载的地方。然后,我们在LCD上显示一小段介绍文字,并使用上述代码行初始化串行监视器。

pinMode(10,OUTPUT);

lcd.begin(16, 2); //Initialise 16*2 LCD

lcd.print(“ Arduino WiFi”); //Intro Message line 1

lcd.setCursor(0, 1);

lcd.print(“ Shield ”); //Intro Message line 2

delay(2000);

Serial.begin (9600);

默认情况下,ESP的波特率为115200,但Arduino并非如此足够快的速度以如此高的速度从ESP读取数据。它确实读取数据,但是我个人很多次发现很多垃圾值。因此,我决定使用AT + CIOBAUD = 9600将ESP更改为以9600波特率工作,如上所示。更改波特率后,我们可以重新初始化软件序列以使用9600波特率。

ESP.begin(115200);

ESP.println(“AT+CIOBAUD=9600”);

delay(100);

ESP.begin(9600);

接下来,我们有一系列AT命令,这些命令只需要发送到模块一次。它们包括关闭Echo选项(ATE0),然后将ESP设置为在站模式下工作(AT + CWMODE = 1),然后使用(AT + CWJAP)等将其连接到路由器。一旦执行,ESP就会记住这些详细信息,并在每次开机时将其作为站点连接到我们的路由器。因此,您可以在第一次使用后注释这些行(不过是可选的)。

ESP_talk(“ATE0”, 1000); //Turn off Echo

ESP_talk(“AT+CWMODE=1”, 1000); //Set ESP as station

ESP_talk(“AT+CWJAP=”“+ WiFi_SSID +”“,”“+ WiFi_Pass +”“”, 5000); //Connect to WiFi

delay(1000);

ESP_talk(“AT+CIPMUX=1”,1000);

delay(1000);

在主循环函数中,我们必须连接到ThingSpeak API。这可以通过首先使用以下命令启动与ThingSpeak网络的TCP连接来完成。

ESP_talk(“AT+CIPSTART=”TCP“,”api.thingspeak.com“,80”,1000);

然后我们必须知道使用AT + CIPSEND将多少个字符发送给该连接。在我的情况下是76。因为我们将发送上述命令,所以我们有74个字符,并且必须在“/n”中添加2个字符,从而得到76。

GET /channels/683739/fields/1/last.json?api_key=7EK8DHQDV3M0EJ6S&results=2

然后我们实际上发送了上面存储在变量sendData中的数据。为了稳定起见,这些命令以100ms的延迟发送,但这不是强制性的。上面显示了相同的程序。

ESP_talk(“AT+CIPSTART=”TCP“,”api.thingspeak.com“,80”,1000);//AT+CIPSTART=“TCP”,“api.thingspeak.com”,80

delay(100);

ESP_talk(“AT+CIPSEND=76”,1000);

delay(100);

ESP_talk(sendData,1000); delay(100);

上面的代码将从ThingSpeak网站上以字符串值的形式获取字段数据,并将其存储在变量“ output”中,看起来像像这样。

+IPD,64:{“created_at”:“2019-01-22T12:13:32Z”,“entry_id”:15,“field1”:“0”}CLOSED

如您所见,在整个字符串值上,我们只需要检查field1值是0还是1。因此我们在Arduino中使用charAT函数来获取特定的char值构成整个字符串。该值的位置比上一个值落后11步。因此,代码看起来像

int light_value = int (output.charAt(output.length()-11))-48;

的最后一步是将该值与0和1进行比较。然后,如果为1,则将灯打开,如果为0,则将其关闭。还会根据字段值使LCD显示结果。

lcd.clear();

lcd.print(“Listning.。..”); //Intro Message line 1

lcd.setCursor(0, 1);

if (light_value == 0) //light should be off

{

lcd.print(“Light is OFF :-(” );

digitalWrite(10,LOW);

}

if (light_value == 1) //light should be off

{

lcd.print(“:-) Light is ON”);

digitalWrite(10,HIGH);

}

您会注意到ESP_talk函数在整个程序中得到了广泛使用。该功能基本上有两个参数,一个是发送到ESP模块的实际命令,另一个是ESP应该在该超时值之内响应发送的命令。 ESP的响应然后存储在变量输出中。在调试ESP模块时,这非常方便。功能定义如下所示。

void ESP_talk(String AT_cmd, const int timeout)

{

Serial.print(“Sent: ”);

Serial.print(AT_cmd);

ESP.println(AT_cmd); //print to ESP through software serial

Serial.println(“”);//Move to next line

long int time = millis();

output=“”; //clear the string

while ( (time + timeout) 》 millis())

{

while (ESP.available())

{

char i = ESP.read(); // read one char

output +=i;//Combine char to string

}

}

Serial.print(“Received: ”);

Serial.print(output);

}

使用Google Assistant切换灯光

因此,我们都准备使用Arduino ESP8266 Wi-Fi模块通过Google Assistant在任何地方控制家用电器。如前所述,以上程序用于切换引脚10。因此,您可以在引脚10上添加一个继电器,并根据需要连接继电器额定值范围内的任何交流负载。上面显示了我使用Relay和带Wi-Fi屏蔽的Arduino板的设置。

我已经使用了一个小阅读灯作为演示负载,但是您可以选择使用任何东西。启动设置并向您的Google助手说出命令,您应该会看到Light得到相应的控制。当您向Google助手发出命令时,您还可以看到ThingSpeak频道值正在更改。为了进行调试,您可以打开串行监视器以检查是否一切正常。如果是,则您的串行监视器应显示类似这样的内容。

您可以观看上面的视频以检查项目的完整工作,还可以检查我们的其他Arduino家庭自动化项目。希望您喜欢该项目并喜欢构建它。如果您有任何问题,请随时将它们留在上面的评论部分中,我会尽力解决。您也可以将论坛用于其他技术问题。
责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Arduino
    +关注

    关注

    184

    文章

    6425

    浏览量

    184775
  • ESP8266
    +关注

    关注

    50

    文章

    946

    浏览量

    43870
收藏 人收藏

    评论

    相关推荐

    智能灯光控制系统怎么布线 智能灯光控制系统的组成

    。 首先,智能灯光控制系统的控制中心是整个系统的核心,负责对灯光进行集中控制管理。控制中心一般由
    的头像 发表于 01-22 11:28 698次阅读

    NRK3303芯片丨助力智能台灯实现语音控制

    台灯是日常生活中一种常见的照明产品。以往的台灯大多都是采取手动控制通过按键去对台灯的亮度进行调整。随着科技的发展,台灯也开始走向了智能化。人们已经能够对智能台灯进行语音控制
    的头像 发表于 10-28 08:07 410次阅读
    NRK3303芯片丨助力智能台灯实现<b class='flag-5'>语音</b><b class='flag-5'>控制</b>

    化妆镜灯也能离线语音控制

    通过将离线语音技术应用于化妆镜灯,用户只需通过简单的声音指令,就可以轻松控制灯光的开关和亮度调节
    的头像 发表于 08-31 14:11 647次阅读
    化妆镜灯也能离线<b class='flag-5'>语音</b><b class='flag-5'>控制</b>

    如何使用AT命令通过USCI_ UART接口与AS7221模块进行通信

    : NuMaker-M031KI V1.0,AS7221模块 在此示例代码中, M031 可以通过 UART 接口发送AT指令,与 AS7221 嵌入模块进行通信,以控制灯光行为,包括亮度调整、色温
    发表于 08-29 07:10

    如何使用Alexa语音服务集成在受约束的物联网设备上设置语音命令

    本指南供硬件和软件架构师学习如何使用Alexa语音服务集成在受约束的物联网设备上设置语音命令。AWS物联网核心的Alexa语音服务集成(AIA)将与Alexa Voice Servic
    发表于 08-02 12:53

    基于STM32单片机的书房灯光控制系统设计

    和ESP8266无线显示屏上进行显示,当检测到温度超过极限则会控制蜂鸣器进行报警。通过按键可以执行不同模式,当识别到语音则会根据语音检测执行语音
    的头像 发表于 07-20 09:18 796次阅读
    基于STM32单片机的书房<b class='flag-5'>灯光</b><b class='flag-5'>控制</b>系统设计

    智能语音香薰灯:离线语音控制技术的优势与应用

    离线语音控制技术是指在不需要连接互联网的情况下,通过语音指令直接控制设备的技术。这种技术主要运用了语音
    的头像 发表于 07-11 15:09 735次阅读
    智能<b class='flag-5'>语音</b>香薰灯:离线<b class='flag-5'>语音</b><b class='flag-5'>控制</b>技术的优势与应用

    NRK3303离线语音识别芯片搭载智能风扇,让你轻松享受智能生活

    智能语音风扇是一种带有语音识别和控制功能的电风扇。它可以通过语音指令控制风速、定时、摆头等功能,
    的头像 发表于 07-02 10:00 465次阅读
    NRK3303离线<b class='flag-5'>语音</b>识别芯片搭载智能风扇,让你轻松享受智能生活

    使用语音命令的家庭自动化

    电子发烧友网站提供《使用语音命令的家庭自动化.zip》资料免费下载
    发表于 06-30 11:15 0次下载
    使用<b class='flag-5'>语音</b><b class='flag-5'>命令</b>的家庭自动化

    Lane Tech PCL:通过语音命令的东西分配器

    电子发烧友网站提供《Lane Tech PCL:通过语音命令的东西分配器.zip》资料免费下载
    发表于 06-26 11:36 0次下载
    Lane Tech PCL:<b class='flag-5'>通过</b><b class='flag-5'>语音</b><b class='flag-5'>命令</b>的东西分配器

    通过语音控制执行系统命令

    电子发烧友网站提供《通过语音控制执行系统命令.zip》资料免费下载
    发表于 06-20 09:39 0次下载
    <b class='flag-5'>通过</b><b class='flag-5'>语音</b><b class='flag-5'>控制</b>执行系统<b class='flag-5'>命令</b>

    语音控制语音命令门锁制作

    电子发烧友网站提供《用语音控制语音命令门锁制作.zip》资料免费下载
    发表于 06-12 10:48 1次下载
    用<b class='flag-5'>语音</b><b class='flag-5'>控制</b>的<b class='flag-5'>语音</b><b class='flag-5'>命令</b>门锁制作

    如何开发智能家居语音控制方案

    的核心功能就是通过AI语音控制取代传统的遥控器控制,但是常用语音芯片存在语音识别准确率低,识别速
    发表于 05-31 09:50

    楼宇灯光控制系统方案

    楼宇的灯光已经成为了城市夜景的主体,楼宇灯光的价值不仅限于咱们,也是城市形象的一部分。楼宇夜景灯光设计通过灯光亮度的变化、颜色搭配,能够很好
    的头像 发表于 05-22 15:35 514次阅读

    智能语音家居控制

    随着人工智能的发展,离线语音控制逐渐进入人们的生活,提高了人们的居家生活质量。而离线智能语音家居控制更是离线语音技术中的重要一环,它
    的头像 发表于 04-25 09:36 460次阅读
    智能<b class='flag-5'>语音</b>家居<b class='flag-5'>控制</b>