티스토리 뷰

앞에 이어서......

https://deonggideok.tistory.com/83

 

앞에서는 아두이노(클라이언트)에서 라즈베리 파이(서버)로 데이터를 보내는 코드를 만들어 봤다.

이제는 라즈베리 파이에서 아두이노에서 보낸 데이터를 받을 수 있도록 코드를 작성해보자.

 

아두이노에서 받은 데이터를 

데이터를 받은 시간과 함께 데이터를 csv에 기록해 볼 것이다.

 

라즈베리 파이에서는 소켓을 만든다.

소켓에서 아두이노에서 보낸 데이터(clinet.print로 보낸 내용)을 수신한다.

전체 코드는 아래와 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import socket
import csv
import time
 
def save_data(data):
    # 입력 받은 데이터 가공
    data = str(data).split("b")[1].strip("'"# 데이터 가공
    result = [time.strftime("%H:%M:%S")]
    result.extend(data.split(" "))
    # print(result)
 
    # 파일에 데이터
    f = open('데이터를 수신받을 파일', 'a', newline='', encoding='utf-8')
    wr = csv.writer(f, lineterminator='\n')
    wr.writerow(result)
    f.close() 
 
def main():
    port = 15000 # 포트
 
    # 소켓 객체 설정
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1# 프로그램을 곧바로 재실행해도 가능하도록
   
    # 소켓을 네트워크 인터페이스와 포트 번호에 연결 
    sock.bind(("0.0.0.0", port))
    # 서버가 클라이언트의 접속을 허용하도록 함
    sock.listen(1)
    # 접속 승인시 새로운 소켓 리턴
    conn, addr = sock.accept() 
    # print(addr) # 연결된 클라이언트의 주소
 
    while True:
        data = conn.recv(1024# 데이터 수신
       
        # 데이터 없으면 종료
        if not data:
            break
 
        save_data(data)
 
    # 소켓 종료           
    conn.close()
    sock.close()
 
if __name__ == "__main__":
  main() 
 
cs

 

이렇게 하면, 파일에 수신 받은 데이터가 찍힌다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함