Environmental Monitoring med BeagleBone eller RaspberryPI och Ardunio (3 / 7 steg)
Steg 3: programmering
Det är där det blir kul.UTFT bibliotek visade sig vara ganska lätt att använda, och jag hittade också ett lättanvänt bibliotek för DHT-22. Även med dessa fina bibliotek fanns det några utmaningar.
Arduino som i2c slav tycks bara fungerar om du begränsa din användning till enkelbyte-operationer, och detta försvårar sändande flexibla komplexa strukturer. Jag vill kunna skicka skärmen ritkommandon från BeagleBone till Arduino. Mitt alternativ var att kod ett system där en byte skickas som en "Kommandotyp" då filial för att läsa fler byte för att slutföra struktur, eller räkna ut ett sätt att kapsla in en avgränsad sträng och bearbeta den. Metod 1 betyder jag inte kan ha valfria parametrar, och om byte sändning blir osynkroniserade blir det svårt att synkronisera på nytt. Så använde jag metod 2 med hjälp av vissa buffert variabler och skicka en 0-byte som en null terminator, som C bruk för strängar. Även om en byte får släppa, 0-byte avslutas struktur någon gång och då är det bara en fråga om att ta itu med konstiga data när jag tolka.
Nästa utmaning var att DHT22 är långsam. Gilla, riktigt riktigt långsamt. Löst som med hjälp av ett "nuvarande" variabel och en försening. Jag behöver inte supersnabbt svar när värdena ändras, men jag vill reagera snabbt när jag frågar för värden. Huvudloop avsöker en funktion varje gång, som fungerar sedan kontroller när värdet senast uppdaterades, och uppdaterar det om det har gått mer än 3 sekunder. Jag ska nog sluta konvertera detta till en timer av något slag.
Jag programmerade även i en "dev mode" så jag kan koppla bort LCD och få lite information om följetong. Det har varit praktiskt hittills, men nu när grunderna är utarbetade jag förmodligen inte kommer att använda det igen.
På Beaglebone använder jag PyBBIO just nu. Det är arduino som kommandon och metoder som håller mig från att bli super förvirrade när det gäller sådana olika språk som C och Python är. Det är ganska lätt att installera och har några fina klasser bygga i. Det är min avsikt att försöka få någon form av i2c klass i den, om Haim inte först!
Här hittar du en zipfil som bifogas med min kod, en ino fil för arduino och python fil för beaglebone. Det finns för närvarande endast stöd för DHT22 temp och luftfuktighetsvärdena. Den uppdaterar displayen på arduino även om python-skript inte är igång. Python-skript helt enkelt blir värdena och skriver ut dem till terminalen. Som jag sa i början, har jag fortfarande en hel del arbete att göra!
Kompilerade skissen använder 29,5 K av 32,2 K maximalt, och jag måste fortfarande lägga till touch stöd och de ritning funktioner! Jag tror det finns en hel del kod i den utft som jag kan trimma ut, och jag kan kanske dra DTH bibliotek grejer i och göra det mer magert också. Eller kanske ska jag bara nog, vi får se!