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
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
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
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