设为首页收藏本站

嵌入式天空

 找回密码
 我要注册

扫一扫,访问微社区

最近看过此主题的会员

查看: 808|回复: 0

ES-LINK服务器支持MQTT协议一

[复制链接]

341

主题

465

帖子

3942

积分

管理员

我是一个程序员

Rank: 9Rank: 9Rank: 9

积分
3942
发表于 2018-9-19 13:28:40 | 显示全部楼层 |阅读模式
1.用户可以使用MQTT协议来订阅开关传感器的数据
当开关传感器的状态发生改变后eslink会发布相关主题

2.订阅的主题格式:
eslink/<user_id>/<device_id>/<sensor_id>
假如你的user_id为20,如果要订阅device_id为30,sensor_id为50的开关传感器的数据的话,那么你要订阅的主题应该是eslink/20/30/50

3.每一个mqtt-client必须有唯一的client_id
点击eslink页面的《终端》按钮,按照需求生成client_id

4.基于Linux系统下C语言的mqtt客户端案例
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include "MQTTClient.h"

  5. #define ADDRESS     "tcp://119.29.98.16:1883"
  6. #define CLIENTID    "xxxxxxxxxxxxx"      //此处填写在eslink生成的唯一的client_id
  7. #define TOPIC       "eslink/330/297/431"     //此处填写要订阅的主题
  8. #define QOS         2
  9. #define TIMEOUT     10000L
  10. #define USERNAME    "yyyyyyyy"         //此处填写您在eslink的帐号
  11. #define PASSWORD    "xxxxx"              //此处填写您在eslink帐号的密码

  12. volatile MQTTClient_deliveryToken deliveredtoken;

  13. void delivered(void *context, MQTTClient_deliveryToken dt)
  14. {
  15.     printf("Message with token value %d delivery confirmed\n", dt);
  16.     deliveredtoken = dt;
  17. }

  18. int msgarrvd(void *context, char *topicName, int topicLen, MQTTClient_message *message)
  19. {
  20.     int i;
  21.     char* payloadptr;

  22.     printf("Message arrived\n");
  23.     printf("     topic: %s\n", topicName);
  24.     printf("   message: ");

  25.     payloadptr = message->payload;    //此处是收到的数据
  26.     for(i=0; i<message->payloadlen; i++)
  27.     {
  28.         putchar(*payloadptr++);
  29.     }
  30.     putchar('\n');
  31.     MQTTClient_freeMessage(&message);
  32.     MQTTClient_free(topicName);
  33.     return 1;
  34. }

  35. void connlost(void *context, char *cause)
  36. {
  37.     printf("\nConnection lost\n");
  38.     printf("     cause: %s\n", cause);
  39. }

  40. int main(int argc, char* argv[])
  41. {
  42.     MQTTClient client;
  43.     MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
  44.     int rc;
  45.     int ch;

  46.     MQTTClient_create(&client, ADDRESS, CLIENTID,
  47.         MQTTCLIENT_PERSISTENCE_NONE, NULL);
  48.     conn_opts.keepAliveInterval = 20;
  49.     conn_opts.cleansession = 1;
  50.     conn_opts.username = USERNAME;
  51.     conn_opts.password = PASSWORD;

  52.     MQTTClient_setCallbacks(client, NULL, connlost, msgarrvd, delivered);

  53.     if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS)
  54.     {
  55.         printf("Failed to connect, return code %d\n", rc);
  56.         exit(EXIT_FAILURE);
  57.     }
  58.     printf("Subscribing to topic %s\nfor client %s using QoS%d\n\n"
  59.            "Press Q<Enter> to quit\n\n", TOPIC, CLIENTID, QOS);
  60.     MQTTClient_subscribe(client, TOPIC, QOS);

  61.     do
  62.     {
  63.         ch = getchar();
  64.     } while(ch!='Q' && ch != 'q');

  65.     MQTTClient_unsubscribe(client, TOPIC);
  66.     MQTTClient_disconnect(client, 10000);
  67.     MQTTClient_destroy(&client);
  68.     return rc;
  69. }                                                                                                                                                                                                                       
复制代码




最近很忙
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

QQ|Archiver|手机版|小黑屋|EBMSKY Inc. ( 冀ICP备17022971号-1  

GMT+8, 2019-5-24 10:02 , Processed in 0.073034 second(s), 34 queries .

Powered by Discuz! X3.2

© 2014-2018 Comsenz Inc. 【嵌入式天空】设计

快速回复 返回顶部 返回列表