Innehållsförteckning:

STONE LCD med Smart Home: 5 steg
STONE LCD med Smart Home: 5 steg

Video: STONE LCD med Smart Home: 5 steg

Video: STONE LCD med Smart Home: 5 steg
Video: STONE LCD display for beauty instrument equipment 2024, Juli
Anonim
STONE LCD med smart hem
STONE LCD med smart hem

Idag fick jag STONE: s seriella portdisplay, som kan kommunicera via MCU: s seriella port, och UI -logikdesignen på den här skärmen kan designas direkt med VGUS -programvaran på STONEs officiella webbplats, vilket är mycket bekvämt för oss. Så jag planerar att använda den för att göra en enkel apparatkontroll, som inkluderar kontroll av olika lampor (vardagsrum, kök, barnrum, badrum). Samtidigt kan inomhus- och utomhustemperatur, luftfuktighet och luftkvalitet samlas in. Detta är bara en enkel demo, och du kan genomföra sekundär utveckling genom koden jag angav. Några grundläggande handledning om STONE -skärmen kan gå till webbplatsen:

Webbplatsen har en mängd information om modellen, användaren och designdokumentationen, samt videohandledning. Jag ska inte gå in på så mycket detaljer här.

Steg 1: UI -gränssnittsdesign

UI -gränssnittsdesign
UI -gränssnittsdesign
UI -gränssnittsdesign
UI -gränssnittsdesign
UI -gränssnittsdesign
UI -gränssnittsdesign
UI -gränssnittsdesign
UI -gränssnittsdesign

Photoshop

Jag designade följande två UI -sidor med Photoshop:

Detta projekt har totalt två sidor ovan. "Ljus" och "Sensor" i det övre högra hörnet är knapparna på dessa två sidor.

På sidan "Ljus" kan du styra alla typer av lampor i ditt hem. På sidan "Sensor" kan du kontrollera de värden som detekteras av olika sensorer.

Efter utformningen av ovanstående två sidor kan vi genomföra en knapplogikdesign genom programvaran STONE TOOL som finns på STONE: s officiella webbplats.

Det är värt att notera att klockkällan som används för tidsvisningen här är klockkällan på skärmen, inte MCU -klockans källa.

TAB -sidväxlingseffekt

Ingen TAB -sidväxlingskomponent hittades i programvaran STONE TOOL, så jag tänkte på en annan metod för att uppnå TAB -sidväxlingseffekten.

Genom observationen ger jag två UI-bilder kan hittas att de två bilderna ovan är "Light" och "Sensor" text, skillnaden är att deras pixelstorlek är annorlunda, så vi behöver bara sätta tvåpixelpositionen är inställd på samma text, och sedan genom det övre vänstra hörnet av tid och datum för referens kan du uppnå TAB för att växla effekt.

Knapplogik

Ta "Vardagsrum" -knappen som ett exempel. När användaren trycker på den här knappen kommer skärmen för STONE -seriell port att skicka motsvarande protokollinstruktioner via serieporten. Efter att ha mottagit denna instruktion kommer användarens MCU att analysera protokollet för att styra kopplingstillståndet för lamporna som är anslutna till MCU.

Sensorförvärv

Ta "luftkvalitet" till exempel: om du vill få inomhusluftkvaliteten måste vi ha en MCU för att samla in luftkvalitet, luftkvalitetssensor när MCU numeriskt samlas in genom algoritm som jämför fördelar och nackdelar med luftkvalitet, och sedan MCU skickas via en seriell port för att visa lagringsområdet för "Bra" eller "Dåligt", för att ändra "Textvariabel0" visningsinnehåll och sedan kan användaren intuitivt se kvalitetsstyrningens fördelar. Dessa förklaras senare i MCU -koden.

Steg 2: MCU -kommunikation

MCU -kommunikation
MCU -kommunikation
MCU -kommunikation
MCU -kommunikation
MCU -kommunikation
MCU -kommunikation
MCU -kommunikation
MCU -kommunikation

STM32 är MCU som alla känner till, och det är en vanlig MCU -modell i internationell. Därför är den specifika modellen för STM32 MCU som jag använde i detta projekt STM32F103RCT6.

Det finns många serier av STM32, som kan möta olika krav på marknaden. Kärnan kan delas in i cortex-m0, M3, M4 och M7, och varje kärna kan delas in i mainstream, hög prestanda och låg strömförbrukning.

Rent utifrån inlärningsperspektivet kan du välja F1 och F4, F1 representerar grundtypen, baserat på cortex-m3-kärnan, huvudfrekvensen är 72MHZ, F4 representerar den höga prestandan, baserat på cortex-m4-kärnan, den huvudsakliga frekvensen är 180M.

När det gäller F1, F4 (429 -serien och senare), bortsett från olika kärnor och förbättring av huvudfrekvensen, är den uppenbara funktionen i uppgraderingen LCD -styrenhet och kameragränssnitt, stöd för SDRAM, denna skillnad kommer att prioriteras vid projektval. Med tanke på universitetsundervisning och användarnas inledande lärande är dock F1 -serien fortfarande förstahandsvalet. För närvarande har STM32 i F1 -serien den största mängden material och produkter på marknaden.

Om installationen av STM32 SCM -utvecklingsmiljö och nedladdning av program kommer jag inte att göra introduktionen.

GPIO -initialisering

I detta projekt använde vi totalt 4 GPIO, varav en är PWM -utgångsstiften. Låt oss först titta på initialiseringen av tre vanliga GPIO -portar:

Denna funktion initierar PB0 / PB1 / PB2 i STM32F103C8 som utgångsstift och anropar den från huvudfunktionen. Efter initialisering måste vi ha en logik för att styra utmatningsläget, hög och låg nivå för denna GPIO, så jag skrev funktionen enligt nedan:

Detta är en funktion som du intuitivt kan förstå med namnet på variabeln.

Serialportinitiering

Initialiseringsdelen av den seriella porten finns i uart.c:

Ring sedan uart_init i huvudfunktionen för att initialisera den seriella portens överföringshastighet på 115200. Stift använder PA9/PA10

PWM -initialisering

Specifika steg:

1. Ställ in RCC -klocka;

2. Ställ in GPIO -klockan; GPIO -läget bör ställas in på GPIO_Model_AF_PP eller på funktionen GPIO_PinRemapConfig () om stiftomformning krävs.

3. Ställ in relevanta register över TIMx -timer;

4. Ställ in PWM -relaterat register över TIMx -timer;

A. Ställ in PWM -läge

B. Ställ in arbetscykel (formelberäkning)

C. Ställ in utgångs jämförelse polaritet (tidigare introducerad)

D. Viktigast av allt, aktivera utgångsläget för TIMx och aktivera PWM -utdata från TIMx; När de relevanta inställningarna är klara slås TIMx -timern på av TIMx_Cmd () för att få PWM -utdata. Kalla detta TIM3_PWM_Init från huvudfunktionen.

Steg 3: Logisk kodskrivning

Logisk kodskrivning
Logisk kodskrivning
Logisk kodskrivning
Logisk kodskrivning
Logisk kodskrivning
Logisk kodskrivning

Visa komponentadressdefinition

Komponenterna i displayen har separata adresser, och här har jag skrivit dem alla som makrodefinitioner: Seriell datamottagning

Om du tittar på information om STONE -skärmen kan du se att när knappen trycks in skickar den seriella porten på displayen protokoll i lämpligt format som användarens MCU kan ta emot och analysera. När du trycker på knappen skickar serieporten på displayen nio byte med data, inklusive användardata. Seriell datamottagning skrivs i Handler: Mottagna data lagras i "USART_RX_BUF" -matrisen. I detta projekt är mottagningslängden fast. När mottagningslängden är mer än 9 byte bedöms mottagaränden.

Kontrollera lampans omkopplingstillstånd

I huvudfunktionen skrev jag en logisk kod för att styra lampans switchläge: Som vi kan se bestämmer koden först om seriell portdata tas emot, och när seriell portdata tas emot, avgör vilken knapp användaren trycker på displayen. Olika knappar på displayen har olika adresser, som kan ses i programvaran STONE TOOL: När användaren trycker på "Living Room" -knappen är de fjärde och femte bitarna av data som skickas ut från serieporten på skärmen skärmen knappens adress. Eftersom den fjärde biten av alla knappar som ställs in här är 0x00 kan vi bedöma vilken knapp användaren trycker på genom att direkt bedöma data för den femte biten. Efter att ha fått knappen tryckt av användaren måste vi bedöma användardata som tas emot när knappen trycks in, vilket är den åttonde siffran i data som skickas från skärmen. Därför gör vi följande kontroll: skriv knappadressparametern och användardata till "Light_Contral" -funktionen för att styra tändningsläget för ljuset. Light_Contral-funktionsenheten är följande: Som du kan se, om knappadressen är "Living Room" och användardata är "LightOn", ställs PB0-stiftet i MCU: n på hög nivå och lampan lyser. De tre andra knapparna är lika, men jag kommer inte att fortsätta här.

PWM -utgång

I användargränssnittet som designats av mig finns en glidregulator som används för att styra ljusstyrkan i "Barnrum". MCU implementeras av PWM. PWM -utgångsstift är PB5. Koden är följande: Glidreglaget är inställt på ett minimivärde på 0x00 och ett maximalt värde på 0x64. Vid glidning kommer den seriella porten på skärmen också att skicka relevanta adresser och data, och sedan ställa in tullförhållandet för PWM -utdata genom att ringa följande funktion:

Steg 4: Sensorförvärv

Sensorförvärv
Sensorförvärv
Sensorförvärv
Sensorförvärv
Sensorförvärv
Sensorförvärv

På sidan "Sensor" på skärmen finns fyra sensordata.

Data har också en lagringsadress i displayen, och vi kan ändra det verkliga innehållet genom att helt enkelt skriva data till dessa adresser via MCU: s serieport.

Här gjorde jag en enkel kodimplementering:

Displaydata uppdateras var 5: e sekund, och jag skrev bara en enkel demo av den relevanta sensorsamlingsfunktionen, eftersom jag inte har dessa sensorer i handen.

I verklig projektutveckling kan dessa sensorer vara data som samlas in av ADC, eller data som samlas in av IIC-, UART- och SPI -kommunikationsgränssnitt. Allt du behöver göra är att skriva in dessa data i motsvarande funktion som returvärdet.

Steg 5: Faktisk driftseffekt

Rekommenderad: