第九篇 华为云Iot SDK的简单应用

第九篇 华为云Iot SDK的简单应用

一、华为云Iot SDK API的简单使用

1.初始化SDK

在这里插入图片描述

2.绑定连接配置信息

在这里插入图片描述

3.连接服务器

在这里插入图片描述

4.上报属性

在这里插入图片描述

5.接收命令

二、实现智能家居灯光状态上报

🔖以下是上报数据到华为云Iot的代码片段,配合串口控制灯光,改变灯的状态(ON/OFF),并将状态上报至华为云。

华为云Iot SDK小demo

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include "hw_type.h"
#include "iota_init.h"
#include "iota_cfg.h"
#include "log_util.h"
#include "json_util.h"
#include "string_util.h"
#include "iota_login.h"
#include "iota_datatrans.h"
#include "mqtt_ctl.h"
#include "light.h"
#include "device.h"#define     MQTT_REQUEST_ADDR           "8185a863ed.st1.iotda-device.cn-south-1.myhuaweicloud.com"
#define     MQTT_REQUEST_DEVID          "设备ID"
#define     MQTT_REQUEST_DEVPASSWD      "密码"
#define     MQTT_REQUEST_PORT            8883static int mqtt_set_connection(){/** 初始化sdk **/if(IOTA_Init(".")) {fprintf(stderr, "IOTA_Init(): error.\n");IOTA_Destroy();return -1;}/** 绑定sdk配置 **/IOTA_ConfigSetStr(EN_IOTA_CFG_MQTT_ADDR,MQTT_REQUEST_ADDR);IOTA_ConfigSetUint(EN_IOTA_CFG_MQTT_PORT,MQTT_REQUEST_PORT);IOTA_ConfigSetStr(EN_IOTA_CFG_DEVICEID,MQTT_REQUEST_DEVID);IOTA_ConfigSetStr(EN_IOTA_CFG_DEVICESECRET,MQTT_REQUEST_DEVPASSWD);IOTA_ConfigSetUint(EN_IOTA_CFG_AUTH_MODE,EN_IOTA_CFG_AUTH_MODE_SECRET);IOTA_ConfigSetUint(EN_IOTA_CFG_CHECK_STAMP_METHOD, EN_IOTA_CFG_CHECK_STAMP_OFF);/** 连接服务器 **/int ret = IOTA_Connect();if(ret != 0){fprintf(stderr,"IOTA_Connect(): error code: %d.\n",ret);return -1;}return 0;
}/** 上报属性线程 **/
static void *sync_dev_properties(void *arg){struct Device *cur_dev = NULL;char *light_name[4] = {"厨房灯","卧室灯","客厅灯","卫生间灯"};int i;/* 组织上报灯光状态的初始json数据 */cJSON *lights = cJSON_CreateObject();cJSON *update_key = NULL;char *update_value = NULL;for(i=0;i<4;i++){cJSON_AddItemToObject(lights,light_name[i], cJSON_CreateString(statostr(read_dev_status(light_name[i]))));}/* 每秒向服务器上报数据 */ST_IOTA_SERVICE_DATA_INFO lights_service = {.event_time = NULL,.service_id = "家居灯光",.properties = cJSON_Print(lights)};while(1){if(IOTA_PropertiesReport(&lights_service,1,0,NULL) != 0 ){fprintf(stderr,"[mqtt_ctl.c] IOTA_PropertiesReport():occurred error.\n");}printf("[mqtt_ctl.c debug]%s\n",lights_service.properties);sleep(2);for(i=0;i<4;i++) {update_key = cJSON_GetObjectItem(lights, light_name[i]);update_value = statostr(read_dev_status(light_name[i]));cJSON_SetValuestring(update_key, update_value);}lights_service.properties = cJSON_Print(lights);printf("[mqtt_ctl.c debug]%s\n",lights_service.properties);}
}/** 接收控制命令线程 **/
static void *recv_dev_cmd(void *arg){//TODO
}int mqttCtl_module_create(){mqtt_set_connection();/** 创建线程上报属性/状态 **/pthread_t report_tid;if(pthread_create(&report_tid,NULL,sync_dev_properties,NULL)){fprintf(stderr,"[mqtt_ctl.c] pthread_create():create thread sync_dev_properties occurred error.");return -1;}/** 创建线程读取下发的命令 **/pthread_t recv_cmd_tid;if(pthread_create(&recv_cmd_tid,NULL,recv_dev_cmd,NULL)){fprintf(stderr,"[mqtt_ctl.c] pthread_create():create thread recv_dev_cmd occurred error.");return -1;}return 0;
}
void mqttCtl_module_destroy(void){//TODO 回收线程、cJSON对象、SDK资源释放
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/434107.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第十七天 |110.平衡二叉树,257.二叉树的所有路径,404.左叶子之和(待补充)

110.平衡二叉树 1、题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 2、文章讲解&#xff1a;代码随想录 3、题目&#xff1a; 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二…

Linux进程间通信(IPC)机制之一:管道(Pipes)详解

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;Nonsense—Sabrina Carpenter 0:50━━━━━━️&#x1f49f;──────── 2:43 &#x1f504; ◀️ ⏸ ▶️ …

【听力与言语医学中心系列科普16】听力检查之纯音听阈测定

当我们去医院向医生诉说我们耳朵有问题时&#xff0c;最常听到医生说的是“去做个测听”吧&#xff0c;那么什么是测听&#xff1f;做测听有什么作用呢&#xff1f; 一、什么是纯音测听纯音听力测试自1943年Bunch教授发表后&#xff0c;就被作为首选的测听方法。纯音测听是测试…

Acwing递归与递推(一)

递归问题可以尝试画一棵递归搜索树。 递归实现指数型枚举 原题链接&#xff1a;https://www.acwing.com/problem/content/94/ 思路 首先是写递归的结束条件。 每个选项都有选和不选两种状态&#xff0c;把每个选项都考虑一遍。递归参数传递当前考虑的第几个元素&#xff0c;…

ubuntu操作系统

ubuntu系统简介 操作系统 1. 操作系统的定义 操作系统直接运行在计算机上的系统软件&#xff0c; 它是控制硬件和支持软件运行的计算机程序。 2.操作系统作用 向下控制硬件向上支持软件的运行&#xff0c;具有承上启下的作用 3. 常见的操作系统 Windowsmac OSLinuxiOSAndro…

【笔试刷题】错题集1

文章目录 C语言格式化输出%5.3s用法逻辑短路编程题&#xff1a;删除公共字符串编程题&#xff1a;组队竞赛 C语言格式化输出%5.3s用法 [解析]%m.ns 输出占m列&#xff0c;但只取字符串中左端n个字符。这n个字符输出在m列的右侧&#xff0c;左补空格。 格式化输出 逻辑短路 [解…

centos 7 增加临时路由及永久路由

centos 7 增加临时路由及永久路由 如果增加临时路由&#xff0c;要先安装net-tools , sudo yum install net-tools route add -net 10.1.0.0 gw 10.1.1.1 netmask 255.255.0.0 意思是增加了一条动态路由&#xff0c;网关10.1.1.1 ,10.1.x.x 的所有ip都走这个网关 此种方式&am…

Elasticsearch介绍以及基本操作

目录 一、Elasticsearch介绍 二、关于Elasticsearch的基本操作 &#xff08;1&#xff09;索引操作 &#xff08;2&#xff09;文档操作 三、域的属性 &#xff08;1&#xff09;index &#xff08;2&#xff09;type &#xff08;3&#xff09;store 一、Elasticsearc…

放个烟花迎接龙年春节吧

不知不觉即将迎来2024龙年春节了。龙的形象在中国传统文化中有着广泛的应用&#xff0c;比如在传统文化中&#xff0c;龙代表着权力、威严、吉祥和神灵的象征&#xff0c;同时也是生命力和繁荣的象征。 今天的文章将用原生JavaScript和Canvas API实现一个烟花的效果&#xff0…

程序员的你,是不是又被催婚了

程序员作为社会中一个较为特殊的群体&#xff0c;由于工作特性&#xff08;如长时间对着电脑、工作节奏较快、加班相对频繁等&#xff09;以及职业发展需要投入大量时间和精力&#xff0c;有时可能会面临较晚结婚的问题。这也导致了在某些情况下&#xff0c;他们可能被家人或朋…

【Linux】什么是.bashrc,以及其使用方法

经常在配置linux各种环境的时候&#xff0c;遇到对bashrc的配置。当时也只是机械地跟着教程&#xff0c;一步步输入指令&#xff1b;遇到的次数多了&#xff0c;想知道.bashrc究竟是何方神圣。于是整理了下其主要功能以及使用方法。 一、什么是.bashrc .bashrc&#xff0c;属…

Go 知识for-range

Go 知识for-range 1. for-range 的用法1.1 数组1.2 切片1.3 字符串1.4 map1.5 chan 2. 原理2.1 数组2.2 切片2.3 字符串2.4 map2.5 chan 3. 总结 https://a18792721831.github.io/ 1. for-range 的用法 for-range 表达式用于遍历集合元素&#xff0c;比传统的for更加简单直观…