【腾讯连连 腾讯物联网入门学习 第4篇】ESP8266 RTOS C SDK二次开发接入腾讯物联网开发平台的笔记分享!

      微信物联网生态主要分在微信硬件开发平台腾讯物联开发平台,前者已经停止维护,但依然有着很大的学习价值,而后者作为主推的平台,集成很多功能,包括从微信小程序实现配网到控制;

      为了兼顾更多的朋友和自己的学习笔记,我将会一直更新此专题笔记,欢迎关注本人CSDN半颗心脏,带你走进前沿领域,学习前沿技术!

自搭微信服务器&&微信硬件开发平台

微信小程序控制硬件第1篇 】 全网首发,借助 emq 消息服务器带你如何搭建微信小程序的mqtt服务器,轻松控制智能硬件!
微信小程序控制硬件第2篇 】 开始微信小程序之旅,导入小程序Mqtt客户端源码,实现简单的验证和通讯于服务器!
微信小程序控制硬件第3篇 】 从软件到硬件搭建一个微信小程序控制esp8266的项目,自定义通讯协议,为面试职位和比赛项目加分!
微信小程序控制硬件第4篇 】 深度剖析微信公众号配网 Airkiss 原理与过程,esp8266如何自定义回调参数给微信,实现绑定设备第一步!
微信小程序控制硬件第5篇 】理清接下来必须走的架构思想,学习下 JavaScript 的观察者模式,在微信小程序多页面同时接收到设备推送事件!
微信小程序控制硬件第6篇 】服务器如何集成七牛云存储SDK,把用户自定义设备图片存储在第三方服务器!
微信小程序控制硬件第7篇 】动起来做一个微信小程序Mqtt协议控制智能硬件的框架,为自己心里全栈工程师梦想浇水!!
微信小程序控制硬件第8篇 】微信小程序以 websocket 连接阿里云IOT物联网平台mqtt服务器,封装起来使用就是这么简单!
微信小程序控制硬件第9篇 】巧借阿里云物联网平台的免费连接,从微信小程序颜色采集控制 esp8266 输出七彩灯效果,中秋节来个直播如何?!
微信公众号控制硬件 第10篇 】如何在微信公众号网页实现连接mqtt服务器教程!!
微信小程序控制硬件 第11篇 】全网首发,微信小程序ble蓝牙控制esp32,实现无需网络也可以控制亮度开关。
微信小程序控制硬件 第12篇 】微信小程序蓝牙控制硬件应如何开发?为您全面解析微信小程序蓝牙API的使用。
微信小程序控制硬件 第13篇 】【AT篇】与硬件平台无关,微信小程序 AP 配网安信可 Wi-Fi 模块入网示例。

腾讯物联开发平台

腾讯连连 - 腾讯物联开发平台 第1篇 】腾讯官方静鸡鸡发布的“腾讯连连”终于来了,按照官方教程教你在微信小程序实现配网、控制 ESP8266啦!
腾讯连连 - 腾讯物联开发平台 第2篇 】深度解析微信小程序smartconfig配网原理,安信可ESP-12S直连腾讯物联开发平台!!
腾讯连连 - 腾讯物联开发平台 第3篇 】安信可IoT微信小程序全面开源,小程序上实现一键配网+控制+绑定!
腾讯连连 - 腾讯物联开发平台 第4篇 】ESP8266 RTOS C SDK二次开发接入腾讯物联网开发平台的笔记分享!

在这里插入图片描述

一、简介

    离2021年只剩下半个月了,我好像今年学到的东西寥寥无几,最近在总结今年成长了什么?职业上学到了什么?我应该以何种状态去迎接明年的挑战?

    乐鑫所支持的腾讯物联开发平台的芯片都适配了,包括 ESP8266、ESP32以及ESP32S2,在群里有群友问道如何进行二次开发,必须修改数据点上报和下发,好吧,我就整理下笔记,给大家指导,少踩坑!

二、修改设备的属性定义

    毋庸置疑的,我们要知道修改或增加一个产品属性定义,想要从哪里修改开始?毋庸置疑的,是先修改设备的属性定义。

    以智能灯完整的例子为例,我们找到 light_data_template_sample.c文件,修改下面三次地方:

  1. 修改结构体 ProductDataDefine,注意类型,比如 TYPE_DEF_TEMPLATE_BOOL为布尔值。
  2. 修改 初始化属性的方法 _init_data_template(),注意看 keytype字段, key是在云端定义的标识符,而 type是表示其属性类型比如整形、布尔、枚举,以及在后台设置的标志名;
  3. 修改宏定义 TOTAL_PROPERTY_COUNT表示一共有多少个属性!
typedef struct _ProductDataDefine
{
    TYPE_DEF_TEMPLATE_BOOL m_light_switch; // 定义一个布尔值的开关
    TYPE_DEF_TEMPLATE_INT m_brightness; // 定义一个整型的亮度
} ProductDataDefine;

static ProductDataDefine sg_ProductData;

static void _init_data_template(void)
{
    memset((void *)&sg_ProductData, 0, sizeof(ProductDataDefine));

    sg_ProductData.m_light_switch = 0; // 初始化的开关数值
    sg_DataTemplate[0].data_property.key = "power"; // 这个是在后台定义的标志名
    sg_DataTemplate[0].data_property.data = &sg_ProductData.m_light_switch;
    sg_DataTemplate[0].data_property.type = TYPE_TEMPLATE_BOOL;

    sg_ProductData.m_brightness = 0; // 初始化的亮度数值
    sg_DataTemplate[1].data_property.key = "humidity";  // 这个是在后台定义的标志名
    sg_DataTemplate[1].data_property.data = &sg_ProductData.m_brightness;
    sg_DataTemplate[1].data_property.type = TYPE_TEMPLATE_INT;
};

三、修改三元组

    修改三元组定义;

    到components/qcloud_iot/qcloud_iot_c_sdk/platform/HAL_Device_freertos.c里面修改在腾讯云物联网平台注册的设备信息(目前仅支持密钥设备):

/* Product Id */
static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1]    = "PRODUCT_ID";
/* Device Name */
static char sg_device_name[MAX_SIZE_OF_DEVICE_NAME + 1]  = "YOUR_DEV_NAME";
/* Device Secret */
static char sg_device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1] = "YOUR_IOT_PSK";

四、如何主动上传状态

     比如我修改亮度这个属性,则需要先修改数值:

sg_ProductData.m_brightness = 50; //具体的数值
sg_DataTemplate[1].state = eCHANGED; //设置对应的结构体的状态修改为已更改

     以我单独抽离上报函数为例,调用下面函数:

int IOT_Cloud_Report()
{
    if (client != NULL)
    {
        Log_i("Cloud Device Construct Success");
    }
    else
    {
        Log_e("Cloud Device Construct Failed");
        return QCLOUD_ERR_FAILURE;
    }

    DeviceProperty *pReportDataList[TOTAL_PROPERTY_COUNT];
    sReplyPara replyPara;
    int ReportCount;
    int rc;

    /*report msg to server*/
    /*report the lastest properties's status*/
    if (QCLOUD_RET_SUCCESS == deal_up_stream_user_logic(pReportDataList, &ReportCount))
    {
        rc = IOT_Template_JSON_ConstructReportArray(client, sg_data_report_buffer, sg_data_report_buffersize, ReportCount, pReportDataList);

        if (rc == QCLOUD_RET_SUCCESS)
        {
            rc = IOT_Template_Report(client, sg_data_report_buffer, sg_data_report_buffersize, OnReportReplyCallback, NULL, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT);
            if (rc == QCLOUD_RET_SUCCESS)
            {
                Log_i(" report success payload: %s", sg_data_report_buffer);
            }
            else
            {
                Log_e(" report failed, err: %d", rc);
                return QCLOUD_ERR_FAILURE;
            }
        }
        else
        {
            Log_e("report data failed, err: %d", rc);
            return QCLOUD_ERR_FAILURE;
        }
    }
    return QCLOUD_RET_SUCCESS;
}

五、如何处理下发逻辑

    在函数 deal_down_stream_user_logic处理即可,比如下面我的处理代码,开灯则亮度为50,关灯0亮度。

/* demo for light logic conttrol */
static void deal_down_stream_user_logic(void *client, ProductDataDefine *light)
{
    int i;

    /** hardware control **/
    if (light->m_light_switch)
    {
        HAL_Printf("\n[  light is on  ]\n\n");
        set_relay_led_state(LED_ON);
        sg_ProductData.m_brightness = 50;
        sg_DataTemplate[1].state = eCHANGED;
    }
    else
    {
        HAL_Printf("\n[  light is off ]\n\n");
        set_relay_led_state(LED_OFF);
        sg_ProductData.m_brightness = 0;
        sg_DataTemplate[1].state = eCHANGED;
    }
}

    好了,以上就是基本的处理,下篇为大家介绍如何配网逻辑思维业务;


六、本人开源微信物联网控制 一览表

开源项目地址开源时间
微信小程序连接mqtt服务器,控制esp8266智能硬件https://github.com/xuhongv/WeChatMiniEsp82662018.11
微信公众号airkiss配网以及近场发现在esp8266 rtos3.1 的实现https://github.com/xuhongv/xLibEsp8266Rtos3.1AirKiss2019.3
微信公众号airkiss配网以及近场发现在esp32 esp-idf 的实现https://github.com/xuhongv/xLibEsp32IdfAirKiss2019.9
微信小程序控制esp8266实现七彩效果项目源码https://github.com/xuhongv/WCMiniColorSetForEsp82662019.9
微信小程序蓝牙配网blufi实现在esp32源码https://github.com/xuhongv/BlufiEsp32WeChat2019.11
微信小程序蓝牙ble控制esp32七彩灯效果https://blog.csdn.net/xh870189248/article/details/1018497592019.10
可商用的事件分发的微信小程序mqtt断线重连框架https://blog.csdn.net/xh870189248/article/details/887183022019.2
微信小程序以 websocket 连接阿里云IOT物联网平台mqtt服务器https://blog.csdn.net/xh870189248/article/details/914906972019.6
微信公众号网页实现连接mqtt服务器https://blog.csdn.net/xh870189248/article/details/1007384442019.9

另外,不要把我的博客作为学习标准,我的只是笔记,难有疏忽之处,如果有,请指出来,也欢迎留言哈!

  • 玩转esp8266带你飞、加群QQ群,不喜的朋友勿喷勿加:434878850
  • 个人邮箱:xuhongv@yeah.net 24小时在线,有发必回复!
  • esp8266源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
  • esp32源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32
  • 关注下面微信公众号二维码,干货多多,第一时间推送!

在这里插入图片描述

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半颗心脏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值