Innholdsfortegnelse:

STONE LCD med Smart Home: 5 trinn
STONE LCD med Smart Home: 5 trinn

Video: STONE LCD med Smart Home: 5 trinn

Video: STONE LCD med Smart Home: 5 trinn
Video: Такие секреты уже все забыли, но их стоит знать! Полезные советы на все случаи жизни! 2024, Juli
Anonim
STONE LCD med smart hjem
STONE LCD med smart hjem

I dag har jeg STONEs serielle portdisplay, som kan kommunisere gjennom MCUs serielle port, og UI -logikkdesignet til denne skjermen kan designes direkte ved å bruke VGUS -programvaren på STONEs offisielle nettsted, noe som er veldig praktisk for oss. Så jeg planlegger å bruke den til å lage en enkel apparatkontroller, som inkluderer kontroll av forskjellige lys (stue, kjøkken, barnerom, bad). Samtidig kan innendørs og utendørs temperatur, fuktighet og luftkvalitet samles inn. Dette er bare en enkel demo, og du kan utføre sekundær utvikling gjennom koden jeg ga. Noen grunnleggende opplæringer om STONE -skjermen kan gå til nettstedet:

Nettstedet har en mengde informasjon om modellen, brukeren og designdokumentasjonen, samt videoopplæringer. Jeg kommer ikke til å gå så mye i detaljer her.

Trinn 1: UI -grensesnittdesign

UI -grensesnittdesign
UI -grensesnittdesign
UI -grensesnittdesign
UI -grensesnittdesign
UI -grensesnittdesign
UI -grensesnittdesign
UI -grensesnittdesign
UI -grensesnittdesign

Photoshop

Jeg designet følgende to brukergrensesnittsider med photoshop:

Dette prosjektet har totalt to sider ovenfor. "Lys" og "Sensor" i øvre høyre hjørne er bryterknappene på disse to sidene.

På siden "Lys" kan du kontrollere alle slags lys i hjemmet ditt. På siden "Sensor" kan du sjekke verdiene som er oppdaget av forskjellige sensorer.

Etter utformingen av de to sidene ovenfor, kan vi utføre et knappelogisk design gjennom STONE TOOL -programvaren på STONEs offisielle nettsted.

Det er verdt å merke seg at klokkekilden som brukes for tidsvisningen her er klokkilden til skjermen, ikke MCU -klokkekilden.

TAB -sidevekslingseffekt

Det ble ikke funnet noen TAB -sidevekslingskomponent i STONE TOOL -programvaren, så jeg tenkte på en annen metode for å oppnå TAB -sidevekslingseffekten.

Gjennom observasjonen gir jeg to UI-bilder kan bli funnet at de to bildene ovenfor er "Lys" og "Sensor" -tekst, forskjellen er at pikselstørrelsen er forskjellig, så vi trenger bare å sette topikslers posisjon er satt til samme tekst, og deretter gjennom det øvre venstre hjørnet av tid og dato for referanse, kan du oppnå TAB for å bytte effekt.

Knappelogikk

Ta "Living Room" -knappen som et eksempel. Når brukeren trykker på denne knappen, vil skjermbildet STONE seriell port vise tilsvarende protokollinstruksjoner gjennom serieporten. Etter å ha mottatt denne instruksjonen, vil brukerens MCU analysere protokollen for å kontrollere koblingstilstanden til lysene som er koblet til MCU.

Sensorinnhenting

Ta for eksempel "luftkvalitet": Hvis du vil få inneklimaet, må vi ha en MCU for å samle luftkvalitet, luftkvalitetssensor når MCU -tallet samles inn gjennom algoritme som sammenligner fordeler og ulemper med luftkvalitet, og deretter MCU sendt via en seriell port for å vise lagringsområdet "Godt" eller "Dårlig", for å endre "Tekstvariabel0" visningsinnhold, og deretter kan brukeren intuitivt se fordelene ved kvalitetskontrollen. Disse forklares senere i MCU -koden.

Trinn 2: MCU -kommunikasjon

MCU -kommunikasjon
MCU -kommunikasjon
MCU -kommunikasjon
MCU -kommunikasjon
MCU -kommunikasjon
MCU -kommunikasjon
MCU -kommunikasjon
MCU -kommunikasjon

STM32 er MCU som alle er kjent med, og det er en vanlig MCU -modell internasjonalt. Derfor er den spesifikke modellen til STM32 MCU jeg brukte i dette prosjektet STM32F103RCT6.

Det er mange serier av STM32, som kan dekke ulike krav fra markedet. Kjernen kan deles inn i cortex-m0, M3, M4 og M7, og hver kjerne kan deles inn i mainstream, høy ytelse og lavt strømforbruk.

Rent fra læringsperspektivet kan du velge F1 og F4, F1 representerer den grunnleggende typen, basert på cortex-m3-kjernen, hovedfrekvensen er 72MHZ, F4 representerer høy ytelse, basert på cortex-m4-kjernen, den viktigste frekvensen er 180M.

Når det gjelder F1, F4 (429 -serien og nyere), bortsett fra forskjellige kjerner og forbedring av hovedfrekvensen, er den åpenbare egenskapen ved oppgraderingen LCD -kontroller og kameragrensesnitt, støtte for SDRAM, denne forskjellen vil bli prioritert i prosjektvalg. Fra perspektivet på universitetsundervisning og brukernes første læring er F1 -serien imidlertid fortsatt førstevalget. For tiden har STM32 i F1 -serien den største mengden materialer og produkter på markedet.

Om installasjonen av STM32 SCM -utviklingsmiljøet og nedlastingsmetoden for programmer, vil jeg ikke gjøre introduksjonen.

GPIO -initialisering

I dette prosjektet brukte vi totalt 4 GPIO, hvorav den ene er PWM -utgangspinnen. La oss først se på initialiseringen av tre vanlige GPIO -porter:

Denne funksjonen initialiserer PB0 / PB1 / PB2 til STM32F103C8 som utgangspinne og kaller den fra hovedfunksjonen. Etter initialisering må vi ha en logikk for å kontrollere utgangstilstanden, høyt og lavt nivå for denne GPIO, så jeg skrev funksjonen som nedenfor:

Dette er en funksjon som du intuitivt kan forstå ved navn på variabelen.

Serialportinitialisering

Initialiseringsdelen av den serielle porten er i uart.c:

Ring deretter uart_init i hovedfunksjonen for å initialisere den serielle portens baudhastighet på 115200. Pins bruker PA9/PA10

PWM -initialisering

Spesifikke trinn:

1. Still inn RCC -klokke;

2. Still inn GPIO -klokken; GPIO -modusen bør settes til GPIO_Model_AF_PP, eller til GPIO_PinRemapConfig () -funksjonen hvis omdreining av pinner er nødvendig.

3. Sett relevante registre over TIMx -timer;

4. Sett PWM -relatert register over TIMx -timer;

A. Still inn PWM -modus

B. Angi driftssyklus (formelberegning)

C. Angi utgangssammenligningspolariteten (tidligere introdusert)

D. Viktigst av alt, aktiver utgangstilstanden for TIMx og aktiver PWM -utgangen til TIMx; Etter at de relevante innstillingene er fullført, slås TIMx -timeren på av TIMx_Cmd () for å få PWM -utgang. Kall dette TIM3_PWM_Init fra hovedfunksjonen.

Trinn 3: Logisk kode skriving

Logisk kode skriving
Logisk kode skriving
Logisk kode skriving
Logisk kode skriving
Logisk kode skriving
Logisk kode skriving

Vis definisjon av komponentadresse

Komponentene i displayet har separate adresser, og her har jeg skrevet dem alle som makrodefinisjoner: Seriell datamottak

Når du ser på informasjon om STONE -skjermen, kan du se at når du trykker på knappen, sender den serielle porten på displayet protokoller i passende format, som brukerens MCU kan motta og analysere. Når du trykker på knappen, sender den serielle porten på displayet ni byte med data, inkludert brukerdata. Seriell datamottak er skrevet i Handler: De mottatte dataene lagres i "USART_RX_BUF" -matrisen. I dette prosjektet er mottakslengden fast. Når mottakslengden er mer enn 9 byte, blir mottakerenden bedømt.

Kontroller lampens koblingstilstand

I hovedfunksjonen skrev jeg en logisk kode for å kontrollere lampens brytertilstand: Som vi kan se, bestemmer koden først om seriell portdata mottas, og når serielle portdata mottas, bestemmer hvilken knapp brukeren trykker på displayet. Ulike knapper på displayet har forskjellige adresser, som kan sees i STONE TOOL -programvaren: Når brukeren trykker på "Living Room" -knappen, er den fjerde og femte biten av dataene som sendes ut av serieporten på skjermen, adressen til knappen. Siden den fjerde biten av alle knappene som er satt her er 0x00, kan vi bedømme hvilken knapp brukeren trykker på ved å direkte bedømme dataene til den femte biten. Etter å ha fått knappen trykket av brukeren, må vi bedømme brukerdataene som mottas når knappen trykkes, som er det åttende sifferet i dataene som sendes fra displayet. Derfor gjør vi følgende kontroll: skriv knappens adresseparameter og brukerdata inn i funksjonen "Light_Contral" for å kontrollere lysets på-av-tilstand. Light_Contral-funksjonsenheten er som følger: Som du kan se, hvis knappeadressen er "Living Room" og brukerdataene er "LightOn", er PB0-pinnen til MCU satt til høy utgang, og lyset er på. De tre andre knappene er like, men jeg vil ikke fortsette her.

PWM -utgang

I brukergrensesnittet designet av meg, er det en glidende regulator, som brukes til å kontrollere lysstyrken til lyset i "Barnerom". MCU er implementert av PWM. PWM -utgangspinnen er PB5. Koden er som følger: Glidestilleren er satt til en minimumsverdi på 0x00 og en maksimalverdi på 0x64. Når du skyver, vil den serielle porten på skjermen også sende relevante adresser og data, og deretter angi pliktforholdet for PWM -utgang ved å ringe til følgende funksjon:

Trinn 4: Sensorinnhenting

Sensorinnkjøp
Sensorinnkjøp
Sensorinnkjøp
Sensorinnkjøp
Sensorinnkjøp
Sensorinnkjøp

På siden til "Sensor" på displayet er det fire sensordata.

Dataene har også en lagringsadresse i displayet, og vi kan endre det virkelige innholdet ved å skrive data til disse adressene gjennom serieporten til MCU.

Her laget jeg en enkel kodeimplementering:

Displaydataene oppdateres hvert 5. sekund, og jeg skrev bare en enkel demo av den relevante sensorsamlingsfunksjonen, fordi jeg ikke har disse sensorene i hånden.

I reell prosjektutvikling kan disse sensorene være data som samles inn av ADC, eller data som samles inn av IIC, UART og SPI kommunikasjonsgrensesnitt. Alt du trenger å gjøre er å skrive disse dataene inn i den tilsvarende funksjonen som returverdien.

Trinn 5: Faktisk driftseffekt

Anbefalt: