Home » 산딸기 가지고 놀기 » 라즈베리파이 활용 강좌 : 라즈베리파이와 알피노 시리얼통신하기

RPino <-> RPi Communication using ttyS0

개인적으로 RPino를 사용하는 궁극적인 목적은 RPi와 연동하기 위해서라고 생각한다.

RPi에서 아쉬운 Analog Pin을 RPino에서 사용할 수 있기 때문이다.

이를 위해서 RPino의 Analog Data를 RPi에 전달해 주는 방법을 알아보자.

 

1. RPino – RPi 연결관계

RPi에서 RPino로 scons를 사용하여 Upload 하는 명령어를 살펴보자.

pi@rasplay $ scons ARDUINO_PORT=/dev/ttyS0 ARDUINO_BOARD=atmega328 ARDUINO_VER=1.0.1 ARDUINO_HOME=/usr/share/arduino upload
  • ARDUINO_PORT : ttyS0 Serial을 사용하였다.

  • ARDUINO_BOARD : ATmega328

  • ARDUINO_VER : 설치된 Arduino Sketch의 버전이다.

  • ARDUINO_HOME : Arduino Sketch가 설치된 위치이다.

여기서 알수 있는 것이 RPino와 RPi가 Serial로 ttyS0를 통해 이미 연결되 있다는 것이다.

이 연결은 업로드할 때만 사용하고 있으니, 그렇지 않는 시간 동안은 우리가 사용할 수 있을 것이다

pi@rasplay $ ls -al /dev

total 4

crw——-  1 root root      4,   9 Jan  1  1970 tty9
crw-rw—T  1 root dialout 204,  64 Jul 18 06:45 ttyAMA0
crw-rw—T  1 root dialout   5,   3 Jan  1  1970 ttyprintk
lrwxrwxrwx  1 root root           7 Jan  1  1970 ttyS0 -> ttyAMA0
crw——T  1 root root     10, 223 Jan  1  1970 uinput

참고로, ttyS0는 ttyAMA0의 Symbolic Link로 연결되어있다.

 

2. Sensor, Coding and Compile

테스트를 위해 Analog Sensor를 하나 준비하였다. Chipcap 사의 chipcap-l AnalogTemp/Humidity Sensor이다. (http://eleparts.co.kr/EPX3CHWA) H/W연결 및 Source Code는 http://www.ces.uoguelph.ca/TechNotes/code/ChipCap_L_uno.ino 를 사용하였다.

pi@rasplay $ vi temphumi.ino

/*

This code reads the 0-1 V output of the ChipCap-L T/RH sensor.
The circuit:
http://www.ge-mcs.com/download/moisture-humidity/920_426b.pdf

A0 – OUT-RH (pin 14)
A1 – NC (pin 1)
GND – GND (pin 4)
5V – V+ (pin 11)

connect a 0.1u capacitor between ground and V+
*/

const int analogPin0 = A0; // Analog input pin attached to the RH output pin on the ChipCap-L sensor
const int analogPin1 = A1; // Analog input pin attached to the T output pin on the ChipCap-L sensor
const float volt = 0.001074219; // multiplier to go from 0-1023 to volts
float RH = 0; // RH variable
float T1 = 0; // T variable
void setup() {
Serial.begin(57600); // initialize serial communications at 9600 bps:
//Serial.begin(9600); // initialize serial communications at 9600 bps:
analogReference(INTERNAL); // switch to the internal 1.1V analog reference (use just ‘INTERNAL’ with the Uno)
}
void loop() {
RH = analogRead(analogPin0); // read the analog RH value
T1 = analogRead(analogPin1); // read the analog T value
RH = RH * volt * 100; // convert to RH as shown on the datasheet
T1 = (T1 * volt *200)-50; // convert to T as shown on the data sheet
// print the results to the serial monitor
Serial.print(“RH:” );
Serial.println(RH,2);
Serial.print(“T:”);
Serial.println(T1,2);
delay(2000); // wait 2 seconds so it’s easier to watch the serial output
}

SCons를 실행하여 Compile 및 Upload를 수행한다.

pi@rasplay $ scons ARDUINO_PORT=/dev/ttyS0 ARDUINO_BOARD=atmega328 ARDUINO_VER=1.0.1 ARDUINO_HOME=/usr/share/arduino upload

완료와 동시에 Analog 측정값이 Serial을 이용해서 RPi에 전송되어지고 있다.

이를 확인하기 위해 다음을 실행해 보자.

pi@rasplay $ cat /dev/ttyS0

RH:62.84
T:31.43
RH:62.84
T:31.43
RH:62.84
T:31.64

이제 각자 /dev/ttyS0를 읽어서 사용하면 된다.

 

[참고사이트]

o http://www.webweavertech.com/ovidiu/weblog/archives/000482.html

o https://code.google.com/r/kylecgordon-arscons/

o https://scons.org

o http://www.ces.uoguelph.ca/TechNotes/code/ChipCap_L_uno.ino

산딸기마을 포스트 검색

공동제작 공동프로젝트 무상후원 기관

산딸기마을 기부하기

산딸기마을 방문자 현황

Flags Countries Visits Page views
South Korea 626063 1845660
United States 10882 26091
Japan 5011 13204
Germany 2755 5151
India 1897 2902
Canada 1729 4640
United Kingdom 1596 2642
Australia 1240 2901
Russia 1219 1677
China 1077 2239
Total Pageviews: 1936700