硬件:
树莓派 2.0
DHT模块 接树莓派5V GND GPIO1
功能:读取传感器数据并打印出来
- //
- //mydht11.c
- //
- #include
- #include
- #include
- typedefunsignedcharuint8;
- typedefunsignedintuint16;
- typedefunsignedlonguint32;
- #define HIGH_TIME 32
- intpinNumber =1;//use gpio1 to read data
- uint32 databuf;
- uint8 readSensorData(void)
- {
- uint8 crc;
- uint8 i;
- pinMode(pinNumber,OUTPUT);// set mode to output
- digitalWrite(pinNumber, 0);// output a high level
- delay(25);
- digitalWrite(pinNumber, 1);// output a low level
- pinMode(pinNumber, INPUT);// set mode to input
- pullUpDnControl(pinNumber,PUD_UP);
- delayMicroseconds(27);
- if(digitalRead(pinNumber)==0)//SENSOR ANS
- {
- while(!digitalRead(pinNumber));//wait to high
- for(i=0;i<32;i++)
- {
- while(digitalRead(pinNumber));//data clock start
- while(!digitalRead(pinNumber));//data start
- delayMicroseconds(HIGH_TIME);
- databuf*=2;
- if(digitalRead(pinNumber)==1)//1
- {
- databuf++;
- }
- }
- for(i=0;i<8;i++)
- {
- while(digitalRead(pinNumber));//data clock start
- while(!digitalRead(pinNumber));//data start
- delayMicroseconds(HIGH_TIME);
- crc*=2;
- if(digitalRead(pinNumber)==1)//1
- {
- crc++;
- }
- }
- return1;
- }
- else
- {
- return0;
- }
- }
- intmain (void)
- {
- printf("Use GPIO1 to read data!\n");
- if(-1 == wiringPiSetup()) {
- printf("Setup wiringPi failed!");
- return1;
- }
- pinMode(pinNumber, OUTPUT);// set mode to output
- digitalWrite(pinNumber, 1);// output a high level
- printf("Enter OS-------\n");
- while(1) {
- pinMode(pinNumber,OUTPUT);// set mode to output
- digitalWrite(pinNumber, 1);// output a high level
- delay(3000);
- if(readSensorData())
- {
- printf("Congratulations ! Sensor data read ok!\n");
- printf("RH:%d.%d\n",(databuf>>24)&0xff,(databuf>>16)&0xff);
- printf("TMP:%d.%d\n",(databuf>>8)&0xff,databuf&0xff);
- databuf=0;
- }
- else
- {
- printf("Sorry! Sensor dosent ans!\n");
- databuf=0;
- }
- }
- return0;
- }