• 阿里云iot haas python连接esp32;esp32物联网设备上报信息及云端信息获取;远程控制设备自带led熄灭;网页界面交互远程控制


    参考:https://blog.csdn.net/HaaSTech/article/details/125975052
    https://iot.console.aliyun.com/
    https://www.bbsmax.com/A/x9J2X8nZd6/

    首先烧录阿里云iot haas固件:
    https://haas.iot.aliyun.com/haasapi/index.html#/Python/docs/zh-CN/startup/ESP32_startup

    ***直接下载后可以通过vscode插件烧录;烧录好后也可以在thony编辑运行代码

    在这里插入图片描述
    在这里插入图片描述

    1、阿里云iot连接esp32

    
    from aliyunIoT import Device     # iot组件是连接阿里云物联网平台的组件
    import network    
    
    # 物联网平台连接标志位
    iot_connected = False
    wlan = None
    
    # 三元组信息
    productKey = ""
    deviceName = ""
    deviceSecret = ""
    
    # 物联网设备实例
    device = None
    
    # Wi-Fi SSID和Password设置
    wifiSsid = ""
    wifiPassword = ""
    
    # 等待Wi-Fi成功连接到路由器
    def get_wifi_status():
        global wlan
        wifi_connected = False
    
        wlan.active(True)                  #激活界面
        wlan.scan()                        #扫描接入点
        #print("start to connect ", wifiSsid)
        wlan.connect(wifiSsid, wifiPassword)       # 连接到指定的路由器(路由器名称为wifiSsid, 密码为:wifiPassword)
    
        while True:
            wifi_connected = wlan.isconnected()    # 获取Wi-Fi连接路由器的状态信息
            if wifi_connected:
                print("wifi_connected:", wifi_connected)# Wi-Fi连接成功则退出while循环
                break
            else:
                utime.sleep(0.5)
                print("wifi_connected:", wifi_connected)
    
        ifconfig = wlan.ifconfig()                    #获取接口的IP/netmask/gw/DNS地址
        print(ifconfig)
        utime.sleep(0.5)
    
    ## 连接阿里云物联网平台
    def connect_lk(productKey, deviceName, deviceSecret):
        global device, iot_connected
        key_info = {
            'region': 'cn-shanghai',
            'productKey': productKey,
            'deviceName': deviceName,
            'deviceSecret': deviceSecret,
            'keepaliveSec': 60
        }
        # 将三元组信息设置到iot组件中
        device = Device()
    
        # 设定连接到物联网平台的回调函数,如果连接物联网平台成功,则调用on_connect函数
        device.on(Device.ON_CONNECT, on_connect)
    
        # 配置收到云端属性控制指令的回调函数,如果收到物联网平台发送的属性控制消息,则调用on_props函数
        device.on(Device.ON_PROPS, on_props)
    
        # 启动连接阿里云物联网平台过程
        device.connect(key_info)
    
        # 等待设备成功连接到物联网平台
        while(True):
            if iot_connected:
                print('物联网平台连接成功')
                break
            else:
                print('sleep for 1 s')
                utime.sleep(1)
        print('sleep for 2s')
        utime.sleep(2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75

    2、esp32物联网设备上报信息及云端信息获取

    参考:https://haas.iot.aliyun.com/haasapi/index.html#/?id=haas-python%e7%89%b9%e7%82%b9
    https://haas.iot.aliyun.com/solution/detail/solution?versionId=800A5A2601C534EA00000002&dataId=800A5A2601C534EA

    ***post_default_value;可以自定义设备信息日志,上传阿里云

    
    def post_props(data):
        global device
        if isinstance(data, dict):
            data = {'params': ujson.dumps(data)}
        ret = device.postProps(data)
        return ret
    
    
    
    def post_default_value():
        global value
        string = {"on": value}
        post_props(string)
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    # 设置props 事件接收函数(当云平台向设备下发属性时)
    def on_props(request):
        global value
        try:
            props = eval(request['params'])
            
            # 获取dict状态字段 注意要验证键存在 否则会抛出异常
            if "on" in props.keys():
                print(props)
            
                value = props["on"]
                if value==1:
                    led.value(1)
                else:
                    led.value(0)
                
          
                post_default_value()
        except Exception as e:
            print("#"*8,e)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    3、阿里云远程控制esp32设备自带led熄灭

    **提前要在阿里云iot后台设置好产品和设备,定义好功能定义自定义属性格式发布上线;设置好产品发布后再去绑定设备
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    **标识符唯一,这是数据传输识别的key值

    # -*- coding: UTF-8 -*-
    
    from aliyunIoT import Device     # iot组件是连接阿里云物联网平台的组件
    import network                   # Wi-Fi功能所在库
    import ujson                     # json字串解析库
    import utime                     # 延时API所在组件
                     
    from machine import Pin
    
    
    value = 0
    led = Pin(2, Pin.OUT)
    led.value(0)
    # 物联网平台连接标志位
    iot_connected = False
    wlan = None
    
    # 三元组信息
    productKey = ""
    deviceName = ""
    deviceSecret = ""
    
    # 物联网设备实例
    device = None
    
    # Wi-Fi SSID和Password设置
    wifiSsid = ""
    wifiPassword = ""
    
    # 等待Wi-Fi成功连接到路由器
    def get_wifi_status():
        global wlan
        wifi_connected = False
    
        wlan.active(True)                  #激活界面
        wlan.scan()                        #扫描接入点
        #print("start to connect ", wifiSsid)
        wlan.connect(wifiSsid, wifiPassword)       # 连接到指定的路由器(路由器名称为wifiSsid, 密码为:wifiPassword)
    
        while True:
            wifi_connected = wlan.isconnected()    # 获取Wi-Fi连接路由器的状态信息
            if wifi_connected:
                print("wifi_connected:", wifi_connected)# Wi-Fi连接成功则退出while循环
                break
            else:
                utime.sleep(0.5)
                print("wifi_connected:", wifi_connected)
    
        ifconfig = wlan.ifconfig()                    #获取接口的IP/netmask/gw/DNS地址
        print(ifconfig)
        utime.sleep(0.5)
    
    # 物联网平台连接成功的回调函数
    def on_connect(data):
        global iot_connected
        iot_connected = True
    
    # 设置props 事件接收函数(当云平台向设备下发属性时)
    def on_props(request):
        global value
        try:
            props = eval(request['params'])
            
            # 获取dict状态字段 注意要验证键存在 否则会抛出异常
            ###on是标识符key值;这里实现云端控制设备灯熄灭
            if "on" in props.keys():  
                print(props)
            
                value = props["on"]
                if value==1:
                    led.value(1)
                else:
                    led.value(0)
                
          
                post_default_value()
        except Exception as e:
            print("#"*8,e)
    
    
    def post_props(data):
        global device
        if isinstance(data, dict):
            data = {'params': ujson.dumps(data)}
        ret = device.postProps(data)
        return ret
    
    
    
    def post_default_value():
        global value
        string = {"on": value}
        post_props(string)
        
        
    
    def connect_lk(productKey, deviceName, deviceSecret):
        global device, iot_connected
        key_info = {
            'region': 'cn-shanghai',
            'productKey': productKey,
            'deviceName': deviceName,
            'deviceSecret': deviceSecret,
            'keepaliveSec': 60
        }
        # 将三元组信息设置到iot组件中
        device = Device()
    
        # 设定连接到物联网平台的回调函数,如果连接物联网平台成功,则调用on_connect函数
        device.on(Device.ON_CONNECT, on_connect)
    
        # 配置收到云端属性控制指令的回调函数,如果收到物联网平台发送的属性控制消息,则调用on_props函数
        device.on(Device.ON_PROPS, on_props)
    
        # 启动连接阿里云物联网平台过程
        device.connect(key_info)
    
        # 等待设备成功连接到物联网平台
        while(True):
            if iot_connected:
                print('物联网平台连接成功')
                break
            else:
                print('sleep for 1 s')
                utime.sleep(1)
        print('sleep for 2s')
        utime.sleep(2)
    
    
    
    if __name__ == '__main__' :
    
        wlan = network.WLAN(network.STA_IF)    #创建WLAN对象
        # 请替换物联网平台申请到的产品和设备信息,可以参考文章:https://blog.csdn.net/HaaSTech/article/details/114360517
        # global productKey, deviceName, deviceSecret ,on_request, on_play
        get_wifi_status()
    
        connect_lk(productKey, deviceName, deviceSecret)
        while True:
            post_default_value()
            utime.sleep(2)
    
        
        
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147

    ***可以后台调试测试效果
    在这里插入图片描述
    在这里插入图片描述

    4、网页界面交互远程控制

    参考:https://haas.iot.aliyun.com/solution/detail/solution?versionId=800A5A2601C534EA00000002&dataId=800A5A2601C534EA

    **https://studio.iot.aliyun.com/ 通过 iot studio工具创建页面及关联阿里云iot的产品与设备及创建页面应用;发布后既可以通过网页链接控制
    在这里插入图片描述
    在这里插入图片描述
    **按钮开关可以知道状态,样式里设置开关数据就可以;状态信息text展示设备信息,在
    样式里设置文本数据源就行
    在这里插入图片描述
    在这里插入图片描述

    手机浏览器打开发布后的链接控制:
    在这里插入图片描述

  • 相关阅读:
    均匀光源积分球的应用领域有哪些
    Java进阶篇
    经典文献阅读之--BVMatch(基于鸟瞰图像的点云地点识别方法
    PEG化金纳米棒,CAS:7440-57-5
    KepOPC实现CAN设备的OT&IT互操作!
    神级开源库收藏
    用Unity做一个萌萌哒游戏(附资源)
    vscode安装svn扩展(windows)
    Day732.数据同步:主从库如何实现数据一致 -Redis 核心技术与实战
    WEB 渗透之CSRF
  • 原文地址:https://blog.csdn.net/weixin_42357472/article/details/126213809