参考:
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)
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后台设置好产品和设备,定义好功能定义自定义属性格式发布上线;设置好产品发布后再去绑定设备
**标识符唯一,这是数据传输识别的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)
***可以后台调试测试效果
4、网页界面交互远程控制
参考:https://haas.iot.aliyun.com/solution/detail/solution?versionId=800A5A2601C534EA00000002&dataId=800A5A2601C534EA
**https://studio.iot.aliyun.com/ 通过 iot studio工具创建页面及关联阿里云iot的产品与设备及创建页面应用;发布后既可以通过网页链接控制
**按钮开关可以知道状态,样式里设置开关数据就可以;状态信息text展示设备信息,在
样式里设置文本数据源就行
手机浏览器打开发布后的链接控制: