参考:
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编辑运行代码

esp32上云 esp32 alios_物联网


esp32上云 esp32 alios_阿里云_02

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)

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)
# 设置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)

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

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

esp32上云 esp32 alios_阿里云_03


esp32上云 esp32 alios_物联网_04


esp32上云 esp32 alios_回调函数_05


esp32上云 esp32 alios_回调函数_06

**标识符唯一,这是数据传输识别的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对象

    connect_lk(productKey, deviceName, deviceSecret)
    while True:
        post_default_value()
        utime.sleep(2)

***可以后台调试测试效果

esp32上云 esp32 alios_esp32上云_07


esp32上云 esp32 alios_阿里云_08

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

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

**https://studio.iot.aliyun.com/ 通过 iot studio工具创建页面及关联阿里云iot的产品与设备及创建页面应用;发布后既可以通过网页链接控制

esp32上云 esp32 alios_阿里云_09


esp32上云 esp32 alios_物联网_10


**按钮开关可以知道状态,样式里设置开关数据就可以;状态信息text展示设备信息,在

样式里设置文本数据源就行

esp32上云 esp32 alios_esp32上云_11


esp32上云 esp32 alios_回调函数_12

手机浏览器打开发布后的链接控制:

esp32上云 esp32 alios_云计算_13