====Welcome==== ====Purpose==== The purpose of this project was to create a simple daemon type utility that checks the state of a MYSQL database. Based on the state of certain data the program will execute certain operations. ====The GPIO==== Using the wringPi library means you can use your RPi's GPIO like an Arduino's. This means easy access to the GPIO in C/C++ programs. the workhorse of wiringPi is: "pinMode(pinNumber, OUTPUT/INPUT);" and "digitalWrite(pinNumber, state);" ====PHP and MYSQL==== Using a PHP frontend and MYSQL as mediator we can have users interface with the RPi's GPIO via a web GUI. Let's abstract that away for now and focus on the daemon. ====C code==== Here's some code that establishes a local MYSQL connection and checks the database based on an interval of seconds chosen as an initial argument. #include #include #include #include #include int main(int argc, char *argv[]){ char user[7] = "gpio"; char pass[6] = "*****"; MYSQL *connection; MYSQL_RES *result; MYSQL_ROW row; int num_fields; int i; if (wiringPiSetup () == -1) exit (1) ; connection = mysql_init(NULL); if (connection == NULL) { printf("Error %u: %s\n", mysql_errno(connection), mysql_error(connection)); exit(1); }else{ printf("connection established\n"); } printf("MySQL client version: %s\n", mysql_get_client_info()); mysql_real_connect(connection, "localhost", user, pass, "gpio", 0, NULL, 0); int repeatFlag = atoi(argv[1]); char test[4]; for(;;){ mysql_query(connection, "SELECT pinDirection FROM pinDirection WHERE pinNumber ='17'"); result = mysql_store_result(connection); num_fields = mysql_num_fields(result); while ((row = mysql_fetch_row(result))) { for(i = 0; i < num_fields; i++) { char* tester = row[i] ? row[i] : "NULL"; if (tester[0] == 'o' && tester[1] == 'u' && tester[2] == 't'){ printf("%s\n",tester); pinMode(0, OUTPUT); mysql_query(connection, "SELECT pinStatus FROM pinStatus WHERE pinNumber ='17'"); result = mysql_store_result(connection); num_fields = mysql_num_fields(result); tester = NULL; while ((row = mysql_fetch_row(result))){ for(i = 0; i < num_fields; i++){ char *tester = row[i] ? row[i] : "NULL"; printf("State: %s\n",tester); if (tester[0] == '0'){ digitalWrite(0, 0); }else digitalWrite(0, 1); } } }else if(tester[0] == 'i' && tester[1] == 'n'){ printf("%s\n",tester); pinMode(0, INPUT); mysql_query(connection, "SELECT pinStatus FROM pinStatus WHERE pinNumber ='17'"); result = mysql_store_result(connection); num_fields = mysql_num_fields(result); tester = NULL; while ((row = mysql_fetch_row(result))){ for(i = 0; i < num_fields; i++){ char *tester = row[i] ? row[i] : "NULL"; printf("State%s\n",tester); if (tester[0] == '0'){ digitalWrite(0, 0); }else digitalWrite(0, 1); } } } } printf("\n"); } sleep(repeatFlag); } mysql_free_result(result); mysql_close(connection); return 0; }