IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> MQTT连接签名示例 -> 正文阅读

[嵌入式]MQTT连接签名示例

在这里插入图片描述

若您不使用阿里云提供的设备端SDK,而是使用其他方式,自己进行开发使您的设备使用MQTT协议与物联网平台连接,您可以参见本文提供的签名代码示例进行MQTT连接签名。

?

说明

推荐您使用阿里云提供的设备端SDK。使用阿里云提供的任何一种语言的设备端SDK,则不用您自己配置签名机制。请访问下载设备端SDK查看阿里云提供的SDK下载路径。

如果您不使用阿里云提供的设备端SDK,而是使用其他方式将您的设备接入物联网平台,需了解:

  • 需要您自己保证连接的稳定性、MQTT连接保活和MQTT连接断开重连。
  • 不使用设备端SDK连接阿里云物联网平台导致的连接问题,阿里云不负责相关的技术支持。
  • 如果您要使用物联网平台提供的OTA、物模型、一型一密等多种功能,需您自己去编写这些功能的实现。这将会耗费较多的开发时间、以及bug修复时间。

签名计算代码示例

若您不使用阿里云物联网平台设备端SDK,可单击以下链接,访问相关代码示例页面。

  • sign_mqtt.c:实现签名函数的代码示例。
  • sign_api.h:定义签名函数用到的数据结构的代码示例。
  • sign_sha256.c:签名函数可能使用的算法实现代码示例。如果您自己的平台上有HMACSHA256的实现,可以不编译本文件,但是需要提供函数utils_hmac_sha256()给sign_mqtt.c中的API调用。
  • 用于测试签名函数的代码示例

签名函数API接口说明

函数原型
int32_t IOT_Sign_MQTT(iotx_mqtt_region_types_t region,
              iotx_dev_meta_info_t *meta,
              iotx_sign_mqtt_t *signout);
函数功能根据输入的IoT设备身份认证信息,输出连接到阿里云物联网平台时所需要的域名、MQTT ClientID、MQTT Username、MQTT Password。之后,您可以将这些信息提供给MQTT Client用于连接阿里云物联网平台。
输入参数输入参数内容包括:
  • region:指定设备需要连接的阿里云站点。

    代码示例:

    typedef enum {
        IOTX_CLOUD_REGION_SHANGHAI,   /* Shanghai */
        IOTX_CLOUD_REGION_SINGAPORE,  /* Singapore */
        IOTX_CLOUD_REGION_JAPAN,      /* Japan */
        IOTX_CLOUD_REGION_USA_WEST,   /* America */
        IOTX_CLOUD_REGION_GERMANY,    /* Germany */
        IOTX_CLOUD_REGION_CUSTOM,     /* Custom setting */
        IOTX_CLOUD_DOMAIN_MAX         /* Maximum number of domain */
    } iotx_mqtt_region_types_t;
  • meta:指定设备的身份认证信息。

    说明?API调用者需为meta分配内存。

    代码示例:

    typedef struct _iotx_dev_meta_info {
        char product_key[IOTX_PRODUCT_KEY_LEN + 1];
        char product_secret[IOTX_PRODUCT_SECRET_LEN + 1];
        char device_name[IOTX_DEVICE_NAME_LEN + 1];
        char device_secret[IOTX_DEVICE_SECRET_LEN + 1];
    } iotx_dev_meta_info_t;
    										

    其中包含的参数:

    • product_key:设备所属产品的ProductKey。
    • product_secret:设备所属产品的ProductSecret。
    • device_name:设备名称DeviceName。
    • device_secret:设备的DeviceSecret。
输出参数signout:输出的数据,该数据将用于MQTT连接。

代码示例:

typedef struct {
    char hostname[DEV_SIGN_HOSTNAME_MAXLEN];
    uint16_t port;
    char clientid[DEV_SIGN_CLIENT_ID_MAXLEN];
    char username[DEV_SIGN_USERNAME_MAXLEN];
    char password[DEV_SIGN_PASSWORD_MAXLEN];
} iotx_sign_mqtt_t;
								

其中包含参数:

  • hostname:完整的阿里云物联网站点域名。
  • port:阿里云站点的端口号。
  • clientid:MQTT建立连接时需要指定的ClientID。建议使用设备的MAC地址或SN码,64字符内。
  • username:MQTT建立连接时需要指定的Username。由设备名DeviceName、符号(&)和产品ProductKey组成,格式:deviceName+"&"+productKey。示例:Device1&alSseIs****
  • password:MQTT建立连接时需要指定的Password。把提交给服务器的参数按字典排序并拼接后,使用hmacsha256方法和设备的DeviceSecret,加签生成Password。

具体参数说明,请参见MQTT-TCP连接通信

返回值
  • 0:表示成功。
  • -1:表示输入参数非法而失败。

签名API使用示例

以下以sign_test.c中的测试代码为例。

#include <stdio.h>
#include <string.h>
#include "sign_api.h"  //包含签名所需的各种数据结构定义

//下面的几个宏用于定义设备的阿里云身份认证信息:ProductKey、ProductSecret、DeviceName、DeviceSecret
//在实际产品开发中,设备的身份认证信息应该是设备厂商将其加密后存放于设备Flash中或者某个文件中,
//设备上电时将其读出后使用
#define EXAMPLE_PRODUCT_KEY     "a1X2bEn****"
#define EXAMPLE_PRODUCT_SECRET  "7jluWm1zql7b****"
#define EXAMPLE_DEVICE_NAME     "example1"
#define EXAMPLE_DEVICE_SECRET   "ga7XA6KdlEeiPXQPpRbAjOZXwG8y****"

int main(int argc, char *argv[])
{
    iotx_dev_meta_info_t meta_info;
    iotx_sign_mqtt_t sign_mqtt;

    memset(&meta_info, 0, sizeof(iotx_dev_meta_info_t));
    //下面的代码是将上面静态定义的设备身份信息赋值给meta_info
    memcpy(meta_info.product_key, EXAMPLE_PRODUCT_KEY, strlen(EXAMPLE_PRODUCT_KEY));
    memcpy(meta_info.product_secret, EXAMPLE_PRODUCT_SECRET, strlen(EXAMPLE_PRODUCT_SECRET));
    memcpy(meta_info.device_name, EXAMPLE_DEVICE_NAME, strlen(EXAMPLE_DEVICE_NAME));
    memcpy(meta_info.device_secret, EXAMPLE_DEVICE_SECRET, strlen(EXAMPLE_DEVICE_SECRET));

    //调用签名函数,生成MQTT连接时需要的各种数据
    IOT_Sign_MQTT(IOTX_CLOUD_REGION_SHANGHAI, &meta_info, &sign_mqtt);

    ...

}
			

?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-11-30 15:46:40  更:2021-11-30 15:48:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:35:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码