之前有一篇文章介绍了如何在百度智能云上面创建MQTT设备,这期我们讲一讲如何利用VS使用C++制作一个简单的MQTT服务器。

首先,我们需要下载一个VS,VS全称visual studio,是微软发布的一款功能强大的编译器,从我的学习之初也一直在使用这款。这里就不赘述如何安装Visual Studio了,不会安装的同学可以自行搜索。

我们打开VS,选择创建新项目,类型选择C++的空项目。

在开始之前,我们需要一个可以实现MQTT的库,我这里的是paho.mqtt的库(链接贴不上来,如需私信),我们需要把库链接入编译器。

选择 项目-xxxx属性-配置属性-链接器-常规,在附加库依赖项中添加我们的库文件

之后添加“MQTTClient.h”头文件即可使用我们的MQTT库。

1.在主函数中我们首先创建MQTT连接变量以及存储MQTT连接信息的结构体。


 MQTTClient client;
MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;

2.获取MQTT设备信息以及设置MQTT连接。

百度智能云上面创建MQTT设备中提到获取MQTT服务器连接信息,我们在连接信息生成器中获得这些信息。并将这些信息保存下来作为等会连接使用。 3.配置MQTT连接信息,设置等待时间,以及设置消息回调函数。

   connlost, msgarrvd, delivered是三个回调函数,分别当MQTT断开连接,MQTT接收消息,MQTT发送确认之后调用。


#define ADDRESS     "agcqeqz.iot.gz.baidubce.com"
#define CLIENTID    "TEST1"
#define TOPIC       "One"
#define PAYLOAD     "TEST1"
#define QOS         0
#define USERNAME    "thingidp@agcqeqz|Test1|0|MD5"
#define PASSWORD    "b0fcc0100018a7b8db847f916fbedf7f"

    MQTTClient_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL);
    conn_opts.keepAliveInterval = 20;
    conn_opts.cleansession = 1;
    conn_opts.username = USERNAME;
    conn_opts.password = PASSWORD;
    MQTTClient_setCallbacks(client, NULL, connlost, msgarrvd, delivered);

    if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS) {
        printf("Failed to connect, return code %d\n", rc);
        exit(EXIT_FAILURE);
    }
    printf("Subscribing to topic %s\nfor client %s using QoS%d\n\n", TOPIC, CLIENTID, QOS);
    MQTTClient_subscribe(client, TOPIC, QOS);
    while (1);

运行上述代码,打开用量统计可以看见MQTT连接成功,我们接下来来编辑消息响应函数。我们将消息变量中的值存入payloadptr变量中,之后打印这个变量的值,这样子当有一个设备发送消息的时候,就可以触发这个函数打印消息了。


int msgarrvd(void* context, char* topicName, int topicLen, MQTTClient_message* message)
{
    printf("Message arrived\r\n");
    printf("  topic: %s\r\n", topicName);
    printf("  message: ");
    char* payloadptr = static_cast(message->payload);
    cout<< payloadptr<
  
  
   

在设备中,我们选择模拟设备,点击开始模拟。订阅主题选择之前模板中(上一篇公众号提过)设置的主题,我这里是One,注意的是程序中的Topic 宏定义要一样

接下来我们选择我们需要的主题,发送我们的信息,我们发现我们的程序控制台上也成功接收到了我们发送的信息。

4.配置发送函数。

我们在主函数中设置输入,当我们有输入时我们即向云端发送数据。


    while (1)
    {
        char cinn[256];
        cout << "Please put your message:";
        cin >> cinn;
        if (strcmp(cinn, "exit") == 1)
        {
            exit(0);
        }
        MQTTClient_publish(client, TOPIC, strlen(cinn), cinn, QOS, 0, NULL);

    }
    MQTTClient_disconnect(client, 10000);
    MQTTClient_destroy(&client);

不知道为什么我发送空格就会分成几段(我在研究一下),可以看出我们设备发送的消息也会被设备本身所接受,所以我们发送信息的时候应当包含更多的信息,比方说时间戳、设备ID等等信息,但是由于本文章只起演示作用就不多展示。

#defineCLIENTIDTEST1#
#definePAYLOADTEST1#
嘉立创PCB

还没有评论,抢个沙发!