五,信息解析和天猫精灵控制LED

1,天猫精灵设备消息解析
回调接口:实现对产品的定义

  • 产品属性上报 user_post_property
  • 产品事件上报 user_post_event
  • 产品属性设置 user_property_set_event_handler
  • 产品服务调用 user_service_request_event_handler
    这些函数在linkkit_example_solo.c下。
    2,解析JSON字符串
  1. 什么是JSON
    JavaScript Object Notation
    JSON是JS对象的字符串表示法,它使用文本表示一个JS对象的信息,本质就是一个字符串
  2. 如何解析JSON
    cjSON库
    cjSON结构体
    cjSON_Parse函数
    cjSON_GetObjectltem函数
    cjSON_isNumber函数
    对这几个函数的解释:https://blog.csdn.net/qq_36612961/article/details/90768404
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
/** recv event post response message from cloud **/
static int user_property_set_event_handler(const int devid, const char *request, const int request_len)
{
    int res = 0;
    cJSON *root,*pwStObj;
    EXAMPLE_TRACE("Property Set Received, Request: %s", request);

    root = cJSON_Parse(request);
    if(root){
        pwStObj=cJSON_GetObjectItem(root,"powerstate");
        if(pwStObj)
        {
             if(pwStObj->valueint == 0){
                EXAMPLE_TRACE(" Power off the light ");
             }else if(pwStObj->valueint == 1){
                EXAMPLE_TRACE(" Power on the light ");
             }
        }else{

        }
     }else{

    }

    res = IOT_Linkkit_Report(EXAMPLE_MASTER_DEVID, ITM_MSG_POST_PROPERTY,
                             (unsigned char *)request, request_len);
    EXAMPLE_TRACE("Post Property Message ID: %d", res);

    return 0;

}

修改完代码后,进行aos make 编译,烧录到开发板中,复位后没有配网信息了,重新进行配网(手机的天猫精灵扫描二维码),查看putty端的打印信息,看开发板是否连接到天猫精灵平台,然后对设备进行调试。查看putty下的打印信息是否为自己添加的对设备属性进行cJSON解析后的内容。调试界面如下:
在这里插入图片描述
3,将控制开发板LED灯的代码移植到linkkit_demo中,实现天猫精灵控制GPIO。

在自己创建的工程下的
app_entry.h中添加定义,添加内容如下:

gpio_dev_t led_red;
gpio_dev_t led_green;
gpio_dev_t led_blue;

#define GPIO_RED_LED 0
#define GPIO_BLUE_LED 6
#define GPIO_GREEN_LED 1

app_entry.c进行gpio的初始化,添加如下内容:

#include "aos/gpio.h"
//在application_start()函数前面添加init_gpio_led()函数
void init_gpio_led()
{
    led_red.port = GPIO_RED_LED;
    led_green.port = GPIO_GREEN_LED;
    led_blue.port = GPIO_BLUE_LED;

    led_red.config = OUTPUT_PUSH_PULL;
    led_green.config = OUTPUT_PUSH_PULL;
    led_blue.config = OUTPUT_PUSH_PULL;

    hal_gpio_init(&led_red);
    hal_gpio_init(&led_blue);
    hal_gpio_init(&led_green);

    sys_itag_off();
}
//最后在application_start内部的aos_loop_run()函数前进行gpio初始化的调用
	init_gpio_led();

linkkit_example_solo.c中添加开发板led灯亮灭的控制代码,如下:

static int user_property_set_event_handler(const int devid, const char *request, const int request_len)
{
    int res = 0;
    cJSON *root,*pwStObj;
    EXAMPLE_TRACE("Property Set Received, Request: %s", request);

    root = cJSON_Parse(request);
    if(root){
        pwStObj=cJSON_GetObjectItem(root,"powerstate");
        if(pwStObj)
        {
             if(pwStObj->valueint == 0){
                EXAMPLE_TRACE(" Power off the light ");
  //关灯命令时,将led设置为低电平
                hal_gpio_output_low(&led_red);
                hal_gpio_output_low(&led_green);
                hal_gpio_output_low(&led_blue);
             }else if(pwStObj->valueint == 1){
                EXAMPLE_TRACE(" Power on the light ");
                hal_gpio_output_high(&led_red);
                hal_gpio_output_high(&led_green);
                hal_gpio_output_high(&led_blue);
             }
        }else{

        }
     }else{

    }

    res = IOT_Linkkit_Report(EXAMPLE_MASTER_DEVID, ITM_MSG_POST_PROPERTY,
                             (unsigned char *)request, request_len);
    EXAMPLE_TRACE("Post Property Message ID: %d", res);
    return 0;
}

代码改写完成后,aos make 进行编译,烧录到开发板中,然后进行手机配网,配网成功后回到调试页面,发送指令(1),查看putty端的打印信息和开发板的LED灯的亮灭情况。
没有对天猫精灵做任何的设置为什么可以用天猫精灵语音控制开发板LED灯的亮灭,原理:
使用天猫精灵app扫码的时候,如果天猫精灵和app是绑在一起的,那阿里云后台认为你这个账号下的天猫精灵就是你绑定的这个天猫精灵,同样开发板也在app账号下面,同一个账号下的天猫精灵和开发板隶属于同一个工作组,所以在这个账号下的所有设备都可以被天猫精灵所控制,如果这个账号下绑定了多个天猫精灵,那这几个天猫精灵都可以控制我的开发板。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值