Bluetooth termometer (4 / 8 steg)
Steg 4: Firmware
Termistor spänningar som ingick i urvalet, konverteras till temperatur och skickas via Bluetooth till EvoThings app kör på smartphone.
För att konvertera spänningen till ett motstånd värde inom böna, används en enkel linjär ekvation. Härledningen av ekvationen tillhandahålls som en bild. I stället för att konvertera värdet som ingick i urvalet till spänning, eftersom både ADC och mata inspänningen refereras till samma batterispänningen, kan vi använda ADC värdet i stället för spänningen. För 10 bitars Bean ADC, kommer att full batterispänning resultera i en ADC värdet av 1023 så vi använda detta värde som Vbat. Det faktiska värdet av divider motståndet är en viktig faktor. Beräkna det verkliga värdet för 100K divider motstånd och använda det uppmätta värdet i ekvationen för att undvika en onödig källa till fel på grund av motstånd tolerans.
När motståndsvärdet beräknas, det motståndsvärdet konverteras till temperatur med hjälp av Steinhart-Hart ekvation. Denna ekvation är beskrivs på Wikipedia.
Eftersom vi har 2 sonder, det är meningsfullt att kapsla in sonden funktionaliteten i en C++-klass.
Klassen sammanfattar Steinhart-Hart ekvation koefficienterna, nominella divider motstånd värde och den analoga port som är ansluten till en termistor. En enda metod, temperature(), omvandlar ADC värde till ett högt värde och sedan använder Steinhart-Hart ekvation att bestämma temperaturen i Kelvin. Det returnerade värdet subtraheras absoluta nollpunkten (273.15K) från den beräknade temperaturen att ge värdet i Celsius.
Kraften i Lightblue Bean är tydligt i det faktum att alla Bluetooth funktioner genomförs i huvudsak i 1 kodrad som skriver värdena som ingick i urvalet temperatur till en scratch dataområdet på Bluetooth minne.
Bean.setScratchData(TEMPERATURE_SCRATCH_IDX, (uint8_t*)&temperature[0], 12);
Varje urvalet temperaturvärde representeras av en flottör som tar upp 4 byte. Scratch data-området rymmer 20 bytes. Vi använder endast 12 av dem. Det finns 5 scratch dataområden så att du kan överföra upp till 100 byte data med hjälp av scratch data.
Den grundläggande flöden av händelser är:
- Kontrollera om vi har en Bluetooth-anslutning
- Om så är fallet, prova temperaturer och skriva dem till scratch data-området
- Sova 200ms och upprepa cykeln.
Om inte ansluten sätter firmware ATMEGA328P chip att sova länge. Sömncykel är viktigt för att bevara makten. ATMEGA328P chip går in i lågenergiläge och stannar där tills avbruten av LBM313 Bluetooth-modulen. LBM313 kommer att generera ett avbrott för att väcka ATMEGA328P i slutet av perioden sömn efterfrågades, eller när en Bluetooth-anslutning görs i bönan. Funktionen WakeOnConnect aktiveras genom att uttryckligen anropa Bean.enableWakeOnConnect(true) under setup().
Det är viktigt att notera att den fasta programvaran fungerar med alla BLE klientprogrammet. Alla klienten behöver att göra är remsor temperatur byte från scratch data banken och sätt ihop dem till flyttal för visning eller bearbetning. Den enklaste klient app för mig var att använda EvoThings.