Sistema de control de acceso inteligente diseñado en base a STM32+Huawei Cloud IOT

1. Introducción del proyecto

El sistema de control de acceso inteligente es un sistema de seguridad inteligente que aplica la tecnología de Internet de las cosas para proporcionar una gestión de control de acceso segura y eficiente y funciones de monitoreo remoto. Los sistemas de control de acceso tradicionales suelen utilizar tarjetas magnéticas, contraseñas o llaves para desbloquear, pero existen problemas como fácil pérdida, fácil duplicación y operación engorrosa. Para resolver estos problemas y mejorar la seguridad y conveniencia del control de acceso, aquí se presenta el diseño de un sistema de control de acceso inteligente basado en STM32F103 y Huawei Cloud IOT.

El controlador central del sistema utiliza el microcontrolador STM32F103, que tiene ricas interfaces periféricas y potentes capacidades de procesamiento, y puede lograr un control y procesamiento de datos precisos de los equipos de control de acceso. Para proporcionar una variedad de métodos de desbloqueo, se seleccionaron como dispositivos de entrada el módulo de lectura y escritura RFID-RC522 y el teclado de matriz capacitiva 4x4. Los usuarios pueden abrir el control de acceso deslizando su tarjeta o ingresando una contraseña. Se utiliza un motor paso a paso 28BYJ-48 como dispositivo de control de cerradura de puerta, que puede lograr un control preciso de la cerradura de puerta.

Para facilitar la interacción de los usuarios con el sistema de control de acceso, se utiliza una pantalla OLED de 0,96 pulgadas con interfaz SPI y un timbre para mostrar información sobre el estado de la cerradura de la puerta y mensajes de interacción persona-computadora. Además, para realizar funciones de control remoto y envío de mensajes, se seleccionó el módulo WiFi ESP8266 para conectarse a la plataforma Huawei Cloud IoT. Los usuarios pueden desbloquear la puerta de forma remota a través de la aplicación móvil y monitorear el estado de la cerradura de la puerta en cualquier momento. Cuando la cerradura de la puerta se abre o cierra correctamente, la aplicación móvil recibirá un recordatorio de notificación para aumentar la seguridad y comodidad del usuario.

Al combinar STM32F103 con Huawei Cloud IOT, el sistema de control de acceso inteligente puede lograr un rendimiento eficiente, estable y seguro en transmisión de datos, control remoto y envío de mensajes. El sistema no solo proporciona una variedad de métodos de desbloqueo y funciones de interacción persona-computadora, sino que también tiene funciones inteligentes de monitoreo remoto y recordatorios de mensajes, lo que es adecuado para las necesidades de gestión de control de acceso de comunidades residenciales, escuelas, empresas e instituciones, etc. .

imagen-20230801151934943

imagen-20230801151925200

2. Selección de hardware

En la selección del hardware del sistema de control de acceso inteligente se seleccionaron los siguientes módulos:

【1】Controlador principal: microcontrolador STM32F103. Es un microcontrolador central ARM Cortex-M3 de alto rendimiento y bajo consumo con ricas interfaces periféricas y potentes capacidades informáticas y de control, muy adecuado para el control y procesamiento de datos de sistemas de control de acceso.

【2】Módulo de lectura y escritura RFID: RFID-RC522. Este módulo se basa en tecnología de identificación por radiofrecuencia de 13,56 MHz, que puede leer y escribir tarjetas RFID y abrir y cerrar el control de acceso deslizando la tarjeta.

【3】Control de bloqueo de puerta: motor paso a paso 28BYJ-48. El motor paso a paso tiene una estructura simple y un tamaño pequeño, y puede controlar con precisión la cerradura de la puerta y proporcionar la función de abrir y cerrar la cerradura de la puerta.

【4】Dispositivo de entrada de contraseña: teclado matricial capacitivo 4x4. Este teclado utiliza tecnología táctil capacitiva y es resistente al agua y altamente sensible. Los usuarios pueden ingresar la contraseña para abrir el control de acceso.

【5】Pantalla: pantalla OLED de 0,96 pulgadas con interfaz SPI. La pantalla tiene las características de alto brillo, alto contraste y bajo consumo de energía, y puede mostrar información sobre el estado de la cerradura de la puerta y mensajes de interacción persona-computadora.

【6】Módulo de conexión de red: ESP8266-WIFI. Este módulo admite estándares de comunicación WiFi y puede conectarse a la plataforma Huawei Cloud IoT para lograr funciones de control remoto y envío de mensajes.

【7】Detección del estado de la puerta: módulo de inducción magnética infrarroja. A través de la tecnología de inducción magnética infrarroja, puede detectar si la puerta está abierta o cerrada y proporcionar información precisa sobre el estado de la puerta.

El hardware seleccionado puede cumplir con los requisitos funcionales del sistema de control de acceso inteligente. El controlador principal STM32F103 proporciona capacidades de procesamiento y control estables y confiables para todo el sistema. El módulo de lectura y escritura RFID y el teclado de contraseña brindan una variedad de métodos de desbloqueo. El motor paso a paso realiza un control preciso de la cerradura de la puerta, y la pantalla y el timbre proporcionan Función de interacción persona-computadora, el módulo ESP8266-WIFI se conecta a Huawei Cloud para realizar control remoto y envío de mensajes, y el módulo de inducción magnética infrarroja detecta el estado de la puerta, lo que hace que todo el sistema de control de acceso inteligente sea más inteligente, seguro y conveniente.

3. Ideas de diseño de sistemas

Ideas de diseño de sistema de control de acceso inteligente:

【1】Conexión e integración de hardware: cada componente de hardware (como el controlador principal, el módulo de lectura y escritura RFID, el motor paso a paso, etc.) requiere una conexión y configuración de interfaz correctas. Conecte cada módulo de hardware al controlador principal a través de líneas de conexión, establezca las conexiones de pines correctas y registre las configuraciones para garantizar que puedan funcionar correctamente e implementar las funciones correspondientes.

【2】Recopilación y procesamiento de datos: el sistema lee la información de deslizamiento de la tarjeta del usuario a través del módulo de lectura y escritura RFID u obtiene la información de la contraseña ingresada por el usuario a través del teclado de matriz capacitiva. Después de recibir los datos, el controlador principal realiza el procesamiento de datos correspondiente, como verificar si la información de la tarjeta o la contraseña es correcta. Si se pasa la verificación, continúe con el siguiente paso del proceso de control de acceso.

【3】Control de cerradura de puerta y detección de estado: el controlador principal realiza un control preciso de la cerradura de la puerta controlando el motor paso a paso. Cuando la autenticación del usuario es exitosa, el controlador principal envía instrucciones al motor paso a paso para que gire el número correspondiente de pasos para abrir o cerrar la cerradura de la puerta. Al mismo tiempo, el controlador principal también utiliza un módulo de inducción magnética infrarroja para detectar el estado de la puerta y garantizar un control preciso de la cerradura de la puerta.

[4] Interfaz de usuario e interacción persona-computadora: el sistema está equipado con una pantalla OLED de 0,96 pulgadas y un timbre. La pantalla puede mostrar al usuario la información del estado de la cerradura de la puerta y mensajes relacionados, como desbloqueo exitoso, contraseña incorrecta , etc. El timbre puede emitir diferentes sonidos de aviso para proporcionar información interactiva al usuario.

【5】Control remoto y envío de mensajes: al conectarse a la plataforma Huawei Cloud IoT a través del módulo ESP8266-WIFI, los usuarios pueden realizar operaciones de desbloqueo remoto a través de la aplicación móvil. Después de que el usuario ingresa el comando de desbloqueo en la aplicación móvil, la aplicación enviará el comando a la plataforma en la nube de Huawei, y la plataforma en la nube luego transmitirá el comando al dispositivo de Internet de las cosas (sistema de control de acceso inteligente). Después de recibir el comando de desbloqueo, el controlador principal realiza las acciones de control correspondientes y envía los resultados a la aplicación móvil a través de la plataforma en la nube para realizar funciones de control remoto y envío de mensajes.

La idea de diseño de todo el sistema es coordinar varios componentes de hardware, realizar procesamiento de datos y control de cerraduras de puertas a través del controlador principal, y proporcionar una interfaz de interacción persona-computadora y funciones de control remoto para lograr una gestión de acceso segura, eficiente y conveniente del sistema inteligente de control de acceso y monitoreo remoto.

4. Implementación de la plataforma Huawei Cloud IoT

Sitio web oficial de la nube de Huawei: https://www.huaweicloud.com/

Abra el sitio web oficial y busque Internet de las cosas para encontrarlo rápidamente 设备接入IoTDA.

imagen-20230801151116995

4.1 Introducción a la plataforma IoT

La plataforma Huawei Cloud Internet of Things (servicio en la nube de acceso a dispositivos IoT) proporciona capacidades de acceso y administración para dispositivos masivos, conecta dispositivos físicos a la nube, admite la recopilación de datos de dispositivos en la nube y la nube emite comandos a los dispositivos para control remoto y coopera con Huawei Cloud Otros productos nos ayudan a crear rápidamente soluciones de IoT.

El uso de la plataforma IoT para crear una solución IoT completa incluye principalmente 3 partes: plataforma IoT, aplicaciones comerciales y equipos.

Como capa intermedia que conecta aplicaciones y dispositivos empresariales, la plataforma IoT protege varias interfaces complejas de dispositivos y permite un acceso rápido a los dispositivos. También proporciona potentes capacidades abiertas para ayudar a los usuarios de la industria a crear diversas soluciones de IoT.

Los dispositivos pueden acceder a la plataforma IoT a través de redes fijas, 2G/3G/4G/5G, NB-IoT, Wifi y otras redes, y utilizar protocolos LWM2M/CoAP, MQTT, HTTPS para informar datos comerciales a la plataforma. comandos de control al dispositivo.

Las aplicaciones comerciales implementan escenarios comerciales como la recopilación de datos de dispositivos, la emisión de comandos y la administración de dispositivos llamando a la API proporcionada por la plataforma IoT.

imagen-20230801151124332

imagen-20230801151130369

4.2 Activar servicios de IoT

Dirección: https://www.huaweicloud.com/product/iothub.html

imagen-20230801151136153

Haga clic 总览para ver la información de acceso. Nuestro equipo actual utilizará el protocolo MQTT para conectarse a la plataforma Huawei Cloud, aquí puede ver la dirección y el número de puerto del protocolo MQTT y otra información.

imagen-20230801151202953

Resumir:

端口号:   MQTT (1883)| MQTTS (8883)   
接入地址: a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com

Obtenga información de la dirección IP basada en la dirección del nombre de dominio:

Microsoft Windows [版本 10.0.19045.2965]
(c) Microsoft Corporation。保留所有权利。

C:\Users\11266>ping a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com

正在 Ping a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com [121.36.42.100] 具有 32 字节的数据:
来自 121.36.42.100 的回复: 字节=32 时间=38ms TTL=94
来自 121.36.42.100 的回复: 字节=32 时间=37ms TTL=94
来自 121.36.42.100 的回复: 字节=32 时间=38ms TTL=94
来自 121.36.42.100 的回复: 字节=32 时间=36ms TTL=94

121.36.42.100 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 36ms,最长 = 38ms,平均 = 37ms

C:\Users\11266>

imagen-20230801151212765

Hay dos números de puerto de acceso al protocolo MQTT: 1883 es ​​un puerto no cifrado y 8883 es ​​un puerto de cifrado de certificado. El microcontrolador no puede cargar el certificado, por lo que es más apropiado utilizar el puerto 1883. El próximo ESP8266 utiliza el puerto 1883 para conectarse a la plataforma Huawei Cloud IoT.

4.3 Crear productos

(1) Crear productos

Haga clic en la página del producto, luego haga clic en Crear producto en la esquina superior izquierda.

imagen-20230801151220860

(2) Complete la información del producto

Complete el formulario según el nombre de su producto.

imagen-20230801151228433

(3) La creación del producto es exitosa

imagen-20230801151234528

(4) Agregar modelo personalizado

Una vez creado el producto, haga clic para ingresar a la página de detalles del producto y desplácese hasta la parte inferior para ver la definición del modelo.

Este modelo sirve para definir los tipos de datos que su dispositivo necesita cargar en el servidor a continuación. Escriba según su propio tipo de datos.

Primero haga clic en Modelo personalizado.

imagen-20230801151243343

Cree otra ID de servicio.

imagen-20230801151250227

Luego haga clic en Agregar atributo.

imagen-20230801151255512

imagen-20230801151300240

4.4 Agregar dispositivo

El producto es un modelo abstracto que pertenece a la capa superior, y luego el equipo real se agrega debajo del modelo del producto. Eventualmente, el dispositivo agregado debe asociarse con el dispositivo real para completar la interacción de datos.

(1) Registrar dispositivo

imagen-20230801151308625

(2) Complete según su propio equipo

imagen-20230801151315386

(3) Guardar información del dispositivo

Después de la creación, haga clic en Guardar y cerrar para obtener la información de la clave del dispositivo creado. Esta información es necesaria al generar tripletas MQTT más adelante.

imagen-20230801151322328

(4) Creación del dispositivo completada

Puede hacer clic en el dispositivo para ingresar a la página de detalles del dispositivo.

imagen-20230801151331651

4.5 Suscripción y publicación de temas del protocolo MQTT

(1) Introducción al protocolo MQTT

El equipo actual utiliza el protocolo MQTT para comunicarse con Huawei Cloud Platform.

MQTT es un protocolo de transporte de IoT que está diseñado para la transmisión ligera de mensajes de publicación/suscripción y tiene como objetivo proporcionar servicios de red confiables para dispositivos de IoT en entornos de red inestables y de bajo ancho de banda. MQTT es un protocolo de transmisión ligero desarrollado específicamente para Internet de las cosas. El protocolo MQTT se ha optimizado especialmente para redes y dispositivos de bajo ancho de banda con baja potencia informática, lo que lo hace adaptable a diversos escenarios de aplicaciones de IoT. En la actualidad, MQTT tiene clientes en varias plataformas y dispositivos y ha formado un ecosistema preliminar.

MQTT es un protocolo de cola de mensajes que utiliza el modelo de mensajes de publicación/suscripción para proporcionar aplicaciones de desacoplamiento y publicación de mensajes de uno a muchos. En comparación con otros protocolos, el desarrollo es más simple; el protocolo MQTT funciona en el protocolo TCP/IP; por TCP El El protocolo /IP proporciona una conexión de red estable; por lo tanto, cualquier dispositivo de red con una pila de protocolo TCP puede utilizar el protocolo MQTT. El ESP8266 utilizado en este dispositivo tiene una pila de protocolos TCP y puede establecer una conexión TCP, por lo que con el protocolo MQTT encapsulado en el código STM32 se puede completar la comunicación con la plataforma en la nube de Huawei.

El documento de ayuda para el acceso al protocolo MQTT de Huawei Cloud está aquí: https://support.huaweicloud.com/devg-iothub/iot_02_2200.html

imagen-20230801151337395

Procesos de negocio:

imagen-20230801151342879

(2) Restricciones de uso del protocolo MQTT de Huawei Cloud Platform

describir límite
Versiones de protocolo MQTT compatibles 3.1.1
Diferencias con el protocolo MQTT estándar Admite Qos 0 y Qos 1. Admite personalización de temas. No admite QoS2. No admite will y retiene mensajes.
Niveles de seguridad soportados por MQTTS Adopte la base del canal TCP + protocolo TLS (hasta la versión TLSv1.3)
Número máximo de solicitudes de conexión MQTT por segundo para una sola cuenta Ilimitado
Número máximo de conexiones MQTT admitidas por un solo dispositivo por minuto 1
El rendimiento por segundo de una única conexión MQTT, es decir, el ancho de banda, incluidos los dispositivos y puertas de enlace conectados directamente. 3KB/s
La longitud máxima de un único mensaje de publicación MQTT. Las solicitudes de publicación que excedan este tamaño serán rechazadas directamente. 1MB
Valor recomendado del tiempo de latido de conexión MQTT El tiempo de latido está limitado de 30 a 1200 segundos y la configuración recomendada es 120 segundos.
¿El producto admite temas personalizados? apoyo
Publicación de mensajes y suscripción. El dispositivo sólo puede publicar y suscribir mensajes a su propio tema.
Número máximo de suscripciones por solicitud de suscripción Ilimitado

(3) Formato de suscripción al tema

Dirección del documento de ayuda: https://support.huaweicloud.com/devg-iothub/iot_02_2200.html

imagen-20230801151350067

imagen-20230801151355027

Para los dispositivos, generalmente se suscriben al tema de los mensajes enviados por la plataforma al dispositivo.

Si un dispositivo desea recibir mensajes enviados por la plataforma, debe suscribirse al tema de mensajes enviados por la plataforma al dispositivo. Después de suscribirse, la plataforma envía mensajes al dispositivo y el dispositivo recibirá el mensaje.

Si el dispositivo quiere conocer los mensajes enviados por la plataforma, debe suscribirse al tema marcado en la imagen de arriba.

以当前设备为例,最终订阅主题的格式如下:
$oc/devices/{device_id}/sys/messages/down

最终的格式:
$oc/devices/6419627e40773741f9fbdac7_dev1/sys/messages/down

(4) Formato de publicación del tema

Para los dispositivos, la publicación de temas significa cargar datos a la plataforma en la nube y cargar los datos más recientes del sensor y el estado del dispositivo a la plataforma en la nube.

Esta operación se llama: informe de atributos.

Dirección del documento de ayuda: https://support.huaweicloud.com/usermanual-iothub/iot_06_v5_3010.html

imagen-20230801151401246

Según la introducción del documento de ayuda, el tema de publicación del dispositivo actual y el formato de los atributos informados se resumen a continuación:

发布的主题格式:
$oc/devices/{device_id}/sys/properties/report
 
最终的格式:
$oc/devices/6419627e40773741f9fbdac7_dev1/sys/properties/report
发布主题时,需要上传数据,这个数据格式是JSON格式。

上传的JSON数据格式如下:

{
  "services": [
    {
      "service_id": <填服务ID>,
      "properties": {
        "<填属性名称1>": <填属性值>,
        "<填属性名称2>": <填属性值>,
        ..........
      }
    }
  ]
}
根据JSON格式,一次可以上传多个属性字段。 这个JSON格式里的,服务ID,属性字段名称,属性值类型,在前面创建产品的时候就已经介绍了,不记得可以翻到前面去查看。

根据这个格式,组合一次上传的属性数据:
{"services": [{"service_id": "stm32","properties":{"DS18B20":18,"motor_water":1,"motor_oxygen":1,"temp_max":10,"water_hp":130,"motor_food":0,"time_food":0,"oxygen_food":3}}]}

4.6 Tripletes MQTT

El inicio de sesión del protocolo MQTT requiere completar la ID de usuario, la ID del dispositivo, la contraseña del dispositivo y otra información. Al igual que cuando normalmente iniciamos sesión en QQ y WeChat, debemos ingresar la contraseña de la cuenta para iniciar sesión. Estos tres parámetros registrados en el protocolo MQTT generalmente se denominan triples MQTT.

A continuación, presentaremos cómo obtener los parámetros tripletes MQTT de Huawei Cloud Platform.

(1) dirección del servidor MQTT

Para iniciar sesión en el servidor MQTT, primero recuerde conocer la dirección y el puerto del servidor.

Dirección del documento de ayuda: https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/home

El puerto del protocolo MQTT admite 1883 y 8883. La diferencia entre ellos es: 8883 es ​​un puerto cifrado y es más seguro. Sin embargo, es difícil de utilizar en un microcontrolador, por lo que el equipo actual utiliza el puerto 1883 para la conexión.

Con base en el nombre de dominio y el número de puerto anteriores, obtenga la siguiente información de dirección IP y número de puerto: Si el dispositivo admite completar el nombre de dominio, puede ingresar el nombre de dominio directamente; de ​​lo contrario, complete directamente la dirección IP. (La dirección IP se obtiene mediante resolución de nombre de dominio)

华为云的MQTT服务器地址:114.116.232.138
域名:7445c6bcd3.st1.iotda-device.cn-north-4.myhuaweicloud.com
华为云的MQTT端口号:1883

¡Aviso! ! ! ! Consulte aquí para obtener más detalles:

imagen-20230801151408871

(2) Generar triples MQTT

Huawei Cloud proporciona una herramienta en línea para generar triples de autenticación MQTT: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/

Abra esta herramienta, complete la información del dispositivo (es decir, la información guardada después de crear el dispositivo hace un momento), haga clic en Generar y podrá obtener la información de inicio de sesión de MQTT.

Aquí está la página que se abre:

imagen-20230801151418248

Complete la información del dispositivo: (Las dos líneas anteriores se guardan después de crear el dispositivo)

Después de obtener el triplete, cuando el dispositivo inicie sesión para autenticación a través del protocolo MQTT, simplemente complete los parámetros.

ClientId 6419627e40773741f9fbdac7_dev1_0_0_2023032108
Username 6419627e40773741f9fbdac7_dev1
Password 861ac9e6a579d36888b2aaf97714be7af6c77017b017162884592bd68b086a6e

4.7 Simular la prueba de inicio de sesión del dispositivo

Después de los pasos anteriores, se creó el producto, el dispositivo y el modelo de datos, y se obtuvo la información de inicio de sesión de MQTT. A continuación, utilice el software cliente MQTT para simular un dispositivo real para iniciar sesión en la plataforma. Pruebe si la comunicación con el servidor es normal.

(1) Complete la información de inicio de sesión

Abra el software del cliente MQTT y complete la información relevante (el texto de introducción anterior). Luego, haga clic para iniciar sesión, suscribirse al tema y publicar el tema.

imagen-20230801151429390

(2) Abra la página web para ver

Después de completar las operaciones anteriores, abra el backend web de Huawei Cloud y podrá ver que el dispositivo está en línea.

Haga clic en la página de detalles para ver los datos cargados.

En este punto, la implementación de la plataforma en la nube se ha completado y el dispositivo puede cargar datos normalmente.

4.8 Obtener datos ocultos del dispositivo (interfaz API)

Documento de ayuda: https://support.huaweicloud.com/api-iothub/iot_06_v5_0079.html

Introducción a la sombra del dispositivo:

设备影子是一个用于存储和检索设备当前状态信息的JSON文档。
每个设备有且只有一个设备影子,由设备ID唯一标识
设备影子仅保存最近一次设备的上报数据和预期数据
无论该设备是否在线,都可以通过该影子获取和设置设备的属性

En pocas palabras: la sombra del dispositivo son los últimos datos cargados por el dispositivo.

En el software que diseñamos, si queremos obtener la información de estado más reciente del dispositivo, utilizamos la interfaz oculta del dispositivo.

Si no está familiarizado con la interfaz, primero puede realizar la depuración en línea: https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=IoTDA&api=ShowDeviceShadow

Interfaz de depuración en línea, puede solicitar la interfaz oculta para comprender la solicitud y el formato de datos devueltos.

imagen-20230801151441245

Los datos devueltos por la interfaz oculta del dispositivo son los siguientes:

{
    
    
 "device_id": "6419627e40773741f9fbdac7_dev1",
 "shadow": [
  {
    
    
   "service_id": "stm32",
   "desired": {
    
    
    "properties": null,
    "event_time": null
   },
   "reported": {
    
    
    "properties": {
    
    
     "DS18B20": 18,
     "motor_water": 1,
     "motor_oxygen": 1,
     "temp_max": 10,
     "water_hp": 130,
     "motor_food": 0,
     "time_food": 0,
     "oxygen_food": 3
    },
    "event_time": "20230321T081126Z"
   },
   "version": 0
  }
 ]
}

4.9 Modificar propiedades del dispositivo (interfaz API)

Dirección: https://support.huaweicloud.com/api-iothub/iot_06_v5_0034.html

Descripción de la interfaz

设备的产品模型中定义了物联网平台可向设备下发的属性,应用服务器可调用此接口向指定设备下发属性。平台负责将属性以同步方式发送给设备,并将设备执行属性结果同步返回。

La interfaz para modificar los atributos del dispositivo permite al servidor emitir instrucciones al dispositivo y controlarlo si es necesario.

Dirección de depuración en línea:

https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=IoTDA&api=UpdateProperties

La modificación de las propiedades del dispositivo es un comando sincrónico y requiere que el dispositivo esté en línea antes de la depuración. Primero use el cliente MQTT para iniciar sesión en el servidor y simular que el dispositivo se conecta.

Luego depure y envíe los datos de prueba al dispositivo de forma remota.

【1】 Utilice el cliente MQTT para iniciar sesión en el dispositivo primero (este es un comando sincrónico y debe estar en línea para depurar)

imagen-20230801151450774

【2】Haga clic para depurar

imagen-20230801151457386

{
    
    "services":{
    
    "temp_max":100}}

【4】 Como puede ver, el software del cliente MQTT ha recibido el mensaje enviado por el servidor.

imagen-20230801151505222

Dado que es un comando sincrónico, el servidor debe recibir una respuesta del dispositivo para completar exitosamente un proceso. Solo cuando el dispositivo responde puede el servidor determinar que los datos se entregaron exitosamente.

5. Diseño de código

5.1 Introducción al módulo ESP8266

ESP8266-WIFI es un chip Wi-Fi de bajo costo desarrollado por Espressif Systems, que se puede utilizar junto con otros microcontroladores o microcontroladores para lograr funciones de comunicación inalámbrica. El chip integra un procesador RISC Tensilica L106 de 32 bits de alto rendimiento y un conjunto de módulos WIFI integrados y módulos de administración de energía para proporcionar conexiones de red inalámbrica estables con bajo consumo de energía.

La siguiente es una introducción a los comandos AT comúnmente utilizados relacionados con ESP8266 y el protocolo MQTT:

【1】AT+CIPSTART: Establece una conexión TCP.

Cuando se utiliza el protocolo MQTT, primero se debe establecer una conexión TCP. AT+CIPSTART puede realizar una conexión TCP con el servidor MQTT, el formato es el siguiente:

AT+CIPSTART="TCP","MQTT服务器地址",MQTT服务器端口号

【2】AT+CIPSEND: Enviar datos.

Después de establecer una conexión TCP, puede usar AT+CIPSEND para enviar datos, incluidos varios comandos del protocolo MQTT. El formato es el siguiente:

AT+CIPSEND=<length>
<MQTT命令>

Entre ellos, representa la longitud de los datos y <comando MQTT> representa el comando del protocolo MQTT, como CONECTAR, PUBLICAR, SUSCRIBIR, etc.

【3】AT+CIPCLOSE: Cierra la conexión TCP. Después de usar el protocolo MQTT, puede usar AT + CIPCLOSE para cerrar la conexión TCP, el formato es el siguiente:

AT+CIPCLOSE

【4】AT+CIPSTATUS: Consulta el estado de la conexión TCP. Utilice AT + CIPSTATUS para consultar el estado de la conexión TCP actual, el formato es el siguiente:

AT+CIPSTATUS

El valor de retorno incluye: ESTADO, estado de la conexión TCP; ID DE ENLACE, ID de la conexión TCP; IP, dirección IP de la conexión TCP; PUERTO, número de puerto de la conexión TCP.

【5】AT+MQTTCONN: Conéctese al servidor MQTT. Utilice AT+MQTTCONN para conectarse al servidor MQTT. El formato es el siguiente:

AT+MQTTCONN=<clientID>,<user>,<password>,<keepalive>,<clean>,<willTopic>,<willMessage>,<willQoS>,<willRetain>

Entre ellos, representa el ID del cliente; representa el nombre de usuario; representa la contraseña; representa el intervalo del paquete de latidos; representa borrar el indicador de sesión; representa el asunto de las últimas palabras; representa el mensaje de las últimas palabras; representa el nivel de QoS de las últimas palabras; representa si se retiene el mensaje de las últimas palabras.

【6】AT+MQTTPUB: Publicar mensajes. Puede utilizar AT+MQTTPUB para publicar mensajes MQTT. El formato es el siguiente:

AT+MQTTPUB=<topic>,<payload>,<QoS>,<retain>

Entre ellos, representa el tema MQTT; representa la carga del mensaje; representa el nivel de QoS del mensaje; representa si el mensaje se retiene.

【7】AT+MQTTSUB: Suscríbete al tema. Utilice AT+MQTTSUB para suscribirse a temas MQTT, el formato es el siguiente:

AT+MQTTSUB=<topic>,<QoS>

Entre ellos, representa el tema MQTT; representa el nivel de QoS del mensaje.

5.2 Conectarse al código de la nube

El siguiente es un código de muestra para que STM32F103 + ESP8266 inicie sesión en el servidor MQTT IoT a través del protocolo MQTT para implementar la suscripción y publicación de temas. El comando AT de ESP8266-WIFI se utiliza para lograr la comunicación con el servidor MQTT.

El puerto serie UART debe configurarse en el STM32F103 para lograr la comunicación con el ESP8266. Escriba las funciones de envío y recepción de instrucciones AT en STM32F103 e intégrelas en el proyecto.

El código se muestra a continuación:

#include "stm32f1xx_hal.h"
#include <string.h>
#include <stdio.h>

/* 定义ESP8266的UART串口 */
UART_HandleTypeDef huart1;

/* 定义MQTT服务器地址、端口号、用户名和密码等信息 */
const char* mqtt_server = "mqtt.example.com";
const int mqtt_port = 1883;
const char* mqtt_username = "username";
const char* mqtt_password = "password";

/* 定义MQTT主题 */
const char* mqtt_topic = "test/topic";

/* 定义回调函数,处理MQTT消息 */
void messageArrived(MessageData* data)
{
    
    
    printf("Message arrived: topic=%.*s, payload=%.*s\n", 
           data->topicName->lenstring.len, 
           data->topicName->lenstring.data, 
           data->message->payloadlen, 
           data->message->payload);
}

/* 发送AT指令并等待响应 */
int ESP8266_SendATCommand(char* cmd, char* response, int timeout)
{
    
    
    HAL_UART_Transmit(&huart1, (uint8_t*)cmd, strlen(cmd), timeout);

    int len = 0;
    int len_read = 0;
    HAL_Delay(100);
    while (1) {
    
    
        if (HAL_UART_Receive(&huart1, (uint8_t*)response + len, 1, timeout) == HAL_OK) {
    
    
            len++;
            if (strstr(response, "OK") != NULL) {
    
    
                return len;
            }
            if (strstr(response, "ERROR") != NULL) {
    
    
                return -1;
            }
            if (len >= 1024) {
    
    
                return -1;
            }
        }
    }
}

/* 连接MQTT服务器 */
int MQTT_Connect(void)
{
    
    
    char cmd[1024];
    char response[1024];

    /* 设置ESP8266为透传模式 */
    ESP8266_SendATCommand("AT+CIPMODE=1\r\n", response, 1000);
    ESP8266_SendATCommand("AT+CIPMUX=0\r\n", response, 1000);

    /* 建立TCP连接 */
    sprintf(cmd, "AT+CIPSTART=\"TCP\",\"%s\",%d\r\n", mqtt_server, mqtt_port);
    ESP8266_SendATCommand(cmd, response, 5000);

    /* 连接MQTT服务器 */
    sprintf(cmd, "AT+CIPSEND=%d\r\n", 33 + strlen(mqtt_username) + strlen(mqtt_password));
    ESP8266_SendATCommand(cmd, response, 1000);
    sprintf(cmd, "CONNECT\n\rclient_id:ESP8266\n\ruser:%s\n\rpassword:%s\n\r\n\r", mqtt_username, mqtt_password);
    ESP8266_SendATCommand(cmd, response, 5000);

    /* 订阅MQTT主题 */
    sprintf(cmd, "AT+CIPSEND=%d\r\n", 10 + strlen(mqtt_topic));
    ESP8266_SendATCommand(cmd, response, 1000);
    sprintf(cmd, "SUBSCRIBE\n\r%d\n\r0\n\r\n\r", strlen(mqtt_topic));
    ESP8266_SendATCommand(cmd, response, 5000);

    return 0;
}

/* 发布MQTT消息 */
void MQTT_Publish(const char* message)
{
    
    
    char cmd[1024];
    char response[1024];

    sprintf(cmd, "AT+CIPSEND=%d\r\n", 8 + strlen(mqtt_topic) + strlen(message));
    ESP8266_SendATCommand(cmd, response, 1000);
    sprintf(cmd, "PUBLISH\n\r%d\n\r%s\n\r\n\r%s\n\r", strlen(mqtt_topic), mqtt_topic, message);
    ESP8266_SendATCommand(cmd, response, 5000);
}

/* 主程序 */
int main(void)
{
    
    
    /* 连接MQTT服务器 */
    if (MQTT_Connect() != 0) {
    
    
        while (1) {
    
    
            /* 连接失败,进入死循环 */
        }
    }

    /* 发布MQTT消息 */
    MQTT_Publish("Hello, MQTT!");

    /* 等待接收MQTT消息 */
    while (1) {
    
    
        /* 读取ESP8266接收缓冲区中的数据 */
        char response[1024];
        int len = ESP8266_SendATCommand("AT+CIPRXGET=2,1024\r\n", response, 1000);
        if (len > 0) {
    
    
            printf("Received data: %.*s\n", len, response);
            /* TODO: 解析并处理MQTT消息 */
        }

        /* 延时一段时间 */
        HAL_Delay(100);
    }

    return 0;
}

El código implementa funciones como conectarse al servidor MQTT, suscribirse a temas y publicar mensajes.

5.3 Código de pantalla OLED

El siguiente es el código para usar STM32F103ZET6 para controlar la pantalla OLED de 0,96 pulgadas con interfaz SPI:

cCopy Code#include "stm32f10x.h"
#include "spi.h" // SPI库头文件

// OLED相关定义
#define OLED_CMD  0 // 命令模式
#define OLED_DATA 1 // 数据模式

#define OLED_ADDR_START 0xB0 // OLED起始地址
#define OLED_PAGE_START 0x00 // 第一个页的地址
#define OLED_COLUMN_START 0x10 // 列起始地址

// 初始化OLED显示屏
void OLED_Init(void)
{
    
    
  // 初始化SPI接口
  SPI_Init();
  
  Delay(100);
  
  // 向OLED发送初始化命令和数据
  
  // 模式设置:设置4位数据线,扩展指令集
  OLED_WriteCmd(OLED_CMD, 0x21);
  // 对比度设置,默认为0x7F
  OLED_WriteCmd(OLED_CMD, 0x81);
  OLED_WriteCmd(OLED_CMD, 0x7F);
  // 设置显示模式:正常显示
  OLED_WriteCmd(OLED_CMD, 0xA4);
  // 设置偏置电压
  OLED_WriteCmd(OLED_CMD, 0xA8);
  OLED_WriteCmd(OLED_CMD, 0x3F);
  // 设置显示方向:从左到右,从上到下
  OLED_WriteCmd(OLED_CMD, 0xC8);
  // 设置扫描地段,从COM0到COM[N-1]
  OLED_WriteCmd(OLED_CMD, 0xDA);
  OLED_WriteCmd(OLED_CMD, 0x12);
  // 设置时钟分频因子
  OLED_WriteCmd(OLED_CMD, 0xD5);
  OLED_WriteCmd(OLED_CMD, 0x80);
  // 设置显示开启
  OLED_WriteCmd(OLED_CMD, 0xAF);
}

// 写入命令或数据到OLED显示屏
void OLED_WriteCmd(uint8_t mode, uint8_t cmd)
{
    
    
  if (mode == OLED_CMD) {
    
    
    GPIO_ResetBits(GPIOA, GPIO_Pin_4); // 将DC引脚置低,进入命令模式
  } else {
    
    
    GPIO_SetBits(GPIOA, GPIO_Pin_4); // 将DC引脚置高,进入数据模式
  }
  
  GPIO_ResetBits(GPIOA, GPIO_Pin_3); // 将CS引脚置低,选中OLED
  
  SPI_SendData(cmd); // 发送命令或数据
  
  while (SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE) == RESET);
  
  GPIO_SetBits(GPIOA, GPIO_Pin_3); // 将CS引脚置高,释放OLED
}

// 在指定位置显示一个数字
void OLED_ShowNumber(uint8_t x, uint8_t y, uint32_t number)
{
    
    
  char str[11]; // 最大显示10位数字
  
  sprintf(str, "%lu", number); // 将数字转换为字符串
  
  OLED_ShowString(x, y, str); // 在指定位置显示字符串
}

// 在指定位置显示一个字符串
void OLED_ShowString(uint8_t x, uint8_t y, char *str)
{
    
    
  uint8_t i = 0;
  
  while (str[i] != '\0') {
    
    
    OLED_ShowChar(x, y, str[i]); // 在指定位置显示一个字符
    x += 6; // 移动到下一列
    i++;
  }
}

// 在指定位置显示一个字符
void OLED_ShowChar(uint8_t x, uint8_t y, char ch)
{
    
    
  uint8_t i, j;
  
  for (i = 0; i < 8; i++) {
    
     // 8行
    OLED_WriteCmd(OLED_CMD, OLED_ADDR_START + y); // 指定页
    OLED_WriteCmd(OLED_CMD, OLED_COLUMN_START + x); // 指定列
    
    for (j = 0; j < 6; j++) {
    
     // 6列
      OLED_WriteCmd(OLED_DATA, ASCII[ch - 32][j]);
    }
    
    y++;
  }
}

En este código, se definen constantes y funciones relacionadas con OLED, incluido el modo de comando y el modo de datos de OLED, la dirección de inicio de OLED, la dirección de inicio de página, la dirección de inicio de columna, etc. El proceso de inicialización OLED se lleva a cabo en OLED_Init()la función, incluido el envío de los comandos y datos de inicialización correspondientes a la pantalla OLED. En OLED_WriteCmd()la función, el pin DC se establece en el estado correspondiente según el modo de comando entrante (OLED_CMD) o el modo de datos (OLED_DATA), y el comando o los datos se envían a la pantalla OLED a través de la interfaz SPI. En OLED_ShowNumber()las funciones OLED_ShowString()y , las instrucciones y datos correspondientes se envían OLED_ShowChar()llamando para mostrar números, cadenas y caracteres en la posición especificada.OLED_WriteCmd()

5.4 Código de control del motor paso a paso

El siguiente es el código del motor paso a paso STM32F103+28BYJ40 para implementar el control de ángulo y el control de avance y retroceso. La biblioteca STM32F1xx_HAL se utiliza para controlar el puerto GPIO y el temporizador para lograr un control de ángulo preciso y un control de avance y retroceso.

#include "stm32f1xx_hal.h"
#include <stdio.h>

/* 定义步进电机的4个控制引脚 */
#define IN1_Pin GPIO_PIN_0
#define IN1_GPIO_Port GPIOA
#define IN2_Pin GPIO_PIN_1
#define IN2_GPIO_Port GPIOA
#define IN3_Pin GPIO_PIN_2
#define IN3_GPIO_Port GPIOA
#define IN4_Pin GPIO_PIN_3
#define IN4_GPIO_Port GPIOA

/* 定义步进电机的步数数组 */
uint8_t step_sequence[8] = {
    
    0b0001, 0b0011, 0b0010, 0b0110, 0b0100, 0b1100, 0b1000, 0b1001};

/* 定义当前步进电机的位置和方向 */
int current_step = 0;  // 当前步数
int direction = 1;  // 1为顺时针,-1为逆时针

/* 定义角度控制参数 */
float angle_per_step = 1.8;  // 每步角度
int total_steps = 2048;  // 总步数

/* 定义定时器中断处理函数,控制步进电机的运动 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    
    
    /* 更新步进电机的位置 */
    current_step += direction;
    if (current_step >= total_steps) {
    
    
        current_step = 0;
    } else if (current_step < 0) {
    
    
        current_step = total_steps - 1;
    }

    /* 控制步进电机的旋转方向 */
    int sequence_index = current_step % 8;
    GPIO_PinState in1_state = (step_sequence[sequence_index] & 0b0001) ? GPIO_PIN_SET : GPIO_PIN_RESET;
    GPIO_PinState in2_state = (step_sequence[sequence_index] & 0b0010) ? GPIO_PIN_SET : GPIO_PIN_RESET;
    GPIO_PinState in3_state = (step_sequence[sequence_index] & 0b0100) ? GPIO_PIN_SET : GPIO_PIN_RESET;
    GPIO_PinState in4_state = (step_sequence[sequence_index] & 0b1000) ? GPIO_PIN_SET : GPIO_PIN_RESET;
    HAL_GPIO_WritePin(IN1_GPIO_Port, IN1_Pin, in1_state);
    HAL_GPIO_WritePin(IN2_GPIO_Port, IN2_Pin, in2_state);
    HAL_GPIO_WritePin(IN3_GPIO_Port, IN3_Pin, in3_state);
    HAL_GPIO_WritePin(IN4_GPIO_Port, IN4_Pin, in4_state);
}

/* 初始化定时器 */
void TIM_Init(void)
{
    
    
    TIM_HandleTypeDef htim;

    /* 使能定时器时钟 */
    __HAL_RCC_TIM2_CLK_ENABLE();

    /* 配置定时器 */
    htim.Instance = TIM2;
    htim.Init.Prescaler = 7199;  // 72MHz / 7200 = 10kHz
    htim.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim.Init.Period = 99;  // 10kHz / 100 = 100Hz
    htim.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    HAL_TIM_Base_Init(&htim);

    /* 启动定时器 */
    HAL_TIM_Base_Start_IT(&htim);
}

/* 控制步进电机旋转 */
void StepMotor_Rotate(int angle, int clockwise)
{
    
    
    /* 计算需要旋转的步数和方向 */
    int steps = angle / angle_per_step;
    direction = clockwise ? 1 : -1;

    /* 控制步进电机旋转 */
    for (int i = 0; i < steps; i++) {
    
    
        HAL_Delay(1);
    }
}

/* 主程序 */
int main(void)
{
    
    
    /* 初始化定时器 */
    TIM_Init();

    /* 控制步进电机旋转 */
    StepMotor_Rotate(90, 1);  // 顺时针旋转90度
    StepMotor_Rotate(180, 0);  // 逆时针旋转180度

    while (1) {
    
    
        /* 循环等待 */
    }

    return 0;
}

IN1_Pin a IN4_Pin son los pines de control del motor paso a paso, step_sequence es la matriz de pasos del motor paso a paso, current_step es el número actual de pasos, dirección es la dirección de rotación, ángulo_por_paso es el ángulo de cada paso y total_steps es el total numero de pasos. En la función HAL_TIM_PeriodElapsedCallback, la dirección de rotación del motor paso a paso se controla en función del número actual de pasos y la dirección de rotación, y la función HAL_GPIO_WritePin se usa para controlar el estado de salida del pin. En la función StepMotor_Rotate, el número y la dirección de rotación se calculan en función del ángulo entrante y la dirección de rotación, y luego la rotación del motor paso a paso se controla mediante un retardo de bucle. Al llamar a la función StepMotor_Rotate, se puede realizar el control del ángulo y el control de avance y retroceso del motor paso a paso.

6. Resumen

El sistema de control de acceso inteligente es una solución de control de acceso segura y conveniente basada en el controlador principal STM32F103 y la plataforma Huawei Cloud IoT. Al integrar una variedad de módulos de hardware y tecnología de comunicación de red, el sistema implementa una variedad de métodos de desbloqueo (ingreso de contraseña, deslizamiento de tarjetas RFID, desbloqueo remoto de aplicaciones de teléfonos móviles) y tiene funciones de monitoreo remoto y envío de mensajes.

En términos de selección de hardware, el módulo de deslizamiento de tarjetas seleccionó RFID-RC522, utilizando un motor paso a paso 28BYJ-48 como controlador de cerradura de puerta, un teclado de matriz capacitiva 4x4 para ingresar contraseña y una pantalla OLED de 0,96 pulgadas con interfaz SPI para cerradura de puerta. Información de estado Pantalla y el módulo ESP8266-WIFI implementa la función de red. Además, se utiliza un módulo de inducción magnética infrarroja para detectar el estado de la puerta.

El diseño de todo el sistema hace que el control de acceso sea más seguro y confiable. Los usuarios pueden desbloquear la puerta de diversas formas, como ingresar contraseñas, deslizar tarjetas y desbloquear de forma remota. Al mismo tiempo, el sistema puede monitorear el estado de la cerradura de la puerta en tiempo real y enviar recordatorios de notificación al usuario a través de la aplicación móvil cuando la cerradura de la puerta se abre o cierra, mejorando la seguridad y conveniencia del usuario.

El sistema de control de acceso inteligente basado en STM32F103 y la plataforma Huawei Cloud IoT aprovecha al máximo las ventajas de la tecnología moderna para proporcionar soluciones de control de acceso seguras y convenientes. Además de las funciones básicas de control de acceso, el sistema también tiene capacidades de control remoto y monitoreo en tiempo real, brindando a los usuarios una experiencia de control de acceso más inteligente y satisfaciendo las necesidades de las personas modernas de una vida segura y conveniente.

Supongo que te gusta

Origin blog.csdn.net/xiaolong1126626497/article/details/133203624
Recomendado
Clasificación