Conecte un dispositivo a Alibaba Cloud IoT Platform e intercambie mensajes con la biblioteca Paho MQTT para Go.
Notas de uso
Todas las operaciones de este tema usan permisos de usuario común. Ejecute el comando sudo si alguna operación requiere permisos de administrador.
Requisitos previos
Se creó un producto y un dispositivo en la consola de IoT Platform, y se obtuvo la información del certificado del dispositivo (ProductKey, DeviceName y DeviceSecret). Instrucciones de configuración:
Preparar el entorno de desarrollo
Instale Go:
-
En macOS, ejecute el siguiente comando:
brew install go -
En Ubuntu, ejecute el siguiente comando:
sudo apt-get install golang-go -
En Windows, descargue e instale Go desde el sitio web oficial de Go.
NotaLos usuarios de China continental requieren una VPN para acceder al sitio web oficial de Go.
Descargar la biblioteca Paho MQTT para Go
El proyecto Paho es compatible con varios lenguajes de programación. Los enlaces de descarga están disponibles en Eclipse Paho Downloads.
Ejecute los siguientes comandos para instalar la biblioteca Paho MQTT y sus dependencias:
go get github.com/eclipse/paho.mqtt.golang
go get github.com/gorilla/websocket
go get golang.org/x/net/proxy
Conectar un dispositivo a IoT Platform
-
Descargue el archivo MqttSign.go que proporciona Alibaba Cloud. Este archivo contiene el código fuente necesario para obtener los parámetros de conexión MQTT.
El archivo MqttSign.go define una función que genera los parámetros de conexión MQTT. Llame a esta función para conectar su dispositivo a IoT Platform.
-
Definición:
type AuthInfo struct { password, username, mqttClientId string; } func calculate_sign(clientId, productKey, deviceName, deviceSecret, timeStamp string) AuthInfo; -
Descripción:
Devuelve los parámetros de conexión MQTT: username, password y mqttClientId.
-
Parámetros de entrada:
Parámetro
Tipo
Descripción
productKey
String
El ProductKey del producto al que pertenece el dispositivo.
deviceName
String
El DeviceName del dispositivo.
deviceSecret
String
El DeviceSecret del dispositivo.
clientId
String
El ID del dispositivo. Hasta 64 caracteres. Se recomienda usar la dirección MAC o el SN del dispositivo.
timeStamp
String
La marca de tiempo de la hora actual. Unidad: milisegundos.
-
Parámetros de salida:
Esta función devuelve una estructura
AuthInfocon los siguientes campos:Parámetro
Tipo
Descripción
username
String
El nombre de usuario para la conexión MQTT.
password
String
La contraseña para la conexión MQTT.
mqttClientId
String
El ID del cliente MQTT.
-
-
Agregue un archivo de programa para conectar un dispositivo a IoT Platform.
Escriba un programa que llame a la función del archivo MqttSign.go para obtener los parámetros de conexión MQTT.
A continuación se describe cómo desarrollar el programa del dispositivo con código de ejemplo.
-
Especifique la información del dispositivo.
// set the device info, include product key, device name, and device secret var productKey string = "a1Zd7n5***" var deviceName string = "testdevice" var deviceSecret string = "UrwclDV33NaFSmk0JaBxNTqgSrJW****" // set timestamp, clientid, subscribe topic and publish topic var timeStamp string = "1528018257135" var clientId string = "192.168.****" var subTopic string = "/" + productKey + "/" + deviceName + "/user/get"; var pubTopic string = "/" + productKey + "/" + deviceName + "/user/update"; -
Especifique la información de conexión MQTT.
Llame a calculate_sign() en MqttSign.go. Esta función devuelve los parámetros username, password y mqttClientId con base en las entradas clientId, productKey, deviceName, deviceSecret y timeStamp. Agregue el resultado a la estructura opts.
// set the login broker url var raw_broker bytes.Buffer raw_broker.WriteString("tls://") raw_broker.WriteString(productKey) raw_broker.WriteString(".iot-as-mqtt.cn-shanghai.aliyuncs.com:1883") opts := MQTT.NewClientOptions().AddBroker(raw_broker.String()); // calculate the login auth info, and set it into the connection options auth := calculate_sign(clientId, productKey, deviceName, deviceSecret, timeStamp) opts.SetClientID(auth.mqttClientId) opts.SetUsername(auth.username) opts.SetPassword(auth.password) opts.SetKeepAlive(60 * 2 * time.Second) opts.SetDefaultPublishHandler(f)ImportanteSi usa una instancia pública de la versión antigua, reemplace cn-shanghai en
raw_broker.WriteString(".iot-as-mqtt.cn-shanghai.aliyuncs.com:1883")por el ID de la región donde reside su dispositivo. Para más información sobre los ID de región, consulte Region list.-
Si usa una instancia Enterprise Edition o una instancia pública de la nueva versión, reemplace
raw_broker.String()enopts := MQTT.NewClientOptions().AddBroker(raw_broker.String());por$<MQTT endpoint>:1833. Ejemplo:opts := MQTT.NewClientOptions().AddBroker("iot-***.mqtt.iothub.aliyuncs.com:1883");.Para más información sobre cómo obtener endpoints MQTT, consulte View endpoints for public and Enterprise Edition instances.
Para más información sobre las instancias de IoT Platform, consulte Overview of instances.
-
Llame a la función Connect() de la biblioteca Paho MQTT para Go para conectar el dispositivo a IoT Platform.
// create and start a client using the above ClientOptions c := MQTT.NewClient(opts) if token := c.Connect(); token.Wait() && token.Error() != nil { panic(token.Error()) } fmt.Print("Connect aliyun IoT Cloud Success\n"); -
Llame a Publish() para publicar mensajes. Especifique el tema de destino y la carga útil del mensaje.
// publish 5 messages to pubTopic("/a1Zd7n5****/deng/user/update") for i := 0; i < 5; i++ { fmt.Println("publish msg:", i) text := fmt.Sprintf("ABC #%d", i) token := c.Publish(pubTopic, 0, false, text) fmt.Println("publish msg: ", text) token.Wait() time.Sleep(2 * time.Second) }Consulte información sobre los temas en What is a topic?
-
Llame a Subscribe() para suscribirse a un tema y recibir mensajes de IoT Platform.
// subscribe to subTopic("/a1Zd7n5***/deng/user/get") and request messages to be delivered if token := c.Subscribe(subTopic, 0, nil); token.Wait() && token.Error() != nil { fmt.Println(token.Error()) os.Exit(1) } fmt.Print("Subscribe topic " + subTopic + " success\n");
Consulte información sobre los patrones de comunicación entre dispositivos y la nube en Overview of communications among devices, IoT platform, and servers.
-
Compile el proyecto.
Código de ejemplo
Conecte un dispositivo a IoT Platform con el código de ejemplo.
-
Descargue y descomprima el paquete de demostración.
El paquete aiot-go-demo contiene los siguientes archivos:
Archivo
Descripción
MqttSign.go
Contiene el código para generar los parámetros de conexión MQTT. Cuando se ejecuta iot.go, llama a calculate_sign() para obtener username, password y mqttClientId.
iot.go
Contiene la lógica para conectar un dispositivo a IoT Platform y habilitar la comunicación.
x509
El certificado raíz de IoT Platform, obligatorio para las conexiones de dispositivos.
NotaSi conecta un dispositivo a IoT Platform mediante una puerta de enlace en la nube MQTT, puede usar un certificado personalizado para verificar la identidad del dispositivo. Para más información, consulte Step 1: Generate custom certificates.
-
Reemplace la información del dispositivo en el archivo iot.go con la información de su dispositivo.
Use un editor de texto para modificar el archivo iot.go:
Reemplace los valores de los parámetros productKey, deviceName y deviceSecret con la información del certificado de su dispositivo.
-
Opcional. Configure los parámetros timeStamp y clientId. Puede reemplazar el valor del parámetro clientId con la dirección MAC o el SN de su dispositivo.
Estos parámetros son opcionales para la conectividad, pero se recomienda establecerlos con valores reales.
Modifique los parámetros de conexión MQTT que se usan para conectar el dispositivo a IoT Platform. Para más información, consulte el paso 2 de la sección "Connect a device to IoT Platform" de este tema.
-
Ejecute el siguiente comando en el símbolo del sistema para ejecutar el archivo iot.go:
go run iot.go MqttSign.goDespués de la ejecución, se generan los siguientes registros locales:
clientId192.168.****deviceNametestdeviceproductKeya1Zd7n5****timestamp1528018257135 1b865320fc183cc747041c9faffc9055fc45**** Connect aliyun IoT Cloud Success Subscribe topic /a1Zd7n5****/testdevice/user/get success publish msg: 0 publish msg: ABC #0 publish msg: 1 publish msg: ABC #1 publish msg: 2 publish msg: ABC #2 publish msg: 3 publish msg: ABC #3 publish msg: 4 publish msg: ABC #4 publish msg: 5 publish msg: ABC #5Inicie sesión en la consola de IoT Platform para consultar el estado y los registros del dispositivo en su instancia.
En el panel de navegación izquierdo, elija . Verá que el estado del dispositivo es Online.
Elija . Podrá consultar los IoT Platform logs y los on-premises device logs. Para más información, consulte IoT Platform logs y On-premises device logs.
Códigos de error
Si el dispositivo no logra conectarse a IoT Platform mediante MQTT, use los códigos de error para solucionar el problema. Para más información sobre los códigos de error del servidor, consulte Troubleshooting.