本帖最后由 zhang_jinhui 于 2020-10-14 21:21 编辑
RT1064生态在RT1064SDK包里的以下路径,可以看到有许多第三方协议栈,并且提供了这些协议栈的Demo, 运行MQTT一、通过MCUXpress IDE打开一个MQTTDemo 在IDE界面上点击 文件》import SDK example》选择响应的 开发板》选择MQTT 二、编译运行MQTT Demo 在IDE界面左侧下方点击“Buile”编译工程,“点击Debug”进入开发板的调试模式,也是程序下载 三、连接开发板和路由器并运行
部署阿里云物联网服务器 一、在阿里云官网注册一个账号,在物联网平台注册一个设备,注册方法参考基于 STM32F4开发板和阿里云平台的MQTT 通信开源项目 并将三元数复制下来备用,分别为 { "ProductKey": "a1VPxqCxf0ES8", "DeviceName": "NXP_MQTT_TEST", "DeviceSecret": "xxxxxxxxxxx" } 二、在MQTT工程中修改新建源文件xxxx.c,及xxxx.h xxxx.c内容如下
- /*
- // C prototype : void HexToStr(BYTE *pbDest, BYTE *pbSrc, int nLen)
- // parameter(s): [OUT] pbDest - 存放目标字符串
- // [IN] pbSrc - 输入16进制数的起始地址
- // [IN] nLen - 16进制数的字节数
- // return value:
- // remarks : 将16进制数转化为字符串
- */
- void HexToStr(uint8_t *pbDest, uint8_t *pbSrc, int nLen)
- {
- char ddl,ddh;
- int i;
-
- for (i=0; i
- {
- ddh = 48 + pbSrc / 16;
- ddl = 48 + pbSrc % 16;
- if (ddh > 57) ddh = ddh + 7;
- if (ddl > 57) ddl = ddl + 7;
- pbDest[i*2] = ddh;
- pbDest[i*2+1] = ddl;
- }
-
- pbDest[nLen*2] = '\0';
- }
-
- //通过hmac_sha1算法获取password
- void getPassword(const char *device_secret, const char *content, char *password)
- {
- char buf[256] = {0};
- int len = sizeof(buf);
-
- // printf("rnlen = %drnrn", len);
-
- hmac_sha1(device_secret, strlen(device_secret), content, strlen(content), buf, &len);
- HexToStr(password, buf, len);
- }
复制代码
xxxx.h内容如下 /
- /用户需要根据设备信息完善以下宏定义中的四元组内容
- #define PRODUCT_KEY "a1VPqCf0ES8" //阿里云颁发的产品唯一标识,11位长度的英文数字随机组合
- #define DEVICE_NAME "NXP_MQTT_TEST" //用户注册设备时生成的设备唯一编号,支持系统自动生成,也可支持用户添加自定义编号,产品维度内唯一
- #define DEVICE_SECRET "xxx" //设备密钥,与DeviceName成对出现,可用于一机一密的认证方案
-
- //#define PRODUCT_SECRET "a1L5lKy2Cpn" //阿里云颁发的产品加密密钥,通常与ProductKey成对出现,可用于一型一密的认证方案
-
-
- //以下宏定义固定,不需要修改
- #define HOST_NAME PRODUCT_KEY".iot-as-mqtt.cn-shanghai.aliyuncs.com" //阿里云域名
- #define HOST_PORT 1883 //阿里云域名端口,固定1883
- #define CONTENT "clientid"DEVICE_NAME"deviceName"DEVICE_NAME"productKey"PRODUCT_KEY"timestamp789" //计算登录密码用
- #define CLIENT_ID DEVICE_NAME"|securemode=3,signmethod=hmacsha1,timestamp=789|" //客户端ID
- #define USER_NAME DEVICE_NAME"&"PRODUCT_KEY //客户端用户名
- //#define PASSWORD "AA6A749E740A3019D58090FF3ADC57B9DB4B380E" //客户端登录password通过hmac_sha1算法得到,大小写不敏感
- #define DEVICE_PUBLISH "/sys/"PRODUCT_KEY"/"DEVICE_NAME"/thing/event/property/post" //
- #define DEVICE_SUBSCRIBE "/sys/"PRODUCT_KEY"/"DEVICE_NAME"/thing/service/property/set" //设置设备属性
-
- //以下三个TOPIC的宏定义不需要用户修改,可以直接使用
- //IOT HUB为设备建立三个TOPIC:update用于设备发布消息,error用于设备发布错误,get用于订阅消息
- //#define TOPIC_UPDATE "/"PRODUCT_KEY"/"DEVICE_NAME"/update"
- //#define TOPIC_ERROR "/"PRODUCT_KEY"/"DEVICE_NAME"/update/error"
- //#define TOPIC_GET "/"PRODUCT_KEY"/"DEVICE_NAME"/get"
-
- void HexToStr(uint8_t *pbDest, uint8_t *pbSrc, int nLen); //数值转16进制字符串
- void getPassword(const char *device_secret, const char *content, char *password); //用户密码获取
- //u32 PublishData(float temp, float humid, unsigned char *payloadbuf);
复制代码
三、根据xxxx.h修改工程中的 宏 EXAMPLE_MQTT_SERVER_HOST 和结构体 mqtt_client_info的内容 四、下载程序,开发板重上电,如下图即连接成功
五、实际场景应用
|