Python3 conecta dispositivos Alibaba Cloud IoT para enviar y recibir datos (Raspberry Pi)
IoT en la nube de Alibaba
Primero, prepare el
proceso de creación del equipo del producto Alibaba Cloud (tres códigos), puede consultar este documento: Conexión de red de configuración Quectel BC35-G Alibaba Cloud MQTT envío de datos
sección de código
El IDE que uso aquí es Pycham 2021.2 ( se puede portar a spyder, Thonny y otros IDE de Raspberry Pi )
archivo de biblioteca
Aquí necesitamos un archivo de biblioteca IOT de Alibaba Cloud
from linkkit import linkkit
y dos archivos de biblioteca base time , Json
import time
import json
Entorno de instalación bajo Windows
Abra un símbolo del sistema e ingrese
pip install aliyun-iot-linkkit
Entorno de instalación de Raspberry Pi
terminal abierta
pip install aliyun-iot-linkkit
posibles errores
Problema de retraso en la red, repita la instalación de pip aliyun-iot- linkkit
código
Configurar " Tres Códigos "
ProductKey="ProductKey" #阿里云物联网ProductKey
DeviceName="DeviceName" #阿里云物联网DeviceName
DeviceSecret="DeviceSecret" #阿里云物联网DeviceSecret
Conexión y cancelación de dispositivos en la nube de Alibaba
#连接阿里云设备
def on_connect(session_flag, rc, userdata):
print("on_connect:%d,rc:%d,userdata:" % (session_flag, rc))
pass
#取消连接阿里云
def on_disconnect(rc, userdata):
print("on_disconnect:rc:%d,userdata:" % rc)
Suscríbete a temas
# 订阅topic
def on_subscribe_topic(mid, granted_qos, userdata):
print("on_subscribe_topic mid:%d, granted_qos:%s" %
(mid, str(','.join('%s' % it for it in granted_qos))))
pass
Recibir y detener datos de Alibaba Cloud
#接收阿里云的数据
def on_topic_message(topic, payload, qos, userdata):
print("阿里云发布数据:", str(payload))
#拿到接收来的数据
data=str(payload)[2:-1]
print("阿里云发布数据:",data)
dataDict=json.loads(data)
# 切片左闭右开 取头不取尾
print("阿里云发布数据:",type(dataDict))
#多层解析
{
"temp":{
"value":32}}
print(dataDict["temp"]["value"]) #temp是温度标识符,value模拟温度数据
pass
#停止订阅云端数据
def on_unsubscribe_topic(mid, userdata):
print("取消订阅topic mid:%d" % mid)
pass
El resultado de publicar el mensaje para determinar si la función de publicación se llamó correctamente
#发布消息的结果,判断是否成功调用发布函数
def on_publish_topic(mid, userdata):
print("发布公共topic mid:%d" % mid)
Publicar tema
#发布主题
while True:
data={
"RoomTemp":28
}
#产品属性上报: /sys/a1TbSHGVD5F/${deviceName}/thing/event/property/post 发布 设备属性上报
rc, mid = lk.publish_topic(lk.to_full_topic("/sys/ProductKey/deviceName/thing/event/property/post"),str(data))
time.sleep(2)
pass
p_forever()
código completo
from linkkit import linkkit #阿里云aliyun-iot-linkkit库
import time #python延时库
import json #发送json数据
ProductKey="ProductKey" #阿里云物联网ProductKey
DeviceName="DeviceName" #阿里云物联网DeviceName
DeviceSecret="DeviceSecret" #阿里云物联网DeviceSecret
#连接阿里云设备
def on_connect(session_flag, rc, userdata):
print("on_connect:%d,rc:%d,userdata:" % (session_flag, rc))
pass
#取消连接阿里云
def on_disconnect(rc, userdata):
print("on_disconnect:rc:%d,userdata:" % rc)
# 订阅topic
def on_subscribe_topic(mid, granted_qos, userdata):
print("on_subscribe_topic mid:%d, granted_qos:%s" %
(mid, str(','.join('%s' % it for it in granted_qos))))
pass
#接收阿里云的数据
def on_topic_message(topic, payload, qos, userdata):
print("阿里云发布数据:", str(payload))
#拿到接收来的数据
data=str(payload)[2:-1]
print("阿里云发布数据:",data)
dataDict=json.loads(data)
# 切片左闭右开 取头不取尾
print("阿里云发布数据:",type(dataDict))
#多层解析
{
"temp":{
"value":29.8}}
print(dataDict["temp"]["value"]) #temp是温度标识符,value模拟温度数据
pass
#停止订阅云端数据
def on_unsubscribe_topic(mid, userdata):
print("取消订阅topic mid:%d" % mid)
pass
#发布消息的结果,判断是否成功调用发布函数
def on_publish_topic(mid, userdata):
print("发布公共topic mid:%d" % mid)
#初始化连接参数,阿里云三码设置
lk = linkkit.LinkKit(
host_name="cn-shanghai",#当前设备服务器(上海-华东二)
product_key=ProductKey,#当前设备product_key
device_name=DeviceName,#当前设备device_name
device_secret=DeviceSecret)#当前设备device_secret
#注册接收到云端数据的方法
lk.on_connect = on_connect
#注册取消接收到云端数据的方法
lk.on_disconnect = on_disconnect
#注册云端订阅的方法
lk.on_subscribe_topic = on_subscribe_topic
#注册当接受到云端发送的数据的时候的方法
lk.on_topic_message = on_topic_message
#注册向云端发布数据的时候顺便所调用的方法
lk.on_publish_topic = on_publish_topic
#注册取消云端订阅的方法
lk.on_unsubscribe_topic = on_unsubscribe_topic
#连接阿里云的函数(异步调用)
lk.connect_async()
time.sleep(2) #延时设置
#订阅主题
rc, mid = lk.subscribe_topic(lk.to_full_topic("user/get"))
#发布主题
while True:
data={
"RoomTemp":28
}
#产品属性上报: /sys/ProductKey/${deviceName}/thing/event/property/post 发布 设备属性上报
rc, mid = lk.publish_topic(lk.to_full_topic("/sys/ProductKey/deviceName/thing/event/property/post"),str(data))
time.sleep(2)
pass
p_forever()
Informe de propiedades del producto: /sys/ProductKey/${deviceName}/thing/event/property/publicación posterior del informe de propiedades del dispositivo
Mostrar resultados
Simular transmisión de datos La
plataforma envía datos
a Raspberry Pi
¡Te deseo la mejor de las suertes! ! !