Python3 Raspberry Pi se conecta a dispositivos Alibaba Cloud IoT para enviar y recibir datos

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
inserte la descripción de la imagen aquí

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

inserte la descripción de la imagen aquí

Entorno de instalación de Raspberry Pi

terminal abierta

pip install aliyun-iot-linkkit

posibles errores

inserte la descripción de la imagen aquí
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
inserte la descripción de la imagen aquí

Mostrar resultados

inserte la descripción de la imagen aquí
Simular transmisión de datos La
inserte la descripción de la imagen aquí
plataforma envía datos
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
a Raspberry Pi
¡Te deseo la mejor de las suertes! ! !

Supongo que te gusta

Origin blog.csdn.net/weixin_50679163/article/details/119840105
Recomendado
Clasificación