【阿里云生活物联网架构师专题 ③】esp32 sdk 直连接入天猫精灵IOT开放平台,实现天猫精灵找队友零配网功能和语音控制; - CoreHouse

时间:2024-03-09 12:35:18

  • 本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。

1、esp32接入阿里云物联网平台,实现天猫精灵语音控制;
2、esp8266直连接入阿里云物联网平台,实现天猫精灵找队友零配网功能和语音控制;
3、esp32 sdk 直连接入天猫精灵IOT开放平台,实现天猫精灵找队友零配网功能和语音控制;
4、如何在天猫精灵IOT开放平台二次开发智能设备的 H5控制面板;
5、分享可商用的ESP8266 SDK连接阿里云物联网生活平台的在线远程升级OTA笔记。


在这里插入图片描述


一、博主寄言


       我写过很多物联网控制的博文系列,包括微信公众号、微信小程序控制硬件,私有云对接天猫精灵服务器,抑或是硬件端 esp8266/esp32 等系列博文,这是一个一个专题是写下我们如何在阿里云物联网上全栈开发我们的应用专题,让我们无须企业账号也可以体验设备-云端-App” 的过程;让我们变得更强,一个人担任一个公司的全部职责,全栈开发物联网攻城狮前进;

       我会带领大家轻轻松松地把自己的设备接入天猫精灵,告别 “单机时代”,走进语音控制物联网时代。 有疑问请留言区留言,或者加群大伙们讨论;写总结,写博文不容易,望大家多多体谅!

  • 自带资料:

    • git 分布式管理软件的基本使用;
    • 硬件开发:乐鑫 esp8266、esp32模块一个;具备 c 语言基础 ,不需要很熟练;
    • 移动端开发:android 端具备 java 开发语言,AndroidStudio 环境;
    • 服务器端开发:php 开发,熟悉 服务器运行、部署等原理操作;
  • 演示视频: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平台的视频,拭目以待!


三、准备材料


  • 1、乐鑫esp32模块开发板一个,推荐为 esp-layrat 开发板,某宝有卖;
  • 2、阿里云天猫精灵IOT开放平台账号,支持个人注册和使用;
  • 3、LED外设电路板一个,留出 PWM 调节接口!

四、天猫精灵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 方式接入;

在这里插入图片描述


4.1、后台创建产品


       请自行注册账号,并且实名认证,然后开始创建产品,选择流程如下:

在这里插入图片描述


       之后选择 产品品类信息、产品名字。注意必须选择为 wifi标准协议:

在这里插入图片描述


       开始定义设备的属性,也就是支持控制和查询的属性,下面是我定义的,支持 RGB七彩控制;我后来发现,这必须是枚举类型,郁闷。

在这里插入图片描述


       拿到这里的设备三元组,这里先提示这里的三元组和我们阿里云物联网平台的三元组有所差异,下面会提到;

在这里插入图片描述

注意:

       与阿里云生活平台一样,每个设备也是一个三元组定义;但是定义有所不一样,请按照下面的明确说明一一对应烧录:

阿里云生活平台( 飞燕平台 )天猫精灵IOT平台
DeviceNameDeviceName
DeviceSecretProductSecret
ProductKeyProduct ID
ProductSecret产品标识符(产品详情获取)

五、esp32 工程代码


       环境搭建请参考我上个博文,博文最下方会有链接传送门;

       仓库代码依然是 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
  • esp8266源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
  • esp32源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32
  • 关注下面微信公众号二维码,干货多多,第一时间推送!