Resumen del uso de STM32 + ESP8266 para conectarse a Alibaba Cloud a través de MQTT

Este experimento toma el sensor piroeléctrico que detecta el cuerpo humano como ejemplo para presentar cómo conectar el STM32 + ESP8266 a la plataforma Alibaba Cloud IoT a través del protocolo MQTT.

1. Preparación preliminar

Hardware: placa de desarrollo Wildfire Guide STM32F103VET6, sensor piroeléctrico HC-SR501

Software: Keil5

Plataforma: Alibaba Cloud


2. Operación específica

Configuración de la plataforma Alibaba Cloud IoT

Crear producto

Inserte la descripción de la imagen aquí

La señal de prueba es recibida por la plataforma de nube Ali del sensor piroeléctrico, por lo que seleccione el modelo de producto con estado de detección de infrarrojos booleano que podrá satisfacer la demanda.

Crear dispositivo

Inserte la descripción de la imagen aquí

Demostración de selección de productos recién creada, haga clic en el nuevo dispositivo.

Obtener triplete

Inserte la descripción de la imagen aquí

El sistema generará automáticamente una ProductKey, DeviceName y la configuración del equipo completa DeviceSecret después, denominados tripletes.

Tema de comunicación

Inserte la descripción de la imagen aquí

Los experimentos se comunican, el protocolo MQTT se basa en la plataforma MQTT (V3.1.1) se basa en un acuerdo con el modo de protocolo de mensajería "publicar / suscribir" de la agencia, en este protocolo, hay editores, suscriptores y agente (corredor) de tres tipos Rol, el editor publica el mensaje a través del tema, y ​​el suscriptor se suscribe al tema de interés. Un editor puede corresponder a varios suscriptores.

Conjunto seleccionado de sufijo Tema en el modelo de objeto de publicación del dispositivo de comunicación Tema, la publicación y la suscripción representan, por supuesto, también es posible personalizar el tema de comunicación. Después de obtener el triplete y el tema de comunicación, puede guardarlo en el texto para su uso posterior. De esta forma, básicamente se completa la configuración de la plataforma IoT.


Configuración de hardware

Inserte la descripción de la imagen aquí

Sensor piroeléctrico HC-SR501 conectado STM32 relativamente simple, solo a tierra GND, la fuente de alimentación VCC conectada a 3.3V-5V, puerto de E / S conectado OUT a. La perilla izquierda se usa para ajustar la sensibilidad, la sensibilidad en el sentido de las agujas del reloj es alta y la sensibilidad en sentido antihorario es baja; la perilla derecha se usa para ajustar la inducción de retardo, el retardo en sentido horario aumenta y el retardo en sentido antihorario disminuye.


Configuración de software

Configuración del sensor piroeléctrico

#include "sensor.h"
void HCSR501_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(HCSR501_INT_GPIO_CLK ,ENABLE);
	
	GPIO_InitStructure.GPIO_Pin = HCSR501_INT_GPIO_PIN;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_Init(HCSR501_INT_GPIO_PORT, &GPIO_InitStructure);
}

uint8_t HCSR501_Statue(void)
{
	if(GPIO_ReadInputDataBit(HCSR501_INT_GPIO_PORT, HCSR501_INT_GPIO_PIN)==Bit_SET)
		return 1;
	else return 0;
}		

ESP8266 conectarse a WiFi

  • AT + CWMODE = 1: Establecer modo de trabajo (modo STA)

    bool ESP8266_Net_Mode_Choose ( ENUM_Net_ModeTypeDef enumMode )
    {
    	switch ( enumMode )
    	{
    		case STA:
    		  return ESP8266_Cmd ( "AT+CWMODE=1", "OK", "no change", 10); 
    		
    	  case AP:
    		  return ESP8266_Cmd ( "AT+CWMODE=2", "OK", "no change", 10); 
    		
    		case STA_AP:
    		  return ESP8266_Cmd ( "AT+CWMODE=3", "OK", "no change", 10); 
    		
    	  default:
    		  return false;
      }
    	
    }
    
  • AT + CWJAP = "SSID", "PASSWORD": Conéctese al punto de acceso WIFI en el entorno actual (nombre del punto de acceso, contraseña)

    bool ESP8266_JoinAP ( char * pSSID, char * pPassWord )
    {
    	char cCmd [120];
    	sprintf ( cCmd, "AT+CWJAP=\"%s\",\"%s\"", pSSID, pPassWord );	
    	return ESP8266_Cmd ( cCmd, "OK", NULL, 150 );
    }
    
  • AT + CIPMODE = 1: activa el modo de transmisión transparente

    bool ESP8266_UnvarnishSend ( void )
    {
    	if ( ! ESP8266_Cmd ( "AT+CIPMODE=1", "OK", NULL, 100 ) )
    		return false;
    	
    	return 
    	  ESP8266_Cmd ( "AT+CIPSEND", "OK", ">", 100 );
    	
    }
    

Portabilidad MQTT

Descargue el código fuente abierto paho mqtt en el enlace de código Github Github y descomprima paho.mqtt.embedded-c-master \ MQTTPacket \ src en la fuente MQTT y paho.mqtt.embedded-c-master \ MQTTPacket \ transport samples in Copie el archivo a su propio proyecto. Modifique las funciones transport_sendPacketBuffer () y transport_getdata () en el archivo transport.c para enviar y recibir datos TCP.

Inserte la descripción de la imagen aquí

Modificar los parámetros relacionados con el protocolo MQTT

#define   HOST_NAME       "a12Dg3Gsw50.iot-as-mqtt.cn-shanghai.aliyuncs.com"     //服务器域名
#else
#define   HOST_NAME       "139.196.135.135"     //服务器IP地址
#endif


#define   HOST_PORT     1883    //由于是TCP连接,端口必须是1883

#define   CLIENT_ID     "test01|securemode=3,signmethod=hmacsha1|"       //ID
#define   USER_NAME     "test01&a12Dg3Gsw50"     //用户名
#define   PASSWORD      "ce046a566db6047561024d89b99b898f98c39648"  //秘钥

#define   TOPIC         "/sys/a12Dg3Gsw50/test01/thing/service/property/set"      //订阅的主题
#define   PUBTOPIC      "/sys/a12Dg3Gsw50/test01/thing/event/property/post"      //发布的主题
HOST_NAME Formato fijo: {YourProductKey} .iot-as-mqtt. {YourRegionId} .aliyuncs.com. {YourProductKey} es la ProductKey del dispositivo. {YourRegionId} es el ID de la región.
PUERTO HOST 1883
Identificación del cliente Formato fijo: {YourDeviceName} | securemode = 3, signmethod = hmacsha1 |. {YourDeviceName} es el DeviceName en el triplete.
Nombre de usuario Formato fijo: {YourDeviceName} y {YourProductKey}. {YourDeviceName} y {YourProductKey} son DeviceName y ProductKey en el triplete respectivamente.
Contraseña Formato: clientId {YourDeviceName} deviceName {YourDeviceName} productKey {YourProductKey} {YourDeviceName} y {YourProductKey} son DeviceName y ProductKey en el triplete respectivamente. El método de cifrado es HmacSHA1; clave de cifrado: DeviceSecret ; sitio web de cifrado hmacsha1: http://encode.chahuo.com/

Inserte la descripción de la imagen aquí

Subir datos

if(HCSR501_Statue()==1)
				{
					sprintf(mqtt_message,"{\"method\":\"thing.event.property.post\",\"id\":\"0000000001\",\"params\":{\"MotionAlarmState\":1},\"version\":\"1.0.0\"}");
					MQTTMsgPublish(PUBTOPIC,QOS0,mqtt_message);
					printf( "\r\nsomeone inside\r\n");
				}
				else	
				{
					sprintf(mqtt_message,"{\"method\":\"thing.event.property.post\",\"id\":\"0000000001\",\"params\":{\"MotionAlarmState\":0},\"version\":\"1.0.0\"}");
					MQTTMsgPublish(PUBTOPIC,QOS0,mqtt_message);
					printf( "\r\nnoone inside\r\n");
				}								 
parámetro Tipos de Descripción
método Cuerda Método de solicitud, el valor es thing.event.property.post.
carné de identidad Cuerda Número de identificación del mensaje. Número de tipo de cadena, el rango de valores es 0 ~ 4294967295, y cada ID de mensaje es único en el dispositivo actual.
params bool Identificador de estado MotionAlarmState, el valor es 0 o 1.
versión Cuerda Número de versión del protocolo. El número de versión actual del protocolo es 1.0.0.

para resumir

El aliyun conectado secuencialmente ESP8266 se puede dividir en los siguientes pasos: un módulo de configuración conectado al modo STA ➡ connection conexión de punto de acceso TCP➡ modo de transmisión configurado al modo transparente ➡ authentication Se envían paquetes de latido del nombre de usuario de autenticación de clave y tema de suscripción ➡ ➡ Recibir / enviar datos

El formato de inicio de sesión del programa MQTT, ID y contraseña, enviar un formato de mensaje debe estar estrictamente de acuerdo con el acuerdo para realizar MQTT, puede llevar a más de un espacio no se puede conectar Ali nube; enviar un valor de parámetro de identificación de mensaje no es fijo, solo Es fácil tomar un valor dentro del rango, pero se debe garantizar la longitud de la identificación; QOS significa la calidad de la comunicación, porque puede haber pérdida de datos en el proceso de envío del mensaje, la solución más directa es reenviarlo, como Alibaba Cloud La mayoría de las plataformas de red no admiten QOS2, y la mayoría de las necesidades se pueden satisfacer utilizando QOS0 en el proceso de desarrollo real.

3. Pantalla de resultados

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Después de la visualización de datos, puede ver, cuando alguien dentro del puerto serie de la pantalla, la interfaz de la plataforma se muestra en rojo para alguien; por el contrario, la pantalla en serie no hay nadie dentro, la interfaz de la plataforma se muestra en verde para nadie.

Supongo que te gusta

Origin blog.csdn.net/weixin_44355637/article/details/109261348
Recomendado
Clasificación