Raspberry Pi babyvakt med Splunk (5 / 15 steg)
Steg 5: Läsa data från sensorn
Jag använde denna webbplats som en guide för att skriva programvara som kommer att kunna läsa sensorn. De rådde måste vi använda ett C-program för att säkerställa att den alltid läser sensorn. Ive ändrade deras ursprungliga koden du inte slinga, och formatera de bättre för att senare läsa in Splunk avläsningarna. Splunk gillar formatet variable_name = värde lätt kan identifiera det i loggen
Öppna du är din favorit linux textredaktör och göra en fil dat.c
Sätt in denna kod på den filen dht.c
< p > / * < br > * dht.c:
* läsa temperatur och luftfuktighet från DHT11 eller DHT22 sensor
*/
#include
#include
#include
#include
#define MAX_TIMINGS 85
#define DHT_PIN 3 / * GPIO-22 * /
int data [5] = {0, 0, 0, 0, 0};
void read_dht_data()
{
uint8_t laststate = hög;
uint8_t counter = 0;
uint8_t j = 0, i.
data [0] = data [1] = data [2] = data [3] = data [4] = 0;
/ * dra pinnen för 18 millisekunder * /
pinMode (DHT_PIN, OUTPUT);
digitalWrite (DHT_PIN, låg);
fördröjning (18);
/ * förbereda att läsa pin * /
pinMode (DHT_PIN, indata);
/ * upptäcka ändra och läsa data * /
för (jag = 0; jag < MAX_TIMINGS; i ++)
{
räknare = 0;
medan (digitalRead (DHT_PIN) == laststate)
{
räknaren ++;
delayMicroseconds (1).
om (counter == 255)
{
bryta;
}
}
laststate = digitalRead (DHT_PIN);
om (counter == 255)
bryta;
/ * Ignorera första 3 övergångar * /
om ((jag > = 4) & & (jag % 2 == 0))
{
/ * skjuta varje bit till lagring byte * /
data [j / 8] << = 1;
om (counter > 16)
data [j / 8] | = 1;
j ++;
}
}
/*
* Kolla vi läsa 40 bitar (8 bitars x 5) + kontrollera kontrollsumman i sista byte
* skriva ut den om data är bra
*/
om ((j > = 40) & &
(data [4] == ((data [0] + data [1] + data [2] + data[3]) & 0xFF)))
{
flyta h = (float) ((data [0] << 8) + data[1]) / 10;
om (h > 100)
{
h = data [0]; för DHT11
}
flyta c = (float) (((data [2] & 0x7F) << 8) + data[3]) / 10;
om (c > 125)
{
c = data [2]. för DHT11
}
om (data [2] & 0x80)
{
c = - c;
}
flyta f = c * 1.8f + 32.
printf ("Humidity=%.1f Temperature=%.1f\n", h, c).
} annat {
printf ("Data inte bra, skip\n);
}
}
int main (void)
{
om (wiringPiSetup() == -1)
avsluta (1);
read_dht_data();
Return(0);
} < /p >