Heet & Vochtig

Temperatuur en Vochtigheid en GPio-pinnen

De opwarming van de aarde leek geen einde meer te kennen, dus werd het tijd om het eens te meten. Al jaren heb ik een DHT22-sensor in huis. Die heeft met de tijd steeds een andere aansluiting gevonden. Nu is die weer ‘thuis’ op een oude raspberry pi A. En daar begonnen de problemen. Blijkbaar was er verhuisd van raspi zero met hele andere configuratie van de gpio-pinnen. Ik had de draden klakkeloos overgezet naar de rpi-A en er niet verder over nagedacht. Na dagen klooien, waarbij ik zelfs begon te twijfelen aan de staat van de dht22-senor, vergeleek ik met gpio readall de uitvoer en zag de verschillen. Maar ja, welke notatie voor de gpio-pinnen had ik nodig? Fysiek, gpio, wiringPI of BCM? Ik wist het niet meer en het stond ook niet in de documentatie van het progje.  Na nog een tijd mieren bleek het de BCM-notatie te zijn die wordt gebruikt in het Python-programmaatje dat ik er ooit voor had gemaakt/gebruikt (Adafruit-documentatie). BCM pin 4 is feitelijk GPIO-pin 7!

‘T werkte weer maar het uitspugen van de gegevens zonder datum en tijd was ook saai. Nu ben ik geen held met Python, maar deze printnotatie gaf me een lichte huivering:

print('Temp={0:0.1f}* Humidity={1:0.1f}%'.format(temperature, humidity))

Ik rommelde wat met deze opdracht en datetime, maar er kwam niks zinnigs uit. Wel veel foutmeldingen. Nadenken moest ik dus en me meer in de taal verdiepen. Dat is ook het leuke van dit soort gepiel. Onderweg moet je wel dingen leren! Uiteindelijk vond ik een prima website over dit onderwerp pyformat.info. Als je het eenmaal weet is het makkelijk. Maar eerst moest ik me er toch echt in verdiepen.
dt = datetime.now()
print('{2:{dfmt} {tfmt}}-- Temp={0:0.1f}* Humidity={1:0.1f}%'.format(temperature, humidity, dt, dfmt='%Y-%m-%d', tfmt='%H:%M:%S'))

is de oplossing! Plaatshouders moeten een expliciete index hebben. Waarbij het probleem vooral in de opmaak van dt zit. Die opmaakargumenten (keyword arguments) mogen alleen na de positionele argumenten komen.