diff --git a/README.md b/README.md index 8989a27..ddf331b 100644 --- a/README.md +++ b/README.md @@ -6,11 +6,3 @@ raspberrypi zero w GPIO 实现的智能家居 - 我发现传感器的数据是实时的,传感器的工作必须是实时的 - 有时做不到数据的准确 - 就做了多进程的shell(不同pid)来满足传感器数据现状,一个进程收集传感器数据,另一个进程处理数据. -- 谢谢@威威君帮写的app - - -app配合socket服务器设置 - - -app主界面 - \ No newline at end of file diff --git a/circuits/Smart home.fzz b/circuits/Smart home.fzz new file mode 100644 index 0000000..92cae92 Binary files /dev/null and b/circuits/Smart home.fzz differ diff --git a/circuits/Untitled Sketch.fzz b/circuits/Untitled Sketch.fzz deleted file mode 100644 index a383055..0000000 Binary files a/circuits/Untitled Sketch.fzz and /dev/null differ diff --git a/circuits/p20856.db b/circuits/p20856.db new file mode 100644 index 0000000..30148c1 Binary files /dev/null and b/circuits/p20856.db differ diff --git a/gpio/dht11.c b/gpio/dht11.c index e7c8d38..62c3a34 100644 --- a/gpio/dht11.c +++ b/gpio/dht11.c @@ -67,25 +67,17 @@ int dht11_read_val(int *h, int *t, int pin) } } -int is_num(int n, char *argv[]) +static int is_num(char *str) { - int j = 0; - int i; - char parameter[10]; - strcpy(parameter, argv[n]); - int len = strlen(parameter); - - for (i = 0; i < len; i++) { - if (parameter[i] <= 57 && parameter[i] >= 48) //0~9的ASCII码是48~57 - { - j++; + int i, len; + for (i = 0, len = strlen(str); i < len; i++) { + if (isdigit(str[i]) == 0) { + printf("不是数字\n"); + return 1; } } - if (j == len) { - return 1; - } else { - return 0; - } + + return 0; } int main(int argc, char *argv[]) @@ -94,7 +86,7 @@ int main(int argc, char *argv[]) printf("Parameter error.\n"); exit(1); } - if (is_num(1, argv) == 0) { + if (is_num(argv[1]) == 1) { printf("Parameter error, parameter 1 is PIN pin value\n"); exit(1); } diff --git a/gpio/dht12.c b/gpio/dht12.c index 6b39fb6..5bcede9 100644 --- a/gpio/dht12.c +++ b/gpio/dht12.c @@ -78,25 +78,17 @@ int read_dht_data(float *h, float *c, float *f, int PIN) } } -int is_num(int n, char *argv[]) +static int is_num(char *str) { - int j = 0; - int i; - char parameter[10]; - strcpy(parameter, argv[n]); - int len = strlen(parameter); - - for (i = 0; i < len; i++) { - if (parameter[i] <= 57 && parameter[i] >= 48) //0~9的ASCII码是48~57 - { - j++; + int i, len; + for (i = 0, len = strlen(str); i < len; i++) { + if (isdigit(str[i]) == 0) { + printf("不是数字\n"); + return 1; } } - if (j == len) { - return 1; - } else { - return 0; - } + + return 0; } int main(int argc, char *argv[]) @@ -105,7 +97,7 @@ int main(int argc, char *argv[]) printf("Parameter error.\n"); exit(1); } - if (is_num(1, argv) == 0) { + if (is_num(argv[1]) == 1) { printf("Parameter error, parameter 1 is PIN pin value\n"); exit(1); } diff --git a/gpio/helement.c b/gpio/helement.c index e3f4e08..6c35a1c 100644 --- a/gpio/helement.c +++ b/gpio/helement.c @@ -9,25 +9,17 @@ #include #include -int is_num(int n, char *argv[]) +static int is_num(char *str) { - int j = 0; - int i; - char parameter[10]; - strcpy(parameter, argv[n]); - int len = strlen(parameter); - - for (i = 0; i < len; i++) { - if (parameter[i] <= 57 && parameter[i] >= 48) //0~9的ASCII码是48~57 - { - j++; + int i, len; + for (i = 0, len = strlen(str); i < len; i++) { + if (isdigit(str[i]) == 0) { + printf("不是数字\n"); + return 1; } } - if (j == len) { - return 1; - } else { - return 0; - } + + return 0; } int main(int argc, char *argv[]) @@ -37,7 +29,8 @@ int main(int argc, char *argv[]) printf("Parameter error.\n"); exit(1); } - if (is_num(1, argv) == 0) { + + if (is_num(argv[1]) == 1) { printf("Parameter error, parameter 1 is PIN pin value\n"); exit(1); } diff --git a/gpio/infrared.c b/gpio/infrared.c index 7bc5f79..6dee74d 100644 --- a/gpio/infrared.c +++ b/gpio/infrared.c @@ -9,25 +9,17 @@ #include #include -int is_num(int n, char *argv[]) +static int is_num(char *str) { - int j = 0; - int i; - char parameter[10]; - strcpy(parameter, argv[n]); - int len = strlen(parameter); - - for (i = 0; i < len; i++) { - if (parameter[i] <= 57 && parameter[i] >= 48) //0~9的ASCII码是48~57 - { - j++; + int i, len; + for (i = 0, len = strlen(str); i < len; i++) { + if (isdigit(str[i]) == 0) { + printf("不是数字\n"); + return 1; } } - if (j == len) { - return 1; - } else { - return 0; - } + + return 0; } int main(int argc, char *argv[]) @@ -36,7 +28,8 @@ int main(int argc, char *argv[]) printf("Parameter error.\n"); exit(1); } - if (is_num(1, argv) == 0) { + + if (is_num(argv[1]) == 1) { printf("Parameter error, parameter 1 is PIN pin value\n"); exit(1); } diff --git a/gpio/light.c b/gpio/light.c index 8edcedd..4ad1a16 100644 --- a/gpio/light.c +++ b/gpio/light.c @@ -7,26 +7,21 @@ #include #include #include +#include +#include -int is_num(int n, char *argv[]) + +static int is_num(char *str) { - int j = 0; - int i; - char parameter[10]; - strcpy(parameter, argv[n]); - int len = strlen(parameter); - - for (i = 0; i < len; i++) { - if (parameter[i] <= 57 && parameter[i] >= 48) //0~9的ASCII码是48~57 - { - j++; + int i, len; + for (i = 0, len = strlen(str); i < len; i++) { + if (isdigit(str[i]) == 0) { + printf("不是数字\n"); + return 1; } } - if (j == len) { - return 1; - } else { - return 0; - } + + return 0; } int main(int argc, char *argv[]) @@ -35,11 +30,13 @@ int main(int argc, char *argv[]) printf("Parameter error.\n"); exit(1); } - if (is_num(1, argv) == 0) { + + if (is_num(argv[1]) == 1) { printf("Parameter error, parameter 1 is PIN pin value\n"); exit(1); } - if (is_num(2, argv) == 0) { + + if (is_num(argv[2]) == 1) { printf("Parameter error, parameter 2 is true or false\n"); exit(1); } diff --git a/gpio/pin.c b/gpio/pin.c index d832274..58619ba 100644 --- a/gpio/pin.c +++ b/gpio/pin.c @@ -8,25 +8,17 @@ #include #include -int is_num(int n, char *argv[]) +static int is_num(char *str) { - int j = 0; - int i; - char parameter[10]; - strcpy(parameter, argv[n]); - int len = strlen(parameter); - - for (i = 0; i < len; i++) { - if (parameter[i] <= 57 && parameter[i] >= 48) //0~9的ASCII码是48~57 - { - j++; + int i, len; + for (i = 0, len = strlen(str); i < len; i++) { + if (isdigit(str[i]) == 0) { + printf("不是数字\n"); + return 1; } } - if (j == len) { - return 1; - } else { - return 0; - } + + return 0; } int main(int argc, char *argv[]) @@ -35,7 +27,8 @@ int main(int argc, char *argv[]) printf("Parameter error.\n"); exit(1); } - if (is_num(1, argv) == 0) { + + if (is_num(argv[1]) == 1) { printf("Parameter error, parameter 1 is PIN pin value\n"); exit(1); } diff --git a/gpio/sound.c b/gpio/sound.c index 81fda33..add81e9 100644 --- a/gpio/sound.c +++ b/gpio/sound.c @@ -9,25 +9,17 @@ #include #include -int is_num(int n, char *argv[]) +static int is_num(char *str) { - int j = 0; - int i; - char parameter[10]; - strcpy(parameter, argv[n]); - int len = strlen(parameter); - - for (i = 0; i < len; i++) { - if (parameter[i] <= 57 && parameter[i] >= 48) //0~9的ASCII码是48~57 - { - j++; + int i, len; + for (i = 0, len = strlen(str); i < len; i++) { + if (isdigit(str[i]) == 0) { + printf("不是数字\n"); + return 1; } } - if (j == len) { - return 1; - } else { - return 0; - } + + return 0; } int main(int argc, char *argv[]) @@ -36,7 +28,7 @@ int main(int argc, char *argv[]) printf("Parameter error.\n"); exit(1); } - if (is_num(1, argv) == 0) { + if (is_num(argv[1]) == 1) { printf("Parameter error, parameter 1 is PIN pin value\n"); exit(1); } diff --git a/gpio/ultrasound.c b/gpio/ultrasound.c index 2ee8014..b13ca3e 100644 --- a/gpio/ultrasound.c +++ b/gpio/ultrasound.c @@ -9,41 +9,34 @@ #include #include -int is_num(int n, char *argv[]) +static int is_num(char *str) { - int j = 0; - int i; - char parameter[10]; - strcpy(parameter, argv[n]); - int len = strlen(parameter); - - for (i = 0; i < len; i++) { - if (parameter[i] <= 57 && parameter[i] >= 48) //0~9的ASCII码是48~57 - { - j++; + int i, len; + for (i = 0, len = strlen(str); i < len; i++) { + if (isdigit(str[i]) == 0) { + printf("不是数字\n"); + return 1; } } - if (j == len) { - return 1; - } else { - return 0; - } + + return 0; } + int main(int argc, char *argv[]) { if (argc != 3) { printf("Parameter error.\n"); exit(1); } - if (is_num(1, argv) == 0) { - printf("Parameter error, Parameter 1 is the tring pin\n"); + if (is_num(argv[1]) == 1) { + printf("Parameter error, parameter 1 is PIN pin value\n"); exit(1); } - if (is_num(2, argv) == 0) { - printf("Parameter error, Parameter 2 is the echo pin\n"); + if (is_num(argv[2]) == 1) { + printf("Parameter error, parameter 1 is PIN pin value\n"); exit(1); - } + } int pin_tring = atol(argv[1]); int pin_echo = atol(argv[2]); diff --git a/sensor-data-upload/Makefile b/sensor-data-upload/Makefile new file mode 100644 index 0000000..4072ea7 --- /dev/null +++ b/sensor-data-upload/Makefile @@ -0,0 +1,20 @@ +CROSS_COMPILE ?= +CC := $(CROSS_COMPILE)gcc +STRIP := $(CROSS_COMPILE)strip +CFLAGS = -Wall -g -O3 +LIB = +OBJ = sensor-upload + +MYSQL_LIB := $(shell /opt/mysql/bin/mysql_config --libs) +MYSQL_CFLAGS := $(shell /opt/mysql/bin/mysql_config --cflags) + + +all: main.o + $(CC) $(CFLAGS) $(MYSQL_CFLAGS) -o $(OBJ) $^ $(MYSQL_LIB) $(LIB) + $(STRIP) $(OBJ) +.c.o: + $(CC) $(CFLAGS) $(MYSQL_CFLAGS) -c $< + +clean: + rm -rf *.o + rm $(OBJ) diff --git a/sensor-data-upload/main.c b/sensor-data-upload/main.c new file mode 100644 index 0000000..85b3fb5 --- /dev/null +++ b/sensor-data-upload/main.c @@ -0,0 +1,100 @@ +#include "main.h" + +void printResult(MYSQL * mysqlPrint) // 打印结果集(此处传入指针,而非内容) +{ + MYSQL_RES *result; + int i; + int numFields = 0; + int numRows = 0; + MYSQL_FIELD *field; + MYSQL_ROW row; + + result = mysql_store_result(mysqlPrint); // 将查询的全部结果读取到客户端 + numFields = mysql_num_fields(result); // 统计结果集中的字段数 + numRows = mysql_num_rows(result); // 统计结果集的行数 + while ((field = mysql_fetch_field(result))) // 返回结果集中的列信息(字段) + printf("%s\t", field->name); + printf("\n"); + if (result) { + while ((row = mysql_fetch_row(result))) // 返回结果集中行的记录 + { + for (i = 0; i < numFields; i++) { + printf("%s\t", row[i]); + } + printf("\n"); + } + } + + mysql_free_result(result); // 释放result空间 + +} + +int main(int argc, char *argv[], char **env) +{ + FILE *fp; + char temperature[BUFFER]; + char time[BUFFER]; + char dht11[BUFFER]; + char sql_insert[BUFFER]; + char system[BUFFER]; + + fp = NULL; + bzero(temperature, 0); + bzero(time, 0); + bzero(dht11, 0); + bzero(sql_insert, 0); + bzero(system, 0); + + fp = popen("/root/gpio/wind -d 28", "r"); + fgets(temperature, sizeof(temperature), fp); + temperature[strlen(temperature) - 1] = 0; + fp = popen("date '+%y%m%d%H%M%S'", "r"); + fgets(time, sizeof(time), fp); + time[strlen(time) - 1] = 0; + pclose(fp); + + fp = popen("/root/gpio/dht11 29", "r"); + fgets(dht11, sizeof(dht11), fp); + dht11[strlen(dht11) - 1] = 0; + printf("%s\n", dht11); + pclose(fp); + + + fp = popen("getcpudata | xargs", "r"); + fgets(system, sizeof(system), fp); + system[strlen(system) - 1] = 0; + printf("%s\n", system); + pclose(fp); + + sprintf(sql_insert, "INSERT INTO temperature (time, temperature, dht11, SYSTEM) VALUES ('%s', '%s', '%s', '%s');", time, temperature, dht11, system); + puts(sql_insert); + + + + MYSQL mysql; + mysql_init(&mysql); + if (mysql_real_connect(&mysql, "git.aixiao.me", "root", "198", "mysql", 3306, NULL, 0)) { + ; + } else { + fprintf(stderr, "Connect failed:\n"); + if (mysql_errno(&mysql)) { + printf("\terror code is %d\n\treason:%s\n", mysql_errno(&mysql), mysql_error(&mysql)); + } + goto shutdown; + } + + if (0 != mysql_set_character_set(&mysql, "utf8")) + { + perror("mysql_set_character_set"); + } + + mysql_query(&mysql, "use raspberrypi;"); + mysql_query(&mysql, sql_insert); + mysql_query(&mysql, "select *from temperature;"); + //printResult(&mysql); + +shutdown: + mysql_close(&mysql); + + return 0; +} diff --git a/sensor-data-upload/main.h b/sensor-data-upload/main.h new file mode 100644 index 0000000..2fa7d57 --- /dev/null +++ b/sensor-data-upload/main.h @@ -0,0 +1,13 @@ +#ifndef MAIN_H +#define MAIN_H + +#include +#include +#include +#include +#include +#include + +#define BUFFER 1024 + +#endif