Raspberry Pi3 B+ 에서 DHT11 온도 습도 센서 Test 실습
실행 결과는 잘 나온다. 메인 프로그램에서 딜레이 시간을 2초 정도로 주어야 'Data not good. skip' 메세지가 나오는 횟수가 적어진다. 차라리 이 메시지가 나오지 않게 하는 게 좋은 방법일 수 있다. 무슨 말이야 하면 잘 동작하는 것처럼 보이게 하는 게 중요하다. 사용자의 실수가 아니고 1-wire 통신을 하는 하드웨어가 그러는 건데도 에러 메시지가 나오면 기분은 별로 좋지 않다. 그러니 터미널에 표시될 때도 에러 메세지가 나오지 않고 오히려 이전 값을 가지고 있다가 연속해서 표시해주는 게 맞다. 사용자는 아무렇지도 않게 넘어간다. "그렇게 보이게 하는 일"은 중요한 의미가 있다.
만약에 이전 라즈베리파이 버전에서 잘 동작했는데 최신 버전 라즈베리파이에서 동작이 안된다면 아래 코드를 사용해도 좋고, 다음 블로그 글을 참고하여 수정 부분 만 한줄 고치고 당신의 코드를 사용해도 된다.
온도 습도 센서 DHT11 에러. raspberry pi DHT11 센서 data not good skip error 해결
Raspberry Pi3 B+ 에서 DHT11 온도습도 센서에서 데이터를 얻는 소스코드를 올린다. 이 소스코드를 가지고 실습한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | #include <wiringPi.h> #include <stdio.h> #include <stdlib.h> #include <stdint.h> #define MAXTIMINGS 85 #define DHTPIN 5 //BCM 24 int dht11_dat[5] = { 0, 0, 0, 0, 0 }; void read_dht11_dat() { uint8_t laststate = HIGH; uint8_t counter = 0; uint8_t j = 0, i; float f; dht11_dat[0] = dht11_dat[1] = dht11_dat[2] = dht11_dat[3] = dht11_dat[4] = 0; pinMode( DHTPIN, OUTPUT ); digitalWrite( DHTPIN, LOW ); delay( 18 ); digitalWrite( DHTPIN, HIGH ); delayMicroseconds( 40 ); pinMode( DHTPIN, INPUT ); for ( i = 0; i < MAXTIMINGS; i++ ) { counter = 0; while ( digitalRead( DHTPIN ) == laststate ) { counter++; delayMicroseconds( 1 ); if ( counter == 255 ) { break; } } laststate = digitalRead( DHTPIN ); if ( counter == 255 ) break; if ( (i >= 4) && (i % 2 == 0) ) { dht11_dat[j / 8] <<= 1; if ( counter > 50 /*16*/ ) dht11_dat[j / 8] |= 1; j++; } } if ( (j >= 40) && (dht11_dat[4] == ( (dht11_dat[0] + dht11_dat[1] + dht11_dat[2] + dht11_dat[3]) & 0xFF) ) ) { f = dht11_dat[2] * 9. / 5. + 32; printf( "Humidity = %d.%d %% Temperature = %d.%d C (%.1f F)\n", dht11_dat[0], dht11_dat[1], dht11_dat[2], dht11_dat[3], f ); }else { printf( "Data not good, skip\n" ); } } int main( void ) { printf( "Raspberry Pi wiringPi DHT11 Temperature test program\n" ); if ( wiringPiSetup() == -1 ) exit( 1 ); while ( 1 ) { read_dht11_dat(); delay( 2000 ); } return(0); } |
nano 에디터를 사용하여 소스코드 dht11-temphumi.c 코드 수정
$nano dht11-temphumi.c
컴파일 명령
$ gcc -o dht11-temphumi dht11-temphumi.c -lwiringPi
실행하면
$ sudo ./dht11-temphumi
실행 결과 화면을 아래에 나타낸다. 사용자와 당신을 위해서 "Data not good, skip." 메시지는 나오지 않으면 좋지만, 만약 나온다고 해도 보이지 않는 처리를 하길 바란다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | nano 에디터를 사용하여 소스코드 dht11-temphumi.c 코드 수정 $nano dht11-temphumi.c 컴파일 명령 $ gcc -o dht11-temphumi dht11-temphumi.c -lwiringPi 실행하면 $ sudo ./dht11-temphumi Raspberry Pi wiringPi DHT11 Temperature test program Data not good, skip Humidity = 58.0 % Temperature = 23.7 C (73.4 F) Humidity = 65.0 % Temperature = 23.7 C (73.4 F) Data not good, skip Humidity = 65.0 % Temperature = 23.7 C (73.4 F) Humidity = 65.0 % Temperature = 23.7 C (73.4 F) Humidity = 65.0 % Temperature = 23.7 C (73.4 F) Humidity = 65.0 % Temperature = 23.7 C (73.4 F) Humidity = 65.0 % Temperature = 23.7 C (73.4 F) Humidity = 65.0 % Temperature = 23.7 C (73.4 F) Humidity = 65.0 % Temperature = 23.8 C (73.4 F) Humidity = 65.0 % Temperature = 23.7 C (73.4 F) Data not good, skip Humidity = 65.0 % Temperature = 23.8 C (73.4 F) Humidity = 65.0 % Temperature = 23.8 C (73.4 F) Data not good, skip Humidity = 65.0 % Temperature = 23.8 C (73.4 F) Humidity = 65.0 % Temperature = 23.8 C (73.4 F) Humidity = 65.0 % Temperature = 23.8 C (73.4 F) |
'소프트박스 라즈파이' 카테고리의 다른 글
라즈베리파이 기반 IoT(사물인터넷)설계 실습 시스템 (0) | 2020.01.20 |
---|---|
가장 간단한 라즈베리파이 개발 환경 구성할 때 주의할 점 (0) | 2019.10.12 |
도약 창업챌린지 강의 파일 링크 (0) | 2019.10.07 |
라즈베리파이 RGB LED 실습 코드 (0) | 2019.03.14 |
라즈베리파이 DC 모터 실습코드 (0) | 2019.01.19 |