INHOUDSOPGAWE:

STONE LCD With Smart Home: 5 stappe
STONE LCD With Smart Home: 5 stappe

Video: STONE LCD With Smart Home: 5 stappe

Video: STONE LCD With Smart Home: 5 stappe
Video: Быстрая укладка плитки на стены в санузле. ПЕРЕДЕЛКА ХРУЩЕВКИ от А до Я #27 2024, November
Anonim
STONE LCD met slim huis
STONE LCD met slim huis

Vandag het ek die seriële poortaandrywing van STONE gekry, wat via die seriële poort van MCU kan kommunikeer, en die UI -logika -ontwerp van hierdie skerm kan direk ontwerp word met behulp van die VGUS -sagteware wat op die amptelike webwerf van STONE verskyn, wat ons baie gerieflik vind. Ek beplan dus om dit te gebruik om 'n eenvoudige apparaatbeheerder te maak, wat die beheer van verskillende ligte (woonkamer, kombuis, kinderkamer, badkamer) insluit. Terselfdertyd kan binne- en buitentemperatuur, humiditeit en luggehalte versamel word. Dit is slegs 'n eenvoudige demo, en u kan sekondêre ontwikkeling uitvoer deur middel van die kode wat ek verskaf het. 'N Basiese handleiding oor die STONE -skerm kan na die webwerf:

Die webwerf bevat 'n verskeidenheid inligting oor die model-, gebruikers- en ontwerpdokumentasie, sowel as video -tutoriale. Ek sal nie hier te veel besonderhede uitvoer nie.

Stap 1: UI -koppelvlakontwerp

UI -koppelvlakontwerp
UI -koppelvlakontwerp
UI -koppelvlakontwerp
UI -koppelvlakontwerp
UI -koppelvlakontwerp
UI -koppelvlakontwerp
UI -koppelvlakontwerp
UI -koppelvlakontwerp

Photoshop

Ek het die volgende twee UI -bladsye met Photoshop ontwerp:

Hierdie projek het die bogenoemde twee bladsye in totaal. "Lig" en "Sensor" in die regter boonste hoek is die skakelaars van hierdie twee bladsye.

Op die "Lig" -bladsy kan u alle soorte ligte in u huis beheer. Op die "Sensor" -bladsy kan u die waardes nagaan wat deur verskillende sensors opgespoor word.

Na die ontwerp van bogenoemde twee bladsye, kan ons 'n knoppie -logika ontwerp deur middel van die STONE TOOL -sagteware wat op STONE se amptelike webwerf verskyn.

Dit is opmerklik dat die klokbron wat vir die tydsweergawe hier gebruik word, die klokbron van die skerm is, nie die MCU -klokbron nie.

TAB -bladsy -skakel -effek

In die STONE TOOL -sagteware is geen komponent TAB -bladsywissel gevind nie, so ek het aan 'n ander metode gedink om die TAB -bladsy -skakel -effek te bereik.

Deur die waarneming gee ek twee UI-beelde, kan gevind word dat die twee beelde hierbo 'lig' en 'sensor' is, die verskil is dat hul pixelgrootte anders is, dus ons hoef net die twee-pixel-posisie in te stel dieselfde teks, en dan deur die linker boonste hoek van die tyd en datum vir verwysing, kan u die TAB bereik om die effek oor te skakel.

Knoppie logika

Neem die 'Living Room' knoppie as 'n voorbeeld. As die gebruiker op hierdie knoppie druk, stuur die STONE -seriële poortskerm die ooreenstemmende protokolinstruksies deur die seriële poort. Na ontvangs van hierdie instruksie, sal die gebruiker se MCU die protokol ontleed om die skakelstatus van die ligte wat met die MCU verbind is, te beheer.

Sensorverkryging

Neem byvoorbeeld 'luggehalte': as u die binnenshuise luggehalte wil behaal, moet ons 'n MCU hê om luggehalte, lugkwaliteitssensor te versamel wanneer die MCU numeries versamel word deur algoritme wat die voor- en nadele van luggehalte vergelyk, en dan die MCU gestuur via 'n seriële poort om die stoorarea van "Goed" of "Sleg" te vertoon, om die inhoud van die "Teks veranderlike0" te verander, en dan kan die gebruiker intuïtief die meriete van die kwaliteitskontrole sien. Dit word later in die MCU -kode verduidelik.

Stap 2: MCU -kommunikasie

MCU Kommunikasie
MCU Kommunikasie
MCU Kommunikasie
MCU Kommunikasie
MCU Kommunikasie
MCU Kommunikasie
MCU Kommunikasie
MCU Kommunikasie

STM32 is die MCU waarmee almal bekend is, en dit is 'n algemene MCU -model in die internasionale. Daarom is die spesifieke model van STM32 MCU wat ek in hierdie projek gebruik het, STM32F103RCT6.

Daar is baie reekse STM32 wat aan verskillende markvereistes kan voldoen. Die pit kan verdeel word in cortex-m0, M3, M4 en M7, en elke pit kan in die hoofstroom, hoë werkverrigting en lae kragverbruik verdeel word.

Suiwer vanuit die leerperspektief, kan u F1 en F4 kies, F1 verteenwoordig die basiese tipe, gebaseer op die korteks-m3-kern, die hooffrekwensie is 72MHZ, F4 verteenwoordig die hoë werkverrigting, gebaseer op die korteks-m4-kern, die belangrikste frekwensie is 180M.

Wat F1, F4 (429 -reeks en hoër) betref, behalwe vir verskillende pitte en die verbetering van die hooffrekwensie, is die voor die hand liggende kenmerk van die opgradering die LCD -beheerder en kamera -koppelvlak, ondersteuning vir SDRAM. Vanuit die oogpunt van universiteitsonderrig en gebruikers se aanvanklike leer, is die F1 -reeks egter steeds die eerste keuse. Tans het die STM32 van die F1 -reeks die grootste hoeveelheid materiaal en produkte in die mark.

Oor die installasie van die STM32 SCM -ontwikkelingsomgewing en die aflaai van programme, sal ek nie die inleiding doen nie.

GPIO -inisialisering

In hierdie projek het ons altesaam 4 GPIO gebruik, waarvan een die PWM -uitvoerpen is. Kom ons kyk eers na die inisialisering van drie gewone GPIO -poorte:

Hierdie funksie initialiseer die PB0 / PB1 / PB2 van STM32F103C8 as die uitvoerpen en noem dit vanaf die hooffunksie. Na die inisialisering moet ons 'n logika hê om die uitvoertoestand, hoë en lae vlak van hierdie GPIO te beheer, so ek skryf die funksie soos hieronder:

Dit is 'n funksie wat u intuïtief kan verstaan onder die naam van die veranderlike.

Serialpoortinisialisering

Die inisialiseringsgedeelte van die seriële poort is in uart.c:

Bel dan uart_init in die hooffunksie om die baud -tempo van die seriële poort van 115200 te initialiseer. Pennetjies gebruik PA9/PA10

PWM -inisialisering

Spesifieke stappe:

1. Stel RCC klok;

2. Stel die GPIO -klok in; Die GPIO -modus moet op GPIO_Model_AF_PP, of op die GPIO_PinRemapConfig () -funksie gestel word as 'n herveranderingspen nodig is.

3. Stel relevante registers van TIMx -timer op;

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

A. Stel die PWM -modus in

B. Stel dienssiklus in (formuleberekening)

C. Stel die uitsetvergelykingspolariteit in (voorheen bekendgestel)

D. Belangriker nog, aktiveer die uitsetstatus van TIMx en aktiveer die PWM -uitset van TIMx; Nadat die relevante instellings voltooi is, word die TIMx -timer deur TIMx_Cmd () aangeskakel om PWM -uitset te verkry. Noem hierdie TIM3_PWM_Init vanuit die hooffunksie.

Stap 3: Skryf van logiese kode

Skryf van logiese kode
Skryf van logiese kode
Skryf van logiese kode
Skryf van logiese kode
Skryf van logiese kode
Skryf van logiese kode

Vertoon komponent adres definisie

Die komponente van die skerm het aparte adresse, en hier het ek dit almal as makro -definisies geskryf: Seriële data -ontvangs

As u na die inligting oor die STONE -skerm kyk, kan u sien dat as u op die knoppie druk, die seriële poort op die skerm protokolle stuur in die toepaslike formaat wat die gebruiker se MCU kan ontvang en ontleed. As u op die knoppie druk, stuur die seriële poort op die skerm nege grepe data, insluitend gebruikersdata. Seriële data -ontvangs word in Handler geskryf: Die ontvangde data word in die "USART_RX_BUF" -reeks gestoor. In hierdie projek word die ontvangslengte vasgestel. As die ontvangslengte meer as 9 grepe is, word die ontvangkant beoordeel.

Beheer die skakelstatus van die lamp

In die hooffunksie het ek 'n logiese kode geskryf om die skakelaarstoestand van die lamp te beheer: Soos ons kan sien, bepaal die kode eers of die seriële poortdata ontvang word, en wanneer die seriële poortdata ontvang word, bepaal die knoppie die gebruiker druk op die skerm. Verskillende knoppies op die skerm het verskillende adresse, wat in die STONE TOOL -sagteware gesien kan word: As die gebruiker op die "Living Room" -knoppie druk, is die vierde en vyfde stukkie van die data wat deur die seriële poort van die skerm vertoon word, die adres van die knoppie. Aangesien die vierde bietjie van al die knoppies hier 0x00 is, kan ons beoordeel watter knoppie die gebruiker druk deur die data van die vyfde bietjie direk te beoordeel. Nadat ons die knoppie gekry het wat deur die gebruiker ingedruk is, moet ons die gebruikersdata beoordeel wat ontvang is wanneer die knoppie ingedruk is, wat die agtste syfer is van die data wat vanaf die skerm vertoon word. Daarom maak ons die volgende beheer: skryf die knoppie-adresparameter en gebruikersdata in die "Light_Contral" -funksie om die aan-af-toestand van die lig te beheer. Die entiteit Light_Contral-funksie is soos volg: As u kan sien, as die knoppie-adres 'Living Room' is en die gebruikersdata 'LightOn' is, dan is die PB0-pen van die MCU ingestel op hoë-uitvoer en die lig is aan. Die ander drie knoppies is soortgelyk, maar ek gaan nie hier verder nie.

PWM uitset

In die UI wat ek ontwerp het, is daar 'n skuifreguleerder wat gebruik word om die helderheid van die lig van die "Kinderkamer" te beheer. MCU word geïmplementeer deur PWM. PWM -uitsetpen is PB5. Die kode is soos volg: Die skuifaansteller is ingestel op 'n minimum waarde van 0x00 en 'n maksimum waarde van 0x64. As u skuif, stuur die seriële poort van die skerm ook relevante adresse en data, en stel dan die diensverhouding van PWM -uitset in deur die volgende funksie te skakel:

Stap 4: Sensorverkryging

Sensorverkryging
Sensorverkryging
Sensorverkryging
Sensorverkryging
Sensorverkryging
Sensorverkryging

Op die bladsy van 'Sensor' op die skerm, is daar vier sensordata.

Die data het ook 'n stooradres op die skerm, en ons kan die werklike inhoud verander deur eenvoudig data na hierdie adresse te skryf deur die seriële poort van die MCU.

Hier het ek 'n eenvoudige kode -implementering gemaak:

Die vertoningsdata word elke 5 sekondes bygewerk, en ek het slegs 'n eenvoudige demonstrasie van die relevante sensorversamelingsfunksie geskryf, want ek het nie hierdie sensors in my hand nie.

In werklike projekontwikkeling kan hierdie sensors data wees wat deur ADC versamel is, of data wat versamel is deur IIC-, UART- en SPI -kommunikasie -koppelvlakke. Al wat u hoef te doen is om hierdie data in die ooreenstemmende funksie as die opbrengswaarde in te skryf.

Stap 5: Werklike werkingseffek

Aanbeveel: