当前位置:首页 » 《休闲阅读》 » 正文

linux下MQTT服务器(EMQX)搭建及paho.mqtt.c客户端开发

29 人参与  2024年04月04日 14:40  分类 : 《休闲阅读》  评论

点击全文阅读


前言:

MQTT 是一种基于客户端服务端架构的发布 / 订阅模式的消息传输协议。它的设计思想是轻巧、开放、 简单、规范,易于实现。这些特点使得它对很多场景来说都是很好的选择,特别是对于受限的环境如机器与 机器的通信( M2M )以及物联网环境( IoT )。        ----MQTT 协议中文版

一.linux下EMQX服务器搭建

下载安装包 免费下载、试用 EMQ 产品 找对自己开发环境版本
1.下载deb包
wget https://www.emqx.com/zh/downloads/broker/4.4.19/emqx-4.4.19-otp24.3.4.2-1-ubuntu16.04-amd64.deb
2.安装
sudo apt install ./emqx-4.4.19-otp24.3.4.2-1-ubuntu16.04-amd64.deb
3.运行
sudo systemctl start emqx 此时在浏览器登录服务器IP   http://(server_ip):18083/#/

即可验证自己服务器安装的是否成功,用户名是 admin,初始密码 public

二.客户端工具MQTTX的安装

下载地址 免费下载、试用 EMQ 产品

 我用的是windows下的,接着安装运行直接下一步走下去就行了。

name:客户端的名字 client ID:客户端ID host:第一步里面服务器的IP地址 创建好了之后连接服务器,然后再创建一个客户端,相互收发验证。

三.linux下paho.mqtt.c的开发

1. paho.mqtt.c下载
git clone https://github.com/eclipse/paho.mqtt.c.gitcd paho.mqtt.cmkdir buildcd buildcmake ..make make install

安装完成会在/usr/local/include和/usr/local/lib下看见mqtt的头文件和动态库。

 2.mqtt代码开发
#include <MQTTAsync.h>  //换成你自己的安装路径,不然回报错#include <stdio.h>#include <unistd.h>#include <string.h>#define  SERVERIP "xxx"  //换成你自己的服务器#define Clientid "sza123"    //这个随便写int isConnected=0;//消息回调函数int onMessrecv(void* context,char*topicName,int topicLen,MQTTAsync_message*message){            printf("recv name:\ntopic:%s,payload:%s\n",topicName,(char*)message->payload);            MQTTAsync_free(topicName);            MQTTAsync_free(message);            return 1;         }void onSubscribe(void* context,MQTTAsync_successData* response){    printf("sub success!");}//连接mqtt服务器void onConnect(void *context,MQTTAsync_successData* response){    MQTTAsync client =(MQTTAsync)context;    int ret;    MQTTAsync_responseOptions response_opt=MQTTAsync_responseOptions_initializer;    printf("Succeed in connecting to mqtt-server!\n");    response_opt.onSuccess=onSubscribe;    ret=MQTTAsync_subscribe(client,"/pub",1,&response_opt);//订阅/pub主题消息    if(ret!=MQTTASYNC_SUCCESS){        printf("fail to sub!\n");    }    isConnected=1;}void disConnect(void *context,MQTTAsync_failureData* response){    printf("Failed to connect  mqtt-server!\n");}void onSend(void* context,MQTTAsync_successData* response){    printf("send message to mqtt server success!\n");}int main(){    MQTTAsync client;    int ret;    MQTTAsync_connectOptions conn_opt = MQTTAsync_connectOptions_initializer;//初始化连接选项    ret=MQTTAsync_create(&client,SERVERIP,Clientid,MQTTCLIENT_PERSISTENCE_NONE,NULL);    if(ret!=MQTTASYNC_SUCCESS)    {        printf("Cannot create mqtt client!\n");        return -1;    }    //初始化接收消息回调    ret=MQTTAsync_setCallbacks(client,NULL,NULL,onMessrecv,NULL);    if(ret!=MQTTASYNC_SUCCESS){        printf("cannnot set call back function!\n");        return  -1;    }    conn_opt.onSuccess=onConnect;    conn_opt.onFailure=disConnect;    conn_opt.automaticReconnect=1;    conn_opt.context=client;    conn_opt.cleansession=0;    //conn_opt.username="xxx";//设置用户名密码换成自己的    //conn_opt.password="xxx";    ret=MQTTAsync_connect(client,&conn_opt);    //因为是异步的,当MQTTAsync_connect返回的时候只是代表底层代码对参数进行了检查    //当正确返回时,表示底层代码接收了该connect连接命令    if(ret!=MQTTASYNC_SUCCESS)    {        printf("Cannot start a mqttt server connect!\n");        return -1;    }    while (1){        //1表示成功连接到我们的服务器        if(isConnected==1){            MQTTAsync_message message=MQTTAsync_message_initializer;            MQTTAsync_responseOptions res_option=MQTTAsync_responseOptions_initializer;            char buffer[200];            static int temp=16;            static int humid=58;            sprintf(buffer," temp:%d,humid:%d ",temp++,humid++);            message.payload=buffer;            message.payloadlen=strlen(buffer);            message.qos=1;            res_option.onSuccess=onSend;            printf("read the message is :");            //发布消息            ret=MQTTAsync_sendMessage(client,"/sensor/dht11/0",&message,&res_option);//发送消息            if(ret!=MQTTASYNC_SUCCESS){                printf("参数错误!");            }                   sleep(10);                     if(temp>30|humid>90){                       temp=16;                       humid=58;                   }        }    }    return 0;}

 然后编译

gcc mqtt.c -o mqtt -I /usr/local/include/ -lpaho-mqtt3a

运行mqtt

 

 此时windows上的客户端工具就会接收相应的内容,也可以向linux客户端发送消息。


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/90499.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • (番外)+(结局)孟南笙贺昀洲全书+后续(孟南笙贺昀洲)全书在线_(孟南笙贺昀洲全书+后续)列表_笔趣阁(孟南笙贺昀洲)
  • 孟南笙贺昀洲全书+后续(孟南笙贺昀洲全书+后续)完结_(孟南笙贺昀洲)列表_笔趣阁(孟南笙贺昀洲全书+后续)
  • 家属给我三百万上门治病,医治对象却是个死人小说章节免费试读_[黄姐宋云老公]全文免费无弹窗阅读_笔趣阁
  • 沉舟尽历万木春结局+番外(傅沉舟阮知微)全书傅沉舟阮知微读结局_傅沉舟阮知微读结局列表_笔趣阁(沉舟尽历万木春结局+番外)
  • 降临芸娘祜神降临芸娘祜神免费
  • 苏南鸢裴墨珩结局+番外(苏南鸢裴墨珩)全书在线_(苏南鸢裴墨珩)苏南鸢裴墨珩结局+番外在线列表_笔趣阁(苏南鸢裴墨珩)
  • 予摘月结局+番外(顾南意季屿州)列表_予摘月结局+番外(顾南意季屿州)全书+后续+结局在线
  • (番外)+(结局)我在回忆里万劫不复+后续+结局+番外(谢梵声秦见鹿)全书在线_(我在回忆里万劫不复+后续+结局+番外)列表_笔趣阁(谢梵声秦见鹿)(谢梵声秦见鹿)列表_(番外)+(结局)我在回忆里万劫不复+后续+结局+番外(谢梵声秦见鹿)全书在线_(我在回忆里万劫不复+后续+结局+番外)列表_笔趣阁(谢梵声秦见鹿)(谢梵声秦见鹿)全书+后续+结局在线
  • 顾南枝的奈何情深不渡顾南枝段寒川全书在线
  • 不要乱摸毛茸茸!完结版全文_明瑶北琰节选隐藏剧情入口‌
  • [递上离婚协议后,渣夫他追悔莫及]最新后续章节在线阅读_温絮秦寂川节选试读
  • 奈何情深不渡+后续+结局(顾南枝段寒川)全书在线_奈何情深不渡+后续+结局全(顾南枝段寒川)

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1