diff --git a/gpio/Makefile b/gpio/Makefile index 61f8cfe..bd5313a 100644 --- a/gpio/Makefile +++ b/gpio/Makefile @@ -1,21 +1,60 @@ -CC=gcc -libs=info_infrared.o info_light.o info_pin.o info_sound.o info_ultrasound.o +CC = gcc +RM = rm +libs = info_infrared.o info_light.o info_pin.o info_sound.o info_ultrasound.o wind.o dth11.o +CFLAGS = -g -Wall -Werror +LIB = -lwiringPi -all: infrared light pin sound ultrasound wind_ +all: infrared light pin sound ultrasound wind dth11 + +infrared: infrared.o + $(CC) $(CFLAGS) info_infrared.o -o info_infrared $(LIB) + $(RM) info_infrared.o +infrared.o: + $(CC) $(CFLAGS) -c info_infrared.c $(LIB) + + +light: light.o + $(CC) $(CFLAGS) info_light.o -o info_light $(LIB) + $(RM) info_light.o +light.o: + $(CC) $(CFLAGS) -c info_light.c $(LIB) + + +pin: pin.o + $(CC) $(CFLAGS) info_pin.o -o info_pin $(LIB) + $(RM) info_pin.o +pin.o: + $(CC) $(CFLAGS) -c info_pin.c $(LIB) + + +sound: sound.o + $(CC) $(CFLAGS) info_sound.o -o info_sound $(LIB) + $(RM) info_sound.o +sound.o: + $(CC) $(CFLAGS) -c info_sound.c $(LIB) + + +ultrasound: ultrasound.o + $(CC) $(CFLAGS) info_ultrasound.o -o info_ultrasound $(LIB) + $(RM) info_ultrasound.o +ultrasound.o: + $(CC) $(CFLAGS) -c info_ultrasound.c $(LIB) + + +wind: wind.o + $(CC) $(CFLAGS) wind.o -o wind + $(RM) wind.o +wind.o: + $(CC) $(CFLAGS) -c wind.c + + +dth11: dth11.o + $(CC) $(CFLAGS) dth11.o -o dth11 $(LIB) + $(RM) dth11.o +dth11.o: + $(CC) $(CFLAGS) -c dth11.c $(LIB) -infrared: info_infrared - $(CC) info_infrared.c -o info_infrared -lwiringPi -light: info_light - $(CC) info_light.c -o info_light -lwiringPi -pin: info_pin - $(CC) info_pin.c -o info_pin -lwiringPi -sound: info_sound - $(CC) info_sound.c -o info_sound -lwiringPi -ultrasound: info_ultrasound - $(CC) info_ultrasound.c -o info_ultrasound -lwiringPi -wind_: wind - ${CC} wind.c -o wind .PHONY : clean clean : - rm -f $(libs) info_infrared info_light info_sound info_ultrasound + rm -f $(libs) info_infrared info_light info_sound info_ultrasound wind dth11 diff --git a/gpio/conf/info.conf b/gpio/conf/info.conf new file mode 100644 index 0000000..e5b192e --- /dev/null +++ b/gpio/conf/info.conf @@ -0,0 +1,28 @@ +#判断手机是否在线 +phoneip="192.168.99.60"; #IP + +#人体红外线传感器 +wiringpi_infrared="6"; #脚位 + +#声音传感器 +wiringpi_sound="25"; #脚位 + +#距离传感器 +l="60"; +s="150"; +wiringpi_tring="8"; #脚位 +wiringpi_echo="9"; #脚位 + + +#灯 +high="1700"; #起始时间 +low="2300"; #关闭时间 +s_low="1900" #周日关闭时间 +wiringpi_lightpin="4"; #脚位 + +#风扇、温度传感器 +wiringpi_wind="1"; #脚位 +device="28-031682c7baff" #设备 +l_temperature="27"; #不高于这个摄氏温度 +step_wait="300" #开启时间 +step_stop="180" #关闭时间 diff --git a/gpio/dth11.c b/gpio/dth11.c new file mode 100644 index 0000000..2ac0eb9 --- /dev/null +++ b/gpio/dth11.c @@ -0,0 +1,131 @@ +/* DTH11 温度湿度传感器 + * + * + */ + + +#include +#include +#include +#include +#include +#include +#define MAX_TIME 85 +#define MAX_TRIES 100 + +int dht11_val[5]={0,0,0,0,0}; + +int dht11_read_val(int *h, int *t, int pin) { + uint8_t lststate=HIGH; + uint8_t counter=0; + uint8_t j=0,i; + + for (i=0;i<5;i++) { + dht11_val[i]=0; + } + + pinMode(pin, OUTPUT); + digitalWrite(pin, LOW); + delay(18); + digitalWrite(pin, HIGH); + delayMicroseconds(40); + pinMode(pin, INPUT); + + for (i=0;i=4) && (i%2==0)) { + dht11_val[j/8]<<=1; + if(counter>16) + dht11_val[j/8]|=1; + j++; + } + } + + // verify cheksum and print the verified data + if ((j>=40) && (dht11_val[4]==((dht11_val[0]+dht11_val[1]+dht11_val[2]+dht11_val[3])& 0xFF))) { + // Only return the integer part of humidity and temperature. The sensor + // is not accurate enough for decimals anyway + *h = dht11_val[0]; + *t = dht11_val[2]; + return 0; + } + else { + // invalid data + return 1; + } +} + +int _main(int n, char *argv[]) +{ + int j = 0; + int i; + char parameter[10]; + strcpy(parameter, argv[n]); + int len = strlen(parameter); + + for(i=0; i=48) //0~9的ASCII码是48~57 + {j++;} + } + if(j==len){ + return 1; + } else { + return 0; + } +} + +int main(int argc, char *argv[]) { + if(argc != 2){ + exit(1); + } + if(_main(1, argv) == 0) { + printf("参数错误, 参数1为PIN引脚值\n"); + exit(1); + } + + int pin = atol(argv[1]); + + int i; + int h; //humidity + int t; //temperature in degrees Celsius + + + wiringPiSetup(); + + // throw away the first 3 measurements + for (i=0; i<3; i++) { + dht11_read_val(&h, &t, pin); + delay(3000); + } + + // read the sensor until we get a pair of valid measurements + // but bail out if we tried too many times + int retval=1; + int tries=0; + while (retval != 0 && tries < MAX_TRIES) + { + retval = dht11_read_val(&h, &t, pin); + if (retval == 0) { + printf("%d %d\n", h, t); + } else { + delay(3000); + } + tries += 1; + } + if (tries < MAX_TRIES) + return 0; + else + return 1; + +} \ No newline at end of file diff --git a/gpio/info_infrared b/gpio/info_infrared deleted file mode 100644 index f91459e..0000000 Binary files a/gpio/info_infrared and /dev/null differ diff --git a/gpio/info_infrared.c b/gpio/info_infrared.c index 410e5c8..0dd8754 100644 --- a/gpio/info_infrared.c +++ b/gpio/info_infrared.c @@ -19,5 +19,6 @@ int main(int argc, char *argv[]) status = digitalRead(pin); printf("%d\n", status); - + + return status; } diff --git a/gpio/info_light b/gpio/info_light deleted file mode 100644 index 28574ec..0000000 Binary files a/gpio/info_light and /dev/null differ diff --git a/gpio/info_light.c b/gpio/info_light.c index a0af61e..1186622 100644 --- a/gpio/info_light.c +++ b/gpio/info_light.c @@ -1,6 +1,13 @@ +/* 设置PIN脚为1或0电位(电压) + * + * + */ + + #include #include #include +#include /* void pinMode (int pin, int mode) ; @@ -11,11 +18,36 @@ int digitalRead (int pin) ; analogRead (int pin) ; analogWrite (int pin, int value) ; */ + +int _main(char *argv[], int n) +{ + int j = 0; + int i; + char parameter[10]; + strcpy(parameter, argv[n]); + int len = strlen(parameter); + + for(i=0; i=48) //0~9的ASCII码是48~57 + {j++;} + } + if(j==len){ + return 1; + } else { + return 0; + } +} + int main(int argc, char *argv[]) { if( argc != 3) { exit(0); } + if(_main(argv, 1) == 0) { + printf("参数错误, 参数1为PIN引脚值\n"); + exit(1); + } int pin = atol(argv[1]); wiringPiSetup(); @@ -27,5 +59,6 @@ int main(int argc, char *argv[]) if(atol(argv[2]) == 0) { digitalWrite(pin, LOW); } - + return atol(argv[2]); } + diff --git a/gpio/info_pin b/gpio/info_pin deleted file mode 100644 index 8f81c44..0000000 Binary files a/gpio/info_pin and /dev/null differ diff --git a/gpio/info_pin.c b/gpio/info_pin.c index 2cd857b..840123e 100644 --- a/gpio/info_pin.c +++ b/gpio/info_pin.c @@ -1,16 +1,13 @@ +/* 测试PIN脚是否1或0 + * + * + */ + + #include #include #include -/* -void pinMode (int pin, int mode) ; -void pullUpDnControl (int pin, int pud) ; -void digitalWrite (int pin, int value) ; -void pwmWrite (int pin, int value) ; -int digitalRead (int pin) ; -analogRead (int pin) ; -analogWrite (int pin, int value) ; -*/ int main(int argc, char *argv[]) { if( argc != 2) { @@ -21,4 +18,6 @@ int main(int argc, char *argv[]) wiringPiSetup(); pinMode(pin, OUTPUT); printf("%d\n", digitalRead(pin)); + + return pin; } diff --git a/gpio/info_sound b/gpio/info_sound deleted file mode 100644 index 3bdcb9c..0000000 Binary files a/gpio/info_sound and /dev/null differ diff --git a/gpio/info_sound.c b/gpio/info_sound.c index 410e5c8..7b2c8e8 100644 --- a/gpio/info_sound.c +++ b/gpio/info_sound.c @@ -19,5 +19,6 @@ int main(int argc, char *argv[]) status = digitalRead(pin); printf("%d\n", status); - + + return status; } diff --git a/gpio/info_ultrasound b/gpio/info_ultrasound deleted file mode 100644 index 8f4724f..0000000 Binary files a/gpio/info_ultrasound and /dev/null differ diff --git a/gpio/info_ultrasound.c b/gpio/info_ultrasound.c index e17200e..60ce7b2 100644 --- a/gpio/info_ultrasound.c +++ b/gpio/info_ultrasound.c @@ -5,7 +5,6 @@ int main(int argc, char * argv[]) { - int i; if( argc != 3) { exit(0); } diff --git a/gpio/log/light.pid b/gpio/log/light.pid index fb2f0cb..7bd5dc0 100644 --- a/gpio/log/light.pid +++ b/gpio/log/light.pid @@ -1 +1 @@ -8982 +30955 diff --git a/gpio/log/wind.pid b/gpio/log/wind.pid index 384e6e6..e17bc24 100644 --- a/gpio/log/wind.pid +++ b/gpio/log/wind.pid @@ -1 +1 @@ -7721 +1299 diff --git a/gpio/log/wind_daemon.pid b/gpio/log/wind_daemon.pid new file mode 100644 index 0000000..70bdf7b --- /dev/null +++ b/gpio/log/wind_daemon.pid @@ -0,0 +1 @@ +1297 diff --git a/gpio/wind b/gpio/wind deleted file mode 100644 index 101f43f..0000000 Binary files a/gpio/wind and /dev/null differ diff --git a/gpio/wind.c b/gpio/wind.c index 97f45e4..6974705 100644 --- a/gpio/wind.c +++ b/gpio/wind.c @@ -1,4 +1,9 @@ -#include +/* DS18B20 温度传感器 + * + * + */ + + #include #include #include @@ -11,6 +16,8 @@ int main(int argc, char *argv[]) { + int _main(char *optarg); + int ch; opterr = 0; while((ch = getopt(argc, argv, "d:h?")) != -1) @@ -25,6 +32,7 @@ int main(int argc, char *argv[]) default: ; } + return 1; } int _main(char *optarg) @@ -37,10 +45,10 @@ int _main(char *optarg) FILE *fp; char *temp; float value; - char *device; // 设备 - if(optarg == '\0') - strcmp(device, optarg); - + //char *device; // 设备 + //if(optarg == '\0') { + // strcmp(device, optarg); + //} system("sudo modprobe w1-gpio"); system("sudo modprobe w1-therm"); if((dirp = opendir(path)) == NULL) { @@ -48,7 +56,7 @@ int _main(char *optarg) } while((direntp = readdir(dirp)) != NULL) { - if(strstr(direntp->d_name, device)) { + if(strstr(direntp->d_name, optarg)) { strcpy(rom, direntp->d_name); } } @@ -71,6 +79,5 @@ int _main(char *optarg) printf("%.0f\n", value); fclose(fp); - return 0; + return value; } -