当Google助手遇上ESP32和全彩LED灯

好久不见,最近因为有很多事要忙没有怎么更新,这次从华强北邮购了一些电子元件,准备做一个简单的全彩LED灯。这里我们利用Google助手来实现语音控制的功能,尽管我们不能将自制的设备添加到Google Home里面,但是我们可以“曲线救国”。最后的成品效果如下:

准备阶段

我们在某宝上面购买了所需要的部件,当然你也可以选择合适的替代品,没有必要完全一样。按照道理来说,你只需要稍微修改就能够在ESP8266等平台上面跑通本文的代码。

硬件:

  • Goouuu-ESP32
  • KY-009(非同型号,国内制造兼容元件)
  • 杜邦线若干
  • 100Ω电阻

软件:

  • PlatformIO
  • Adafruit IO
  • IFTTT
  • Google Assistant

连接模块

连接模块没有太大的需要说明的地方,这里我们按照模块上面的标识(RGB-)连接到GPIO和GND即可,但是需要注意的是,如果你用的是标准的KY-009模块的话,R处需要连接一个100欧姆的电阻,因为工作电压不同。下面的表格展示了不同平台下需要使用的电阻(原表来自LED Tutorial for Arduino and ESP8266)。

工作电压 Arduino ESP
Red 1.8V…2.1V R=220Ω R=100Ω
Green 3.0V…3.2V R=100Ω 无需电阻
Blue 3.0V…3.2V R=100Ω 无需电阻

连好之后看上去是这个样子,因为多买了一个模块,所以并联到一起。

经过实测发现,这个模块的接口的标注有误,对应关系其实如下:

标注接口 真实接口
R G
G R
B B
GND GND

如果你购买到了同样的模块请注意不要在写程序的时候弄错GPIO了。

搭建Trigger Chain

仔细考虑之后决定使用MQTT协议来通信,这里选择的Broker是Adafruit IO,因为IFTTT能够直接连通Google Assistant和Adafruit IO,这能够变相解决无法添加Google Home设备的问题。

我们先在Adafruit IO上面创建Feed和Dashboard,首先我们创建了一个名为RGB Light的Dashboard,并新建了一个Text型Block,分配给它的Feed名称为RGB Light Feed。之所以不使用Color Picker是因为我们需要想让用户使用预设的颜色,语言描述RGB值并不现实,如果真的需要实现的话可以考虑APP+Bluetooth来做。

这边配置好后来到IFTTT,我们需要连接起Google助手和我们的Adafruit IO。

这里分别创建了关闭灯光和开启灯光的应用,$代表关键词,我们将关键词直接传给feed,如果是关闭灯光的话则传过去off。这样,我们成功建立起了Google助手和ESP32之间的联系。

编写代码

以前一直在用Arduino IDE,但是偶然看到了PlatformIO,一款集成到VS Code和Atom上面的IDE,并且开发调试也比较方便,于是转到这上面开发。

在Platforms上搜索Espressif 32并安装,并在Libraries上搜索安装Adafruit MQTT Library库。PlatformIO能够兼容Arduino和ESP-IDF开发,我们可以直接无缝迁移,直接在上面编写Arduino程序。

源码已经开源到了ESP32 Full Color LED,ESP32暂时不支持analogWrite函数,这里我们使用了GitHub上网友提供的解决方案。

如果有其他问题欢迎在评论区指出,我会回复留言。

  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 许可协议。转载需要标明作者,并以超链接的方式指向原文。
  • Copyrights © 2020 Kevin Li
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~