IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 2.10 haas506 2.0开发教程-高级组件库-mqtt -> 正文阅读

[嵌入式]2.10 haas506 2.0开发教程-高级组件库-mqtt

1.通过mqtt连接阿里云物联网平台

案例说明

main.py

# -*- coding: UTF-8 -*-
import mqtt
import ujson
import utime as time
import _thread
import network
from driver import GPIO

# 初始化GPIO
d2_led = GPIO()
cloud_led = GPIO()
d2_led.open("d2_led")
cloud_led.open("cloud_led")

#服务质量
qos = 1
#topic
_get_topic = "/sys/{}/{}/thing/service/property/set"
_update_topic = "/sys/{}/{}/thing/event/property/post"
#联网状态标志
g_connect_status = False

def on_4g_cb(args):
    global g_connect_status
    pdp = args[0]
    netwk_sta = args[1]
    if netwk_sta == 1:
        g_connect_status = True
    else:
        g_connect_status = False

def connect_network():
    global Net,on_4g_cb,g_connect_status
    Net = network.NetWorkClient()
    g_register_network = False
    if Net._stagecode is not None and Net._stagecode == 3 and Net._subcode == 1:
        g_register_network = True
    else:
        g_register_network = False
    if g_register_network:
        Net.on(1,on_4g_cb)
        Net.connect(None)
    else:
        print('network register failed')
    while True:
        if g_connect_status==False:
            cloud_led.write(0)
        if g_connect_status:
            print('network register successed')
            #连上网之后,点亮cloud_led
            cloud_led.write(1)
            break
        time.sleep_ms(20)
    return 0

# 定义subcribe的回调函数
def on_subcribe(topic,payload):
    global client
    global update_topic
    print("on_subcribe: topic is:" + topic)
    print("on_subcribe: payload is:" + payload)
    #平台下发的信息
    cloudmsg = ujson.loads(payload)
    if "method" in cloudmsg:
        if 'property.set' in cloudmsg['method']:
            params = cloudmsg['params']
            if 'd2_led' in params:
                #如果平台下发点亮/熄灭小灯的指令,相应的改变小灯所在的gpio口的电平值,
                #实现点亮/熄灭小灯
                if params["d2_led"] == 1:
                    d2_led.write(1)
                if params["d2_led"] == 0:
                    d2_led.write(0)
            print('param_msg {}'.format(params))
            client.publish(update_topic,update_data(),qos)
    else :
        pass

def mqttloop_func(delay, id):
    global client
    global mqtt_state
    while True:
        time.sleep_ms(delay)
        print('Running thread %d'%id)
        ret = client.loop(1000)
        print('client ret ={}'.format(ret))
        if ret < 0:
            cloud_led.write(0)
            print('------------------mqtt disconnect!')
            client.disconnect()
            mqtt_reconnect()
        else:
            pass

def mqtt_reconnect():
    global client
    global mqtt_state
    global update_topic
    
    #三元组
    productKey = "a1S4vyFFMdL"
    deviceName = "867082058707142"
    deviceSecret = "7567432854953fc9b71f4fbcf4b25650"
    REGION_ID="cn-shanghai"

    #下面的3个参数是用阿里云设备的三元组通过软件生成的
    username = "867082058707142&a1S4vyFFMdL"
    clientId = "Test123456|securemode=3,timestamp=1234567890,signmethod=hmacsha1|"
    #明文:clientIdTest123456deviceName867082058707142productKeya1S4vyFFMdLtimestamp1234567890
    password = "b48b20fdb4a2800943c325e62b72cfc50f6d234c"

    # ${productKey}.iot-as-mqtt.${regionId}.aliyuncs.com:1883
    mqttaddr = productKey +".iot-as-mqtt."+REGION_ID+".aliyuncs.com"
    serverport = 1883
    hearttime = 40
    #订阅/发布的topic
    get_topic = _get_topic.format(productKey,deviceName)
    update_topic = _update_topic.format(productKey,deviceName)

    client = mqtt.client(clientId)
    client.on_subcribe(on_subcribe)

    # 设置用户名和密码
    client.username_pw_set(username,password)
    # 建立mqtt连接
    ret = client.connect(mqttaddr,serverport,hearttime)
    if ret == 0:
        mqtt_state = 1
    # 订阅服务
    client.subscribe(get_topic,qos)
    # 发布服务
    client.publish(update_topic,update_data(),qos)

def mqtt_connect():
    mqtt_reconnect()
    #创建mqtt接收数据任务,1s一次
    _thread.start_new_thread(mqttloop_func,(1000, 1))

def update_data():
    d2_led_state=d2_led.read()
    print("----------------d2_led state:",d2_led_state)
    d={}
    d["d2_led"]=d2_led_state
    send_data = {
        "id":"1",
        "version":"1.0",
        "params":d,
        "sys":{"ack":1}
    }
    #上报 格式 可以参考这句话
    #{"id":"2","version":"1.0","params":{"LBS": "(120.7396227,31.2741778)"},"sys":{"ack":1}}
    MSG = ujson.dumps(send_data)
    return MSG

def main():
    print('main enter')
    #联网
    ret = connect_network()
    if ret == 0:
        #mqtt连接
        mqtt_connect()
    else:
        print('network-connection failed')

if __name__ == '__main__':
    main()

board.json

{
    "name": "haas506",
    "version": "1.0.0",
    "io": {
        "ADC0": {
            "type": "ADC",
            "port": 0,
            "sampling": 12000000
        },
        "mpu6050": {
            "type": "I2C",
            "port": 1,
            "addrWidth": 7,
            "freq": 400000,
            "mode": "master",
            "devAddr": 105
        },
        "KEY1": {
            "type": "GPIO",
            "port": 44,
            "dir": "irq",
            "pull": "pullup",
            "intMode": "rising"
        },
        "work_led": {
            "type": "GPIO",
            "port": 0,
            "dir": "output",
            "pull": "pulldown"
        },
        "net_led": {
            "type": "GPIO",
            "port": 7,
            "dir": "output",
            "pull": "pulldown"
        },
        "cloud_led": {
            "type": "GPIO",
            "port": 9,
            "dir": "output",
            "pull": "pulldown"
        },
        "d2_led": {
            "type": "GPIO",
            "port": 6,
            "dir": "output",
            "pull": "pulldown"
        },
        "d3_led": {
            "type": "GPIO",
            "port": 8,
            "dir": "output",
            "pull": "pulldown"
        },
        "SPI0": {
        "type": "SPI",
        "port": 0,
        "mode": "master",
        "freq": 2000000
        },
    "serial1":{
        "type":"UART",
        "port":0,
        "dataWidth":8,
        "baudRate":115200,
        "stopBits":1,
        "flowControl":"disable",
        "parity":"none"
    },
    "serial2":{
        "type":"UART",
        "port":1,
        "dataWidth":8,
        "baudRate":115200,
        "stopBits":1,
        "flowControl":"disable",
        "parity":"none"
    },
    "serial3":{
        "type":"UART",
        "port":2,
        "dataWidth":8,
        "baudRate":115200,
        "stopBits":1,
        "flowControl":"disable",
        "parity":"none"
    }
    },
    "debugLevel": "DEBUG",
    "repl":"disable"
}

2.操作步骤

(1)在阿里云物联网平台创建产品
填写产品名称、选择自定义品类,选择直连设备,选择联网方式-蜂窝,数据格式-ICA,点击确认。
在这里插入图片描述
(2)编辑自定义功能
点击所建立的产品:选择查看、点击功能定义和选择编辑草稿
在这里插入图片描述
添加自定义功能:属性、功能名称、标识符、数据类型、布尔值、读写类型
在这里插入图片描述
发布上线
在这里插入图片描述
3)添加设备
在产品下,添加一个设备:选择产品名、填写DeviceName(自定义,最好将设备的IMEI作为该名称)
在这里插入图片描述

(4)获取三元组,mqtt参数填入程序。

在这里插入图片描述
在这里插入图片描述
(5)烧录程序
(6)查看设备的物模型
在这里插入图片描述

(7)在线调试
点亮小灯
在这里插入图片描述
查看物模型的小灯状态

熄灭小灯
在这里插入图片描述
查看物模型的小灯状态
在这里插入图片描述

3. Class-mqtt

mqtt.client

on_subcribeusername_pw_setconnectsubcribepublishloopdisconnect
设置MQTT订阅回调函数设置用户名和密码MQTT连接MQTT订阅的主题MQTT发布主题设置MQTT等待时间断开MQTT连接
  • mqtt

  • 实例化:mq=mqtt.client(clientId)

    • 参数:按照”xxxx|securemode=3,timestamp=1234567890,signmethod=hmacsha1|”格式填写,’xxxx’和timestamp可以任意填写
  • mq.on_subcribe(callback)

    • 作用:设置MQTT订阅回调函数
    • 参数:callback-订阅的回调函数,回调函数中可以接收云平台下发的指令,并实现相应的功能
    • 返回:0成功,其他失败
  • mq.username_pw_set(username,password)

    • 作用:设置用户名和密码
    • 参数:username-用户名;password-密码
    • 返回:0成功,其他失败
  • mq.connect(host,port,interval)

    • 作用:MQTT连接
    • 参数:host-连接的主机;port-连接的端口号;interval-重试周期,单位为毫秒
    • 返回:0成功,其他失败
  • mq.subcribe(subtopic,qos)

    • 作用:MQTT订阅的主题
    • 参数:subtopic-MQTT订阅的主题;qos-服务质量
    • 返回:0成功,其他失败
  • mq.publish(topic,payload,qos)

    • 作用:MQTT发布主题
    • 参数:topic-MQTT发布的主题;payload-MQTT发布的消息;qos-服务质量
    • 返回:0成功,其他失败
  • mq.loop(timeout)

    • 作用:设置MQTT等待时间
    • 参数:timeout-等待时间,单位是毫秒
    • 返回:0成功,其他失败
  • mq.disconnect()

    • 作用:断开MQTT连接
    • 返回:0成功,其他失败

4.总结

本节介绍了如何使用haas506高级组件库的mqtt模块,实现了连接阿里云物联网平台,并使用在线调试成功点亮/熄灭小灯。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-03-16 22:35:59  更:2022-03-16 22:39:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:35:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码