오늘이라도
[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 설치
- sudo apt-get install arduino
- 설치가 완료된 후 개발 탭에 Arduino IDE가 추가된 것을 알 수 있다.
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)
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
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
- 일산화탄소 센서, 소리 센서, 조도 센서 등의 아날로그 센서 전반에 적용할 수 있습니다.
반응형
'취업성공패키지 SW 개발자 교육 > 사물 인터넷(IoT)' 카테고리의 다른 글
[Raspberry Pi] 9. 라즈베리 파이, 스프링, DB 연동 (0) | 2020.07.16 |
---|---|
[Raspberry Pi] 8. 파이 카메라, 웹으로 카메라 전송 (0) | 2020.07.15 |
[Raspberry Pi] 6. 피에조 스피커, 기울기 센서, 터치 센서, 초음파 거리 센서, 온습도 센서 (0) | 2020.07.13 |
[Raspberry Pi] 5. 버튼 눌러서 LED 시간 증가 (0) | 2020.07.10 |
[Raspberry Pi] 4. LED 조작 : PWM, 버튼 이용 (0) | 2020.07.09 |