Dziś udało mi się nawiązać połączenie między Pythonem i Arduino. Skorzystałem z biblioteki firmata.
Najpierw do Arduino IDE należy załadować bibliotekę firmata. Następnie do płytki wgrywamy program StandardFirmata, który znajduje się w przykładach.
Jeśli chodzi o Python 3, praktycznie nic nie trzeba robić poza wpisaniem portu na którym uruchomione jest Arduino.
Nazwę portu znajdziemy wpisując (w macos) w Terminalu polecenie:
ls -l /dev/tty.*
Program sam zainstaluje bibliotekę pyfirmata.
Diodę LED (obowiązkowo z rezystorem 220R) podłączyłem pod PIN 12.
Jak łatwo odkryć, efektem działania programu jest migająca 5 razy dioda.
try:
from pyfirmata import Arduino, util
except ModuleNotFoundError:
import pip
pip.main(['install', 'pyfirmata'])
from pyfirmata import Arduino, util
except Exception as e:
print("Rodzaj błędu: {}" .format(e))
from time import sleep
i = 0
board = Arduino('/dev/cu.usbmodem1A13121') # nazwa portu Arduino
while i < 5:
board.digital[13].write(1)
sleep(0.5)
board.digital[13].write(0)
sleep(0.15)
i = i + 1
Kod drugi.
Tym razem kręcimy potencjometrem na pinie A0 w Arduino i przesyłamy dane do programu napisanego w Pythonie. Gdy wartość odebrana bliska jest zeru lub maksymalnej, Python wysyła informację do Arduino i włączana jest dioda na pinie 12-tym. Czyli tym razem mamy komunikację w obie strony.
try:
from pyfirmata import Arduino, util
except ModuleNotFoundError:
import pip
pip.main(['install', 'pyfirmata'])
from pyfirmata import Arduino, util
except Exception as e:
print("Rodzaj bledu: {}".format(e))
from time import sleep
wynik = 0
board = Arduino('/dev/cu.usbmodem1A13121')
# pin = 12
def ledin(pin):
board.digital[pin].write(1)
sleep(1)
board.digital[pin].write(0)
sleep(0.15)
# iterator = util.Iterator(board)
# iterator.start()
# pin0 = board.get_pin('a:0:i')
# sleep(1.0)
# print(pin0.read()*1000.0)
while True:
try:
it = util.Iterator(board)
it.start()
board.analog[0].enable_reporting()
sleep(0.5)
wynik = int(board.analog[0].read() * 10000)
print(wynik)
if wynik < 100 or wynik > 9900:
ledin(12)
except KeyboardInterrupt:
exit()
break
Linki: