1、esp32接入阿里云物联网平台,实现天猫精灵语音控制;
2、esp8266直连接入阿里云物联网平台,实现天猫精灵找队友零配网功能和语音控制;
3、esp32 sdk 直连接入天猫精灵IOT开放平台,实现天猫精灵找队友零配网功能和语音控制;
我写过很多物联网控制的博文系列,包括微信公众号、微信小程序控制硬件,私有云对接天猫精灵服务器,抑或是硬件端 esp8266/esp32
等系列博文,这是一个一个专题是写下我们如何在阿里云物联网上全栈开发我们的应用专题,让我们无须企业账号也可以体验设备-云端-App” 的过程;让我们变得更强,一个人担任一个公司的全部职责,全栈开发物联网攻城狮前进;
我会带领大家轻轻松松地把自己的设备接入天猫精灵,告别 “单机时代”,走进语音控制物联网时代。 有疑问请留言区留言,或者加群大伙们讨论;写总结,写博文不容易,望大家多多体谅!
应各位小伙伴需求,《乐鑫esp8266直连天猫精灵iot开放平台》教学视频已经推出,欢迎前来学习:传送门
自带资料:
演示视频:https://www.bilibili.com/video/av70753254/?p=1
一直关注乐鑫的动态,在GitHub仓库看到esp32新的工程《esp-skainet》,这是一个专门为AI语音识别方案的框架;我提出 issues 问道竟支持 本地离线识别 ,不得不好好玩玩,毕竟这个比那些树莓派什么的选购便宜多了,且也适合做产品,我已购买一个 esp-lyrat-mini 开发板,快递路途中(>_<),我会第一时间写文章分享入门的技巧;
关于天猫精灵的玩法接入,前面2篇我已经介绍了如何在乐鑫esp32和esp8266上轻松实现,大家可以关注我微信公众号浏览往期文章;
这篇文章,应 乐鑫某在职人员,写篇如何用 esp-aliyun 仓库去接入 天猫精灵IOT开放平台,注意:天猫精灵IOT开放平台和阿里生活平台(飞燕)平台是不一样的;
与小米IOT平台不一样,天猫精灵IOT平台是面向全部人的。而小米IOT平台是只面向企业或公司的,个人不能使用;应大家要求,我会出档 天猫精灵IOT平台的视频,拭目以待!
官方网站:https://iot.aligenie.com
天猫精灵IoT开放平台,是阿里巴巴人工智能实验室(Alibaba A.I.Labs)面向品牌商、方案商、模组商/芯片商以及个人开发者推出的,将IoT物联网技术(蓝牙Mesh协议、WiFi协议、天猫精灵IoT云服务)和AI(天猫精灵ASR语音识别、NLP自然语言处理、TTS语音合成)等对外输出的开放式平台。
开发者可按直连接入(WiFi模组、蓝牙Mesh模组)、云云接入(OAuth2.0)2类方式,接入天猫精灵软硬件生态(天猫精灵音箱、天猫精灵App、AliGenie Inside智能设备)及阿里巴巴集团生态服务,实现语音和触屏交互,为用户提供天猫精灵IoT控制、查询、播报和主动服务。
可以看到通过天猫精灵IOT平台接入方式有2种,直连和云对云;而我本次接入的是 wifi模组直连形式,以乐鑫esp32模组 c语言 sdk 方式接入;
请自行注册账号,并且实名认证,然后开始创建产品,选择流程如下:
之后选择 产品品类信息、产品名字。注意必须选择为 wifi标准协议:
开始定义设备的属性,也就是支持控制和查询的属性,下面是我定义的,支持 RGB七彩控制;我后来发现,这必须是枚举类型,郁闷。
拿到这里的设备三元组,这里先提示这里的三元组和我们阿里云物联网平台的三元组有所差异,下面会提到;
与阿里云生活平台一样,每个设备也是一个三元组定义;但是定义有所不一样,请按照下面的明确说明一一对应烧录:
阿里云生活平台( 飞燕平台 ) | 天猫精灵IOT平台 |
---|---|
DeviceName | DeviceName |
DeviceSecret | ProductSecret |
ProductKey | Product ID |
ProductSecret | 产品标识符(产品详情获取) |
环境搭建请参考我上个博文,博文最下方会有链接传送门;
仓库代码依然是 esp-aliyun
,从配网和控制都是一样的,但是解析数据时候需要修改,如下:
指令含义 | payload |
---|---|
开灯: | {“powerstate”:0} |
关灯: | {“powerstate”:1} |
蓝色: | {“color”:255} |
绿色: | {“color”:65280} |
青色: | {“color”:65535} |
紫色: | {“color”:8388736} |
红色: | {“color”:16711680} |
橙色: | {“color”:16753820} |
黄色: | {“color”:16776960} |
具体的解析可以参考我的代码,外设pwm驱动源码获取:
static int user_property_set_event_handler(const int devid, const char *request, const int request_len)
{
int res = 0, value = 0;
cJSON *root = NULL, *LightSwitch = NULL, *LightColor = NULL;
ESP_LOGE(TAG, "Property Set Received, Devid: %d, Request: %s", devid, request);
if (!request)
{
return NULL_VALUE_ERROR;
}
/* 整体判断是否为json */
root = cJSON_Parse(request);
if (!root)
{
ESP_LOGI(TAG, "JSON Parse Error");
return FAIL_RETURN;
}
LightSwitch = cJSON_GetObjectItem(root, "powerstate");
//是否为开关指令
if (LightSwitch)
{
ESP_LOGE(TAG, "Property LightSwitch->valueint: %d", LightSwitch->valueint);
if (LightSwitch->valueint == 1)
{
rgb_set_pwm(0, 100, 0);
}
else
{
rgb_set_pwm(0, 0, 0);
}
}
LightColor = cJSON_GetObjectItem(root, "color");
if (LightColor)
{
ESP_LOGE(TAG, "Property LightColor->valueint: %d", LightColor->valueint);
value = LightColor->valueint;
switch (value)
{
case 16711680: //红色
rgb_set_pwm(100, 0, 0);
break;
case 255: //蓝色:
rgb_set_pwm(0, 0, 100);
break;
case 65280: //绿色
rgb_set_pwm(0, 100, 0);
break;
case 65535: //青色
rgb_set_pwm(0, 100, 100);
break;
case 8388736: //紫色
rgb_set_pwm(50, 0, 50);
break;
case 16753920: //橙色
rgb_set_pwm(100, 50, 0);
break;
case 16776960: //黄色
rgb_set_pwm(100, 100, 99);
break;
default:
break;
}
}
cJSON_Delete(root);
res = IOT_Linkkit_Report(devid, ITM_MSG_POST_PROPERTY, (unsigned char *)request, request_len);
return SUCCESS_RETURN;
}
关注本微信公众号,发送 191010 则获取 上述的 乐鑫esp32代码下载地址! 这个博文排版 + 视频制作花了4个小时,实在不易,感谢各位支持!
esp8266
带你飞、加群付费QQ
群,不喜的朋友勿喷勿加:434878850