0 前言
在前面的学习中我们采用了局域网中的网页、APP等方式对ESP8266进行了控制,但真正的智能化还有一个重要的应用----那就是语音控制,有的童靴可能会说,语音解码早就不是什么事了,甚至在很早以前就可以在嵌入式单板中集成语音解码芯片了。说的没错!但真正要把其功能做得稳定、不误触发、识别率高、适配各种应用场景、百万级的终端接入其实是难度很大的,国内也只有少数几家能够支撑得起,比如阿里、小米、百度,他们都推出了自己的智能音箱产品,这其实才给智能家居应用提供了一个资源整合的平台。其实物联网鼓吹了这么多年,这两年才是其真正落地、升华的时候,可惜人们已经没有了往日的激情,他们正忙着去炒作新的浪潮。好了,今天主要来介绍ESP8266这样一款业界典范如何与我们的阿里IOT平台进行对接:IoT 平台。
1 准备工作
1)首先我们需要注册一个阿里IOT的帐号,可以直接使用你的淘宝帐号就行,只是需要授权一下就OK,然后进入控制台。
下面就开始创建一个产品,点击添加新产品,会发现有很多品类,现在市场上开发应用得比较多的基本上就是智能开关面板和智能插座,我们新建一个智能灯。一般,通信方式有两种,蓝牙和WIFI,蓝牙是低功耗的首选方案,不过蓝牙的底层驱动会的人真不多,开发难度有点大。这里我们是使用ESP8266,当然选WIFI了。
真正的RGB灯,其实是可以支持256*256*256种颜色的,这里一方面简单处理,我们只设定了红、绿、蓝、白(就是3个加一起),也没有设置工作环境(比如阅读、休息模式等,其实本质上也是在控制颜色结合与亮度),另一方面也是主要原因,是我们采用的是一个很简单的RGB,精细控制的效果还真不咋样,不过没有关系,只是实验用而已。
人机交互这一块主要是一些语料,由天猫精灵采集上传后解码。默认语料和你前面选择的功能相关,也就是你前面选择了什么功能,就会进行匹配。
当然APP端也是有的,不过这个APP是一个H5界面,你写好发布后可集成到天猫精灵的APP里面,我们这里主要使用语音功能,因此H5界面直接用平台的模板即可。
设备调试页面有一个很重要的参数:三元组,你可以认为他是阿里IOT平台中每个设备的唯一标识,要求做到一机一密,先把他保存下来,后面烧录到ESP8266中。
开发阶段会给10个三元组你调试使用,量产的时候可以再申请。
这里要注意,三元组是Product ID 、Device Secret和Device Name,比如智能开关面板就只需要这三个信息,而我们新建的智能灯还需要一个:ProductSecret,这个在哪里呢?其实他就是产品定义时候的标识符。
然后把他用一个csv文件存起来,一定要是csv,如果你下载的乐鑫例程,在目录中也有模板:C:msys32homewimesp-aliyunconfigmass_mfgsingle_mfg_config.csv
2)ESP8266程序端
下位机的程序,我们直接采用了乐鑫官方提供的例程,已经写得非常全面了,其是基于RTOS3.2版本的,本身也是采用的MQTT协议,大多接口都已经封装实现好了,感兴趣的可以好好看看,我们说明一下对本RGB-LED控制需要修改的地方。工程目录中对我们有用的3个文档如下:
第一个就是用PWM来控制LED,首先IO端口定义,这个和电路图对应就行:
三个基本功能,颜色、亮度、开关,根据产品定义,亮度为0~100,默认最亮。
PWM周期设为255,这是因为每种颜色刚好为0~255,便于等份细化。
#define PWM_PERIOD (255)
设定颜色的过程,其实就是把阿里IOT平台下发的RGB颜色值提取出来,然后设定每一路的PWM值。
PWM我们采用的0、1、2,3个通道,每次设定前先停止,设定完成后再启动,就会生效。需要注意的是,之前我们说过,RGB-LED是共阳极的,控制信号要给低才亮,高则灭,所以我们的PWM输出也要反向,这样的结果才是正确的。因此在初始化的时候这样处理:
2 烧录程序
1)直接采用msys32进行程序的编译和调试,VS code进行编辑。首先打开mingw32.exe,cd到工程目录中,记得直接拖进行就行,不用敲路径:
然后就是编译和下载,主要用到下面的命令:
make chip=esp8266 defconfig //设定目标芯片
make menuconfig //主要配置下载COM端口等,ESP-WROOM-02D的FLASH为2M
make erase_flash //先擦除已有程序
make //编译
编译通过会出现以下提示,生成对应的bin文件:
最后用make flash进行程序烧录。
2)这样就结束了吗?并没有,还有重要的一步,烧录阿里平台的三元组,首先拿出我们开始准备的csv文件,并切换到文件的路径,一般为:C:msys32homewimesp-aliyunconfig
然后执行以下两条指令即可:
$IDF_PATH/components/nvs_flash/nvs_partition_generator/nvs_partition_gen.py --input my_single_mfg_config.csv --output my_single_mfg.bin --size 0x4000
$IDF_PATH/components/esptool_py/esptool/esptool.py --port COM5 write_flash 0x100000 my_single_mfg.bin
当然你可以参照官方的完整文档:espressif/esp-aliyun
3 设备调试
做完上面的工作,就可以来体验一下了,首先复位一下电路,直接对天猫精灵说:天猫精灵----找队友,然后根据提示进行配网操作,不出意外,就可以配网成功,现在在你的手机天猫精灵APP中:我家--智能设备里应该就能看到“灯”这个设备了:
点开他,发现并没有我们产品定义时设置的系统默认H5界面呢?这是因为产品要正式发布后才可以直接使用,不过现在可以更改他的名字等。
现在要APP调试的话可以在:产品开发---软件发布----天猫精灵APP首页扫描进行:
需要注意的是,扫描调试会创建一个虚拟设备,这个只是进行功能界面验证,并不实际控制灯,如果刚才你按上述操作成功配网的话还会多一个不带虚拟设备标签的“灯”,这个就是实际的。
点进去,你就可以控制颜色、亮度以及开关了。
说好的语音控制呢?不要急,见视频:
优酷视频v.youku.com4 小结
好的,今天主要讲了一个大致流程,如果你想完全把里面的技术内容搞清楚的话还得对着程序和搜索引擎大补一翻,大家自行去实践吧。动手!动手!动手!
附录:smart_light.7z