基于GEC6818开发板的华为云物联网数据监控项目整理

本文介绍了如何基于GEC6818开发板,结合华为云物联网SDK,实现设备与云端的通信激活。涉及设备信息修改、SDK代码调整、Ubuntu上的设备模拟及驱动模块的使用,为物联网数据监控打下基础。
摘要由CSDN通过智能技术生成

点击下载设备演示包,就会下载一个华为云为你写好的SDK

到此,我们需要回头改一些我们匆匆创建好的设备信息,先修改一下设备的密码:

修改完后点确定

修改完密码后我们需要修改一下设备的属性,把它改成我们需要的属性:

命令可以像这样子设置,也可以发送不同的数据类型,笔者是发的bool型数据用于开关灯,如果命令有多种情况,就需要发送别的数据类型。

这个是笔者已经弄好的设备,可以作为对照

好了,到了这一步,我们在云端的工作就已经做好了。

5、打通SDK和华为云的通信,激活云端设备

既然我们已经在云端创建了一个设备,也就是一个云设备,并不是真实的设备,我们需要利用华为云给我们提供的SDK,并修改一下代码,然后放到Ubuntu运行,建立与云端的通信,才能激活我们刚刚在华为云创建的设备。首先,我们把文件放到vscode上:

文件总体是这样子的,这里我们主要对AgentLiteDemo.c还有ClientConf.json进行修改:

先改ClientConf.json:

按照自己的设备id,密码修改

把后面的端口号删除,还有那两个冒号,因为如果固定端口的话,可能出现连不上的情况。

网址跟这个一样:

设备ID在这:

然后再修改AgentLiteDemo.c:

#include "stdio.h"
#include "signal.h"

#if defined(WIN32) || defined(WIN64)
#include "windows.h"
#endif

#include "pthread.h"

#include <math.h>
#include "hw_type.h"
#include "iota_init.h"
#include "iota_cfg.h"
#include <stdlib.h>
#include <stdbool.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <errno.h>
#include <pthread.h>
#include <semaphore.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <net/if.h>
#include "LogUtil.h"
#include "JsonUtil.h"
#include "StringUtil.h"
#include "iota_login.h"
#include "iota_datatrans.h"
#include "string.h"
#include "cJSON.h"
#include "sys/types.h"
#include "unistd.h"
#include "iota_error_type.h"

/* if you want to use syslog,you should do this:
 *
 * #include "syslog.h"
 * #define _SYS_LOG
 *
 * */

char* workPath = ".";
char* gatewayId = NULL;

int alarmValue = 0;

char* serverIp_ = "";
int port_ = 1883;//原本是8883,需要把端口改成1883,不然与华为云的tcp会连接失败

char* username_ = "64f82801a266cb7f6e6abfd1_gec6818";//deviceId,这个需要根据自己的情况做修改
char* password_ = "12345678";//这也也需要根据自己的情况做修改

int disconnected_ = 0;

char *subDeviceId = "f6cd4bbb1a8ab53acbb595efd0e90199_ABC123456789";//这个一般不用改

int sleepTime = 5000;

void timeSleep(int ms)
{
#if defined(WIN32) || defined(WIN64)
    Sleep(ms);
#else
    usleep(ms * 1000);
#endif
}

上面的代码中我已经加入了许多我需要用到的头文件,如果编译出现缺少头文件的情况,需要你加上对应的头文件。

void Test_propertiesReport()
{
    int serviceNum = 1;//此处是上报的服务个数
    ST_IOTA_SERVICE_DATA_INFO services[serviceNum];

    
    cJSON *root;
    root = cJSON_CreateObject();

    //设置一个p操作,如果没有资源会在此处阻塞等待
    sem_wait(&s);
    
    //需要根据自己的设备进行修改,中间的是你的云端设备属性,第三个是值,这里笔者已经用变量代替,原本的只是一个随机数,后面你需要用变量替换
    cJSON_AddNumberToObject(root, "led", LED_value);
    cJSON_AddNumberToObject(root, "adc", ADC_value);
    cJSON_AddNumberToObject(root, "pwm", BEEP_value);
    
    char *payload;
    payload = cJSON_Print(root);
    cJSON_Delete(root);

    services[0].event_time = getEventTimeStamp(); //if event_time is set to NULL, the time will be the iot-platform's time.
    services[0].service_id = "开发板数据监控系统";//这里是一开始弄的那个产品名称,需要根据自己的情况修改
    services[0].properties = payload;

    int messageId = IOTA_PropertiesReport(services, serviceNum);
    if(messageId != 0)
    {
        printfLog(EN_LOG_LEVEL_ERROR, "AgentLiteDemo: Test_batchPropertiesReport() failed, messageId %d\n", messageId);
    }
    free(payload);
}
void setConnectConfig(){

    FILE *file;
    long length;
    char *content;
    cJSON *json;

    file=fopen("./ClientConf.json","rb");
    fseek(file,0,SEEK_END);
    length = ftell(file);
    fseek(file,0,SEEK_SET);
    content = (char*)malloc(length+1);
    fread(content,1,length,file);
    fclose(file);

    json = cJSON_Parse(content);

    username_ = JSON_GetStringFromObject(json, "deviceId", NULL);
    password_ = JSON_GetStringFromObject(json, "secret", NULL);
    char *url = JSON_GetStringFromObject(json, "serverUri", NULL);

    deleteSubStr(url,"ssl://");
    deleteSubStr(url,":1883");//把这个地方的端口改成1883

    serverIp_ = url;
}

把上面的端口改一改

如果你需要弄云端下发命令,那么还需要修改一处:

这是原本的代码:

void handleCommandRequest(void* context, int messageId, int code, char *message, char *requestId)
{
    printfLog(EN_LOG_LEVEL_INFO, "
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值