openwrt mqtt客户端

  • 1. 安装mosquitto
  • 2. 提取so库和头文件
  • 3. 编译mqtt客户端代码
  • 4. 修改mosquitto的配置
  • 5. 客户端代码
  • 6. mosquitto库官方详解

1. 安装mosquitto

  1. 首先安装mosquitto库,openwrt内核自带有,可以使用内核带的mosquitto库。
  2. 执行make menuconfig,在Network —>目录下,这里只使用到客户端,不打算做服务器,而且不打算用ssl,所以只选择mosquitto-client-nossl,上面的broker是做mqtt服务器用的。
  3. 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客户端(五)相关推荐

  1. mqtt客户端_初次接触MQTT

    MQTT是什么? MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议.它工作在TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟 ...

  2. java mqtt客户端_基于 t-io 实现一个 mqtt5 协议之 mica-mqtt

    一.简介 MQTT 全称为 Message Queuing Telemetry Transport(消息队列遥测传输)是一种基于发布/订阅范式的"轻量级"消息协议,由 IBM 发布 ...

  3. 基于Domoticz智能家居系统(十四)用ESP8266做MQTT客户端实验

    基于Domoticz智能家居系统(十四)用ESP8266做MQTT客户端实验 用ESP8266做MQTT客户端 一些前期的准备 第一步 设置ESP8266开发板的BSP的搜索引擎链接 第二步 下载安装 ...

  4. MQTT客户端(基于mosquitto库)上报温度到腾讯云

    Linux C MQTT上报温度到腾讯云(基于mosquitto库) 一.创建产品 1.进入腾讯云官网,登陆或注册账号 2.进入控制台 3.鼠标滑到云产品,进入物联设备服务中的物联网通信 4.点击创建 ...

  5. 结合Amazon Cognito服务限制接入AWS IoT平台的MQTT客户端的clientId

    AWS IoT 支持使用四种身份委托人进行身份验证: X.509 证书 IAM 用户.组和角色 Amazon Cognito 身份 联合身份 通常,AWS IoT 设备使用 X.509 证书,移动应用 ...

  6. 【微信小程序控制硬件②】 开始微信小程序之旅,导入小程序Mqtt客户端源码,实现简单的验证和通讯于服务器.(附带源码)

    文章目录 一.前言: 二.注册微信小程序: 三.本博文连接和微信物联有何区别: 四.微信小程序`MQTT`客户端源码导入注意事项: 五.下载: 微信物联网生态主要分在微信硬件开发平台与腾讯物联开发平台 ...

  7. MQTT客户端(基于mosquitto库)上报温度到阿里云

    Linux C MQTT客户端上报温度到阿里云 一.创建产品 1.进入阿里云官方页面,右上角点击登陆或注册阿里云账号 2.登录阿里云账号后点击右上角进入控制台 3.鼠标移到左上角展开导航 4.进入在物 ...

  8. mqtt服务器搭建与qt下的mqtt客户端实现

    一.mqtt介绍 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一个基于客户端-服务器的消息发布/订阅传输协议.MQTT协议是轻量.简单. ...

  9. C#创建MQTT客户端接收服务器信息

    服务端下载地址:https://download.csdn.net/download/horseroll/11012231 MQTT是什么? MQTT (Message Queue Telemetry ...

最新文章

  1. excel函数简要使用
  2. 时频特性分析(Matlab)
  3. C++ error LNK2019: 无法解析的外部符号 错误解决方案
  4. java 如何让HashMap变成线程安全的
  5. 浏览器滚动条样式更改
  6. mysql 闪回_MySQL数据误删除的快速解决方法(MySQL闪回工具)
  7. ISE中UCF约束文件的编写
  8. mysql中同一天入职怎么表示_ORACLE入职考试题及答案
  9. CSS border-style属性
  10. php 查看常量值,[thinkphp]查看thinkphp系统定义的常量值
  11. 蓝桥杯包子凑数-完全背包
  12. python远程文件管理系统_如何在Windows上使用Python访问远程文件系统?
  13. 【python教程入门学习】机器学习常用术语
  14. 移动魔盒cm201-2原厂备份固件hitool刷机包hi3798mv300h
  15. C++的iostream标准库介绍+使用详解
  16. GBase 8atmp 目录权限改变导致加载失败
  17. Python基础(编码格式、文件、目录)
  18. 亲测,超实用Zbrush笔刷大合集,腾讯金牌建模师同款
  19. uid 生成器(数据区主键)
  20. 独立站运营技巧:如何引流?如何提高转化率

热门文章

  1. 中文网的搭建Futter开发环境
  2. echarts legend 排列问题
  3. 圆排列问题(分支限界)
  4. NURBS曲线的曲率计算
  5. 新浪怎么获取股票接口api接口?
  6. Attention U-Net网络
  7. 图像匹配(欧式距离)
  8. OTP语音芯片实现应用的流程
  9. 平均值mean,众数mode,中值median 和 标准差stddev
  10. 《C#与.NET3.0高级程序设计》前3章读书笔记