아두이노의 센서값을 파이썬으로 읽기 (Serial Communication between python and aruino)

image

안녕하세요? cat 입니다.

이전 까지는 시리얼 통신을 통해 읽어온 센서값을 아두이노IDE의 시리얼 모니터에서 확인하였습니다.

단순히 값을 확인하는 것에서 끝나지 않고 이 값을 적절한 장소에 저장하고 처리하기 위해서는 프로그램에서 시리얼 값을 읽어 와야 합니다.

그래서 오늘은 파이썬으로 시리얼통신을 통해 전달된 아두이노의 센서값을 읽어들이는 것을 해보려고 합니다.

라즈베리파이에서 특정 명령어를 아두이노로 전송하면 아두이노는 이 명령과 부합하는 센서의 값을 라즈베리파이로 전송하는 것을 해보겠습니다.

전체과정을 라즈베리파이와 아두이노로  나누어 간단히 정리 하겠습니다.

  *라즈베리파이가 하는일

1. 송수신할 시리얼 포트가 맞는지 확인한다.

2. 명령어를 보낸다.

3. 아두이노로 부터 값이 들어 온 것이 있는지 확인한다. (Loop)

4. 들어온 값이 있다면 읽어서 출력한다.

*아두이노가 하는일

1. 시리얼포트에 들어온 명령이 있는지 확인한다. (Loop)

2. 들어온 명령이 있다면 읽어서 무엇을 하라는 것인지 확인한다.

3. 명령에 해당하는 값을 시리얼로 전송한다.

4. 시리얼 포트에 들어온 명령이 있는지 확인한다.

다음은 라즈베리파이의 코드 입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import serial

port = '/dev/ttyACM0'
brate = 9600 #boudrate
cmd = 'temp'

seri = serial.Serial(port, baudrate = brate, timeout = None)
print(seri.name)

seri.write(cmd.encode())

a = 1

while a:
    if seri.in_waiting != 0 :
        content = seri.readline()
        print(content[:-2].decode())
        a = 0
       



       

cs

다음은 아두이노 스케치 코드 입니다.

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
#include <dht11.h>

dht11 DHT11;
#define DHT11PIN 2
String input = "";
String cmd = "temp";
String response = "";
float humidity, temprature;

void setup() {
  Serial.begin(9600);
 

}

void loop() {
  if(Serial.available()) {
    input = Serial.readStringUntil("\n");
  }
  //Serial.println(input);
  if(Serial.available()==0 && input == cmd) {
    DHT11.read(DHT11PIN);
    humidity = DHT11.humidity;
    temprature = DHT11.temperature;
    response = "{\"Humidity\":"+(String)humidity + ","+"\"Temperature\":"+(String)temprature +"}";
    Serial.println(response);
    input = "";
  }
}
cs

라즈베리파이에서 파이썬 코드를 실행하면 현재 연결된 시리얼 포트를 확인후 아두이노로 부터 넘겨 받은 온습도 정보를 출력해줍니다.

image

이제 값을 읽어 올 수 있게 되었으니 이 값을 저장하고 적절하게 처리하는 것을 앞으로 해보려고 합니다.

궁금한 부분은 댓글로 남겨주세요.

以上です。

Previous
Next Post »