NodeMCU学习(十)--发送数据到OneNET物联网平台

本文介绍如何使用NodeMCU通过MQTT协议连接到OneNET物联网平台,并发送数据。主要内容包括OneNET平台的接入流程、必要的API使用方法以及Lua脚本编写。通过示例代码展示了如何设置WiFi连接、配置MQTT客户端并发送数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      通过NodeMCU发送数据到OneNET平台,序号先在OneNET平台上创建MQTT协议的产品,然后在产品线创建设备。在连接平台时需要用到产品ID、设备ID以及设备的鉴权信息。在OneNET平台,MQTT协议对应的服务器IP和端口为:183.230.40.39,6002。注意OneNET有多种协议可进行连接,不同的协议对应的服务器IP和端口号是不同的。想要实现本实验的功能,需要对TCP/IP和MQTT协议有一定的了解。(《MQTT协议--MQTT协议解析》《MQTT协议--MQTT协议简介及原理》 

1、如何连接OneNET平台

《NodeMCU学习(九)--连接OneNET物联网平台》

《OneNET物联网平台介绍》

OneNET物联网平台

2、主要API

2.1  WiFi

(1)wifi.setmode()

(2)wifi.sta.config()

(3)wifi.sta.connect()

   关于API的使用方法,可以参考博客《NodeMCU学习(六)--WiFi》,也可以参考官网对API的说明。

2.2  MQTT

(1)mqtt.Client()

(2)mqtt.client:connect()

(3)mqtt.client:publish()

3、平台的接入流程

4、编写Lua脚本

4.1  源代码


cfg = {}
cfg.ssid = "OnePlus6"
cfg.pwd = "1234567890"

wifi.setmode(wifi.STATIONAP)
wifi.sta.config(cfg)
wifi.sta.connect()

DeviceID = "1234567890"--根据自己的设备ID填写
ProductID = "123456"--根据自己的产品ID填写
KeepAlive = 20--保持连接的间隔时间,可根据实际需要填写
AuthoInfo = "123456"--设备对应的鉴权信息

host = "183.230.40.39"
port = 6002

myClient = mqtt.Client(DeviceID, KeepAlive, ProductID, AuthoInfo)

timer1 = tmr.create()
timer2 = tmr.create()

function ReConnect()
    if wifi.sta.getip() == nil then
        print("Connect AP,waitting...")
    else
        print("Connected AP ,success!")
        print("IP is:"..wifi.sta.getip())
        timer1:stop()

        myClient:connect(host, port, function(client)
            print("Connected OneNET success!")
        end)

        timer2:alarm(1000, tmr.ALARM_AUTO, Update_Message)
    end
end

timer1:alarm(1000,tmr.ALARM_AUTO,ReConnect)

currentSum = 0
voltageSum = 0        
function Update_Message()
    info = {}
    info.curr = currentSum
    info.volt = voltageSum

    currentSum = currentSum + 1
    voltageSum = voltageSum - 1
    ok,message = pcall(sjson.encode, info)
    print("message:"..message)

    header = string.char(3, 0 ,string.len(message))..message
    myClient:publish("$dp", header, 0, 0, function(client)
        print("Publish info success!")
    end)
end
    

4.2  关键代码解析

(1)myClient = mqtt.Client(DeviceID, KeepAlive, ProductID, AuthoInfo)

DeviceID = "1234567890"--根据自己的设备ID填写
ProductID = "123456"--根据自己的产品ID填写
KeepAlive = 20--保持连接的间隔时间,可根据实际需要填写
AuthoInfo = "123456"--设备对应的鉴权信息

(2)

myClient:connect(host, port, function(client)
            print("Connected OneNET success!")
        end)

host:OneNET平台的MQTT协议对应的服务器IP

port:OneNET平台的MQTT协议对应的服务器开放的端口

function(client)():连接成功后的回调函数

(3)ok,message = pcall(sjson.encode, info)

1)pcall在保护模式(protected mode)下执行函数内容,同时捕获所有的异常和错误。若一切正常,pcall返回true以及“被执行函数”的返回值;否则返回nil和错误信息。

2)把info转换为json键值对;

(4)header = string.char(3, 0 ,string.len(message))..message

1)string.char()把数字或字符连接成字符串;

2)header为MQTT协议中的协议头,3表示MQTT数据包类型为PUBLISH

3)

myClient:publish("$dp", header, 0, 0, function(client)
        print("Publish info success!")
    end)

 topic:

 Payload:包含真正的数据点内容;

 function(client)()为发送成功后的回调函数;

4.3  调试

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值