diff --git a/camera_rgbled/clientcameraled b/camera_rgbled/clientcameraled
new file mode 100644
index 0000000000000000000000000000000000000000..8069be2c4c61daa5e2debc1d8f67a3be841712a8
--- /dev/null
+++ b/camera_rgbled/clientcameraled
@@ -0,0 +1,481 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <arpa/inet.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+#include <sys/socket.h>
+#include <pthread.h>
+
+#define BUFFER_MAX 1024
+
+char dist[20];
+int startflag = 0;
+
+#define IN 0
+#define OUT 1
+#define LOW 0
+#define HIGH 1
+#define VALUE_MAX 40
+#define DIRECTION_MAX 128
+
+#define RED 17
+#define GREEN 27
+#define BLUE 22
+
+void error_handling(char *message)
+{
+    fputs(message, stderr);
+    fputc('\n', stderr);
+    exit(1);
+}
+void camera()
+{
+    FILE *fp;
+    system("raspistill -t 1000 -o captures/cam.jpg");
+    sleep(3);
+
+    /* Python 스크립트 실행 */
+    fp = popen("python3 getdist.py", "r");
+    if (fp == NULL)
+    {
+        error_handling("Failed to run command");
+    }
+
+    /* 스크립트 출력을 읽어 dist로 전달 */
+    fgets(dist, sizeof(dist), fp);
+
+    /* 파일 포인터 닫기 */
+    pclose(fp);
+}
+
+static int GPIOExport(int pin)
+{
+#define GPIO_BUFFER 3
+    char buffer[GPIO_BUFFER];
+    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, GPIO_BUFFER, "%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";
+
+    char path[DIRECTION_MAX];
+    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");
+        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");
+        return (-1);
+    }
+
+    close(fd);
+    return (0);
+}
+
+static int GPIOUnexport(int pin)
+{
+    char buffer[GPIO_BUFFER];
+    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, GPIO_BUFFER, "%d", pin);
+    write(fd, buffer, bytes_written);
+    close(fd);
+    return (0);
+}
+
+// 소켓으로 전송
+void *thread_me_to_socket(void *arg)
+{
+    int sock = *(int *)arg;
+    int x, y;
+    char buffer[BUFFER_MAX];
+    char piece[1];
+
+    while (1)
+    {
+        if (startflag == 1)
+        {
+            // int n = read(sock, buffer, BUFFER_MAX);
+            printf("Start!\n");
+            camera();
+            printf("camera check!\n");
+            char *token = strtok(dist, "/"); // "/"를 구분자로 사용하여 문자열 분할
+            x = atoi(token);
+            token = strtok(NULL, "/"); // 다음 분할 위치로 이동
+            y = atoi(token);
+
+            if (x < 0)
+            { // 위
+                printf("up");
+                x = 0 - x;
+                strcpy(buffer, "U ");
+                sprintf(piece, "%d", x);
+                strcat(buffer, piece);
+                strcat(buffer, " ");
+            }
+            else
+            {
+                printf("down");
+                strcpy(buffer, "D ");
+                sprintf(piece, "%d", x);
+                strcat(buffer, piece);
+                strcat(buffer, " ");
+            }
+
+            if (y < 0)
+            { // 왼
+                printf("left");
+                y = 0 - y;
+                strcat(buffer, "L");
+                strcat(buffer, " ");
+                sprintf(piece, "%d", y);
+                strcat(buffer, piece);
+                strcat(buffer, " ");
+            }
+            else
+            {
+
+                printf("right");
+                strcat(buffer, "R");
+                strcat(buffer, " ");
+                sprintf(piece, "%d", y);
+                strcat(buffer, piece);
+                strcat(buffer, " ");
+            }
+            write(sock, buffer, sizeof(buffer));
+            printf("Send!\n");
+            startflag = 0;
+            break;
+        }
+    }
+
+    return NULL;
+}
+
+// 소켓 내용 수용
+void *thread_socket_to_me(void *arg)
+{
+    int sock = *(int *)arg;
+    char buffer[BUFFER_MAX];
+    while (1)
+    {
+        int n = read(sock, buffer, BUFFER_MAX);
+        write(STDOUT_FILENO, buffer, n);
+        if (n <= 0) // 연결 해제 시 종료
+        {
+            if (GPIOWrite(RED, 0) == -1)
+            {
+                // return 3;
+            }
+            if (GPIOWrite(GREEN, 0) == -1)
+            {
+                // return 3;
+            }
+            if (GPIOWrite(BLUE, 1) == -1)
+            {
+                // return 3;
+            }
+            usleep(2000*1000);
+            if (GPIOWrite(BLUE, 0) == -1)
+            {
+                // return 3;
+            }
+            printf("Server Disconnection!\n");
+            exit(0);
+        }
+        if (strcmp(buffer, "Start") == 0)
+        {
+            printf("Start!\n");
+            if (GPIOWrite(RED, 0) == -1)
+            {
+                // return 3;
+            }
+            if (GPIOWrite(BLUE, 0) == -1)
+            {
+                // return 3;
+            }
+            if (GPIOWrite(GREEN, 1) == -1)
+            {
+                // return 3;
+            }
+            startflag = 1;
+        }
+        else if (strcmp(buffer, "Stop") == 0)
+        { // led 파란색
+            if (GPIOWrite(RED, 0) == -1)
+            {
+                // return 3;
+            }
+            if (GPIOWrite(GREEN, 0) == -1)
+            {
+                // return 3;
+            }
+            printf("Stop!\n");
+            if (GPIOWrite(BLUE, 1) == -1)
+            {
+                // return 3;
+            }
+            if (GPIOWrite(BLUE, 0) == -1)
+            {
+                // return 3;
+            }
+        }
+        else if (strcmp(buffer, "Error") == 0)
+        { // led 빨간색
+            if (GPIOWrite(GREEN, 0) == -1)
+            {
+                // return 3;
+            }
+            if (GPIOWrite(BLUE, 0) == -1)
+            {
+                // return 3;
+            }
+            printf("Error!\n");
+            if (GPIOWrite(RED, 1) == -1)
+            {
+                // return 3;
+            }
+        }
+        else if (strcmp(buffer, "LID") == 0)
+        { // led 빨파빨파
+            if (GPIOWrite(RED, 0) == -1)
+            {
+                // return 3;
+            }
+            if (GPIOWrite(GREEN, 0) == -1)
+            {
+                // return 3;
+            }
+            if (GPIOWrite(BLUE, 0) == -1)
+            {
+                // return 3;
+            }
+            int i = 0;
+            printf("Danger!\n");
+            while (i < 7)
+            {
+                if (GPIOWrite(RED, 1) == -1)
+                {
+                    // return 3;
+                }
+                if (GPIOWrite(BLUE, 1) == -1)
+                {
+                    // return 3;
+                }
+                usleep(500 * 1000);
+                if (GPIOWrite(RED, 0) == -1)
+                {
+                    // return 3;
+                }
+                if (GPIOWrite(BLUE, 0) == -1)
+                {
+                    // return 3;
+                }
+                usleep(500 * 1000);
+                i++;
+                i++;
+            }
+        }
+        else if (strcmp(buffer, "wait") == 0)
+        { // led 노란색(깜빡깜빡)
+            if (GPIOWrite(RED, 0) == -1)
+            {
+                // return 3;
+            }
+            if (GPIOWrite(GREEN, 0) == -1)
+            {
+                // return 3;
+            }
+            if (GPIOWrite(BLUE, 0) == -1)
+            {
+                // return 3;
+            }
+            int i = 0;
+            printf("Wait!\n");
+            while (i < 5)
+            {
+                if (GPIOWrite(RED, 1) == -1)
+                {
+                    // return 3;
+                }
+                if (GPIOWrite(GREEN, 1) == -1)
+                {
+                    // return 3;
+                }
+                usleep(500 * 1000);
+                if (GPIOWrite(RED, 0) == -1)
+                {
+                    // return 3;
+                }
+                if (GPIOWrite(GREEN, 0) == -1)
+                {
+                    // return 3;
+                }
+                usleep(500 * 1000);
+                i++;
+            }
+        }
+        else if (strcmp(buffer, "End") == 0)
+        { // led 초록색
+            if (GPIOWrite(RED, 0) == -1)
+            {
+                // return 3;
+            }
+            if (GPIOWrite(GREEN, 0) == -1)
+            {
+                // return 3;
+            }
+            if (GPIOWrite(BLUE, 0) == -1)
+            {
+                // return 3;
+            }
+            int i = 0;
+            printf("End!\n");
+            while (i < 5)
+            {
+                if (GPIOWrite(GREEN, 1) == -1)
+                {
+                    // return 3;
+                }
+                usleep(1000 * 1000);
+                i++;
+            }
+            if (GPIOWrite(GREEN, 0) == -1)
+            {
+                // return 3;
+            }
+        }
+    }
+
+    return NULL;
+}
+
+int main(int argc, char *argv[])
+{
+
+    char path[1035];
+    int sock;
+    struct sockaddr_in serv_addr;
+    pthread_t thread1, thread2;
+    char buffer[BUFFER_MAX];
+
+    if (argc != 3)
+    {
+        printf("Usage : %s <IP> <port>\n", argv[0]);
+        exit(1);
+    }
+
+    // 소켓 생성
+    sock = socket(PF_INET, SOCK_STREAM, 0);
+    if (sock < 0)
+    {
+        perror("Error creating socket");
+        exit(1);
+    }
+
+    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");
+    }
+
+    // 연결 성공 시 문구 출력
+    printf("Connection established\n");
+    write(sock, "Camera", sizeof("Camera"));
+
+    if (GPIOExport(RED) == -1)
+    {
+        return 1;
+    }
+    if (GPIOExport(GREEN) == -1)
+    {
+        return 1;
+    }
+    if (GPIOExport(BLUE) == -1)
+    {
+        return 1;
+    }
+
+    if (GPIODirection(RED, OUT) == -1)
+    {
+        return 2;
+    }
+    if (GPIODirection(GREEN, OUT) == -1)
+    {
+        return 2;
+    }
+    if (GPIODirection(BLUE, OUT) == -1)
+    {
+        return 2;
+    }
+
+    pthread_create(&thread1, NULL, thread_me_to_socket, &sock);
+    pthread_create(&thread2, NULL, thread_socket_to_me, &sock);
+
+    pthread_join(thread1, NULL);
+    pthread_join(thread2, NULL);
+
+    close(sock);
+    return 0;
+}