美文网首页Luat开源硬件
Luat实例教程:连接aliyun

Luat实例教程:连接aliyun

作者: Luat物联网通信模块 | 来源:发表于2018-03-24 10:46 被阅读111次

    本示例实现的功能是:MQTT_TCP连接阿里云物联网后台的demo项目(华东2节点)

    注意:在demo中,aliyun和aliyun_ssl是连接阿里云物联网杭州节点。aliyun_ssl_huadong2是连接阿里云物联网华东2节点,目前阿里云主推的华东2节点,所以用该节点示例。

    1.如果要用ssl,必须下载包含ssl的lod(固件)。关于固件的说明和下载参见固件

    2.打开阿里云物联网套件,打开管理控制台,新建一个项目。

    创建

    3.在设备管理处添加设备,设备名称为模块的IMEI号,可以通过misc.getimei()获取。

    添加设备

    4.将生成的deviceSecret当做sn写入到模块,可以通过misc.setsn()写入

    设备证书 SN

    可以看到SN已经修改为deviceSecret了

    --将要写入设备的新SN号
    local newsn = "E4xrt3tdYYAiQ91e6WMEXxdDIv9ITNt2"
    
    --3秒后开始写SN
    sys.timer_start(misc.setsn,3000,newsn)
    --查询SN和IMEI
    sys.timer_start(misc.getsn,5000)
    sys.timer_start(misc.getimei,5000)
    --完整代码参见write_sn(https://github.com/openLuat/Luat_Air202-Air800-Air201/tree/master/script/demo/write_sn)
    

    5.打开aliyun_ssl_huadong2,将test.lua里面的PRODUCT_KEY修改为阿里云上的。

    module(...,package.seeall)
    
    require"aliyuniotssl"
    
    --阿里云华东2节点上创建的productKey,用户如果自己在阿里云上创建项目,根据自己的项目信息,修改此值
    local PRODUCT_KEY = "OiStgsPb69t"
    --除了上面的PRODUCT_KEY外,还需要DEVICE_NAME和DEVICE_SECRET
    --lib中会使用设备的IMEI和SN号用做DEVICE_NAME和DEVICE_SECRET,所以在阿里云上添加设备时,DEVICE_NAME就用IMEI,然后把生成的DEVICE_SECRET当做SN写入设备中
    
    local qos1cnt = 1
    
    --[[
    函数名:print
    功能  :打印接口,此文件中的所有打印都会加上aliyuniot前缀
    参数  :无
    返回值:无
    ]]
    local function print(...)
        _G.print("test",...)
    end
    
    --[[
    函数名:pubqos1testackcb
    功能  :发布1条qos为1的消息后收到PUBACK的回调函数
    参数  :
            usertag:调用mqttclient:publish时传入的usertag
            result:true表示发布成功,false或者nil表示失败
    返回值:无
    ]]
    local function pubqos1testackcb(usertag,result)
        print("pubqos1testackcb",usertag,result)
        sys.timer_start(pubqos1test,20000)
        qos1cnt = qos1cnt+1
    end
    
    --[[
    函数名:pubqos1test
    功能  :发布1条qos为1的消息
    参数  :无
    返回值:无
    ]]
    function pubqos1test()
        --注意:在此处自己去控制payload的内容编码,aliyuniot库中不会对payload的内容做任何编码转换
        aliyuniotssl.publish("/"..PRODUCT_KEY.."/"..misc.getimei().."/update","qos1data",1,pubqos1testackcb,"publish1test_"..qos1cnt)
    end
    
    --[[
    函数名:subackcb
    功能  :MQTT SUBSCRIBE之后收到SUBACK的回调函数
    参数  :
            usertag:调用mqttclient:subscribe时传入的usertag
            result:true表示订阅成功,false或者nil表示失败
    返回值:无
    ]]
    local function subackcb(usertag,result)
        print("subackcb",usertag,result)
    end
    
    --[[
    函数名:rcvmessage
    功能  :收到PUBLISH消息时的回调函数
    参数  :
            topic:消息主题(gb2312编码)
            payload:消息负载(原始编码,收到的payload是什么内容,就是什么内容,没有做任何编码转换)
            qos:消息质量等级
    返回值:无
    ]]
    local function rcvmessagecb(topic,payload,qos)
        print("rcvmessagecb",topic,payload,qos)
        aliyuniotssl.publish("/"..PRODUCT_KEY.."/"..misc.getimei().."/update","device receive:"..payload,qos)
    end
    
    --[[
    函数名:connectedcb
    功能  :MQTT CONNECT成功回调函数
    参数  :无      
    返回值:无
    ]]
    local function connectedcb()
        print("connectedcb")
        --订阅主题
        aliyuniotssl.subscribe({{topic="/"..PRODUCT_KEY.."/"..misc.getimei().."/get",qos=0}, {topic="/"..PRODUCT_KEY.."/"..misc.getimei().."/get",qos=1}}, subackcb, "subscribegetopic")
        --注册事件的回调函数,MESSAGE事件表示收到了PUBLISH消息
        aliyuniotssl.regevtcb({MESSAGE=rcvmessagecb})
        --发布一条qos为1的消息
        pubqos1test()
    end
    
    --[[
    函数名:connecterrcb
    功能  :MQTT CONNECT失败回调函数
    参数  :
            r:失败原因值
                1:Connection Refused: unacceptable protocol version
                2:Connection Refused: identifier rejected
                3:Connection Refused: server unavailable
                4:Connection Refused: bad user name or password
                5:Connection Refused: not authorized
    返回值:无
    ]]
    local function connecterrcb(r)
        print("connecterrcb",r)
    end
    
    aliyuniotssl.config(PRODUCT_KEY)
    aliyuniotssl.regcb(connectedcb,connecterrcb)
    
    

    然后下载烧录到模块里。

    华东2和杭州节点的区别在于:杭州节点有PRODUCT_SECRET,而华东节点没有,其他都一样。

    6.这时,可以在设备管理处看到模块已经上线

    上线

    7.发布订阅消息

    点击设备管理->Topic列表则可以看到默认的主题

    topic

    平台向模块发布消息:demo默认订阅主题为/productKey/imei/get,对应本例的主题为/vNmSDLf5G33/868575021153269/get,可以看到权限为订阅。发送了一条内容为“test”,qos为0的消息,trace中打印接收到的消息。

    pub 模块向平台发布消息: sub

    可以查看到已经接收到了80条消息,但平台不支持查看消息内容。

    8.如果用户想新增topic,对应的在模块代码中订阅或向该topic发布消息即可。 添加topic

    相关文章

      网友评论

        本文标题:Luat实例教程:连接aliyun

        本文链接:https://www.haomeiwen.com/subject/rmhqcftx.html