티스토리 뷰
아두이노에서 출력되는 데이터를 라즈베리파이에서 받기위해선
아두이노와 라즈베리파이가 시리얼 통신을 해야 한다.
아두이노 파일 내용은 앞에서 사용한 것과 동일하게 사용한다.
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 파일에 값이 담긴다.
'라즈베리 파이 > 서버' 카테고리의 다른 글
아두이노D1 보드와 라즈베리파이 사용[2] - 라즈베리 파이에서 데이터 수신하는 소켓 만들기 (0) | 2020.07.17 |
---|---|
아두이노D1 보드와 라즈베리파이 사용 [1] - 아두이노에서 데이터 전송 (0) | 2020.07.09 |
[라즈베리파이로 온습도 센서 사용하기] (1) 온습도 센서 + 아두이노 연결 (0) | 2020.06.06 |
[워드 프레스] 사용자 추가하기 (0) | 2020.05.31 |
FTP 530 에러, 553 에러 해결 방법 (0) | 2020.05.29 |
- Total
- Today
- Yesterday
- 집배원 한상덕
- 라즈베리파이
- 메일서버
- 합승 택시 요금
- 라즈비안
- 프로그래머스
- hc-06
- dovecot
- 스티커모으기2
- 키 순서
- DP
- dht11
- 리눅스
- 구슬 탈출2
- FTP
- BFS
- ESP8266
- hackerrank
- java
- 11503
- c++
- 아두이노
- 블루투스
- mysql
- 워드프레스
- git
- 자바
- the pads
- 2981
- 백준
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |