diff --git a/client_new.c b/client_new.c new file mode 100644 index 0000000000000000000000000000000000000000..66329694702b3a11866bd48c545f61cfc9997da2 --- /dev/null +++ b/client_new.c @@ -0,0 +1,305 @@ +//이채민 client_new.c + +#include <sys/stat.h> +#include <sys/types.h> +#include <fcntl.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> +#include <arpa/inet.h> +#include <sys/socket.h> + +#include <wiringPi.h> +#include <wiringPiSPI.h> +#include <stdint.h> + + +#define IN 0 +#define OUT 1 +#define LOW 0 +#define HIGH 1 +#define POUT 18 + +#define VALUE_MAX 30 + +#define MAX_TIME 100 +#define DHT 5 +#define PIN 20 + +int data[5] = {0,0,0,0,0}; +char temp_msg[10]; + +int read_dht_data() { + uint8_t laststate = HIGH; + uint8_t counter = 0; + uint8_t j = 0, i; + + data[0] = data[1] = data[2] = data[3] = data[4] = 0; + + pinMode(DHT, OUTPUT); + digitalWrite(DHT, LOW); + delay(18); + + pinMode(DHT, INPUT); + + for (i=0; i<MAX_TIME; i++) { + counter = 0; + while(digitalRead(DHT) == laststate) + { + counter++; + delayMicroseconds(1); + if (counter == 255) { + break; + } + } + laststate = digitalRead(DHT); + + if (counter == 255) + break; + + if ((i>=4) && (i%2==0)) + { + data[j/8]<<=1; + if (counter > 16) + data[j/8] |= 1; + j++; + } + } + if ((j>=40) && (data[4] == ((data[0]+ data[1] + data[2] + data[3]) & 0xFF))) { + printf("Humidity = %d.%d %% Temperature = %d.%d C\n", data[0], data[1], data[2], data[3]); + //sprintf(temp_msg,"%d\n", data[2]); + //printf("temp_msg : %s\n", temp_msg); + if (data[2]>=28) { + printf("hot! hot! hot!\n"); + //temp_msg[0] = 1; + //printf("temp_msg : %s\n", temp_msg); + return(1); + + } + else return(0); + + } else { + printf("failed\n"); + return(0); + } + +} + +static int GPIOExport(int pin) { +#define BUFFER_MAX 3 + char buffer[BUFFER_MAX]; + ssize_t bytes_written; + int fd; + + fd = open("/sys/class/gpio/export", O_WRONLY); + if (-1 == fd) { + fprintf(stderr, "Failed to open export for writing!\n"); + return(-1); + } + + bytes_written = snprintf(buffer, BUFFER_MAX, "%d", pin); + write(fd, buffer, bytes_written); + close(fd); + return(0); +} + + + +static int GPIOUnexport(int pin) { + char buffer[BUFFER_MAX]; + ssize_t bytes_written; + int fd; + + fd = open("/sys/class/gpio/unexport", O_WRONLY); + if (-1 == fd) { + fprintf(stderr, "Failed to open unexport for writing!\n"); + return(-1); + } + + bytes_written = snprintf(buffer, BUFFER_MAX, "%d", pin); + write(fd, buffer, bytes_written); + close(fd); + return(0); +} + +static int GPIODirection(int pin, int dir) { + static const char s_directions_str[] = "in\0out"; + +#define DIRECTION_MAX 35 + char path[DIRECTION_MAX] = "/sys/class/gpio/gpio%d/direction"; + int fd; + + snprintf(path, DIRECTION_MAX, "/sys/class/gpio/gpio%d/direction", pin); + + fd = open(path, O_WRONLY); + if (-1 == fd) { + fprintf(stderr, "Failed to open gpio direction for writing!\n"); + return(-1); + } + + if (-1 == write(fd, &s_directions_str[IN==dir?0:3], IN==dir?2:3)) { + fprintf(stderr, "Failed to set direction!\n"); + close(fd); + return(-1); + } + + close(fd); + return(0); +} + +static int GPIOWrite(int pin, int value) { + static const char s_values_str[] = "01"; + + char path[VALUE_MAX]; + int fd; + + snprintf(path, VALUE_MAX, "/sys/class/gpio/gpio%d/value", pin); + fd = open(path, O_WRONLY); + if (-1 == fd) { + fprintf(stderr, "Failed to open gpio value for writing!\n"); + return(-1); + } + if (1 != write(fd, &s_values_str[LOW == value ? 0 : 1], 1)) { + fprintf(stderr, "Failed to write value!\n"); + close(fd); + return(-1); + } + + close(fd); + return(0); +} + + +static int GPIORead(int pin) { + char path[VALUE_MAX]; + char value_str[3]; + int fd; + + snprintf(path, VALUE_MAX, "/sys/class/gpio/gpio%d/value", pin); + fd = open(path, O_RDONLY); + if ( -1 == fd) { + fprintf(stderr, "Failed to open gpio value for reading!\n"); + return(-1); + } + if (-1 == read(fd, value_str, 3)) { + fprintf(stderr, "Failed to read value!\n"); + close(fd); + return(-1); + } + + close(fd); + + return(atoi(value_str)); +} + +void error_handling(char *message){ + fputs(message,stderr); + fputc('\n',stderr); + exit(1); +} + + +int main(int argc, char *argv[]) { + int sock; + struct sockaddr_in serv_addr; + char msg[2]; + char on[2]="1"; + int str_len; + int light = 0; + int state = 1; + int prev_state = 1; + + if(argc!=3){ + printf("Usage : %s <IP> <port>\n",argv[0]); + exit(1); + } + /* + const *hostname; + char buf [BUFSIZE]; + + server = gethostbyname(hostname); + if (server == NULL) { + fprintf(stderr, "ERROR, no such host %s\n", hostname); + exit((0); + } +*/ + //Enable GPIO pins + if (-1 == GPIOExport(POUT)) + return(1); + + //Set GPIO directions + if (-1 == GPIODirection(POUT, OUT)) + return(2); + + if (wiringPiSetupGpio() == -1) + exit(1); + + + sock = socket(PF_INET, SOCK_STREAM, 0); + if(sock == -1) + error_handling("socket() error"); + + memset(&serv_addr, 0, sizeof(serv_addr)); + serv_addr.sin_family = AF_INET; + serv_addr.sin_addr.s_addr = inet_addr(argv[1]); + serv_addr.sin_port = htons(atoi(argv[2])); + + if(connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr))==-1) + error_handling("connect() error"); + + + while(1){ + state = read_dht_data(); + //read_dht_data(); + delay(3000); + + if(prev_state == 0 && state == 1){ + light = (light+1)%2; + snprintf(msg,2,"%d",light); + write(sock, msg, sizeof(msg)); + printf("msg = %s\n",msg); + + //write(sock, temp_msg, sizeof(temp_msg)); + //printf("temp msg=%s\n", temp_msg); + + /* if (temp_msg >= "28") { + printf("28 upup"); + }*/ + + } + + prev_state = state; + usleep(500*100); + + /* + str_len = read(sock, msg, sizeof(msg)); + //str_len = read(sock, temp_msg, sizeof(temp_msg)); + if(str_len == -1) + error_handling("read() error"); + + printf("Receive message from Server : %s\n", msg); + if(strncmp(on,msg,1)==0) { + light = 1; + read_dht_data(); + delay(2000); + + write(sock, temp_msg, sizeof(temp_msg)); + } + + else + light = 0; + */ + + //GPIOWrite(POUT, light); + + } + close(sock); + //Disable GPIO pins + if (-1 == GPIOUnexport(POUT)) + return(4); + + return(0); +} + +