Table des matières:

STONE LCD avec Smart Home : 5 étapes
STONE LCD avec Smart Home : 5 étapes

Vidéo: STONE LCD avec Smart Home : 5 étapes

Vidéo: STONE LCD avec Smart Home : 5 étapes
Vidéo: Smart Home Controller using DWIN HMI LCD Display & ESP32 (Display BME280 Reading & Control Relays) 2024, Juillet
Anonim
Écran LCD en pierre avec maison intelligente
Écran LCD en pierre avec maison intelligente

Aujourd'hui, j'ai l'affichage du lecteur du port série de STONE, qui peut communiquer via le port série du MCU, et la conception logique de l'interface utilisateur de cet affichage peut être conçue directement à l'aide du logiciel VGUS fourni sur le site officiel de STONE, ce qui est très pratique pour nous. J'envisage donc de l'utiliser pour faire un simple contrôleur d'électroménager, qui comprend le contrôle de diverses lumières (salon, cuisine, chambre d'enfants, salle de bain). Dans le même temps, la température intérieure et extérieure, l'humidité et la qualité de l'air peuvent être collectées. Ceci est juste une simple démo, et vous pouvez effectuer un développement secondaire grâce au code que j'ai fourni. Certains tutoriels de base sur l'écran STONE peuvent être consultés sur le site Web:

Le site Web contient diverses informations sur le modèle, l'utilisateur et la documentation de conception, ainsi que des didacticiels vidéo. Je n'entrerai pas trop dans les détails ici.

Étape 1: Conception de l'interface utilisateur

Conception de l'interface utilisateur
Conception de l'interface utilisateur
Conception de l'interface utilisateur
Conception de l'interface utilisateur
Conception de l'interface utilisateur
Conception de l'interface utilisateur
Conception de l'interface utilisateur
Conception de l'interface utilisateur

Photoshop

J'ai conçu les deux pages d'interface utilisateur suivantes avec photoshop:

Ce projet a les deux pages ci-dessus au total. "Lumière" et "Capteur" dans le coin supérieur droit sont les boutons de commutation de ces deux pages.

Dans la page "Lumière", vous pouvez contrôler toutes sortes de lumières dans votre maison. Dans la page "Capteur", vous pouvez vérifier les valeurs détectées par différents capteurs.

Après la conception des deux pages ci-dessus, nous pouvons effectuer une conception de logique de bouton via le logiciel STONE TOOL fourni sur le site officiel de STONE.

Il convient de noter que la source d'horloge utilisée pour l'affichage de l'heure ici est la source d'horloge de l'écran d'affichage, et non la source d'horloge MCU.

Effet de changement de page TAB

Aucun composant de commutation de page TAB n'a été trouvé dans le logiciel STONE TOOL, j'ai donc pensé à une autre méthode pour obtenir l'effet de commutation de page TAB.

Grâce à l'observation que je fournis, deux images d'interface utilisateur peuvent être trouvées que les deux images ci-dessus sont du texte "Lumière" et "Capteur", la différence est que leur taille de pixel est différente, nous n'avons donc qu'à mettre la position de deux pixels sur le même texte, puis dans le coin supérieur gauche de l'heure et de la date pour référence, vous pouvez atteindre le TAB pour changer d'effet.

Logique des boutons

Prenons l'exemple du bouton "Salon". Lorsque l'utilisateur appuie sur ce bouton, l'écran d'affichage du port série STONE enverra les instructions de protocole correspondantes via le port série. Après avoir reçu cette instruction, le MCU de l'utilisateur analysera le protocole pour contrôler l'état de commutation des lumières connectées au MCU.

Acquisition du capteur

Prenez "qualité de l'air" par exemple: si vous voulez obtenir la qualité de l'air intérieur, nous devons avoir un MCU pour collecter la qualité de l'air, un capteur de qualité de l'air lorsque le MCU numérique collecté via un algorithme comparant les avantages et les inconvénients de la qualité de l'air, puis le MCU envoyé via un port série pour afficher la zone de stockage « Bon » ou « Mauvais », pour modifier le contenu de l'affichage « Texte variable0 », puis l'utilisateur peut intuitivement voir les mérites du contrôle qualité. Ceux-ci sont expliqués plus loin dans le code MCU.

Étape 2: Communication MCU

Communication MCU
Communication MCU
Communication MCU
Communication MCU
Communication MCU
Communication MCU
Communication MCU
Communication MCU

STM32 est le MCU que tout le monde connaît, et c'est un modèle de MCU commun à l'international. Par conséquent, le modèle spécifique de STM32 MCU que j'ai utilisé dans ce projet est STM32F103RCT6.

Il existe de nombreuses séries de STM32, qui peuvent répondre aux diverses demandes du marché. Le noyau peut être divisé en cortex-m0, M3, M4 et M7, et chaque noyau peut être divisé en principaux, hautes performances et faible consommation d'énergie.

Du simple point de vue de l'apprentissage, vous pouvez choisir F1 et F4, F1 représente le type de base, basé sur le noyau cortex-m3, la fréquence principale est de 72MHZ, F4 représente la haute performance, basée sur le noyau cortex-m4, le principal la fréquence est de 180M.

En ce qui concerne F1, F4 (série 429 et supérieure), outre les différents noyaux et l'amélioration de la fréquence principale, la caractéristique évidente de la mise à niveau est le contrôleur LCD et l'interface de la caméra, la prise en charge de la SDRAM, cette différence sera prioritaire dans la sélection du projet. Cependant, du point de vue de l'enseignement universitaire et de l'apprentissage initial des utilisateurs, la série F1 reste le premier choix. Actuellement, le STM32 de la série F1 possède la plus grande quantité de matériaux et de produits du marché.

À propos de l'installation de l'environnement de développement STM32 SCM et de la méthode de téléchargement du programme, je ne ferai pas l'introduction.

Initialisation GPIO

Dans ce projet, nous avons utilisé un total de 4 GPIO, dont l'un est la broche de sortie PWM. Regardons d'abord l'initialisation de trois ports GPIO ordinaires:

Cette fonction initialise le PB0\PB1\PB2 de STM32F103C8 en tant que broche de sortie et l'appelle à partir de la fonction principale. Après l'initialisation, nous devons avoir une logique pour contrôler l'état de sortie, le niveau haut et bas de ce GPIO, j'ai donc écrit la fonction comme ci-dessous:

Il s'agit d'une fonction que vous pouvez comprendre intuitivement par le nom de la variable.

Initialisation du port série

La partie initialisation du port série est dans uart.c:

Ensuite, appelez uart_init dans la fonction principale pour initialiser le débit en bauds du port série de 115200. Les broches utilisent PA9/PA10

Initialisation PWM

Étapes spécifiques:

1. Réglez l'horloge RCC;

2. Réglez l'horloge GPIO; le mode GPIO doit être réglé sur GPIO_Model_AF_PP ou sur la fonction GPIO_PinRemapConfig() si un remappage des broches est requis.

3. Définissez les registres pertinents du temporisateur TIMx;

4. Réglez le registre lié au PWM de la minuterie TIMx;

A. Définir le mode PWM

B. Définir le cycle de service (calcul de formule)

C. Définir la polarité de comparaison de sortie (précédemment introduite)

D. Plus important encore, activez l'état de sortie de TIMx et activez la sortie PWM de TIMx; Une fois les réglages appropriés terminés, le temporisateur TIMx est activé par TIMx_Cmd () pour obtenir une sortie PWM. Appelez ce TIM3_PWM_Init à partir de la fonction principale.

Étape 3: écriture de code logique

Écriture de code logique
Écriture de code logique
Écriture de code logique
Écriture de code logique
Écriture de code logique
Écriture de code logique

Afficher la définition de l'adresse du composant

Les composants de l'affichage ont des adresses distinctes, et ici je les ai tous écrits sous forme de définitions de macro: Réception de données série

En regardant les informations sur l'écran STONE, vous pouvez voir que lorsque le bouton est enfoncé, le port série sur l'écran envoie des protocoles au format approprié, que l'utilisateur MCU peut recevoir et analyser. Lorsque le bouton est enfoncé, le port série sur l'écran envoie neuf octets de données, y compris les données utilisateur. La réception des données série est écrite dans Handler: Les données reçues sont stockées dans le tableau "USART_RX_BUF". Dans ce projet, la longueur de réception est fixe. Lorsque la longueur de réception est supérieure à 9 octets, l'extrémité de réception est évaluée.

Contrôler l'état de commutation de la lampe

Dans la fonction principale, j'ai écrit un code logique pour contrôler l'état de commutation de la lampe: comme nous pouvons le voir, le code détermine d'abord si les données du port série sont reçues, et lorsque les données du port série sont reçues, détermine quel bouton l'utilisateur appuie sur l'écran d'affichage. Différents boutons sur l'écran ont des adresses différentes, qui peuvent être vues dans le logiciel STONE TOOL: Lorsque l'utilisateur appuie sur le bouton "Living Room", les quatrième et cinquième bits des données envoyées par le port série de l'écran d'affichage sont les l'adresse du bouton. Étant donné que le quatrième bit de tous les boutons définis ici est 0x00, nous pouvons déterminer sur quel bouton l'utilisateur appuie en jugeant directement les données du cinquième bit. Après avoir obtenu le bouton enfoncé par l'utilisateur, nous devons évaluer les données utilisateur reçues lorsque le bouton est enfoncé, qui est le huitième chiffre des données envoyées depuis l'écran d'affichage. Par conséquent, nous effectuons le contrôle suivant: écrivez le paramètre d'adresse du bouton et les données utilisateur dans la fonction "Light_Contral" pour contrôler l'état allumé-éteint de la lumière. L'entité de fonction Light_Contral est la suivante: comme vous pouvez le voir, si l'adresse du bouton est "Living Room" et les données utilisateur sont "LightOn", alors la broche PB0 du MCU est définie sur la sortie de haut niveau et la lumière est allumée. Les trois autres boutons sont similaires, mais je ne m'étendrai pas ici.

Sortie PWM

Dans l'interface utilisateur conçue par moi, il y a un régulateur coulissant, qui est utilisé pour contrôler la luminosité de la lumière de "Chambre d'enfants". Le MCU est implémenté par la broche de sortie PWM. PWM est PB5. Le code est le suivant: L'ajusteur coulissant est réglé sur une valeur minimale de 0x00 et une valeur maximale de 0x64. Lors du glissement, le port série de l'écran d'affichage enverra également les adresses et les données pertinentes, puis définira le rapport cyclique de la sortie PWM en appelant la fonction suivante:

Étape 4: Acquisition du capteur

Acquisition de capteur
Acquisition de capteur
Acquisition de capteur
Acquisition de capteur
Acquisition de capteur
Acquisition de capteur

Dans la page "Capteur" de l'écran d'affichage, il y a quatre données de capteur.

Les données ont également une adresse de stockage à l'écran, et nous pouvons modifier le contenu réel en écrivant simplement des données à ces adresses via le port série du MCU.

Ici, j'ai fait une implémentation de code simple:

Les données d'affichage sont mises à jour toutes les 5 secondes, et je n'ai écrit qu'une simple démo de la fonction de collecte de capteurs concernée, car je n'ai pas ces capteurs en main.

Dans le développement de projets réels, ces capteurs peuvent être des données collectées par ADC ou des données collectées par les interfaces de communication IIC, UART et SPI. Tout ce que vous avez à faire est d'écrire ces données dans la fonction correspondante en tant que valeur de retour.

Étape 5: Effet réel de l'opération

Conseillé: