아두이노 라즈베리파이 MYSQL 프로젝트

    서버와 클라이언트통신 (TCPIP,라즈베리파이,아두이노,c언어,mysql) (완료)

    1. 아두이노로 ・습도 값을 측정하고 불쾌지수를 구한다.  (블루투스를 연동하여 데이터를 확인할수있다.)

     

    2. 온・습도・불쾌지수를 버퍼에 담는다.

     

    3. 버퍼에 담은 데이터를 클라이언트(우분투) 를 사용하여 서버 (Raspberry Pi ,Putty) 로 보낸다.

     

    4. 서버에서 버퍼에 담아온 데이터를 쪼갠다. (ex 온도, 습도, 불쾌지수로 나눔)

     

    5. 나눈 데이터 온도 데이터를 이용하여 옷차림을 만들어 낸다.

     

    6. 옷차림 데이터와 온도, 습도, 불쾌지수 데이터를  서버에서  MY_SQL과 연동하여 DB에 저장한다.

     

    우분투, 아두이노 스케치, 라즈베리파이, c언어 mysql 를 사용하였다.

     

    아두이노 소스코드

     

    #include  
    #include  
    #include  
    #include  
    int T = 2; 
    int R = 3; 
    
    int temp_sensor = A0; 
    
    SoftwareSerial BT(T, R); 
    
    DHT dht(A0, DHT11); 
    
    void setup(){ 
      Serial.begin(9600UL); 
      BT.begin(9600); // 블루투스 통신을 시작한다. 
       
      dht.begin(); // 온습도계가 측정을 시작한다. 
      pinMode(5, OUTPUT); 
      pinMode(6, OUTPUT); 
      pinMode(7, OUTPUT); 
       
    } 
      
    void loop(){ 
      int temp = dht.readTemperature();  //측정한 온도값을 readTemperature() 함수로 불러와 temp 라는 변수에 저장 
       
      int humi = dht.readHumidity();  //측정한 습도값을 readHumiditiy() 함수로 불러와 humi 라는 변수에 저장 
       
       
      BT.print("온도 : "); 
      BT.print(temp); 
      BT.print(" 습도 : "); 
      BT.print(humi); 
      //블루투스출력 
      delay(1000);    //데이터는 1초마다 출력된다. 
    //  Serial.print("temp ="); 
       
      Serial.print(dht.readTemperature()); 
      delay(1000UL); 
      Serial.print(" "); 
    //  Serial.print(" humi ="); 
      Serial.print(dht.readHumidity()); 
      delay(1000UL); 
       
      if(((dht.readTemperature())>30&&(dht.readHumidity())>90)) 
      { 
        Serial.println(" 100"); 
        BT.print(" 불쾌지수:"); 
        BT.println("100"); 
         
      } 
      else if(((dht.readTemperature())>27&&(dht.readHumidity())>85)) 
        { 
        Serial.println(" 80"); 
        BT.print(" 불쾌지수:"); 
        BT.println("80"); 
        digitalWrite(5, LOW); 
        digitalWrite(6, LOW); 
        digitalWrite(7, HIGH); 
        } 
      else if(((dht.readTemperature())>26&&(dht.readHumidity())>80)) 
        { 
        Serial.println(" 60"); 
        BT.print(" 불쾌지수:"); 
        BT.println("60"); 
        digitalWrite(5, LOW); 
        digitalWrite(6, HIGH); 
        digitalWrite(7, LOW); 
        } 
       else if(((dht.readTemperature())>24&&(dht.readHumidity())>70)) 
        { 
        Serial.println(" 40"); 
        BT.print(" 불쾌지수:"); 
        BT.println("40"); 
        digitalWrite(5, HIGH); 
        digitalWrite(6, LOW); 
        digitalWrite(7, LOW); 
        } 
        else{ 
        Serial.println(" 10"); 
        BT.print(" 불쾌지수:"); 
        BT.println("10"); 
        } 
         
    }
    
    
    
    클라이언트 소스코드
    
    #include  <stdio.h>
    #include  <stdlib.h>
    #include  <string.h>
    #include  <unistd.h>
    #include <sys/types.h> 
    #include <sys/stat.h> 
    #include  <fcntl.h>
    #include  <termios.h>
    #include <arpa/inet.h> 
    #include <sys/socket.h> 
    
    #define BUF_SIZE 1024 
    #define BAUDRATE        B9600 
    #define MODEMDEVICE     "/dev/ttyACM0" 
    #define _POSIX_SOURCE   1       // POSIX compliant source 
    
    #define FALSE   0 
    #define TRUE    1 
    
    void error_handling(char *message); 
    int main(int argc, char *argv[]) 
    { 
            int fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY ); 
            if (fd <0) { perror(MODEMDEVICE); exit(-1); } 
    
            struct termios tio; 
            tcgetattr(fd,&tio); 
            tio.c_cflag |= BAUDRATE; 
            tio.c_cflag |= CS8; 
            tio.c_lflag = ICANON; 
            tcsetattr(fd,TCSANOW,&tio); 
    
            int count=1; 
    int sock; 
    char buf[BUF_SIZE]; 
    int str_len, recv_len, recv_cnt; 
    struct sockaddr_in serv_adr; 
    
    if(argc!=3) { 
    printf("Usage : %s  \n", argv[0]); 
    exit(1); 
    } 
    
    sock=socket(PF_INET, SOCK_STREAM, 0); 
    if(sock==-1) 
    error_handling("socket() error"); 
    
    memset(&serv_adr, 0, sizeof(serv_adr)); 
    serv_adr.sin_family=AF_INET; 
    serv_adr.sin_addr.s_addr=inet_addr(argv[1]); 
    serv_adr.sin_port=htons(atoi(argv[2])); 
    
    if(connect(sock, (struct sockaddr*)&serv_adr, sizeof(serv_adr))==-1) 
    error_handling("connect() error!"); 
    else 
    puts("Connected..........."); 
    printf("   temp  humi  DI\n"); 
            while(1) 
            { 
                    int res = read(fd,buf,255); 
    buf[res] = '\0'; 
    if(res > 1) 
    { 
                     printf("%d :%s\n",count++, buf); 
    write(sock, buf, strlen(buf)); 
    } 
                    if(res<=0) break; 
    
            } 
    
            close(fd); 
            return 0; 
    } 
    
    void error_handling(char *message) 
    { 
    fputs(message, stderr); 
    fputc('\n',stderr); 
    exit(1); 
    } 
    
    
     
    
    
    
    서버 소스코드
    
    
    
    #include  
    #include  
    #include  
    #include  
    #include <arpa/inet.h> 
    #include <sys/socket.h> 
    #include <mysql/mysql.h> 
    
    #define BUF_SIZE 1024 
    MYSQL my_connection; 
    MYSQL_RES *res_ptr; 
    MYSQL_ROW sqlrow; 
    void error_handling(char *message); 
    
    int main(int argc, char *argv[]) 
    { 
       int res, first_row =1; 
       int serv_sock, clnt_sock; 
       char buf[BUF_SIZE]; 
       int str_len, i,j; 
       int count =1; 
       struct sockaddr_in serv_adr, clnt_adr; 
       socklen_t clnt_adr_sz; 
    
       if(argc!=2) 
       { 
          printf("Usage : %s \n", argv[0]); 
          exit(1); 
       } 
    
       serv_sock = socket(PF_INET, SOCK_STREAM, 0); 
       if(serv_sock ==-1) 
          error_handling("socket() error"); 
    
       memset(&serv_adr, 0, sizeof(serv_adr)); 
       serv_adr.sin_family = AF_INET; 
       serv_adr.sin_addr.s_addr = htonl(INADDR_ANY); 
       serv_adr.sin_port = htons(atoi(argv[1])); 
    
       if(bind(serv_sock, (struct sockaddr*) &serv_adr, sizeof(serv_adr)) ==1) 
          error_handling("bind() error"); 
    
       if(listen(serv_sock, 5) == -1) 
          error_handling("listen() error"); 
    
       clnt_adr_sz = sizeof(clnt_adr); 
    
       for(i = 0; i < 5; i++) 
       { 
          clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_adr, &clnt_adr_sz); 
          if(clnt_sock ==-1) 
             error_handling("accept() error"); 
          else 
             printf("Connected client %d \n", i+1); 
    
          while((str_len = read(clnt_sock, buf, BUF_SIZE))!=0) 
          { 
    
             buf[str_len] = '\0'; 
    
             printf("%d %s\n",count++,buf); 
             char *ptr = strtok(buf, " "); 
             int j =0; 
             char *sArr[30]; 
             while(ptr!=NULL) 
             { 
                sArr[j] = ptr; 
                j++; 
                ptr = strtok(NULL, " "); 
             } 
             int k = 0; 
             for(k=0; k<3; k++) 
             { 
                if(sArr[k] !=NULL) 
                printf("%s\n",sArr[k]); 
             } 
             printf("\n"); 
             char summer[15]="summerclothes"; 
             char spf[13]="spfclothes"; 
             char usual[13]="longclothes"; 
             int m=0; 
             int result = atoi(sArr[0]); 
             char query[255]; 
             //printf("%d\n", result); 
     mysql_init(&my_connection); 
             if(mysql_real_connect(&my_connection, "localhost","root","","project",0,NULL,0)) 
     { 
             if(result > 30) 
             { 
                   printf("connect success\n"); 
                sprintf(query, "INSERT INTO value(NO,TEMP,HUMI,DI,CLOTHES,TIME) values('%d','%s','%s','%s','%s',now())",count, sArr[0],sArr[1],sArr[2],summer); 
                res = mysql_query(&my_connection,query); 
      
              if(!res) 
              { 
                 printf("Inserted %lu rows\n",(unsigned long)mysql_affected_rows(&my_connection)); 
              } 
    
              else 
              { 
                 fprintf(stderr, "Insert error %d: %s\n", mysql_errno(&my_connection), mysql_error(&my_connection)); 
              } 
    
                 mysql_close(&my_connection); 
     }  
     if(result > 26) 
             { 
                   printf("connect success\n"); 
                sprintf(query, "INSERT INTO value(NO,TEMP,HUMI,DI,CLOTHES,TIME) values('%d','%s','%s','%s','%s',now())",count, sArr[0],sArr[1],sArr[2],spf); 
                res = mysql_query(&my_connection,query); 
      
              if(!res) 
              { 
                 printf("Inserted %lu rows\n",(unsigned long)mysql_affected_rows(&my_connection)); 
              } 
    
              else 
              { 
                 fprintf(stderr, "Insert error %d: %s\n", mysql_errno(&my_connection), mysql_error(&my_connection)); 
              } 
    
                 mysql_close(&my_connection); 
     } 
     if(result <27) 
             { 
                   printf("connect success\n"); 
                sprintf(query, "INSERT INTO value(NO,TEMP,HUMI,DI,CLOTHES,TIME) values('%d','%s','%s','%s','%s',now())",count, sArr[0],sArr[1],sArr[2],usual); 
                res = mysql_query(&my_connection,query); 
      
              if(!res) 
              { 
                 printf("Inserted %lu rows\n",(unsigned long)mysql_affected_rows(&my_connection)); 
              } 
    
              else 
              { 
                 fprintf(stderr, "Insert error %d: %s\n", mysql_errno(&my_connection), mysql_error(&my_connection)); 
              } 
    
                 mysql_close(&my_connection); 
     } 
              else 
              { 
                        fprintf(stderr,"Connection failed\n"); 
                        if(mysql_errno(&my_connection)) 
                        { 
                               fprintf(stderr,"Connection error %d: %s \n",mysql_errno(&my_connection),mysql_error(&my_connection)); 
                        } 
              } 
                 
             } 
    
    }       
          close(clnt_sock); 
       } 
    
       close(serv_sock); 
    } 
    
        
    
    
    void error_handling(char *message) 
    { 
       fputs(message, stderr); 
       fputc('\n', stderr); 
       exit(1); 
    }

     

    시현 영상

    https://www.youtube.com/watch?v=kVX4mxsP7A4

     

    온습도 db화 및 블루투스통신

    아두이노에서 온습도를 측정하여 클라이언트와 서버를 이용하여 값을 보내고 값을 생성하여 데이터베이스에 저장

    www.youtube.com

     

    댓글

    Designed by JB FACTORY