오늘이라도

[Raspberry Pi] 7. 아두이노 연동하기 : 아두이노 IDE 설치, 시리얼 모니터로 조작 (PWM), Firmata 프로토콜 이용해서 파이썬으로 조작 본문

취업성공패키지 SW 개발자 교육/사물 인터넷(IoT)

[Raspberry Pi] 7. 아두이노 연동하기 : 아두이노 IDE 설치, 시리얼 모니터로 조작 (PWM), Firmata 프로토콜 이용해서 파이썬으로 조작

upcake_ 2020. 7. 14. 09:18
반응형

 

https://github.com/upcake/Class_Examples

교육 중에 작성한 예제들은 깃허브에 올려두고 있습니다. 

gif 파일은 클릭해서 보는 것이 정확합니다.


 - 아두이노 연동하기 -

○ 아두이노 IDE 설치

▲아두이노 IDE 설치

 - sudo apt-get install arduino

 

 - 설치가 완료된 후 개발 탭에 Arduino IDE가 추가된 것을 알 수 있다.

 

▲아두이노 LED 점멸 작동 영상
int led = 7;
int val = 0;

void setup() {
  pinMode(led, OUTPUT);
} //setup()

void loop() {
  digitalWrite(led,HIGH);
  delay(1000);
  digitalWrite(led, LOW);
  delay(1000);0
} //loop()

▲_14_arduino_led_blink.ino

 

 

○ 시리얼 모니터로 조작 (PWM)

▲LED 시리얼 모니터로 조작 작동 영상

▲시리얼 모니터

int led = 10; //~ mark port
int val = 0;

void setup() {
  Serial.begin(9600);
  Serial.println("input 0 ~ 255");
  pinMode(led, OUTPUT);
} //setup()

void loop() {
  if(Serial.available()) {
    val = Serial.parseInt();
    Serial.println(val);
    analogWrite(led, val);
  }
  delay(50);
} //loop()

▲_15_Arduino_LED_PWM.ino

 

○ Firmata 프로토콜 이용해서 파이썬으로 조작

 - Firmata 프로토콜 : 아두이노에 시리얼을 통해 명령을 전달하는 프로토콜

 - 예제 - Firmata - StandardFirmata 를 아두이노에 업로드해준다.

 

 - 터미널로 라이브러리 설치

 - sudo apt-get install python-serial

 - sudo apt-get install git

 - git clone https://github.com/tino/pyFirmata

 - cd pyFirmata

 - sudo python3 setup.py install

 

▲파이썬으로 아두이노 조작 작동 영상
import RPi.GPIO as GPIO
import time
import sys

# 라이브러리 경로 추가
sys.path.append('/home/pi/pyFirmata')
import pyfirmata

# 아두이노에 잡힌 포트 번호
board = pyfirmata.Arduino('/dev/ttyACM0')

# 아두이노에 꽂은 포트를 알려줌
# d : digital / a : analog
# 9 : 9번 포트
# o : OUTPUT / i : INPUT / p : PWM (value가 0 ~ 1)
pin9 = board.get_pin('d:9:o')

try:
    while True:
        pin9.write(1)
        time.sleep(1) #여긴 단위가 초(second)이다.
        pin9.write(0)
        time.sleep(1) #따라서 1초임
        
except KeyboardInterrupt:
    GPIO.cleanup()

▲16.Arudino.pyfirmata.py

 

▲PWM 입력으로 아두이노 LED 조작 작동 영상

▲입력 화면

import RPi.GPIO as GPIO
import time
import sys
sys.path.append('/home/pi/pyFirmata')
import pyfirmata

board = pyfirmata.Arduino('/dev/ttyACM0')
#디지털 9번 포트 PWM 제어
pin9 = board.get_pin('d:9:p')

try:
    while True:
        value = int(input("Enter Number (0 to 100) : "))
        pin9.write(value/100.0)
        
except KeyboardInterrupt:
    GPIO.cleanup()

▲17.Arduino pyfirmata PWM.py

 

 

▲조도센서 작동 영상
import RPi.GPIO as GPIO
import time
import sys
sys.path.append('/home/pi/pyFirmata')
import pyfirmata

led_pin = 11;

GPIO.setmode(GPIO.BOARD)
GPIO.setup(led_pin, GPIO.OUT, initial=GPIO.LOW)

board = pyfirmata.Arduino('/dev/ttyACM0')
pinA0 = board.get_pin('a:0:i')

#아날로그 값 받는 방식
it = pyfirmata.util.Iterator(board)
it.start()
pinA0.enable_reporting()

try:
    while True:
        # 핀 값을 읽는다
        coValue = pinA0.read()
        print(coValue)
        # 값이 아예 넘어오지 않을 수 있기 때문에
        if (coValue != None) and (coValue > 0.5):
            GPIO.output(led_pin, True)
        else:
            GPIO.output(led_pin, False)
            
        time.sleep(1)
        
except KeyboardInterrupt:
    GPIO.cleanup()
    

▲18.Arduino pyfirmata analog sensor.py

 - 일산화탄소 센서, 소리 센서, 조도 센서 등의 아날로그 센서 전반에 적용할 수 있습니다.

 

 

 

반응형