1. 아두이노에 firmata 설치하기


예제를 읽어들인 후 아두이노에 업로드한다.


2. pyfirmata 설치하기


pip3 insall pyfirmata


3. 파이썬으로 코딩하기

3.1 디지털핀


디지털 핀의 경우 pyfirmata의 Arduino 객체의 get_pin() 메서드를 이용한다.


import pyfirmata as pf

import time


ard = pf.Arduino('COM7')

ard.get_pin('d:13:o') #디지털핀 13번을 출력으로 설정

while True:

    ard.digital[13].write(1)

    time.sleep(0.5)

    ard.digital[13].write(0)

    time.sleep(0.5)


또는


import pyfirmata as pf

import time


ard = pf.Arduino('COM7')

p13 = ard.get_pin('d:13:o') #디지털핀 13번을 출력으로 설정

while True:

    p13.write(1)

    time.sleep(0.5)

    p13.write(0)

    time.sleep(0.5)



3.2 아날로그핀


import pyfirmata as pf

import time


ard = pf.Arduino('COM7')

print('connected.')


# 아날로그핀을 사용하려면 반드시 아래와 같은 두 줄이 필요함.

pf.util.Iterator(ard).start()

ard.analog[0].enable_reporting()


while True:

a0 = ard.analog[0].read() # [0,1]범위의 실수 반환

print(a0)


또는


import pyfirmata as pf

import time


ard = pf.Arduino('COM7')


pf.util.Iterator(ard).start()

ard.analog[0].enable_reporting()

a0p = ard.get_pin('a:0:i')


while True:

a0 = a0p.read()

print(a0)


3.3 pwm

아두이노 우노는 pwm기능이 3,5,6,9,10,11번 핀에만 있다.


import pyfirmata as pf

import time

from math import pi, sin


ard = pf.Arduino('COM7')

pwm = ard.get_pin('d:10:p')


gap = 2*pi/100

t = 0

while True:

y = (sin(t)+1)/2

pwm.write(y)

t += gap

time.sleep(0.01)


A0핀에 가변저항이 연결되어 있다고 가정했을 때 11번 핀에 연결된 LED의 밝기를 가변저항으로 제어하는 예제는 다음과 같다.


import pyfirmata as pf

import time


ard = pf.Arduino('COM7')

pwm = ard.get_pin('d:10:p')


pf.util.Iterator(ard).start()

ard.analog[0].enable_reporting()


while True:

a0 = ard.analog[0].read()

pwm.write(a0)

print(a0)


3.4 서보모터

 

import pyfirmata


DELAY = 1

MIN = 5

MAX = 175

MID = 90


board = pyfirmata.Arduino('COM7')


servo = board.get_pin('d:11:s') #11번핀을 서보모터 신호선으로 설정

 

def move_servo(v):

    servo.write(v)

    board.pass_time(DELAY)


move_servo(MIN)

move_servo(MAX)

move_servo(MID)


board.exit()


Posted by 살레시오
,