admin管理员组文章数量:1609966
1,天猫精灵设备消息解析
回调接口:实现对产品的定义
- 产品属性上报 user_post_property
- 产品事件上报 user_post_event
- 产品属性设置 user_property_set_event_handler
- 产品服务调用 user_service_request_event_handler
这些函数在linkkit_example_solo.c下。
2,解析JSON字符串
- 什么是JSON
JavaScript Object Notation
JSON是JS对象的字符串表示法,它使用文本表示一个JS对象的信息,本质就是一个字符串 - 如何解析JSON
cjSON库
cjSON结构体
cjSON_Parse函数
cjSON_GetObjectltem函数
cjSON_isNumber函数
对这几个函数的解释:https://blog.csdn/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账号下面,同一个账号下的天猫精灵和开发板隶属于同一个工作组,所以在这个账号下的所有设备都可以被天猫精灵所控制,如果这个账号下绑定了多个天猫精灵,那这几个天猫精灵都可以控制我的开发板。
版权声明:本文标题:五,信息解析和天猫精灵控制LED 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1728585261a1164877.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论