Inhoudsopgave:

STONE LCD met Smart Home - Ajarnpa
STONE LCD met Smart Home - Ajarnpa
Anonim
STEEN LCD met Smart Home
STEEN LCD met Smart Home

Vandaag heb ik STONE's seriële poortstationdisplay, dat kan communiceren via de seriële poort van MCU, en het UI-logica-ontwerp van dit scherm kan rechtstreeks worden ontworpen met behulp van de VGUS-software op de officiële website van STONE, wat erg handig voor ons is. Dus ik ben van plan om er een eenvoudige apparaatcontroller van te maken, inclusief de bediening van verschillende lichten (woonkamer, keuken, kinderkamer, badkamer). Tegelijkertijd kunnen binnen- en buitentemperatuur, vochtigheid en luchtkwaliteit worden verzameld. Dit is slechts een eenvoudige demo en u kunt secundaire ontwikkeling uitvoeren via de code die ik heb verstrekt. Een eenvoudige tutorial over het STONE-scherm kan naar de website gaan:

De website heeft een verscheidenheid aan informatie over de model-, gebruikers- en ontwerpdocumentatie, evenals videozelfstudies. Ik zal hier niet te veel in detail treden.

Stap 1: UI-interfaceontwerp

Ontwerp van gebruikersinterface
Ontwerp van gebruikersinterface
Ontwerp van gebruikersinterface
Ontwerp van gebruikersinterface
Ontwerp van gebruikersinterface
Ontwerp van gebruikersinterface
Ontwerp van gebruikersinterface
Ontwerp van gebruikersinterface

Photoshop

Ik ontwierp de volgende twee UI-pagina's met photoshop:

Dit project heeft in totaal de bovenstaande twee pagina's. "Licht" en "Sensor" in de rechterbovenhoek zijn de schakelknoppen van deze twee pagina's.

Op de pagina "Licht" kun je allerlei soorten lampen in je huis bedienen. Op de pagina "Sensor" kunt u de waarden controleren die door verschillende sensoren worden gedetecteerd.

Na het ontwerp van de bovenstaande twee pagina's, kunnen we een logisch knopontwerp uitvoeren via de STONE TOOL-software op de officiële website van STONE.

Het is vermeldenswaard dat de klokbron die hier voor de tijdweergave wordt gebruikt, de klokbron van het weergavescherm is, niet de MCU-klokbron.

TAB-paginawisseleffect

Er werd geen component voor het wisselen van TAB-pagina's gevonden in de STONE TOOL-software, dus ik dacht aan een andere methode om het effect van het wisselen van TAB-pagina's te bereiken.

Door de observatie die ik geef, kunnen twee UI-afbeeldingen worden gevonden dat de twee afbeeldingen hierboven "Light" en "Sensor" -tekst zijn, het verschil is dat hun pixelgrootte anders is, dus we hoeven alleen de positie van twee pixels in te stellen op de dezelfde tekst, en vervolgens via de linkerbovenhoek van de tijd en datum ter referentie, kunt u de TAB bereiken om van effect te wisselen.

Knop logica

Neem als voorbeeld de knop "Woonkamer". Wanneer de gebruiker op deze knop drukt, zal het STONE-scherm voor de seriële poort de bijbehorende protocolinstructies via de seriële poort verzenden. Na ontvangst van deze instructie zal de MCU van de gebruiker het protocol ontleden om de schakelstatus van de op de MCU aangesloten lampen te regelen.

Sensor acquisitie

Neem bijvoorbeeld "luchtkwaliteit": als u de luchtkwaliteit binnenshuis wilt krijgen, moeten we een MCU hebben om de luchtkwaliteit te verzamelen, een luchtkwaliteitssensor wanneer het MCU-nummer wordt verzameld via een algoritme dat de voor- en nadelen van luchtkwaliteit vergelijkt, en dan de MCU verzonden via een seriële poort om het opslaggebied van "Goed" of "Slecht" weer te geven, om de weergave-inhoud van "Tekstvariabele 0" te wijzigen, en dan kan de gebruiker intuïtief de voordelen van de kwaliteitscontrole zien. Deze worden verderop in de MCU-code uitgelegd.

Stap 2: MCU-communicatie

MCU-communicatie
MCU-communicatie
MCU-communicatie
MCU-communicatie
MCU-communicatie
MCU-communicatie
MCU-communicatie
MCU-communicatie

STM32 is de MCU waar iedereen bekend mee is, en het is een veelgebruikt MCU-model in het buitenland. Daarom is het specifieke model van STM32 MCU dat ik in dit project heb gebruikt, STM32F103RCT6.

Er zijn veel series STM32, die aan verschillende eisen van de markt kunnen voldoen. De kernel kan worden onderverdeeld in cortex-m0, M3, M4 en M7, en elke kernel kan worden onderverdeeld in mainstream, hoge prestaties en laag stroomverbruik.

Puur vanuit het perspectief van leren, kun je F1 en F4 kiezen, F1 vertegenwoordigt het basistype, gebaseerd op de cortex-m3-kernel, de hoofdfrequentie is 72 MHZ, F4 vertegenwoordigt de hoge prestaties, gebaseerd op de cortex-m4-kernel, de belangrijkste frequentie is 180M.

Wat betreft F1, F4 (429-serie en hoger), afgezien van verschillende kernels en verbetering van de hoofdfrequentie, is het voor de hand liggende kenmerk van de upgrade de LCD-controller en camera-interface, ondersteuning voor SDRAM, dit verschil krijgt prioriteit bij de projectselectie. Vanuit het perspectief van universitair onderwijs en het eerste leerproces van gebruikers is de F1-serie echter nog steeds de eerste keuze. Momenteel heeft de STM32 van de F1-serie de grootste hoeveelheid materialen en producten op de markt.

Over de installatie van de STM32 SCM-ontwikkelomgeving en de methode voor het downloaden van programma's, ik zal de introductie niet doen.

GPIO-initialisatie

In dit project hebben we in totaal 4 GPIO's gebruikt, waaronder de PWM-uitgangspin. Laten we eerst kijken naar de initialisatie van drie gewone GPIO-poorten:

Deze functie initialiseert de PB0\PB1\PB2 van STM32F103C8 als de uitgangspin en roept deze op vanuit de hoofdfunctie. Na initialisatie hebben we een logica nodig om de uitvoerstatus, het hoge en het lage niveau van deze GPIO te regelen, dus schreef ik de functie zoals hieronder:

Dit is een functie die u intuïtief kunt begrijpen door de naam van de variabele.

Seriële poort initialisatie

Het initialisatiegedeelte van de seriële poort bevindt zich in uart.c:

Roep vervolgens uart_init aan in de hoofdfunctie om de baudrate van de seriële poort van 115200 te initialiseren. Pinnen gebruiken PA9/PA10

PWM-initialisatie

Specifieke stappen:

1. Stel de RCC-klok in;

2. Stel de GPIO-klok in; De GPIO-modus moet worden ingesteld op GPIO_Model_AF_PP, of op de functie GPIO_PinRemapConfig() als pin opnieuw toewijzen vereist is.

3. Stel relevante registers van TIMx timer in;

4. Stel PWM-gerelateerd register van TIMx-timer in;

A. PWM-modus instellen

B. Inschakelduur instellen (formuleberekening)

C. Stel de uitgangsvergelijkingspolariteit in (eerder geïntroduceerd)

D. Het belangrijkste is dat u de uitvoerstatus van TIMx inschakelt en de PWM-uitvoer van TIMx inschakelt; Nadat de relevante instellingen zijn voltooid, wordt de TIMx-timer ingeschakeld door TIMx_Cmd () om PWM-uitvoer te verkrijgen. Roep dit TIM3_PWM_Init op vanuit de hoofdfunctie.

Stap 3: Logische code schrijven

Logische code schrijven
Logische code schrijven
Logische code schrijven
Logische code schrijven
Logische code schrijven
Logische code schrijven

Adresdefinitie component weergeven

De componenten van het display hebben afzonderlijke adressen en hier heb ik ze allemaal als macrodefinities geschreven: Seriële gegevensontvangst

Kijkend naar informatie over het STONE-display, kunt u zien dat wanneer de knop wordt ingedrukt, de seriële poort op het display protocollen in het juiste formaat verzendt, die de gebruikers-MCU kan ontvangen en ontleden. Wanneer de knop wordt ingedrukt, verzendt de seriële poort op het display negen bytes aan gegevens, inclusief gebruikersgegevens. Seriële gegevensontvangst wordt in Handler geschreven: De ontvangen gegevens worden opgeslagen in de "USART_RX_BUF"-array. In dit project is de ontvangstlengte vast. Wanneer de ontvangende lengte meer dan 9 bytes is, wordt de ontvangende kant beoordeeld.

Controleer de schakeltoestand van de lamp:

In de hoofdfunctie heb ik een logische code geschreven om de schakelstatus van de lamp te regelen: zoals we kunnen zien, bepaalt de code eerst of de seriële poortgegevens worden ontvangen, en wanneer de seriële poortgegevens worden ontvangen, bepaalt welke knop de gebruiker op het weergavescherm drukt. Verschillende knoppen op het display hebben verschillende adressen, die te zien zijn in de STONE TOOL-software: wanneer de gebruiker op de knop "Living Room" drukt, zijn het vierde en vijfde bit van de gegevens die door de seriële poort van het scherm worden verzonden adres van de knop. Aangezien het vierde bit van alle knoppen die hier zijn ingesteld 0x00 is, kunnen we beoordelen op welke knop de gebruiker drukt door de gegevens van het vijfde bit rechtstreeks te beoordelen. Nadat de gebruiker op de knop heeft gedrukt, moeten we de gebruikersgegevens beoordelen die zijn ontvangen wanneer de knop wordt ingedrukt, wat het achtste cijfer is van de gegevens die vanaf het scherm worden verzonden. Daarom maken we de volgende controle: schrijf de knopadresparameter en gebruikersgegevens in de "Light_Contral" -functie om de aan-uit-status van het licht te regelen. Light_Contral-functie-entiteit is als volgt: zoals u kunt zien, als het knopadres "Living Room" is en de gebruikersgegevens "LightOn" zijn, dan is de PB0-pin van de MCU ingesteld op high-level output en is het licht aan. De andere drie knoppen zijn vergelijkbaar, maar ik zal hier niet verder op ingaan.

PWM-uitgang

In de door mij ontworpen gebruikersinterface is er een schuifregelaar die wordt gebruikt om de helderheid van het licht van "Kinderkamer" te regelen. MCU wordt geïmplementeerd door PWM. PWM-uitgangspen is PB5. De code is als volgt: De schuifregelaar is ingesteld op een minimale waarde van 0x00 en een maximale waarde van 0x64. Bij het schuiven verzendt de seriële poort van het scherm ook relevante adressen en gegevens en stelt vervolgens de duty-ratio van de PWM-uitvoer in door de volgende functie aan te roepen:

Stap 4: Sensoracquisitie

Sensor acquisitie
Sensor acquisitie
Sensor acquisitie
Sensor acquisitie
Sensor acquisitie
Sensor acquisitie

Op de pagina van "Sensor" van het weergavescherm zijn er vier Sensorgegevens.

De gegevens hebben ook een opslagadres op het display en we kunnen de echte inhoud wijzigen door eenvoudig gegevens naar deze adressen te schrijven via de seriële poort van de MCU.

Hier heb ik een eenvoudige code-implementatie gemaakt:

De weergavegegevens worden elke 5 seconden bijgewerkt en ik heb alleen een eenvoudige demo geschreven van de relevante sensorverzamelfunctie, omdat ik deze sensoren niet in mijn hand heb.

Bij echte projectontwikkeling kunnen deze sensoren gegevens zijn die zijn verzameld door ADC, of gegevens die zijn verzameld door IIC-, UART- en SPI-communicatie-interfaces. Het enige dat u hoeft te doen, is deze gegevens als de retourwaarde in de bijbehorende functie te schrijven.

Stap 5: Werkelijk bedieningseffect

Aanbevolen: