原创 air202用LUAT 连接ONENET

2018-9-27 15:09 4048 17 2 分类: MCU/ 嵌入式 文集: AIR202
ONENET 是移动的互联网平台。 
        AIR202的协议中有HTTP, HTTP协议只能上传,不能下载,不好用。
那剩下的协议中,LUAT 和ONENET的最大公约数就是MQTT协议了。 他们两家都支持。 

AIR202 中 API  的函数不多。 里面只有5,6个样子。 连接ONENET 只需要2个。
1 ) mqtt.client()     创建一个mqtt client实例
2 ) mqttc:connect() 连接mqtt服务器

ONENET 平台的连接步骤也很详细。 平台上还提供了一个软件模拟软件。
用软件模拟连接好后, 下面是调试信息:
.........................Send one mqtt packet.........................
FixHeader{
PacketTag = 16
PacketType  = 1
RemainLength  = 58
}
VariableHeaderConnect{
protocol_name_len_= 4
protocol_name_= MQTT
protocol_level_= 4
connect_flag_= 192
keep_alive_= 120
client_id_len_= 8
client_id_= 89010435                //设备ID
usr_name_len_= 6
usr_name_= 174123 //产品ID
password_len_= 28
password_= hlDwAFVzM4zylzY1234J2JM81B8= //鉴权信息  
}

MQTT:0x10 0x3A 0x00 0x04 0x4D 0x51 0x54 0x54 0x04 0xC0 0x00 0x78 0x00 0x08 0x34 0x35 0x30 0x31 0x30 0x34 0x33 0x35 0x00 0x06 0x31 0x37 0x34 0x34 0x36 0x33 0x00 0x1C 0x68 0x6C 0x44 0x77 0x41 0x46 0x56 0x7A 0x4D 0x34 0x7A 0x79 0x6C 0x7A 0x59 0x45 0x49 0x3D 0x36 0x4A 0x32 0x4A 0x4D 0x38 0x31 0x42 0x38 0x3D 

Send One Packet Succ:
.........................recv connect ack packet.........................

FixHeader{
PacketTag = 32
PacketType  = 2
RemainLength  = 2
}
VariableHeaderConnAck{
ack_flags_= 0
ret_code_= 0
}

Mqtt ACK:0x20 0x02 0x00 0x00 

ONENET上的文档  对每一个字节是什么意思 描述的很清楚。  我也是边看边学边照葫芦花瓢。
我首先知道得先连接上才能干点别的。 
MQTT的功能不多,常用的也就下面几种类型。
名字流向描述
CONNECT1C->S客户端请求与服务端建立连接
CONNACK2S->C服务端确认连接建立
PUBLISH3CóS发布消息
PUBACK4CóS收到发布消息确认
PUBREC5CóS发布消息收到
PUBREL6CóS发布消息释放
PUBCOMP7CóS发布消息完成
SUBSCRIBE8C->S订阅请求
SUBACK9S->C订阅确认
UNSUBSCRIBE10C->S取消订阅
UNSUBACK11S->C取消订阅确认
PING12C->S客户端发送PING(连接保活)命令
PINGRSP13S->CPING命令回复
DISCONNECT14C->S断开连接



AIR202 的  CONNECT    需要用2个函数才能配置完整参数。
  local mqttClient = mqtt.client("89010435",600,"174123","hlDwAFVzM4zylzYEI=6J2JM81B8=")
  if mqttClient:connect("183.230.40.39",6002,"tcp") then

完整的程序在LUAT TASK  中 DEMO->MQTT 文件夹中。
                                                           2018 0927

MQTT最核心的传输协议 Subcribe(定阅)和Publish(推送)。简单来说就是客户端口(比如物联网硬件)Subcribe一个topic(主题)后,其它的客户端(比如手机)向服务器往这个topic 推送 Payload(有效数据),服务器就会把Payload转发给定阅这个topic的客户端(硬件)。
------------------------摘自<深度剖析MQTT协议的整个通信流程>

          今天是看MQTT的第一天,刚开始没有看懂订阅和发布。  看到上面的话,才好像明白过来其中的巧妙。
MQTT应该是通过服务器 来实现 多点对多点,多个信息对不同渠道转发的实现。
手机和控制板都叫客户端,  都可以订阅不同的信息, 如果有客户端发布了相同主题 TOPIC的 数据 PAYLOAD,  那个只有订阅的这个主题的客户端能收到。 
ONENET 上还有2个特殊的指令:  平台指令接收  和上传数据点。    是ONENET 服务器和客户端之间直接的交流,没有TOPIC的约束。ONENET 要求的数据格式是JSON 格式。

再看LUAT .  
               mqttc:subscribe()                  //订阅主题
              mqttc:publish()                       //发布一条消息      
mqttc:receive()                //接收消息        ,接收消息 没有区别,只要有数据就接收下来,  不判断是否是自己订阅的。
分发的任务 在服务器端完成。 

               明天用AIR202 和模拟器 做2台设备  连接ONENET,相互发送和接收试试。   
ONENET 是也提供APK 手机软件,在应用中可以测试 手机和设备之间的通讯,不过好像没有TOPIC的选择。。。我在应用中没有找到TOPIC的选项。  
--------------------2018 0927   17:41

                  在ONENET 上建立了2个设备,  一个用模拟器连接,一个用AIR202 ,   用MQTT simulate Device  发布时,只有TOPIC 对应 ,AIR202 才可以接收到。
ONENET的下发数据,是针对一个设备的,没有TOPIC的约束,直接发送和接收。
                 我没有手机上编程能力,ONENET上有设备云的软件,可以实时看到设备的变化。 是服务器和设备一对一的。
              -----------------------------2018 0928








文章评论0条评论)

登录后参与讨论
我要评论
0
17
关闭 站长推荐上一条 /2 下一条