链接--->http://blog.csdn.net/zhou6343178/article/details/51182623

1、准备条件: 
a)硬件:ATMEGA644PA 8位单片机 ENC28J60 
b)下载MQTT C语言的包: 
C/C++ MQTT Embedded clients 
https://www.eclipse.org/paho/clients/c/embedded/ 
c)MQTT基础知识 
http://mqtt.org/ 
http://download.csdn.net/detail/zhou6343178/9495445

2、移植MQTTPacket到项目里: 
复制文件夹MQTTPacket到工程,复制MQTTPacket\samples里面的transport.c、transport.h到工程 

3、修改已经transport.c里面的四个接口:

int transport_sendPacketBuffer(int sock, unsigned char* buf, int buflen);
int transport_getdata(unsigned char* buf, int count);
int transport_open(char* host, int port);
int transport_close(int sock);
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

看接口名称就知道,该四个接口实现的是TCP数据的收发,具体修改需要根据已经实现的TCP接口来定。(单片机上常用的TCP/IP协议栈主要有uip、LwIP) 
注意:MQTT是tcp/ip的应用层,传输层需要自己实现,这四个接口分别对应TCP的连接、收、发和关闭。

4、实现订阅/发布,查看MQTTPacket\samples下的pub0sub1.c。 
下面为参数的意义: 
MQTTPacket_connectData data = MQTTPacket_connectData_initializer; //连接参数 
data.clientID.cstring = “me2”; //客户ID,唯一 
data.keepAliveInterval = 200; //保存存活时间200s 
data.cleansession = 1;//重新连接后是否清除以前的信息 0表示不清除,1表示重连清除 
data.username.cstring = “admin”;//如果服务器需要用户名密码,这里设置 
data.password.cstring = “admin”; 
Qos : 
0 表示最多一次 
1 表示至少一次 
2 表示只有一次

MQTTDeserialize_publish(&dup,&qos,&retained,&msgid,&receivedTopic,&payload_in, &payloadlen_in, buf,buflen);
  • 1
  • 1

msgid:该包的ID,paketid,如果需要增加反馈(QoS为1和2需要反馈),需要获取该ID

发送反馈:

MQTTDeserialize_publish(&dup, &qos, &retained, &msgid,&receivedTopic,&payload_in, &payloadlen_in, buf, buflen);
int len = MQTTSerialize_puback(buf,buflen,msgid);
transport_sendPacketBuffer(ack_buf,len);
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

接收服务器的反馈:

if(PUBACK == MQTTPacket_read(buf,buflen,transport_getdata))
{
unsigned char packettype = 0;
unsigned char dup_ack = 0;
unsigned short packetid = 0; MQTTDeserialize_ack(&packettype,&dup_ack,&packetid,buf,buflen);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

比较发送的msgid和反馈获取的packetid,如果一致表示该包发送成功。 
等等,具体看文档

5、服务器实现 mosquitto 
请参考:http://blog.csdn.net/xukai871105/article/details/39252653 
指令举例: 
订阅 mosquitto_sub -h xxx.xxx.xxx.xxx -u admin -P admin -t substopic 
-h 服务器域名 
-u 用户名(没有可以省略) 
-P密码(没有可以省略) 
-t topic名称

发布:mosquitto_pub -h xxx.xxx.xxx.xxx -u admin -P admin -t substopic -m hello 
-m 发布的内容

以上基本实现单片机与服务器的联调。如果需要手机控制单片机,可下载手机相关的MQTT包进行通讯。

MQTT--单片机实现即时通信的更多相关文章

  1. 即时通信(IM)和实时通信(RTC)的区别

    即时通信(IM=nstant messaging)和实时通信(rtc=Real-time communication)都是一套网络通信系统,其本质都是对信息进行转发.其最大的不同点,是对信息传递的时间 ...

  2. java即时通信小例子

    学习java一段时间了,今天写来一个即时通信的小例子练手在其过程中也学到了一些知识拿出来和大家分享,请路过的各位大神多多赐教... 好了下面讲一下基本的思路: 首先,编写服务器端的程序,简单点说吧就是 ...

  3. iOS开发之使用XMPPFramework实现即时通信(三)

    你看今天是(三)对吧,前面肯定有(一)和(二),在发表完iOS开发之使用XMPPFramework实现即时通信(一)和iOS开发之使用XMPPFramework实现即时通信(二)后有好多的小伙伴加我Q ...

  4. iOS开发之使用XMPPFramework实现即时通信(二)

    上篇的博客iOS开发之使用XMPPFramework实现即时通信(一)只是本篇的引子,本篇博客就给之前的微信加上即时通讯的功能,主要是对XMPPFramework的使用.本篇博客中用到了Spark做测 ...

  5. 基于XMPP协议的Android即时通信系

    以前做过一个基于XMPP协议的聊天社交软件,总结了一下.发出来. 设计基于开源的XMPP即时通信协议,采用C/S体系结构,通过GPRS无线网络用TCP协议连接到服务器,以架设开源的Openfn'e服务 ...

  6. 【原】iOS学习43即时通信之XMPP(2)

    本篇是 即时通信之XMPP(2) 接上次 即时通信之XMPP(1) 1. 好友列表 1> 初始化好友花名册 // 获取管理好友的单例对象 XMPPRosterCoreDataStorage *r ...

  7. 【原】iOS学习42即时通信之XMPP(1)

    1. 即时通信 1> 概述 即时通讯(Instant Messaging)是目前Internet上最为流行的通讯方式,各种各样的即时通讯软件也层出不穷,服务提供商也提供了越来越丰富的通讯服务功能 ...

  8. QQ 腾讯QQ(简称“QQ”)是腾讯公司开发的一款基于Internet的即时通信(IM)软件

    QQ 编辑 腾讯QQ(简称“QQ”)是腾讯公司开发的一款基于Internet的即时通信(IM)软件.腾讯QQ支持在线聊天.视频通话.点对点断点续传文件.共享文件.网络硬盘.自定义面板.QQ邮箱等多种功 ...

  9. (转)基于即时通信和LBS技术的位置感知服务(一):提出问题及解决方案

    一.前言.提出问题 公司最近举行2011年度创新设计大赛,快年底了正打算写写2010年以来Android开发的心得与经验,正好同事出了个点子:假如A和B两个人分别在不同的地点,能不能实现这样的功能,让 ...

  10. (转)基于即时通信和LBS技术的位置感知服务(二):XMPP协议总结以及开源解决方案

    在<基于即时通信和LBS技术的位置感知服务(一):提出问题及解决方案>一文中,提到尝试使用XMPP协议来实现即时通信.本文将对XMPP协议框架以及相关的C/S架构进行介绍,协议的底层实现不 ...

随机推荐

  1. Frosh Week

    Problem Description During Frosh Week, students play various fun games to get to know each other and ...

  2. DHCP配置实例

    配置DHCP的思路: 1.创建dhcp服务2.添加一个网络号(或者说地址池)3.排除路由器的网管4.排除DHCP的网关 代码: Router>enableRouter#configRouter# ...

  3. Jenkins+ Xcode+ 蒲公英 实现IOS自动化打包和分发

    Jenkins+ Xcode+ 蒲公英 实现IOS自动化打包和分发 直接入正题: Screen Shot 2015-09-18 at 16.56.20.png Mac上安装Jekins jekins下 ...

  4. Ajax类

    ajax.js -------------------------[ajax类]-------------------------- function Ajax(recvType){ var aj=n ...

  5. 基于Java的四大开源测试工具

    摘要:成功的应用程序离不开测试人员和QA团队反复地测试,应用程序在进行最后的部署之前,需要通过测试来确保它的负载管理能力以及在特殊情况下的工作条件和工作加载情况. %R[)vA t]N0 测试是应用程 ...

  6. 何为中间语言IL?

    一直以来,对于.NET与C#之间的关系我都存在着疑惑,为此,今天专门仔细看了一下以前最容易忽略掉的书本“前言”部分,予以澄清:) 首先,c#的结构和方法论反映了.NET的基础方法论,在很多情况下,c# ...

  7. 修改 ueditor1_4_3-utf8-php 它的图片上传地址

    本来是这样的 至少应该是在,myapp目录下吧,从myapp文件夹,我的网站才刚开始啊...你让我将来怎么设置?麻烦... 找到uploader的文件 $rootPath = $_SERVER['DO ...

  8. sh脚本循环

    sh for循环 for File in 1 2 3 4 5 do echo $File done sh for多重循环 for image_size_input in 160 140 120 100 ...

  9. Spring Tools Suite (STS) 简介

    首先,sts是一个定制版的Eclipse,专为Spring开发定制的,方便创建调试运行维护Spring应用. 官方页面.下载地址(3.8.1 win x64). 其次,没什么好介绍的,用一下就明白了. ...

  10. 转载:【原译】Erlang列表处理(Efficiency Guide)

    转自:http://www.cnblogs.com/futuredo/archive/2012/10/22/2734186.html List handling 1  Creating a list ...