鸿蒙硬件HI3861-MQTT
警告: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相关推荐
- 鸿蒙硬件HI3861开发环境搭建-串口2测试
鸿蒙硬件HI3861开发环境搭建-串口2测试 鸿蒙硬件HI3861开发环境搭建-串口2测试 - 哔哩哔哩 鸿蒙其他教程请看https://blog.csdn.net/qq_33259323/categ ...
- 鸿蒙硬件HI3861点灯
鸿蒙硬件HI3861点灯 鸿蒙其他教程请看https://blog.csdn.net/qq_33259323/category_10520249.html 创建文件 BUILD.gn static_l ...
- 鸿蒙硬件HI3861开发环境搭建
鸿蒙HI3861开发环境搭建 最新的环境搭建教程请看:https://blog.csdn.net/qq_33259323/article/details/117854579 鸿蒙其他教程请看https ...
- 鸿蒙硬件开发:Hi3861开发环境搭建及Windows下编译下载程序
Windows开发环境准备 可参考官方文档Windows开发环境准备进行配置. 安装VS Code https://code.visualstudio.com/Download 安装Python ht ...
- 鸿蒙硬件HI3861-OLED扫雷版本1
鸿蒙硬件HI3861-OLED扫雷版本 使用HI3861实现在OLED1602上面实现扫雷 效果请看:https://www.bilibili.com/video/BV1U54y1r78j/ 1.OL ...
- 鸿蒙硬件HI3861-MQTT-连接华为云
鸿蒙硬件HI3861-MQTT-连接华为云 华为开发者论坛 此教程使用到了MQTT,请没有连接成功MQTT的同学请看上一篇文章 鸿蒙硬件HI3861-MQTT_卡哇伊大喵的博客-CSDN博客 1.华为 ...
- 鸿蒙硬件HI3861-连接WIFI
鸿蒙硬件HI3861-连接WIFI 鸿蒙其他教程请看https://blog.csdn.net/qq_33259323/category_10520249.html 目录是这样的 BUILD.gn s ...
- 鸿蒙OS Hi3861的芯片实际开发中遇到的问题
鸿蒙OS Hi3861的芯片实际开发中遇到的问题 优点: 比较适合开发者快速开发,上面的硬件操作的函数封装很简单,非常适合初学者使用封装好的函数调用硬件管脚,比如I2c gpio spi sdio 都 ...
- 鸿蒙硬件HI3861-INA226-电压测量(外挂方案)
鸿蒙硬件HI3861-INA226-电压测量(外挂方案) ina226.c #include "ina226.h" #include <stdio.h> #includ ...
最新文章
- 第十五届全国大学生智能汽车竞赛竞速赛规则(讨论稿)
- mac git安装及github配置
- python控制台输出颜色
- cf飞刀制作源码_(飞刀)KDJ+W%R发出分析家源码
- 日本Blogger专用电脑
- hdu 2612 Find a way (广搜)
- 智慧农业、数字农业、农产品交易、发布供应、采购详情、报价列表、交易订单、供应大厅、采购大厅、发布采购、采购需求、采购订单、在售商品、出售订单、账户中心、洽谈列表、入驻申请、Axure原型、农业数据看板
- EZEMC测试软件_四种常见的EMC仿真软件介绍
- 人之间的尊重是相互的_人与人之间,最长久的关系,不是友情,不是爱情,而是…… ( 好文 )...
- unity3d kinect体感互动解决方案——2D体感换装
- Mybatis学习笔记(完结)
- python显示实时时间校对_Python实现系统时间自动校正
- 【游戏渲染】【译】Unity3D Shader 新手教程(1/6)
- python打印小票_购物小票——Python字符串格式化练习
- 正面管教php_正面管教之PHP(家长帮助家长)
- AVS2解码图像管理
- 关于Andorid加载高清大图(仿sina weibo 里面的长图效果)
- 河南理工大学matlab,有没有会MATLAB的大神
- visual studio新手使用教程
- 关于出现error: expected declaration or statement at end of input [solution.c]