警告:MQTT移植不匹配,此文章作废,后续有鸿蒙高版本MQTT移植

鸿蒙硬件HI3861-MQTT

鸿蒙其他教程请看https://blog.csdn.net/qq_33259323/category_10520249.html

在使用MQTT前,请看我上一篇文章:鸿蒙硬件HI3861-连接WIFI

鸿蒙硬件HI3861-连接WIFI_卡哇伊大喵的博客-CSDN博客

需要连接WIFI成功之后才能使用MQTT

参考文档:【HarmonyOS HiSpark Wi-Fi IoT套件】如何在鸿蒙系统中移植 Paho-MQTT 实现MQTT协议 - HiHope开发者社区 - 电子技术论坛 - 广受欢迎的专业电子论坛!

1.移植MQTT

移植前请确保你的项目是编译成功的

点击这个链接下载移植好的PahoMqtt(不要积分免费):链接:https://pan.baidu.com/s/1ohH-kCYjiIOa-PkOxzuyEQ 提取码:gddy

点击这个链接下载移植好的PahoMqtt(不要积分免费):鸿蒙HI3861-pahomqtt-移植好的_hi3861低功耗-OS文档类资源-CSDN下载,然后把pahomqtt文件夹放到third_party目录下面

打开vendor\hisi\hi3861\hi3861\BUILD.gn 文件,在lite_component("sdk") 中增加      "//third_party/pahomqtt:pahomqtt_static"

之后就编译一下看看是否成功

2.编写测试代码

BUILD.gn

static_library("mqtt_test_at") {sources = ["mqtt_test.c","at_entry.c"]include_dirs = ["//utils/native/lite/include","//kernel/liteos_m/components/cmsis/2.0","//base/iot_hardware/interfaces/kits/wifiiot_lite","//vendor/hisi/hi3861/hi3861/third_party/lwip_sack/include","//foundation/communication/interfaces/kits/wifi_lite/wifiservice","//third_party/pahomqtt/MQTTPacket/src","//third_party/pahomqtt/MQTTPacket/samples","//vendor/hisi/hi3861/hi3861/components/at/src"]
}

mqtt_test.c

#include <stdio.h>#include <unistd.h>#include "ohos_init.h"
#include "cmsis_os2.h"#include <unistd.h>
#include "hi_wifi_api.h"
//#include "wifi_sta.h"
#include "lwip/ip_addr.h"
#include "lwip/netifapi.h"#include "lwip/sockets.h"#include "MQTTPacket.h"
#include "transport.h"int mqtt_rc = 0;
int mqtt_sock = 0;
int mqtt_len = 0;
unsigned char mqtt_buf[200];
int mqtt_buflen = sizeof(mqtt_buf);
int mqtt_req_qos = 0;
int mqtt_msgid = 1;
int toStop = 0;
MQTTString topicString = MQTTString_initializer;void mqtt_exit(void){transport_close(mqtt_sock);mqtt_rc = mqtt_rc;printf("[MQTT] ERROR EXIT\n");
}void mqtt_task(void){while (!toStop){char* payload = "hello HarmonyOS 1122321321";int payloadlen = strlen(payload);if (MQTTPacket_read(mqtt_buf, mqtt_buflen, transport_getdata) == PUBLISH){unsigned char dup;int qos;unsigned char retained;unsigned short msgid;int payloadlen_in;unsigned char* payload_in;int rc;MQTTString receivedTopic;rc = MQTTDeserialize_publish(&dup, &qos, &retained, &msgid, &receivedTopic,&payload_in, &payloadlen_in, mqtt_buf, mqtt_buflen);                              // 发送数据printf("message arrived %.*s\n", payloadlen_in, payload_in);mqtt_rc = rc;}printf("publishing reading\n");mqtt_len = MQTTSerialize_publish(mqtt_buf, mqtt_buflen, 0, 0, 0, 0, topicString, (unsigned char*)payload, payloadlen);mqtt_rc = transport_sendPacketBuffer(mqtt_sock, mqtt_buf, mqtt_len);osDelay(1000);}
}int mqtt_subscribe(char * topic){  // MQTT订阅/* subscribe */topicString.cstring = topic;mqtt_len = MQTTSerialize_subscribe(mqtt_buf, mqtt_buflen, 0, mqtt_msgid, 1, &topicString, &mqtt_req_qos); // MQTT订阅mqtt_rc = transport_sendPacketBuffer(mqtt_sock, mqtt_buf, mqtt_len);                                  // 传输发送缓冲区if (MQTTPacket_read(mqtt_buf, mqtt_buflen, transport_getdata) == SUBACK)    /* wait for suback */   // 等待订阅返回{unsigned short submsgid;int subcount;int granted_qos;mqtt_rc = MQTTDeserialize_suback(&submsgid, 1, &subcount, &granted_qos, mqtt_buf, mqtt_buflen);if (granted_qos != 0){printf("granted qos != 0, %d\n", granted_qos);mqtt_exit();return 0;}return 1;}else{mqtt_exit();return 0;}
}int mqtt_init(void){       // MQTT初始化开始连接MQTTPacket_connectData data = MQTTPacket_connectData_initializer;char *host = "106.13.62.194";        // 地址int port = 1883;                  // 端口mqtt_sock = transport_open(host, port);if(mqtt_sock < 0){return mqtt_sock;}data.clientID.cstring = "me";            // ClientIDdata.keepAliveInterval = 20;data.cleansession = 1;data.username.cstring = "testuser";       // 用户名data.password.cstring = "testpassword";    // 密码printf("[MQTT]Sending to hostname %s port %d\n", host, port);mqtt_len = MQTTSerialize_connect(mqtt_buf, mqtt_buflen, &data);        // 开始连接mqtt_rc = transport_sendPacketBuffer(mqtt_sock, mqtt_buf, mqtt_len);        // 发送缓冲区if (MQTTPacket_read(mqtt_buf, mqtt_buflen, transport_getdata) == CONNACK){    // 等待链接返回unsigned char sessionPresent, connack_rc;if (MQTTDeserialize_connack(&sessionPresent, &connack_rc, mqtt_buf, mqtt_buflen) != 1 || connack_rc != 0){printf("Unable to connect, return code %d\n", connack_rc);mqtt_exit();return 0;}}else{mqtt_exit();return 0;}return 1;
}void mqtt_test(void){printf("[MQTT]Start MQTT\r\n");if(mqtt_init() == 1){printf("[MQTT]MQTT Connect\r\n");mqtt_subscribe("substopic");     //设置订阅mqtt_task();}
}

mqtt_test.h

#ifndef __MQTT_TEST_H__
#define __MQTT_TEST_H__void mqtt_test(void);#endif /* __MQTT_TEST_H__ */

3.开始测试

只要在主函数中调用mqtt_test.c中的mqtt_test()函数就可以开始测试了

如果有什么问题可以来B站问我

卡哇伊大喵的个人空间_哔哩哔哩_Bilibili

鸿蒙硬件HI3861-MQTT相关推荐

  1. 鸿蒙硬件HI3861开发环境搭建-串口2测试

    鸿蒙硬件HI3861开发环境搭建-串口2测试 鸿蒙硬件HI3861开发环境搭建-串口2测试 - 哔哩哔哩 鸿蒙其他教程请看https://blog.csdn.net/qq_33259323/categ ...

  2. 鸿蒙硬件HI3861点灯

    鸿蒙硬件HI3861点灯 鸿蒙其他教程请看https://blog.csdn.net/qq_33259323/category_10520249.html 创建文件 BUILD.gn static_l ...

  3. 鸿蒙硬件HI3861开发环境搭建

    鸿蒙HI3861开发环境搭建 最新的环境搭建教程请看:https://blog.csdn.net/qq_33259323/article/details/117854579 鸿蒙其他教程请看https ...

  4. 鸿蒙硬件开发:Hi3861开发环境搭建及Windows下编译下载程序

    Windows开发环境准备 可参考官方文档Windows开发环境准备进行配置. 安装VS Code https://code.visualstudio.com/Download 安装Python ht ...

  5. 鸿蒙硬件HI3861-OLED扫雷版本1

    鸿蒙硬件HI3861-OLED扫雷版本 使用HI3861实现在OLED1602上面实现扫雷 效果请看:https://www.bilibili.com/video/BV1U54y1r78j/ 1.OL ...

  6. 鸿蒙硬件HI3861-MQTT-连接华为云

    鸿蒙硬件HI3861-MQTT-连接华为云 华为开发者论坛 此教程使用到了MQTT,请没有连接成功MQTT的同学请看上一篇文章 鸿蒙硬件HI3861-MQTT_卡哇伊大喵的博客-CSDN博客 1.华为 ...

  7. 鸿蒙硬件HI3861-连接WIFI

    鸿蒙硬件HI3861-连接WIFI 鸿蒙其他教程请看https://blog.csdn.net/qq_33259323/category_10520249.html 目录是这样的 BUILD.gn s ...

  8. 鸿蒙OS Hi3861的芯片实际开发中遇到的问题

    鸿蒙OS Hi3861的芯片实际开发中遇到的问题 优点: 比较适合开发者快速开发,上面的硬件操作的函数封装很简单,非常适合初学者使用封装好的函数调用硬件管脚,比如I2c gpio spi sdio 都 ...

  9. 鸿蒙硬件HI3861-INA226-电压测量(外挂方案)

    鸿蒙硬件HI3861-INA226-电压测量(外挂方案) ina226.c #include "ina226.h" #include <stdio.h> #includ ...

最新文章

  1. 第十五届全国大学生智能汽车竞赛竞速赛规则(讨论稿)
  2. mac git安装及github配置
  3. python控制台输出颜色
  4. cf飞刀制作源码_(飞刀)KDJ+W%R发出分析家源码
  5. 日本Blogger专用电脑
  6. hdu 2612 Find a way (广搜)
  7. 智慧农业、数字农业、农产品交易、发布供应、采购详情、报价列表、交易订单、供应大厅、采购大厅、发布采购、采购需求、采购订单、在售商品、出售订单、账户中心、洽谈列表、入驻申请、Axure原型、农业数据看板
  8. EZEMC测试软件_四种常见的EMC仿真软件介绍
  9. 人之间的尊重是相互的_人与人之间,最长久的关系,不是友情,不是爱情,而是…… ( 好文 )...
  10. unity3d kinect体感互动解决方案——2D体感换装
  11. Mybatis学习笔记(完结)
  12. python显示实时时间校对_Python实现系统时间自动校正
  13. 【游戏渲染】【译】Unity3D Shader 新手教程(1/6)
  14. python打印小票_购物小票——Python字符串格式化练习
  15. 正面管教php_正面管教之PHP(家长帮助家长)
  16. AVS2解码图像管理
  17. 关于Andorid加载高清大图(仿sina weibo 里面的长图效果)
  18. 河南理工大学matlab,有没有会MATLAB的大神
  19. visual studio新手使用教程
  20. 关于出现error: expected declaration or statement at end of input [solution.c]

热门文章

  1. 实时体积云渲染(地平线):二.Perlin噪声和Worley噪声
  2. OpenGL驱动质量的事实现状(精简翻译版)
  3. 理论计算机图形渲染技术是否已经到了没有什么可以研究的地步了?
  4. xdu1068暨2013陕西省赛C题题解
  5. scala 高阶函数学习
  6. SCCM2012软件更新(WSUS补丁)同步成功无法获取补丁问题
  7. 《Linux菜鸟入门2》LVM
  8. jquerymobile 基础教程
  9. Sphinx以及coreseek的安装及使用
  10. 用Oracle归档日志进行恢复方法