티스토리 뷰

아두이노에서 출력되는 데이터를 라즈베리파이에서 받기위해선

아두이노와 라즈베리파이가 시리얼 통신을 해야 한다.

 

아두이노 파일 내용은 앞에서 사용한 것과 동일하게 사용한다.

https://deonggideok.tistory.com/74

 

[라즈베리파이로 온습도 센서 사용하기] (1) 온습도 센서 + 아두이노 연결

아두이노와 라즈베리를 합쳐서 사용하게 되면, 아두이노에서는 여러 센서를 통해 데이터를 받아들이고 라즈베리파이에서는 이 데이터를 받아 저장하고 뿌리는 서버 역할을 할 수 있다. 온습도

deonggideok.tistory.com

 

라즈베리파이에서 아두이노의 데이터를 받을 수 있도록

파이썬 파일을 작성한다.

 

1. 포트 확인

 

작성에 앞서,

아두이노와 라즈베리파이가 시리얼 통신을 하므로 

아두이노에서 사용하는 포트를 확인해야 한다.

도구 -> 시리얼포트 ->체크 되어 있는 포트 확인

 

 

2. 파이썬 프로그램 작성

 

아두이노의 데이터를 받은 파이썬 프로그램을 작성한다.

받은 데이터를 이용해 시각화에 사용할 수 있도록, csv 파일에 받아 저장할 수 있도록 했다.

csv 파일 형식은 아래와 같다.

월/일 시분, 습도, 온도 

 

아래와 같은 방식으로 파이썬 프로그램을 작성한다.

 

1) 아두이노와 시리얼 연결

2) 아두이노의 값 읽어옴

3) 값을 유의미한 데이터로 만들어(split) 변수에 저장

4) csv 파일에 얻은 값 저장

 

crontab로 시간을 정해 자동으로 파이썬 프로그램이 시작되도록 할 것이므로

유의미한 데이터를 한 번 받고 csv에 입력하면 프로그램이 종료되도록 한다.

 

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
import csv
import time
import serial
from datetime import datetime
 
def main():
  # 1) 아두이노와 시리얼 연결
# /dev/ttyACM0 부분에는 위에서 확인한 포트 번호
  # 9600 자리에는 사용하는 보드레이트를 작성한다
  ser = serial.Serial('/dev/ttyACM0'9600, timeout=None)
  
  while True:
  # 2) 아두이노의 값 읽어옴
    line = ser.readline() # 시리얼 통신으로 값을 한 줄 읽어온다
    arr = line.decode().split(' '# 습도, 온도를 나눠 배열에 저장
 
    # 읽은 값이 유효값이 아닐 경우 다시 읽는다
    if len(arr) != 2
      if float(arr[0]) < 0 or float(arr[0]) >= 100:
        continue 


    # 3) 읽은 데이터 값을 변수에 저장
# 온습도 읽기
    humidity = arr[0]
    temperature = arr[1].rstrip('\r\n')
    
    # 현재 날짜 저장
    now = datetime.now()
    month = str(now.month)
    day = str(now.day)
    hour = str(now.hour)
    min = str(now.minute) 
    nowDatetime = month+"/"+day+" "+hour+":"+min  
 
    # 4) csv 파일에 데이터 저장
    f = open('csv 파일 이름.csv','a', newline='', encoding='utf-8')
    wr = csv.writer(f, lineterminator='\n')
    wr.writerow([nowDatetime, humidity, temperature])
    f.close()
 
    time.sleep(0.01)
    break
 
 
if __name__ == "__main__":
  main() 
 
cs

 

 

+) 작성하면서 겪은 문제가 꽤 여러가지 있었다.

1) 아두이노로 받은 데이터에 ^M이 자동으로 추가

그냥 readline으로 받으면 아두이노에서 받은 데이터의 개행문자까지 그대로 들어간다.

이게 그대로 들어갈 경우, csv 파일에 자동으로 줄바꿈이 되어 들어가 있다. 

이를 막기 위해 데이터를 받을 때 아두이노 데이터 맨 뒤의 \r\n을 삭제해줘야 한다.

rstrip을 이용해 맨 뒤의 문자를 삭제한다

1
2
temperature = arr[1].rstrip('\r\n')
 
cs

 

2) 파이썬 버전 확인하기

파이썬 버전을 확인해야할 필요가 있다. 

파이썬 2로 할 경우 arr = line.split(' ')이 되지만

파이썬 3로 할 경우 arr = line.decode().split(' ')로 해야 split이 된다.

 

3. 파이썬 프로그램 실행

 

$ python3 위의 코드 파일명.py를 실행하면

파이썬 프로그램이 실행되고 csv 파일에 값이 담긴다.

공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함