ݺߣ

ݺߣShare a Scribd company logo
Python
i
elektronika
Piotr Maliski
www.python.rk.edu.pl
Jaka elektronika ?
GPIO (General Purpose Input/Output)
Jaka elektronika ?
USB
R2D2 z Raspberry Pi na pok?adzie
 Rozpoznawanie mowy (Angielski, Chiski)
 Rozpoznawanie twarzy
 Wykrywanie ruchu
 Ultrad?wi?kowy czujnik odleg?o?ci
 Nagrywanie i odtwarzanie wiadomo?ci audio
http://www.youtube.com/watch?v=znuUm5vbSpI
Dlaczego Python?
? Pro?ciej i ?atwiej
? Unikamy programowania w C, albo ASM
? Nie jeste?my uzale?nieni od jednego specyficznego
SDK/IDE (np. takiego pod Windows 98)
? Wi?ksza przeno?no?? kodu, niezale?no?? od systemu
operacyjnego
Czego potrzebujemy ?
Kontrolery
Kontrolery
PyMCU
www.circuitsforfun.com
 Mikrokontroler PIC z wyj?ciami
analogowymi i cyfrowymi
 Pod??czany poprzez USB do
komputera
 Pythonowy modu? pymcu do jego
obs?ug
 Obs?uga I2C, SPI, wy?wietlaczy
LCD
Kontrolery
PyMCU
www.circuitsforfun.com
 Ma?a spo?eczno??
 Brak dodatkowych bibliotek i
dokumentacji dotycz?cej
wykorzystania bardziej z?o?onych
uk?adw (I2C, SPI)
Kontrolery
Raspberry Pi
 Komputer na ma?ej p?ytce
 GPIO (3.3V) obs?ugiwane z
poziomu Linuksa uruchomionego
na Raspberry
 Silne wsparcie dla Pythona
 Wiele p?ytek rozszerzaj?cych
(Gertboard, PiFace) rwnie?
wspiera Pythona
 Do?? du?a spo?eczno??
Kontrolery
Arduino
 Liczne z??cza GPIO i wiele p?ytek
rozszerzaj?cych
 Du?a popularno?? i du?a
spo?eczno?? (sporo kodu)
 Programowalny g?wnie w C
 Python (PyFirmata, pyserial)
pozwala ?tylko na komunikacj? z
mikrokontrolerem na Arduino
Python i elektronika
Python i elektronika
Python i elektronika
Akcesoria
 P?ytki stykowe (breadboard)
 Kable po??czeniowe (jumper wires)
 Podstawowe podzespo?y elektroniczne (np. rezystory i diody LED)
 Lutownica, cyna, kalafonia
 Miernik, oscyloskop
Gdzie to kupi??
 http://kamami.pl
 http://nettigo.pl
 http://sklep.avt.pl/
 Allegro, ebay i wiele sklepw z elektronik?
 https://www.sparkfun.com
 https://www.adafruit.com
 http://dx.com
Hello world C miganie diod? LED
import pymcu
mb = pymcu.mcuModule()
for x in range(1,25):
mb.pinHigh(1)
mb.pausems(500)
mb.pinLow(1)
mb.pausems(500)
Odczyt warto?ci z sensorw
import pymcu
mb = pymcu.mcuModule()
while True:
print mb.analogRead(1)
Odczyt warto?ci z sensorw
Ultrad?wi?kowy ?miernik odleg?o?ci
 Impuls na pinie Trig wyzwala seri? impulsw ultrad?wi?kowych
 Pin Echo przejdzie w stan wysoki (1) gdy b?dzie odbiera? odbity sygna? z tych
impulsw
 Czas trwania stanu wysokiego pozwala wyliczy? odleg?o?? do przeszkody
..
mb.digitalState(2, 'input') # Echo
mb.pinHigh(1) # Trig
mb.pauseus(10)
mb.pinLow(1)
response_start = None
response_end = None
for i in range(0, 500):
ret = mb.digitalRead(2)
if ret == 1:
end = datetime.now()
response_end = end
if not response_start:
response_start = end
if response_end and response_start:
echo_delta = response_end - response_start
delta = echo_delta.total_seconds()
print (delta * 340) / 2, ' m'
else:
print 'no echo captured'
Przerwania (interrupts)
 Pozwalaj? oczekiwa? na zdarzenia (event) zmiany stanu pinu
 Znacznie bardziej wydajne ni? ci?g?e sprawdzanie jego stanu
 Obs?ugiwane m.in. w Raspberry Pi (Rpi.GPIO w wersji 0.5.2
lub nowszej)
GPIO.add_event_detect(24, GPIO.RISING,
callback=my_callback)
http://raspi.tv/2013/how-to-use-interrupts-with-python-on-the-raspberry-pi-and-rpi-gpio-part-3
http://raspi.tv/2013/how-to-use-interrupts-with-python-on-the-raspberry-pi-and-rpi-gpio-part-2
http://raspi.tv/2013/how-to-use-interrupts-with-python-on-the-raspberry-pi-and-rpi-gpio
I2C oraz SPI
 Interfejsy do komunikowania si? pomi?dzy urz?dzeniami
 Stosowane w bardziej z?o?onych uk?adach, p?ytkach
 Urz?dzenie dost?pne jest pod okre?lonym adresem, z ktrego
mo?na czyta? lub do ktrego mo?na pisa? dane.
 Potrzebna jest dok?adna dokumentacja opisuj?ca interfejs (co i
jak pisa? albo odczytywa?)
 Arduino, a tak?e Raspberry maj? zazwyczaj gotowe biblioteki
dla wielu urz?dze (np.. LiquidCrystal dla LCD)
I2C oraz SPI
Komunikacja szeregowa
 Adapter USB-UART tworzy wirtualny port szeregowy na
komputerze
 Modu? pyserial pozwala pisa? i czyta? z takiego portu
 Zazwyczaj powinno by? to prostsze ni? I2C/SPI
 Mog? by? wbudowane w niektre urz?dzenia USB
 Dost?pne s? te? same adaptery C u?ywane zazwyczaj do
komunikacji komputer-mikrokontroler
USB
 https:// github.com/walac/pyusb
 Je?eli dobrze znamy urz?dzenie USB i sam protok? to
mo?emy przej?? nad nim kontrol? poprzez pyusb
 Mo?na to np. zrobi? z wyrzutniami rakiet na USB :)
COM, .NET i MS Windows
import win32com.client
tel = win32com.client.Dispatch("Celestron.Telescope")
if tel.Connected:
print " ->Telescope was already connected"
else:
tel.Connected = True
if tel.Connected:
print " Connected to telescope now"
else:
print " Unable to connect to telescope, expect exception"
tel.Tracking = True
tel.SlewToCoordinates(12.34, 86.7)
tel.Connected = False
import clr
clr.AddReference("ASCOM.DriverAccess.dll")
from ASCOM.DriverAccess import *
a = Telescope('Celestron.Telescope')
a.Connected = True
a.SlewToCoordinates(11.11, 11.11)
a.TrackingRate = 0
a.Tracking = True
a.Connected = False
Inne ciekawe p?ytki i kontrolery
Synapse SNAP
 Komunikacja bezprzewodowa IEEE 802.15.4
 Piny GPIO
 Niskie zu?ycie energii, relatywnie niska cena
 Programowalne w SNAPpy C pochodnej implementacji Pythona
http://synapse-wireless.com
SparkFun SerIO
 Obs?uga urz?dze pod??czonych do pinw analogowych i cyfrowych
poprzez port szeregowy z poziomu komputera
 W przypadku Pythona potrzebny jest tylko PySerial i dokumentacja
SerIO
https://www.sparkfun.com/products/9521
SparkFun SerIO
https://www.sparkfun.com/products/9521
mySerial = serial.Serial(8, 57600, serial.EIGHTBITS,
serial.PARITY_NONE, serial.STOPBITS_ONE, 5);
#Wait for the 'Ready' response from the SerIO
response = mySerial.readline();
#Send SerIO command to turn off the command echo
size = mySerial.write("E,0r");
time.sleep(0.1);
#Configure pin D2 as an output
mySerial.write("C,2,1r");
response = mySerial.readline();
Phidgets
http://www.phidgets.com
 P?yty-kontrolery i liczne p?ytki dodatkowe (sensory, motory, prze??czniki)
 Wysokopoziomowe API dla Pythona jaki dla... Android Java, Applescript, C/C++,
C#, Cocoa, Delphi, Flash AS3, Java, LabVIEW, MATLAB, Max/MSP, Ruby, Visual Basic.NET, Visual
Basic 6.0, Visual Basic for Applications, Visual Basic Script, and Visual C/C++/Borland.NET.
Phidgets
http://www.phidgets.com
mbed
 Platforma prototypowania dla uk?adw z mikrokontrolerami ARM
 Posiada wsparcie dla Pythona (ale nie ?pierwszoplanowe)
 http://mbed.org/cookbook/Interfacing-with-Python
 Programowalny przez webowy interfejs i przerzucanie gotowych plikw
http://technical.io/
Koniec

More Related Content

Python i elektronika

  • 2. Jaka elektronika ? GPIO (General Purpose Input/Output)
  • 4. R2D2 z Raspberry Pi na pok?adzie Rozpoznawanie mowy (Angielski, Chiski) Rozpoznawanie twarzy Wykrywanie ruchu Ultrad?wi?kowy czujnik odleg?o?ci Nagrywanie i odtwarzanie wiadomo?ci audio http://www.youtube.com/watch?v=znuUm5vbSpI
  • 5. Dlaczego Python? ? Pro?ciej i ?atwiej ? Unikamy programowania w C, albo ASM ? Nie jeste?my uzale?nieni od jednego specyficznego SDK/IDE (np. takiego pod Windows 98) ? Wi?ksza przeno?no?? kodu, niezale?no?? od systemu operacyjnego
  • 7. Kontrolery PyMCU www.circuitsforfun.com Mikrokontroler PIC z wyj?ciami analogowymi i cyfrowymi Pod??czany poprzez USB do komputera Pythonowy modu? pymcu do jego obs?ug Obs?uga I2C, SPI, wy?wietlaczy LCD
  • 8. Kontrolery PyMCU www.circuitsforfun.com Ma?a spo?eczno?? Brak dodatkowych bibliotek i dokumentacji dotycz?cej wykorzystania bardziej z?o?onych uk?adw (I2C, SPI)
  • 9. Kontrolery Raspberry Pi Komputer na ma?ej p?ytce GPIO (3.3V) obs?ugiwane z poziomu Linuksa uruchomionego na Raspberry Silne wsparcie dla Pythona Wiele p?ytek rozszerzaj?cych (Gertboard, PiFace) rwnie? wspiera Pythona Do?? du?a spo?eczno??
  • 10. Kontrolery Arduino Liczne z??cza GPIO i wiele p?ytek rozszerzaj?cych Du?a popularno?? i du?a spo?eczno?? (sporo kodu) Programowalny g?wnie w C Python (PyFirmata, pyserial) pozwala ?tylko na komunikacj? z mikrokontrolerem na Arduino
  • 14. Akcesoria P?ytki stykowe (breadboard) Kable po??czeniowe (jumper wires) Podstawowe podzespo?y elektroniczne (np. rezystory i diody LED) Lutownica, cyna, kalafonia Miernik, oscyloskop
  • 15. Gdzie to kupi?? http://kamami.pl http://nettigo.pl http://sklep.avt.pl/ Allegro, ebay i wiele sklepw z elektronik? https://www.sparkfun.com https://www.adafruit.com http://dx.com
  • 16. Hello world C miganie diod? LED import pymcu mb = pymcu.mcuModule() for x in range(1,25): mb.pinHigh(1) mb.pausems(500) mb.pinLow(1) mb.pausems(500)
  • 17. Odczyt warto?ci z sensorw import pymcu mb = pymcu.mcuModule() while True: print mb.analogRead(1)
  • 18. Odczyt warto?ci z sensorw Ultrad?wi?kowy ?miernik odleg?o?ci Impuls na pinie Trig wyzwala seri? impulsw ultrad?wi?kowych Pin Echo przejdzie w stan wysoki (1) gdy b?dzie odbiera? odbity sygna? z tych impulsw Czas trwania stanu wysokiego pozwala wyliczy? odleg?o?? do przeszkody
  • 19. .. mb.digitalState(2, 'input') # Echo mb.pinHigh(1) # Trig mb.pauseus(10) mb.pinLow(1) response_start = None response_end = None for i in range(0, 500): ret = mb.digitalRead(2) if ret == 1: end = datetime.now() response_end = end if not response_start: response_start = end if response_end and response_start: echo_delta = response_end - response_start delta = echo_delta.total_seconds() print (delta * 340) / 2, ' m' else: print 'no echo captured'
  • 20. Przerwania (interrupts) Pozwalaj? oczekiwa? na zdarzenia (event) zmiany stanu pinu Znacznie bardziej wydajne ni? ci?g?e sprawdzanie jego stanu Obs?ugiwane m.in. w Raspberry Pi (Rpi.GPIO w wersji 0.5.2 lub nowszej) GPIO.add_event_detect(24, GPIO.RISING, callback=my_callback) http://raspi.tv/2013/how-to-use-interrupts-with-python-on-the-raspberry-pi-and-rpi-gpio-part-3 http://raspi.tv/2013/how-to-use-interrupts-with-python-on-the-raspberry-pi-and-rpi-gpio-part-2 http://raspi.tv/2013/how-to-use-interrupts-with-python-on-the-raspberry-pi-and-rpi-gpio
  • 21. I2C oraz SPI Interfejsy do komunikowania si? pomi?dzy urz?dzeniami Stosowane w bardziej z?o?onych uk?adach, p?ytkach Urz?dzenie dost?pne jest pod okre?lonym adresem, z ktrego mo?na czyta? lub do ktrego mo?na pisa? dane. Potrzebna jest dok?adna dokumentacja opisuj?ca interfejs (co i jak pisa? albo odczytywa?) Arduino, a tak?e Raspberry maj? zazwyczaj gotowe biblioteki dla wielu urz?dze (np.. LiquidCrystal dla LCD)
  • 23. Komunikacja szeregowa Adapter USB-UART tworzy wirtualny port szeregowy na komputerze Modu? pyserial pozwala pisa? i czyta? z takiego portu Zazwyczaj powinno by? to prostsze ni? I2C/SPI Mog? by? wbudowane w niektre urz?dzenia USB Dost?pne s? te? same adaptery C u?ywane zazwyczaj do komunikacji komputer-mikrokontroler
  • 24. USB https:// github.com/walac/pyusb Je?eli dobrze znamy urz?dzenie USB i sam protok? to mo?emy przej?? nad nim kontrol? poprzez pyusb Mo?na to np. zrobi? z wyrzutniami rakiet na USB :)
  • 25. COM, .NET i MS Windows import win32com.client tel = win32com.client.Dispatch("Celestron.Telescope") if tel.Connected: print " ->Telescope was already connected" else: tel.Connected = True if tel.Connected: print " Connected to telescope now" else: print " Unable to connect to telescope, expect exception" tel.Tracking = True tel.SlewToCoordinates(12.34, 86.7) tel.Connected = False import clr clr.AddReference("ASCOM.DriverAccess.dll") from ASCOM.DriverAccess import * a = Telescope('Celestron.Telescope') a.Connected = True a.SlewToCoordinates(11.11, 11.11) a.TrackingRate = 0 a.Tracking = True a.Connected = False
  • 26. Inne ciekawe p?ytki i kontrolery
  • 27. Synapse SNAP Komunikacja bezprzewodowa IEEE 802.15.4 Piny GPIO Niskie zu?ycie energii, relatywnie niska cena Programowalne w SNAPpy C pochodnej implementacji Pythona http://synapse-wireless.com
  • 28. SparkFun SerIO Obs?uga urz?dze pod??czonych do pinw analogowych i cyfrowych poprzez port szeregowy z poziomu komputera W przypadku Pythona potrzebny jest tylko PySerial i dokumentacja SerIO https://www.sparkfun.com/products/9521
  • 29. SparkFun SerIO https://www.sparkfun.com/products/9521 mySerial = serial.Serial(8, 57600, serial.EIGHTBITS, serial.PARITY_NONE, serial.STOPBITS_ONE, 5); #Wait for the 'Ready' response from the SerIO response = mySerial.readline(); #Send SerIO command to turn off the command echo size = mySerial.write("E,0r"); time.sleep(0.1); #Configure pin D2 as an output mySerial.write("C,2,1r"); response = mySerial.readline();
  • 30. Phidgets http://www.phidgets.com P?yty-kontrolery i liczne p?ytki dodatkowe (sensory, motory, prze??czniki) Wysokopoziomowe API dla Pythona jaki dla... Android Java, Applescript, C/C++, C#, Cocoa, Delphi, Flash AS3, Java, LabVIEW, MATLAB, Max/MSP, Ruby, Visual Basic.NET, Visual Basic 6.0, Visual Basic for Applications, Visual Basic Script, and Visual C/C++/Borland.NET.
  • 32. mbed Platforma prototypowania dla uk?adw z mikrokontrolerami ARM Posiada wsparcie dla Pythona (ale nie ?pierwszoplanowe) http://mbed.org/cookbook/Interfacing-with-Python Programowalny przez webowy interfejs i przerzucanie gotowych plikw