raspberrypi/gpio/wind.c
aixiao 084f378a18 20180911
增加 dth11 温度湿度传感器
目前工作的有DS18B20温度传感、DTH11温度湿度传感器
未测试的有info_sound、info_ultrasound、info_infrared二进制程序

	修改:     gpio/Makefile
	新文件:   gpio/conf/info.conf
	新文件:   gpio/dth11.c
	删除:     gpio/info_infrared
	修改:     gpio/info_infrared.c
	删除:     gpio/info_light
	修改:     gpio/info_light.c
	删除:     gpio/info_pin
	修改:     gpio/info_pin.c
	删除:     gpio/info_sound
	修改:     gpio/info_sound.c
	删除:     gpio/info_ultrasound
	修改:     gpio/info_ultrasound.c
	修改:     gpio/log/light.pid
	修改:     gpio/log/wind.pid
	新文件:   gpio/log/wind_daemon.pid
	删除:     gpio/wind
	修改:     gpio/wind.c
2018-09-11 14:35:16 +00:00

84 lines
1.5 KiB
C

/* DS18B20 温度传感器
*
*
*/
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <dirent.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
#define N 99
int main(int argc, char *argv[])
{
int _main(char *optarg);
int ch;
opterr = 0;
while((ch = getopt(argc, argv, "d:h?")) != -1)
switch (ch) {
case 'd':
_main(optarg);
break;
case 'h': case '?':
printf("wind -d device\n");
exit(0);
break;
default:
;
}
return 1;
}
int _main(char *optarg)
{
char path[50] = "/sys/bus/w1/devices/";
char rom[20];
char buffer[N+1];
DIR *dirp;
struct dirent *direntp;
FILE *fp;
char *temp;
float value;
//char *device; // 设备
//if(optarg == '\0') {
// strcmp(device, optarg);
//}
system("sudo modprobe w1-gpio");
system("sudo modprobe w1-therm");
if((dirp = opendir(path)) == NULL) {
exit(0);
}
while((direntp = readdir(dirp)) != NULL) {
if(strstr(direntp->d_name, optarg)) {
strcpy(rom, direntp->d_name);
}
}
closedir(dirp);
strcat(path, rom);
strcat(path, "/w1_slave");
//printf("%s\n", path);
if ((fp = fopen(path, "r")) < 0) {
exit(0); /* 文件不存在,则退出. */
}
while(fgets(buffer, N, fp) != NULL){
;
}
temp = strchr(buffer, 't');
sscanf(temp, "t=%s", temp);
value = atof(temp) / 1000;
printf("%.0f\n", value);
fclose(fp);
return value;
}