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