Inhoudsopgave:
- Stap 1: UI-interfaceontwerp
- Stap 2: MCU-communicatie
- Stap 3: Logische code schrijven
- Stap 4: Sensoracquisitie
- Stap 5: Werkelijk bedieningseffect
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:14
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
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
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
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
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:
Smart Home van Raspberry Pi: 5 stappen (met afbeeldingen)
Smart Home van Raspberry Pi: er zijn al verschillende producten die uw flat slimmer maken, maar de meeste zijn eigen oplossingen. Maar waarom heb je een internetverbinding nodig om een lamp te schakelen met je smartphone? Dat was voor mij een reden om mijn eigen Smar te bouwen
Hartslag op het STONE LCD-scherm: 7 stappen
Hartslag op het STONE LCD-scherm: Enige tijd geleden vond ik een hartslagsensormodule MAX30100 bij het online winkelen. Deze module kan bloedzuurstof- en hartslaggegevens van gebruikers verzamelen, wat ook eenvoudig en gemakkelijk te gebruiken is. Volgens de gegevens ontdekte ik dat er bibliotheken zijn van M
Smart Home maken met behulp van Arduino-besturingsrelaismodule - Ideeën voor domotica: 15 stappen (met afbeeldingen)
Smart Home maken met behulp van Arduino-besturingsrelaismodule | Ideeën voor domotica: in dit domotica-project zullen we een smart home-relaismodule ontwerpen die 5 huishoudelijke apparaten kan bedienen. Deze relaismodule kan worden bediend vanaf mobiel of smartphone, IR-afstandsbediening of tv-afstandsbediening, handmatige schakelaar. Dit slimme relais kan ook de r
Smart Home met Arduino: 11 stappen (met afbeeldingen)
Smart Home met Arduino: Hallo. Ik zal je laten zien hoe je je eigen slimme huis kunt bouwen. Het toont de temperatuur zowel binnen als buiten, of het raam open of gesloten is, toont wanneer het regent en alarmeert wanneer de PIR-sensor beweging detecteert. Ik heb de applicatie op Android gemaakt om
Smart Home Met Arduino MKR1000 en M.I.T. Android-app: 4 stappen
Smart Home Met Arduino MKR1000 en M.I.T. Android App: In deze tutorial beschrijf ik hoe je je smart home kunt verbeteren met slechts een paar componenten. Het hart van dit smart home-ontwerp is het Arduino MKR1000-bord, aangestuurd met een app, ontworpen op de ontwikkelwebsite van de M.I.T. (Massachusetts Instituut