MQTT协议接入OneNET (二)

 

一、Android设备使用MQTT协议接入OneNet平台

1. 用到的MQTT库:eclipse.paho

直接在app的gradle内dependencies添加依赖

compile 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'

compile 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'

 

注意:使用eclipse.paho一定记得要在AndroidManifest.xml中添加服务

<serviceandroid:name="org.eclipse.paho.android.service.MqttService"/>

否则没有办法正常使用

 

2. 连接上OneNet的服务器

需要设置

clientId为deviceId,即创建设备时的设备号

userName为productId,即创建产品的产品号

password为APIkey或者authInfo(即自己设置鉴权信息字符串)

因为APIkey太长不好记忆,所以我选择鉴权

 

1) 首先配置连接设置

MqttConnectOptions option = newMqttConnectOptions();

option.setUserName(productId);

option.setPassword(authInfo.toCharArray());

option.setCleanSession(false);

 

2) 调用mqttclient的连接方法

MqttAndroidClient mqttClient = newMqttAndroidClient(mContext, ("tcp://" + serverIP + ":" +serverPort), deviceId);

mqttClient.connet(option);

//OneNet的ip为183.230.40.39

//mqtt端口为6002

 

这样基本上就连接上OneNet的服务器了,ConnAck包这些是paho库帮我们完成的接收确认,我们只需要调用连接的这个函数即可,非常方便。

 

ps.当初看开发文档的时候一开始没有看到设置用户名这些,因为照着接入流程做,看到了服务器的ip和端口就直接跑去连接了,发现一直连接不上。直到再次看了一遍开发文档,拖到文档下面的常见问题才发现还需要设置这些。感觉这些重要的设置内容应该写在前面比较好,第一次没注意看,很尴尬。

 

3.发布及订阅自己的topic

这个很简单,之前用自己的服务器也是这样做的,

1) 订阅:

mqttClient.subscribe("topic",0); //参数一为topic字符串, 参数二为QoS级别

 

2) 发布:

MqttMessage msg = new MqttMessage();

msg.setPayload(payload.getBytes());  //发布内容

msg.setQos(1);                                 //设置发布级别

mqttClient.publish(topic, msg);          //发布

 

我们的项目是以topic来区别设备的

譬如,Android应用就订阅一个topic为Android/id,id为编号

底层设备就订阅一个topic为Device/id

然后发送指令直接向对应的topic发送就行

 

4.使用mqtt上传数据点/获取数据

OneNet为每一个产品提供了数据流,在平台上记录并且可以生成数据的曲线,要想让我们通过mqtt协议上传的数据能够保存在数据流上,就得向$dp这个topic发送一串规定格式的数据。

试了几次向$dp这个topic发送数据,在设备数据界面看都没有成功更新到数据,最让人疑惑的是,一旦发送了数据,设备就会掉线,需要重连。不太清楚OneNet平台是不是有什么发布数据就让你强制下线的机制。并且因为平台不允许订阅$打头的数据。

起初我以为是OneNet服务器的问题,不过其他的topic还是可以正常的使用,并且换用平台提供的官方客户端,又可以成功发送且对数据进行更新。

 

(使用OneNet提供的mqtt测试程序上传数据点,同时可以看到平台上显示设备的数据更新了)

于是我在想是不是发送的格式还是不正确,就发现了这个

决定还是通过wireshark软件对OneNet平台提供的客户端进行抓包,看看他究竟发送的是什么。

 

 

可以看到确实是向$dp这个topic发送了消息,7b是”{”转为16进制,那么前面的01 00 5e就是协议文档里面提到的发送类型、长度高位、长度低位了。

 

 

附上我之前的代码:

 

 

这样问题就显而易见了。

协议中的格式讲的是发送16进制的01 00 length,而通过之前编写的这段代码发送出去的是字符串”01 00 length”

 

故赶紧修改代码为:

 

 

这样就能成功地将数据库上传到OneNet平台了。

 

 

 

### 回答1: esp8266 通过 MQTT 协议接入 OneNet,需要在 esp8266 上安装 MQTT 客户端库,并使用 OneNet 提供的 MQTT 服务器地址、端口、用户名和密码连接到 OneNet。然后通过 MQTT 协议发布设备上传的数据和订阅平台下发的命令。 ### 回答2: ESP8266是一个体积小巧、集成了WIFI的芯片,非常适合用于物联网应用。MQTT(Message Queuing Telemetry Transport)是一种基于发布订阅模式的轻量级通信协议,常用于物联网设备之间的通信。OneNET平台是中国移动物联网事业部研发的物联网应用平台,提供了云端数据存储与管理、设备接入、数据分析等功能。 接入OneNET平台需要通过MQTT协议发送数据到平台,以实现实时数据上传和设备管理等功能。具体步骤如下: 1.注册OneNET平台账户,并创建应用和设备。在设备管理中,获取设备ID和设备API Key。 2.在ESP8266上安装MQTT客户端库。可以使用开源的PubSubClient库,该库可以在Arduino IDE中进行安装。引入该库后,可以使用MQTT客户端在ESP8266上进行消息订阅和发布。 3.编写代码实现ESP8266与OneNET的通信。在ESP8266上编写代码,使其能够连接到OneNET平台的MQTT服务器,并发送消息。具体的代码实现可以参考OneNET平台提供的开发文档。 4.上传数据到OneNET平台。利用ESP8266,可以上传传感器数据、设备状态信息等到OneNET平台,同时也可以通过平台远程控制设备。 总体来说,将ESP8266与MQTT协议OneNET平台相结合,可以实现物联网设备的智能化管理和控制。在实际应用中,还需要考虑设备接入的稳定性和数据安全等问题。 ### 回答3: ESP8266是一种廉价的Wi-Fi芯片,它可用于制作具有Wi-Fi连接功能的物联网设备。MQTT是一种轻量级的消息传输协议,它适用于物联网设备之间的通信。OneNet是由中国移动物联网开发的云平台,用于接收和存储物联网设备发送的数据。 要将ESP8266设备通过MQTT协议接入OneNet平台,需要采取以下步骤: 1. 下载并安装MQTT客户端库 ESP8266可通过多种MQTT库连接到OneNet平台,包括PubSubClient、AsyncMQTT等。在选择库之前,应考虑到设备的内存、处理速度和网络速度等因素,并选择最适合自己设备的客户端库。 2. 获取OneNet平台的设备ID和API Key OneNet平台为每个设备分配一个唯一的设备ID和API Key,这些信息将用于连接到OneNet平台并向其发送数据。在OneNet控制台上创建设备并获取设备ID和API Key。 3. 编写代码将ESP8266连接到Wi-Fi网络 ESP8266通过Wi-Fi连接到互联网,因此需要配置设备连接到Wi-Fi网络的SSID和密码。可以使用ESP8266WiFi库编写程序来实现这一步骤。 4. 通过MQTT协议将ESP8266设备连接到OneNet平台 在只参数和库类别设置完毕后,接下来我们就可以创建MQTT的实体类,传入相应的参数,连接客户端进行物联网的传输,示格式如下: ``` void connect() { // 设置Client ID和帐户密码 mqttClient.setClientId(clientID); mqttClient.setCredentials(apiKey, ""); // 连接OneNet平台MQTT服务器 mqttClient.connect(host,port); Serial.println("MQTT Connected."); } ``` 5. 发送数据到OneNet平台 一旦连接成功,我们可以使用MqttClient.publish()函数将数据发送到OneNet平台,其格式为: ``` mqttClient.publish(topi_dp,payload); ``` 其中,topic是数据通道名称, 它由设备ID和数据点ID组成。payload是数据的JSON格式,它包含可以向OneNet平台发送的有用信息。 通过以上步骤后,我们就完成了ESP8266通过MQTT协议接入OneNet平台的过程。可以在OneNet控制台上查看设备发送的数据,并从中分析和处理得到有用信息。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值