Todos los productos
Search
Centro de documentos

IoT Platform:Conectar un dispositivo a IoT Platform mediante Paho MQTT para Go

Última actualización: Sep 05, 2026

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.

    Nota

    Los 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

  1. 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 AuthInfo con 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.

  2. 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)
      Importante
      • Si 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() en opts := 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.

  3. Compile el proyecto.

Código de ejemplo

Conecte un dispositivo a IoT Platform con el código de ejemplo.

  1. 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.

    Nota

    Si 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.

  2. 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.

  3. Ejecute el siguiente comando en el símbolo del sistema para ejecutar el archivo iot.go:

    go run iot.go MqttSign.go 

    Despué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 #5

    Inicie 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 Device Management > Devices. Verá que el estado del dispositivo es Online.

    • Elija Monitoring & O&M > Log Service. 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.