Inhaltsverzeichnis:

STONE LCD mit Smart Home - Gunook
STONE LCD mit Smart Home - Gunook

Video: STONE LCD mit Smart Home - Gunook

Video: STONE LCD mit Smart Home - Gunook
Video: LVGL Demo on ESP32-S3 4.3" TFT & ESP32 2.8" TFT 2024, Juli
Anonim
STONE LCD mit Smart Home
STONE LCD mit Smart Home

Heute habe ich das Laufwerksdisplay für den seriellen Anschluss von STONE erhalten, das über den seriellen Anschluss der MCU kommunizieren kann, und das UI-Logikdesign dieses Displays kann direkt mithilfe der VGUS-Software auf der offiziellen Website von STONE entworfen werden, was für uns sehr praktisch ist. Ich plane also, daraus eine einfache Gerätesteuerung zu machen, die die Steuerung verschiedener Lichter (Wohnzimmer, Küche, Kinderzimmer, Bad) beinhaltet. Gleichzeitig können Innen- und Außentemperatur, Luftfeuchtigkeit und Luftqualität erfasst werden. Dies ist nur eine einfache Demo, und Sie können mit dem von mir bereitgestellten Code eine sekundäre Entwicklung durchführen. Einige grundlegende Tutorials zum STONE-Bildschirm finden Sie auf der Website:

Die Website bietet eine Vielzahl von Informationen über die Modell-, Benutzer- und Konstruktionsdokumentation sowie Video-Tutorials. Ich werde hier nicht zu sehr ins Detail gehen.

Schritt 1: Design der Benutzeroberfläche

UI-Schnittstellendesign
UI-Schnittstellendesign
UI-Schnittstellendesign
UI-Schnittstellendesign
UI-Schnittstellendesign
UI-Schnittstellendesign
UI-Schnittstellendesign
UI-Schnittstellendesign

Photoshop

Ich habe die folgenden beiden UI-Seiten mit Photoshop entworfen:

Dieses Projekt hat die oben genannten zwei Seiten insgesamt. "Licht" und "Sensor" in der oberen rechten Ecke sind die Schaltknöpfe dieser beiden Seiten.

Auf der Seite "Licht" können Sie alle Arten von Licht in Ihrem Zuhause steuern. Auf der Seite „Sensor“können Sie die von verschiedenen Sensoren erfassten Werte überprüfen.

Nach dem Design der beiden obigen Seiten können wir mit der STONE TOOL-Software, die auf der offiziellen Website von STONE bereitgestellt wird, ein Schaltflächenlogik-Design durchführen.

Es ist erwähnenswert, dass die hier für die Zeitanzeige verwendete Taktquelle die Taktquelle des Anzeigebildschirms ist, nicht die MCU-Taktquelle.

Wechseleffekt der TAB-Seite

In der STONE TOOL-Software wurde keine Komponente zum Umschalten von TAB-Seiten gefunden, daher dachte ich an eine andere Methode, um den TAB-Seitenwechseleffekt zu erzielen.

Durch die Beobachtung, die ich zwei UI-Bilder bereitstelle, kann festgestellt werden, dass die beiden obigen Bilder "Light"- und "Sensor"-Text sind. Der Unterschied besteht darin, dass ihre Pixelgröße unterschiedlich ist gleichen Text, und dann durch die obere linke Ecke der Uhrzeit und des Datums als Referenz können Sie die TAB-Taste zum Wechseln des Effekts erreichen.

Tastenlogik

Nehmen Sie als Beispiel die Schaltfläche "Wohnzimmer". Wenn der Benutzer diese Taste drückt, sendet der Anzeigebildschirm des seriellen STONE-Ports entsprechende Protokollanweisungen über den seriellen Port. Nach Erhalt dieser Anweisung analysiert die MCU des Benutzers das Protokoll, um den Schaltzustand der mit der MCU verbundenen Leuchten zu steuern.

Sensorerfassung

Nehmen Sie zum Beispiel "Luftqualität": Wenn Sie die Raumluftqualität erhalten möchten, müssen wir eine MCU haben, um die Luftqualität zu sammeln, einen Luftqualitätssensor, wenn die MCU-Zahl durch einen Algorithmus erfasst wird, der die Vor- und Nachteile der Luftqualität vergleicht, und dann die MCU über eine serielle Schnittstelle gesendet, um den Speicherbereich von "Gut" oder "Schlecht" anzuzeigen, um den Anzeigeinhalt von "Textvariable0" zu ändern, und dann kann der Benutzer intuitiv die Vorzüge der Qualitätskontrolle erkennen. Diese werden später im MCU-Code erläutert.

Schritt 2: MCU-Kommunikation

MCU-Kommunikation
MCU-Kommunikation
MCU-Kommunikation
MCU-Kommunikation
MCU-Kommunikation
MCU-Kommunikation
MCU-Kommunikation
MCU-Kommunikation

STM32 ist die MCU, mit der jeder vertraut ist, und es ist ein international verbreitetes MCU-Modell. Daher ist das spezifische Modell der STM32-MCU, das ich in diesem Projekt verwendet habe, STM32F103RCT6.

Es gibt viele Serien von STM32, die verschiedene Anforderungen des Marktes erfüllen können. Der Kernel kann in Cortex-m0, M3, M4 und M7 unterteilt werden, und jeder Kernel kann in Mainstream, hohe Leistung und geringen Stromverbrauch unterteilt werden.

Rein aus der Perspektive des Lernens können Sie F1 und F4 wählen, F1 steht für den Basistyp, basierend auf dem Cortex-m3-Kernel, die Hauptfrequenz beträgt 72 MHz, F4 steht für die hohe Leistung, basierend auf dem Cortex-m4-Kernel, dem Main Frequenz ist 180M.

Was F1, F4 (Serie 429 und höher) betrifft, ist neben verschiedenen Kerneln und der Verbesserung der Hauptfrequenz das offensichtliche Merkmal des Upgrades der LCD-Controller und die Kameraschnittstelle, die Unterstützung für SDRAM, dieser Unterschied wird bei der Projektauswahl Priorität eingeräumt. Aus Sicht der universitären Lehre und der Erstausbildung der Nutzer ist die F1-Serie jedoch nach wie vor die erste Wahl. Derzeit verfügt der STM32 der F1-Serie über die größte Menge an Materialien und Produkten auf dem Markt.

Über die Installation der STM32 SCM-Entwicklungsumgebung und die Methode zum Herunterladen von Programmen werde ich keine Einführung geben.

GPIO-Initialisierung

In diesem Projekt haben wir insgesamt 4 GPIO verwendet, von denen einer der PWM-Ausgangspin ist. Schauen wir uns zunächst die Initialisierung von drei gewöhnlichen GPIO-Ports an:

Diese Funktion initialisiert den PB0\PB1\PB2 von STM32F103C8 als Ausgangspin und ruft ihn von der Hauptfunktion aus auf. Nach der Initialisierung benötigen wir eine Logik zur Steuerung des Ausgangszustands, des High- und Low-Pegels dieses GPIO, also habe ich die Funktion wie folgt geschrieben:

Dies ist eine Funktion, die Sie anhand des Variablennamens intuitiv verstehen können.

Initialisierung der seriellen Schnittstelle

Der Initialisierungsteil des seriellen Ports befindet sich in uart.c:

Rufen Sie dann in der Hauptfunktion uart_init auf, um die Baudrate der seriellen Schnittstelle von 115200 zu initialisieren. Pins verwenden PA9/PA10

PWM-Initialisierung

Spezifische Schritte:

1. RCC-Uhr einstellen;

2. GPIO-Takt einstellen; Der GPIO-Modus sollte auf GPIO_Model_AF_PP oder auf die Funktion GPIO_PinRemapConfig() eingestellt werden, wenn eine Pin-Neuzuordnung erforderlich ist.

3. Stellen Sie die relevanten Register des TIMx-Timers ein;

4. Setzen Sie das PWM-bezogene Register des TIMx-Timers;

A. PWM-Modus einstellen

B. Einschaltdauer einstellen (Formelberechnung)

C. Einstellen der Ausgangsvergleichspolarität (zuvor eingeführt)

D. Am wichtigsten ist, den Ausgangszustand von TIMx zu aktivieren und den PWM-Ausgang von TIMx zu aktivieren; Nachdem die relevanten Einstellungen abgeschlossen sind, wird der TIMx-Timer von TIMx_Cmd () eingeschaltet, um PWM-Ausgang zu erhalten. Rufen Sie diese TIM3_PWM_Init aus der Hauptfunktion auf.

Schritt 3: Schreiben von Logikcode

Schreiben von Logikcode
Schreiben von Logikcode
Schreiben von Logikcode
Schreiben von Logikcode
Schreiben von Logikcode
Schreiben von Logikcode

Definition der Komponentenadresse anzeigen

Die Komponenten des Displays haben separate Adressen, und hier habe ich sie alle als Makrodefinitionen geschrieben: Serieller Datenempfang

Wenn Sie sich die Informationen über das STONE-Display ansehen, können Sie sehen, dass beim Drücken der Taste die serielle Schnittstelle des Displays Protokolle im entsprechenden Format sendet, die die Benutzer-MCU empfangen und analysieren kann. Wenn die Taste gedrückt wird, sendet die serielle Schnittstelle des Displays neun Bytes an Daten, einschließlich Benutzerdaten. Serieller Datenempfang wird in Handler geschrieben: Die empfangenen Daten werden im Array "USART_RX_BUF" gespeichert. In diesem Projekt ist die Aufnahmelänge festgelegt. Wenn die Empfangslänge mehr als 9 Byte beträgt, wird das Empfangsende beurteilt.

Kontrollieren Sie den Schaltzustand der Lampe

In der Hauptfunktion habe ich einen Logikcode geschrieben, um den Schaltzustand der Lampe zu steuern: Wie wir sehen können, bestimmt der Code zuerst, ob die Daten der seriellen Schnittstelle empfangen werden, und wenn die Daten der seriellen Schnittstelle empfangen werden, bestimmt sie, welche Schaltfläche der Benutzer hat drückt auf den Bildschirm. Verschiedene Tasten auf dem Display haben unterschiedliche Adressen, die in der STONE TOOL-Software ersichtlich sind: Wenn der Benutzer die Taste "Wohnzimmer" drückt, sind das vierte und fünfte Bit der von der seriellen Schnittstelle des Bildschirms gesendeten Daten die Adresse der Schaltfläche. Da das vierte Bit aller hier eingestellten Schaltflächen 0x00 ist, können wir beurteilen, welche Schaltfläche der Benutzer drückt, indem wir direkt die Daten des fünften Bits beurteilen. Nachdem wir die vom Benutzer gedrückte Taste erhalten haben, müssen wir die beim Drücken der Taste empfangenen Benutzerdaten beurteilen, die die achte Stelle der vom Anzeigebildschirm gesendeten Daten sind. Daher führen wir folgende Steuerung durch: Schreiben Sie den Parameter der Tastenadresse und die Benutzerdaten in die Funktion "Light_Contral", um den Ein-Aus-Zustand des Lichts zu steuern. Die Funktionseinheit Light_Contral ist wie folgt: Wie Sie sehen können, ist der PB0-Pin der MCU auf High-Level-Ausgang eingestellt, wenn die Tastenadresse "Wohnzimmer" und die Benutzerdaten "LightOn" sind, und das Licht ist an. Die anderen drei Tasten sind ähnlich, aber ich werde hier nicht weitermachen.

PWM-Ausgang

In der von mir gestalteten Benutzeroberfläche gibt es einen Schieberegler, mit dem die Helligkeit des Lichts von "Kinderzimmer" gesteuert wird. MCU wird durch PWM implementiert. PWM-Ausgangspin ist PB5. Der Code lautet wie folgt: Der Schieberegler ist auf einen Minimalwert von 0x00 und einen Maximalwert von 0x64 eingestellt. Beim Schieben sendet der serielle Port des Bildschirms auch relevante Adressen und Daten und stellt dann das Tastverhältnis des PWM-Ausgangs durch Aufrufen der folgenden Funktion ein:

Schritt 4: Sensorerfassung

Sensorerfassung
Sensorerfassung
Sensorerfassung
Sensorerfassung
Sensorerfassung
Sensorerfassung

Auf der Seite "Sensor" des Anzeigebildschirms gibt es vier Sensordaten.

Die Daten haben auch eine Speicheradresse im Display, und wir können den tatsächlichen Inhalt ändern, indem wir einfach Daten über den seriellen Port der MCU an diese Adressen schreiben.

Hier habe ich eine einfache Codeimplementierung gemacht:

Die Anzeigedaten werden alle 5 Sekunden aktualisiert, und ich habe nur eine einfache Demo der entsprechenden Sensorsammelfunktion geschrieben, da ich diese Sensoren nicht in der Hand habe.

In der realen Projektentwicklung können diese Sensoren Daten sein, die von ADC gesammelt werden, oder Daten, die von IIC-, UART- und SPI-Kommunikationsschnittstellen gesammelt werden. Diese Daten müssen Sie lediglich als Rückgabewert in die entsprechende Funktion schreiben.

Schritt 5: Tatsächlicher Betriebseffekt

Empfohlen: