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
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
Demostración de selección de productos recién creada, haga clic en el nuevo dispositivo.
Obtener triplete
El sistema generará automáticamente una ProductKey, DeviceName y la configuración del equipo completa DeviceSecret después, denominados tripletes.
Tema de comunicación
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
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.
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/ |
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
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.