In dit artikel wil ik nader ingaan op de gegevensstructuur die wordt gebruikt voor het beheer van de apparaten en meetwaarden.Alle structurele definities zijn te vinden in het bibliotheekbestand AT-u Database.h.
Wanneer een apparaat is geregistreerd, worden de identifiers ervan opgeslagen in de apparaatlijst.De apparaatlijst is een reeks datablokken met de volgende structuur:
typedf /Device definition
STRATEGIE-AFSCHRIFTEN
uint8 u t active = 0; /het hier gedefinieerde apparaat bestaat
uint8 u t service = 0; /0=ESP-Now voorbereiding als later andere diensten
te worden geïmplanteerd
uint8 u t id[6]={0,0,0}; /MAC-adres van het apparaat
uint16 u t devicebits = 0; /Bit veld met informatie over het apparaat en datatransmissie
Naam van de tekenreeks =; /Device Name
String last ="; /Time postzegel voor laatste succesvolle gegevensoverdracht
};
Het apparaatnummer wordt gebruikt als index in deze array.De database van de AT-klasse definieert een apparaatlijst voor 32-apparaten.Om de apparaatgegevens permanent op te slaan, worden ze opgeslagen in het SPIF bestandssysteem in de flits van de ESp32.
De volgende functies van de klasse worden gebruikt voor het werken met de apparaatlijst:
-
Booleaanse readDevices(String-bestand); Leest de apparaatlijst van een bestand met namen bestand in SPIFFS.Geeft vals terug als er een fout optreedt.
-
booleaanse schrijfapparaten (String-bestand); Schrijft de apparaatlijst in een bestand met namen bestand in de SPIFS.Geeft vals terug als er een fout optreedt.
- booleaanse Clear Devices (String-bestand); Verwijdert alle apparaten en slaat het resultaat op onder bestand in SPIFFS.Geeft vals terug als er een fout optreedt.
- int16'u findDevice(uint8'u t id[6]); Deze functie zoekt in de apparaatlijst naar een apparaat met de opgegeven sm (MAC-adres).De functie geeft het apparaatnummer terug naar de index.-1 betekent dat het apparaat niet in de lijst staat.
- String getDeviceId(uint8-u t apparaat); Geeft de ID van het apparaat met het apparaatnummer aan maagden Terug.
Voer de meetwaarden in voor een geregistreerde inrichting die in de resultatentabel worden opgeslagen.De resultatentabel bestaat uit elementen met de volgende structuur:
typedf /Structuur voor het opslaan van de gemeten waarden
STRICT ATCURWAARDEN
uint8 u t geldig; /De structuur bevat een geldige meetwaarde
uint8 u t step; /gebruikt voor het opslaan van verwerkingsstappen
uint8-u t-type; /Het type van de opgeslagen gemeten waarde
uint8 u t unit; /De eenheid van de opgeslagen gemeten waarde
uint8'u t waarde[4]; /vier bytes met een gemeten waarde, hetzij 32bit gehele getal of float
per type.Het type Boolean gebruikt alleen de eerste byte
};
De AT/Database klasse reserveert ruimte voor een resultatentabel met 256-items (32-apparaten met maximaal acht kanalen elk).De index voor deze tabel wordt berekend op basis van het nummer van het apparaat en het kanaalnummer.
Index = Apparaatnummer *32 + kanaalnummer
De volgende functies van de Klkasse AT u Database werken met de resultaattabel:
- holle setResult(uint8 t index, ATDATAPACKET-gegevens); Deze functie actualiseert de gegevens op de point Index met de waarden in de structuur data.De structuur ATDATAPACKET is gedefinieerd in de bibliotheek ATMessageBuffer en wordt ook gebruikt voor gegevenstransmissie.
- ATCURVALUES getResult(uint16'u t index); Deze functie geeft de hierboven beschreven structuur terug voor het resultaat en de positie index in de resultatentabel.
- Leegte setStep(uint8 u step, uint16 u t index); De verwerkingsstap voor het resultaat in plaats van de index in de resultatentabel is ingesteld op de waardestap.
- String getValueString(uint16'u t index, uint8'u t precision, boolean useunit); Retourneert de waarde van het resultaat in plaats van index in de resultatentabel als tekenreeks.De precisieparameter specificeert het aantal offset-nummers voor vlootwaarden, als de werkelijke parameter van de gebruikerseenheid aan de tekenreeks is bevestigd.
- uint8 u t get BooleanValue(uint16 u t index); Geeft de booleaanse waarde van het resultaat terug in plaats van index als 0 of 1.Alleen nuttig voor het Booleaanse type.
- booleaans isValueOutput(uint16'u t index); Geeft waar terug als het type resultaat in plaats Index een output type is, d.w.z. bevat gegevens verzonden naar het apparaat door het hoofdkwartier.(bv. schakelaar).
- boolean isSwitchOut(uint16'u t index); Vergelijkbaar met de vorige functie, maar alleen waar als het een schakelaar is:
- boolean isValueZero(uint16'u t index); Retourneert waar als de waarde van het resultaat op het punt Index precies 0 is.
- Vavaid toggleResult(uint16'u t index); Schakelt het resultaat op Index vo 0 naar 1 of vice versa.Alleen nuttig voor het Booleaanse type.
- int8 u t getResponse(int16 u device, uint8 u t *buffer, uint8 u t *size);Onderzoek alle resultaten met een uitgangstype voor het apparaat en vul een buffer met een voltooide berichtpakket dat vervolgens naar het apparaat kan worden overgebracht.De grootte parameter bevat de maximale buffergrootte en de werkelijke buffergrootte die wordt gebruikt wanneer de functie terugkeert. De terugkeerwaarde is het aantal datapakketten of -1 gevonden als de buffergrootte te klein was.
Een andere 3-structuur in deze bibliotheek wordt gebruikt om de weergave van resultaten te controleren.Er is een lijst van pagina's.Elke pagina bevat 8 widget items met de volgende structuur:
typedf /Definitie van een diospey widget
STRATEGIE ATDISPLAYDGE
uint16 u t source; /Index van toegewezen resultaten
uint8 u t status; /status 0=niet gebruikt, 1=gebruikt, 2=placeholder, 3=verborgen
uint8 u t size; /Widget size 0=240x30,1=240x60 links
/2=120x60 rechts 3=120x60
uint8-u t type; /Widget type, momenteel alleen 0=eenvoudig
uint16,t bgcolor; /Normale achtergrondkleur
uint16u t bgbcoloron; /Achtergrondkleur voor knoppen wanneer Eén
uint16,t fontcolor; /Font color
uint8 u t image; /Index van een afbeelding(nog niet gebruikt)
uint8 u t precisie; /Aantal decimalen voor meetwaarden
String label = ";/Label
};
De AT klasse database behoudt de ruimte voor 32-pagina pagina pagina's met maximaal acht widgets.De volgende functies werken met deze tabel:35;
- int16'u t getFreeSlot(uint8'u t page, uint8'u t size); Deze functie geeft de index voor een widget terug op de pagina met de grootte die nog steeds plkatz of -1 heeft als er geen ruimte op de pagina is.
- ATDISPLAYPAGE getPage(uint8)u t page); Geeft een lijst terug van alle widgets op de pagina.
De functie
Booleaanse registratie Dev (String DeviceId, AT MessageBuffer msg);
registreert een apparaat met het ID deviceId als het nog niet is geregistreerd.De parameter msg bevat een AT-u meetbufferstructuur met de gegevens die het laatst door dit apparaat werden ontvangen.Voor elk kanaal van dit apparaat wordt een item ingevuld in de resultatentabel en de ruimte wordt gezocht voor een display widget op de eerste pagina mogelijk.De grootte van de widget is ingesteld op 30 x 240 pixels en alle instellingen zijn gevuld met standaardwaarden.Dit zorgt ervoor dat een nieuw geregistreerde apparaat al zijn kanalen kan weergeven.In latere versies van het hoofdkwartier kunnen deze display parameters dan individueel worden gewijzigd via een setup.
Dus ik denk dat de theorie nu genoeg is, maar het is belangrijk voor mij dat u ook de structuur van het systeem begrijpt om fouten gemakkelijker te vinden en eventueel zelf uitbreidingen te ontwikkelen.