openwrt mqtt客户端(五)
openwrt mqtt客户端
- 1. 安装mosquitto
- 2. 提取so库和头文件
- 3. 编译mqtt客户端代码
- 4. 修改mosquitto的配置
- 5. 客户端代码
- 6. mosquitto库官方详解
1. 安装mosquitto
- 首先安装mosquitto库,openwrt内核自带有,可以使用内核带的mosquitto库。
- 执行make menuconfig,在Network —>目录下,这里只使用到客户端,不打算做服务器,而且不打算用ssl,所以只选择mosquitto-client-nossl,上面的broker是做mqtt服务器用的。
- make V=s编译。
2. 提取so库和头文件
cd /home/openwrt-hiwooya-master/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/mosquitto-nossl/mosquitto-1.4.10/lib/cpp
sudo cp libmosquittopp.so.1 mosquittopp.h /mnt/hgfs/Share/
cd ..
sudo cp libmosquitto.so.1 mosquitto.h /mnt/hgfs/Share/
放入到源码路径的需要把libmosquittopp.so.1改名为libmosquittopp.so,libmosquitto.so.1改名为libmosquitto.so。
放入到开发板的动态库不需要改名,放在/usr/lib/路径下。
mosquittopp是支持C++程序。
mosquitto是支持C程序,如果不使用C++开发的话,可以不提取libmosquittopp.so.1和mosquittopp.h。
3. 编译mqtt客户端代码
编译代码发现报了异常错误
经过搜索,发现是mosquitto库支持了WITH_SRV,因为我不需要这个功能,想着尽量减少库大小,想把这功能取消了,需要的可以安装srv这个库。
4. 修改mosquitto的配置
最开始我在/home/openwrt-hiwooya-master/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/mosquitto-nossl/mosquitto-1.4.10这个目录下,修改CMakeLists.txt,改为OFF
修改了config.mk,改为no
执行make V=s编译,但是发现了它不编译这个库。
研究了一下,发现它这个编译是,从dl里面解压,然后再编译的,也就是说修改build_dir目录下的文件,最后还会被解压后覆盖。所以需要改源头dl下面。
进入dl目录,解压mosquitto-1.4.10.tar.gz,根据上面步骤修改配置,重新压缩。
再次执行编译,最后生成的so和头文件根据第2步提取。
5. 客户端代码
//mosquitto_client.hppclass MosquittoClient : public mosqpp::mosquittopp
{public:MosquittoClient();virtual ~MosquittoClient();bool connect(std::string server_addr, std::string client_id, std::string user_name, std::string password, int qos, int keep_alive, bool clean_session);void publish_message(const struct mosquitto_message *message);private:void on_connect(int rc);void on_disconnect();void on_publish(int mid);void on_subscribe(int mid, int qos_count, const int *granted_qos);void on_message(const struct mosquitto_message *message);
};
//mosquitto_client。cpp
/** 描述 :构造函数* 参数 :* 无* 返回 :* 无*/
MosquittoClient::MosquittoClient()
{//初始化mosquitto库lib_init();
}/** 描述 :析构函数* 参数 :* 无* 返回 :* 无*/
MosquittoClient::~MosquittoClient()
{//断开连接mosquittopp::disconnect();//清除mosquitto库mosqpp::lib_cleanup();
}/** 描述 :连接mqtt服务器* 参数 :* 无* 返回 :* 无*/
bool MosquittoClient::connect(std::string server_addr, std::string client_id, std::string user_name, std::string password, int qos, int keep_alive, bool clean_session)
{//重新初始化reinitialise(client_id.c_str(), clean_session);//设置用于名和密码username_pw_set(user_name.c_str(), password.c_str());//连接mqtt服务器int ret = mosquittopp::connect(server_addr.c_str(), 1883, keep_alive);if (ret == MOSQ_ERR_ERRNO){//连接出错std::cout << "connect error:" << mosqpp::strerror(ret) << std::endl;}
}/** 描述 :发布主题消息* 参数 :* [in] message 发送的消息* 返回 :* 无*/
void MosquittoClient::publish_message(const struct mosquitto_message *message)
{publish(&message->mid, message->topic, message->payloadlen, message->payload, message->qos, message->retain);
}/** 描述 :连接mqtt服务器成功回调* 参数 :* [in] rc * 返回 :* 无*/
void MosquittoClient::on_connect(int rc)
{}/** 描述 :已断开mqtt服务器连接* 参数 :* 无* 返回 :* 无*/
void MosquittoClient::on_disconnect()
{}/** 描述 :已发布主题成功回调函数* 参数 :* [in] mid mqtt数据包id号* 返回 :* 无*/
void MosquittoClient::on_publish(int mid)
{}/** 描述 :已发布主题成功回调函数* 参数 :* [in] mid mqtt数据包id号* [in] qos_count * [out] granted_qos* 返回 :* 无*/
void MosquittoClient::on_subscribe(int mid, int qos_count, const int *granted_qos)
{}/** 描述 :已接收到订阅到的消息* 参数 :* [in] message 接收到mqtt订阅的信息* 返回 :* 无*/
void MosquittoClient::on_message(const struct mosquitto_message *message)
{}
6. mosquitto库官方详解
官方详解路径
openwrt mqtt客户端(五)相关推荐
- mqtt客户端_初次接触MQTT
MQTT是什么? MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议.它工作在TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟 ...
- java mqtt客户端_基于 t-io 实现一个 mqtt5 协议之 mica-mqtt
一.简介 MQTT 全称为 Message Queuing Telemetry Transport(消息队列遥测传输)是一种基于发布/订阅范式的"轻量级"消息协议,由 IBM 发布 ...
- 基于Domoticz智能家居系统(十四)用ESP8266做MQTT客户端实验
基于Domoticz智能家居系统(十四)用ESP8266做MQTT客户端实验 用ESP8266做MQTT客户端 一些前期的准备 第一步 设置ESP8266开发板的BSP的搜索引擎链接 第二步 下载安装 ...
- MQTT客户端(基于mosquitto库)上报温度到腾讯云
Linux C MQTT上报温度到腾讯云(基于mosquitto库) 一.创建产品 1.进入腾讯云官网,登陆或注册账号 2.进入控制台 3.鼠标滑到云产品,进入物联设备服务中的物联网通信 4.点击创建 ...
- 结合Amazon Cognito服务限制接入AWS IoT平台的MQTT客户端的clientId
AWS IoT 支持使用四种身份委托人进行身份验证: X.509 证书 IAM 用户.组和角色 Amazon Cognito 身份 联合身份 通常,AWS IoT 设备使用 X.509 证书,移动应用 ...
- 【微信小程序控制硬件②】 开始微信小程序之旅,导入小程序Mqtt客户端源码,实现简单的验证和通讯于服务器.(附带源码)
文章目录 一.前言: 二.注册微信小程序: 三.本博文连接和微信物联有何区别: 四.微信小程序`MQTT`客户端源码导入注意事项: 五.下载: 微信物联网生态主要分在微信硬件开发平台与腾讯物联开发平台 ...
- MQTT客户端(基于mosquitto库)上报温度到阿里云
Linux C MQTT客户端上报温度到阿里云 一.创建产品 1.进入阿里云官方页面,右上角点击登陆或注册阿里云账号 2.登录阿里云账号后点击右上角进入控制台 3.鼠标移到左上角展开导航 4.进入在物 ...
- mqtt服务器搭建与qt下的mqtt客户端实现
一.mqtt介绍 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一个基于客户端-服务器的消息发布/订阅传输协议.MQTT协议是轻量.简单. ...
- C#创建MQTT客户端接收服务器信息
服务端下载地址:https://download.csdn.net/download/horseroll/11012231 MQTT是什么? MQTT (Message Queue Telemetry ...
最新文章
- excel函数简要使用
- 时频特性分析(Matlab)
- C++ error LNK2019: 无法解析的外部符号 错误解决方案
- java 如何让HashMap变成线程安全的
- 浏览器滚动条样式更改
- mysql 闪回_MySQL数据误删除的快速解决方法(MySQL闪回工具)
- ISE中UCF约束文件的编写
- mysql中同一天入职怎么表示_ORACLE入职考试题及答案
- CSS border-style属性
- php 查看常量值,[thinkphp]查看thinkphp系统定义的常量值
- 蓝桥杯包子凑数-完全背包
- python远程文件管理系统_如何在Windows上使用Python访问远程文件系统?
- 【python教程入门学习】机器学习常用术语
- 移动魔盒cm201-2原厂备份固件hitool刷机包hi3798mv300h
- C++的iostream标准库介绍+使用详解
- GBase 8atmp 目录权限改变导致加载失败
- Python基础(编码格式、文件、目录)
- 亲测,超实用Zbrush笔刷大合集,腾讯金牌建模师同款
- uid 生成器(数据区主键)
- 独立站运营技巧:如何引流?如何提高转化率