栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

openwrt mqtt客户端(五)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

openwrt mqtt客户端(五)

openwrt mqtt客户端

1. 安装mosquitto2. 提取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.hpp

class 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(); 
}


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;
  }
}


void MosquittoClient::publish_message(const struct mosquitto_message *message)
{
  publish(&message->mid, message->topic, message->payloadlen, message->payload, message->qos, message->retain);
}


void MosquittoClient::on_connect(int rc)
{

}


void MosquittoClient::on_disconnect()
{

}


void MosquittoClient::on_publish(int mid)
{

}


void MosquittoClient::on_subscribe(int mid, int qos_count, const int *granted_qos)
{

}


void MosquittoClient::on_message(const struct mosquitto_message *message)
{

}
6. mosquitto库官方详解

官方详解路径

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/706177.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号