рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ: DHT11 / DHT22 рдХреЗ рд╕рд╛рде рдЖрд░реНрджреНрд░рддрд╛ рдФрд░ рддрд╛рдкрдорд╛рди рдХреЛ рдорд╛рдкреЗрдВ

рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХреЗ рд▓рд┐рдП DS18B20 рддрд╛рдкрдорд╛рди рд╕рдВрд╡реЗрджрдХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рд╣реЗрдмрд░ рдкрд░ рдПрдХ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛ рдЪреБрдХрд╛ рд╣реИред рд╣рдорд╛рд░реА рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдЬрд┐рд╕реЗ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкрд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рди рдХреЗрд╡рд▓ рддрд╛рдкрдорд╛рди, рдмрд▓реНрдХрд┐ рдЖрд░реНрджреНрд░рддрд╛ рдХреЛ рдорд╛рдкрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рд╕рд╕реНрддреЗ рдЪреАрдиреА рд╣реНрдпреВрдорд┐рдбрд┐рдЯреА рд╕реЗрдВрд╕рд░ рдХреЛ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПред рд╡рд┐рднрд┐рдиреНрди рд╕реЗрдВрд╕рд░ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдмрд╛рдЬрд╛рд░ рдХреЗ рджреЛ рд╕рдмрд╕реЗ рдЖрдо рд╕реЗрдВрд╕рд░ рдкрд░ рдмрд╕ рдЧрдпрд╛ред рдпрд╣ DHT11 рд╣реИ, рдЬреЛ рдЗрд╕рдХреА рдХреАрдордд $ 3 (рдбрд┐рд▓реАрд╡рд░реА рдХреЗ рд╕рд╛рде) рдФрд░ рдПрдХ рд╕реЗрдВрд╕рд░ DHT22 (рдбрд┐рд▓реАрд╡рд░реА рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ $ 10) рдкрд░ рдЖрдХрд░реНрд╖рд┐рдд рд╣реБрдЖред

рддрд╛рдкрдорд╛рди рд╕реАрдорд╛ рдФрд░ рдорд╛рдк рд╕рдЯреАрдХрддрд╛ рдореЗрдВ рдЙрдирдХреЗ рдмреАрдЪ рдореБрдЦреНрдп рдЕрдВрддрд░:

DHT11


DHT22




рд╕рдВрдмрдВрдз

рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ: рд╣рдо рд╕реЗрдВрд╕рд░ рд╕реЗ + 5 рд╡реА рддрдХ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, "-" рдЬрдореАрди рдкрд░, рдФрд░ рдЬреАрдкреАрдЖрдИрдУ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╕рдВрдХреЗрддред


рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

рджреЛрдиреЛрдВ рд╕реЗрдВрд╕рд░ рдорд╛рдирдХреАрдХреГрдд 1 рддрд╛рд░ рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕реЗрдВрд╕рд░ рд░реАрдбрд┐рдВрдЧ рд▓реЗрдиреЗ рдХрд╛ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рднреА рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред

рдкрд╣рд▓реЗ GPIO www.open.com.au/mikem/bcm2835/ind.net.html рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП C рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
wget http://www.open.com.au/mikem/bcm2835/bcm2835-1.15.tar.gz tar xzf bcm2835-1.15.tar.gz cd bcm2835-1.15/ ./configure make make install 


рд╕реЗрдВрд╕рд░ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, C Adafruit_DHT_Driver рдкрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдХрд┐рдП рдмрд┐рдирд╛, DHT22 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП, рдЗрд╕ рдХреЛрдб рдиреЗ рдордирд╛ рдХрд░ рджрд┐рдпрд╛, рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рдмрджрд▓рдирд╛ рдкрдбрд╝рд╛ред
рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд▓рд╛рддрд╛ рд╣реВрдВред
ReadDHT.c рдлрд╝рд╛рдЗрд▓
 // How to access GPIO registers from C-code on the Raspberry-Pi // Example program // 15-January-2012 // Dom and Gert // // Access from ARM Running Linux #define BCM2708_PERI_BASE 0x20000000 #define GPIO_BASE (BCM2708_PERI_BASE + 0x200000) /* GPIO controller */ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <dirent.h> #include <fcntl.h> #include <assert.h> #include <unistd.h> #include <sys/mman.h> #include <sys/types.h> #include <sys/stat.h> #include <bcm2835.h> #include <unistd.h> #define MAXTIMINGS 100 #define DHT11 11 #define DHT22 22 #define AM2302 22 int readDHT(int type, int pin); int main(int argc, char **argv) { if (!bcm2835_init()) return 1; if (argc != 3) { printf("usage: %s [11|22|2302] GPIOpin#\n", argv[0]); printf("example: %s 2302 4 - Read from an AM2302 connected to GPIO #4\n", argv[0]); return 2; } int type = 0; if (strcmp(argv[1], "11") == 0) type = DHT11; if (strcmp(argv[1], "22") == 0) type = DHT22; if (strcmp(argv[1], "2302") == 0) type = AM2302; if (type == 0) { printf("Select 11, 22, 2303 as type!\n"); return 3; } int dhtpin = atoi(argv[2]); if (dhtpin <= 0) { printf("Please select a valid GPIO pin #\n"); return 3; } printf("Using pin #%d\n", dhtpin); readDHT(type, dhtpin); return 0; } // main int bits[250], data[100]; int bitidx = 0; int readDHT(int type, int pin) { int counter = 0; int laststate = HIGH; int j=0; int i=0; // Set GPIO pin to output bcm2835_gpio_fsel(pin, BCM2835_GPIO_FSEL_OUTP); bcm2835_gpio_write(pin, HIGH); usleep(100); bcm2835_gpio_write(pin, LOW); usleep(20000); bcm2835_gpio_fsel(pin, BCM2835_GPIO_FSEL_INPT); data[0] = data[1] = data[2] = data[3] = data[4] = 0; // read data! for (i=0; i< MAXTIMINGS; i++) { counter = 0; while ( bcm2835_gpio_lev(pin) == laststate) { counter++; nanosleep(1); // overclocking might change this? if (counter == 100) break; } laststate = bcm2835_gpio_lev(pin); if (counter == 100) break; bits[bitidx++] = counter; if ((i>3) && (i%2 == 0)) { // shove each bit into the storage bytes data[j/8] <<= 1; if (counter > 16) data[j/8] |= 1; j++; } } #ifdef DEBUG for (int i=3; i<bitidx; i+=2) { printf("bit %d: %d\n", i-3, bits[i]); printf("bit %d: %d (%d)\n", i-2, bits[i+1], bits[i+1] > 15); } #endif printf("Data (%d): 0x%x 0x%x 0x%x 0x%x 0x%x\n", j, data[0], data[1], data[2], data[3], data[4]); if ((j >= 39) && (data[4] == ((data[0] + data[1] + data[2] + data[3]) & 0xFF)) ) { // yay! if (type == DHT11) printf("Temp = %d *C, Hum = %d \%\n", data[2], data[0]); if (type == DHT22) { float f, h; h = data[0] * 256 + data[1]; printf ("%s\n",h); h /= 10; f = (data[2] & 0x7F)* 256 + data[3]; f /= 10.0; if (data[2] & 0x80) f *= -1; printf("Temp = %.1f *C, Hum = %.1f \%\n", f, h); } return 1; } return 0; } 


рд╕рдВрдХрд▓рди
 gcc readDHT.c -lbcm2835 -lrt -o readDHT 

рд╣рдо рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
 ./readDHT {  11  22} { GPIO  Raspberry PI} 

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, DHT11 GPIO4 рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ
 root@raspberrypi /var/www/application/scripts/DHT # ./readDHT 11 4 Using pin #4 Data (40): 0x23 0x0 0x17 0x0 0x3a Temp = 23 *C, Hum = 35 % 

рдпрд╛ DHT22 GPIO17 рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ
 root@raspberrypi /var/www/application/scripts/DHT # ./readDHT 22 17 Using pin #17 Data (40): 0x1 0x75 0x0 0xea 0x60 Temp = 23.4 *C, Hum = 37.3 % 


рд░реАрдбрдбреЙрдЯ рдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдкрд╣реБрдВрдЪ рдХреА рдЧрддрд┐ рдЕрдзрд┐рдХ рд╣реИ (рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдПрдХ рдмрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ), рддреЛ рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдХреЗ рдмрдЬрд╛рдп рд╕реАрдЖрд░рд╕реА рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреАред

рд╕реЗрдВрд╕рд░ рд╕реЗ рдбреЗрдЯрд╛ рдХреА рдмрдЪрдд


рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЛ рдХрд╣реАрдВ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ рдХрд┐ рдЖрдк Google.docs рдореЗрдВ рдбреЗрдЯрд╛ рдХреИрд╕реЗ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрдпреЛрдВрдХрд┐ PHP рдореЗрд░реЗ рдХрд░реАрдм рд╣реИ, PHP рдореЗрдВ Zend_Gdata_Spreadsheets рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдЪрдд рдХреА рдЧрдИ рдереАред

рдЫрд╡рд┐ Google рдбреЙрдХреНрд╕ рддреИрдпрд╛рд░ рдХрд░реЗрдВред рдПрдХ рдирдИ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕реЗ рдПрдХ рдирд╛рдо рджреЗрдВред рдЪрд▓реЛ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛рдЯрд╛рдЗрдо, рджреВрд╕рд░реЗ рддрд╛рдкрдорд╛рди, рддреАрд╕рд░реЗ рдЖрд░реНрджреНрд░рддрд╛ рдХреЗ рдХреЙрд▓рдо рдХрд╛ рдирд╛рдо рджреЗрдВред рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рд╕реЗ, рд╣рдорд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ рдХреА рдЖрдИрдбреА рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдВ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рддрд╛рд▓рд┐рдХрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

Php рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
 pi@raspberrypi ~ $ sudo apt-get php5 php5-curl unzip 

рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдБ:
 pi@raspberrypi ~ $ mkdir /home/pi/dht 

рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ Zend рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЛ рдЕрдирдЬрд╝рд┐рдк рдХрд░реЗрдВ:
 pi@raspberrypi ~ $ mkdir /home/pi/dht/library pi@raspberrypi ~ $ cd /home/pi/dht/library pi@raspberrypi ~ $ wget http://packages.zendframework.com/releases/ZendFramework-1.12.0/ZendFramework-1.12.0-minimal.zip pi@raspberrypi ~ $ unzip ZendFramework-1.12.0-minimal.zip pi@raspberrypi ~ $ ln -s ZendFramework-1.12.0-minimal/library/Zend Zend 


DHTtoGoogleDocs.php
 <?php ini_set("include_path",get_include_path().':/home/pi/dht/library'); require_once 'Zend/Loader.php'; Zend_Loader::loadClass('Zend_Gdata_Spreadsheets'); Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); define('GDATA_USER','googleusername'); define('GDATA_PASSWORD','google user password'); define('GDATA_SPREADSHEET_KEY','spreadsheetkey from url'); define('GDATA_WORKSHEET_ID','od6'); try { $t = new Temperature_DHT(); // get data from sensor $data = $t->getData(11,4); $service = Zend_Gdata_Spreadsheets::AUTH_SERVICE_NAME; $client = Zend_Gdata_ClientLogin::getHttpClient(GDATA_USER, GDATA_PASSWORD, $service); $service = new Zend_Gdata_Spreadsheets($client); // add row to spreadsheet $row = array( 'datetime'=>date("Ymd H:i:s"), 'temperature'=>$data[0], 'humidity'=>$data[1], ); $service->insertRow($row, GDATA_SPREADSHEET_KEY, GDATA_WORKSHEET_ID); } catch (Exception $e) { die( $e->getMessage() ); } class Temperature_DHT { private $_maxFailCount=5; public function getData($type, $pin) { $count = 0; while ($count<=$this->_maxFailCount) { $count++; $filename = '/home/pi/dht/readDHT'; $out = exec ("$filename $type $pin"); if(preg_match("'^Temp = ([0-9\.]+) \*C, Hum = ([0-9\.]+) %'", $out,$result)) { return array($result[1],$result[2]); } } } } 


рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ, рдЪрд▓рд╛рдПрдБ:
 pi@raspberrypi ~ $ php DHTtoGoogleDocs.php 

рдпрд╣ рдХреЗрд╡рд▓ "php DHTtoGoogleDocs.php" рдХреЙрд▓ рдХреЛ рдХреНрд░реЛрди рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред

рдПрдХ рдкреНрд░рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рдХрдорд░реЗ рдореЗрдВ рд▓рдЧрднрдЧ 10 рдорд┐рдирдЯ рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ Google рдбреЙрдХреНрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╕реЗрдВрд╕рд░ рдкрд╛рд╕ рдореЗрдВ рд╕реНрдерд┐рдд рдерд╛ред рдХреЛрдИ рднреА рд░реБрдЪрд┐ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдмрд┐рдЦрд░рд╛рд╡ рдХреЛ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИред
рдЧрд░реНрдорд┐рдпреЛрдВ рдХреЗ рдХреЙрдЯреЗрдЬ рдХреЛ рдПрдХрддреНрд░ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рд╕реЗ, рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдЧрд░ рдЖрдкрдХреЛ рдмрд╕ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдЖрд░реНрджреНрд░рддрд╛ рдмрджрд▓ рд░рд╣реА рд╣реИ, рддреЛ DHT11 рд╕реЗрдВрд╕рд░ рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд▓реЗрдХрд┐рди, рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдореВрд▓реНрдп рд╣реЛрдо рдореМрд╕рдо рд╕реНрдЯреЗрд╢рди рдХреЗ рдореВрд▓реНрдп рдХреЗ рдХрд░реАрдм рд╣реЛ, рддреЛ DHT22 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

Source: https://habr.com/ru/post/In167459/


All Articles