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: