Comunicación MQTT: utilice EMQX para comunicarse entre ESP8266 y el subprograma WeChat

concepto

MQTT

MQTT (Message Queuing Telemetry Transport) es un protocolo de mensajería "ligero" basado en el paradigma de publicación/suscripción, publicado por IBM. MQTT puede funcionar en el conjunto de protocolos TCP/IP y es un protocolo de mensajería de publicación/suscripción diseñado para dispositivos remotos con bajo rendimiento de hardware y malas condiciones de red. Por tanto, el protocolo MQTT es adecuado para dispositivos remotos con bajo rendimiento de hardware y entornos con malas condiciones de red, como la comunicación máquina a máquina (M2M) y el Internet de las cosas (IoT).
Insertar descripción de la imagen aquí
Hay muchos otros conceptos sobre MQTT, como mecanismos de suscripción y publicación, niveles de servicio de mensajes, mecanismos de latido, etc. Antes de leer el artículo, comprenda los conocimientos relevantes Dirección de aprendizaje recomendada .

ESP8266

Espressif ESP8266 es un microcontrolador con función WiFi incorporada. Tiene características SOC inalámbricas de alto rendimiento y puede proporcionar funciones de conexión inalámbrica para dispositivos móviles y aplicaciones de IoT.
Las características de ESP8266 son las siguientes:
tamaño de paquete pequeño, consumo de energía ultrabajo y admite múltiples modos de energía.
Equipado con un módulo de transmisión transparente UART-WiFi de alto rendimiento, se puede conectar directamente a otros dispositivos basados ​​en microcontroladores.
Admite tres modos de trabajo: STA/AP/STA+AP, y puede usarse como punto de acceso inalámbrico o cliente.
La pila de protocolos TCP/IP incorporada admite múltiples conexiones de Cliente TCP sin agregar ningún circuito coincidente.
Admite tres tipos de interfaces de antena: antena PCB integrada, interfaz IPEX e interfaz de orificio de sello.
Puede ser ampliamente utilizado en redes inteligentes, transporte inteligente, muebles inteligentes, dispositivos portátiles, control industrial y otros campos.
Cabe señalar que, aunque la información que proporciono es lo más precisa posible, los productos pueden actualizarse y cambiarse constantemente. Se recomienda consultar el sitio web oficial de Espressif para obtener la información más reciente y precisa.
Insertar descripción de la imagen aquí

Construya su propio servidor MQTT

Este artículo utiliza la dirección del sitio web oficial
de EMQX . Después de comprar su propio servidor, use el siguiente código para implementarlo.

curl -s https://assets.emqx.com/scripts/install-emqx-rpm.sh | sudo bash
sudo yum install emqx -y
sudo systemctl start emqx

Insertar descripción de la imagen aquí

Una vez completada la instalación, abra el backend. http://你的IP地址/#/login?to=/websocketLa contraseña inicial del administrador de la cuenta es pública.
Insertar descripción de la imagen aquí

Grabar código ESP8266

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

// WiFi
const char *ssid = "mousse"; // Enter your WiFi name
const char *password = "qweqweqwe";  // Enter WiFi password

// MQTT Broker
const char *mqtt_broker = "broker.emqx.io";
const char *topic = "esp8266/test";
const char *mqtt_username = "emqx";
const char *mqtt_password = "public";
const int mqtt_port = 1883;

WiFiClient espClient;
PubSubClient client(espClient);

void setup() {
    
    
    // Set software serial baud to 115200;
    Serial.begin(115200);
    // connecting to a WiFi network
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
    
    
        delay(500);
        Serial.println("Connecting to WiFi..");
    }
    Serial.println("Connected to the WiFi network");
    //connecting to a mqtt broker
    client.setServer(mqtt_broker, mqtt_port);
    client.setCallback(callback);
    while (!client.connected()) {
    
    
        String client_id = "esp8266-client-";
        client_id += String(WiFi.macAddress());
        Serial.printf("The client %s connects to the public mqtt broker\n", client_id.c_str());
        if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
    
    
            Serial.println("Public emqx mqtt broker connected");
        } else {
    
    
            Serial.print("failed with state ");
            Serial.print(client.state());
            delay(2000);
        }
    }
    // publish and subscribe
    client.publish(topic, "hello emqx");
    client.subscribe(topic);
}

void callback(char *topic, byte *payload, unsigned int length) {
    
    
    Serial.print("Message arrived in topic: ");
    Serial.println(topic);
    Serial.print("Message:");
    for (int i = 0; i < length; i++) {
    
    
        Serial.print((char) payload[i]);
    }
    Serial.println();
    Serial.println("-----------------------");
}

void loop() {
    
    
    client.loop();
}

Cambie la información anterior por la suya propia y
preste atención a agregar la biblioteca PubSubClient.

Desarrollo del subprograma WeChat

Tutorial de acceso oficial
Cree un proyecto de subprograma WeChat y agregue archivos de biblioteca. Este artículo usa MQTT.js. También hay SDK relacionados para diferentes clientes. El subprograma WeChat aquí usa lenguaje JavaScript, por lo que se usa esta biblioteca.
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
EMQX requiere el subprograma WeChat para admitir la comunicación instantánea a través de WebSocket. MQTT Over WebSocket de EMQX es totalmente compatible con el subprograma WeChat.
Consejo:
Debido a las restricciones de especificación del subprograma WeChat, EMQX debe prestar atención a los siguientes puntos al utilizar el subprograma WeChat para acceder: Debe
utilizar un nombre de dominio que haya pasado el registro de nombre de dominio (se abre en una ventana nueva) para acceder
al nombre de dominio, que debe estar en el fondo de administración del subprograma (se abre en una ventana nueva) El nombre de dominio/lista blanca de IP (Desarrollo->Configuración de desarrollo->Nombre de dominio del servidor->Nombre de dominio legal de Socket) solo admite el protocolo WebSocket/TLS,
y se debe asignar un certificado emitido por una CA confiable al nombre de dominio.
Debido al error del subprograma WeChat, los teléfonos Android reales deben usar el puerto TLS/443; de lo contrario, la conexión fallará (es decir, la dirección de conexión no puede contener un puerto)

Descargue e importe mqtt.mini.js
Insertar descripción de la imagen aquí
para probarlo en el ciclo de declaración onLoad del subprograma WeChat.

	 onLoad(options) {
    
    
    try {
    
    
      console.log("开始链接");
      const clientId = new Date().getTime();//mqtt的连接ID
      app.globalData.client = mqtt.connect(`wxs://${
      
      host}/mqtt`, {
    
    
          username,
          password,
          reconnectPeriod,
          connectTimeout,
          clientId,
      });
    } catch (error) {
    
    
        console.log("mqtt.connect error", error);
    }
    if (app.globalData.client) {
    
    
      app.globalData.client.subscribe("test")
    }

    app.globalData.client.on("message", (topic, payload) => {
    
    
      console.log(`收到消息 - Topic: ${
      
      topic},Payload: ${
      
      payload}`)
      // app.globalData.currMsg = JSON.parse(payload);
      // console.log(typeof payload)
    });
  }

El mensaje de voluntad se ha recibido aquí.
Insertar descripción de la imagen aquí
Para obtener más API, como suscripción, publicación y devolución de llamada de mensajes, consulte MQTT.js.

Supongo que te gusta

Origin blog.csdn.net/Systemmax20/article/details/132651442
Recomendado
Clasificación