From 243ac7c618b095bc5535285c83eba6abdbe65e4e Mon Sep 17 00:00:00 2001 From: Xento Date: Mon, 15 Dec 2014 10:10:14 +0100 Subject: [PATCH 1/2] Using wiringPi instead bcm2835 Makes node-dht-sensor compatible with banana pi. --- binding.gyp | 2 +- node-dht-sensor.cpp | 48 ++++++++++++++++++--------------------------- 2 files changed, 20 insertions(+), 30 deletions(-) diff --git a/binding.gyp b/binding.gyp index c24c497..dcb2e38 100644 --- a/binding.gyp +++ b/binding.gyp @@ -3,7 +3,7 @@ { 'target_name': 'node-dht-sensor', 'sources': [ 'node-dht-sensor.cpp' ], - 'libraries': [ '-lbcm2835' ], + 'libraries': [ '-lwiringPi' ], 'conditions': [ ['OS=="linux"', { 'include_dirs+': '/usr/local/lib/libbcm2835.a', diff --git a/node-dht-sensor.cpp b/node-dht-sensor.cpp index 009b0ef..dde86c4 100644 --- a/node-dht-sensor.cpp +++ b/node-dht-sensor.cpp @@ -18,7 +18,7 @@ #include #include #include -#include +#include #include #include @@ -69,38 +69,39 @@ long readDHT(int type, int pin, float &temperature, float &humidity) } // Set GPIO pin to output - bcm2835_gpio_fsel(pin, BCM2835_GPIO_FSEL_OUTP); - - bcm2835_gpio_write(pin, HIGH); - bcm2835_delay(400); - bcm2835_gpio_write(pin, LOW); - bcm2835_delay(20); - - bcm2835_gpio_fsel(pin, BCM2835_GPIO_FSEL_INPT); + pinMode (pin, OUTPUT); + + digitalWrite (pin, HIGH); + delay(400); + + digitalWrite (pin, LOW); + delay(20); + pinMode (pin, INPUT) ; + data[0] = data[1] = data[2] = data[3] = data[4] = 0; // wait for pin to drop? int timeout = 100000; - while (bcm2835_gpio_lev(pin) == 1) { + while (digitalRead (pin) == 1) { if (--timeout < 0) { #ifdef VERBOSE printf("Sensor timeout.\n"); #endif return -3; } - bcm2835_delayMicroseconds(1); //usleep(1); + usleep(1); } // read data! for (int i = 0; i < MAXTIMINGS; i++) { counter = 0; - while (bcm2835_gpio_lev(pin) == laststate) { + while (digitalRead (pin) == laststate) { counter++; if (counter == 1000) break; } - laststate = bcm2835_gpio_lev(pin); + laststate = digitalRead (pin); if (counter == 1000) break; #ifdef VERBOSE if (bitidx < 1000) { @@ -178,23 +179,12 @@ int initialize() struct sched_param schedp; schedp.sched_priority = 1; sched_setscheduler(0, SCHED_FIFO, &schedp); + + wiringPiSetup (); - if (!bcm2835_init()) - { -#ifdef VERBOSE - printf("BCM2835 initialization failed.\n"); -#endif - return 1; - } - else - { -#ifdef VERBOSE - printf("BCM2835 initialized.\n"); -#endif - initialized = 1; - memset(last_read, 0, sizeof(unsigned long long)*32); - return 0; - } + initialized = 1; + memset(last_read, 0, sizeof(unsigned long long)*32); + return 0; } using namespace v8; From dd9f2f61fd00cd15922a54b38086fca264a3f995 Mon Sep 17 00:00:00 2001 From: Markus Date: Wed, 4 Feb 2015 14:11:56 +0100 Subject: [PATCH 2/2] fix read timming for negative temperatures --- node-dht-sensor.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/node-dht-sensor.cpp b/node-dht-sensor.cpp index dde86c4..c4d80b3 100644 --- a/node-dht-sensor.cpp +++ b/node-dht-sensor.cpp @@ -71,13 +71,13 @@ long readDHT(int type, int pin, float &temperature, float &humidity) // Set GPIO pin to output pinMode (pin, OUTPUT); - digitalWrite (pin, HIGH); - delay(400); + digitalWrite (pin, HIGH); + delay(500); - digitalWrite (pin, LOW); + digitalWrite (pin, LOW); delay(20); - pinMode (pin, INPUT) ; + pinMode (pin, INPUT) ; data[0] = data[1] = data[2] = data[3] = data[4] = 0;