Post on 27-May-2020
1
Praktyczne eksperymenty z Raspberry Pi
Jerzy Witkowski
Na prawach r ękopisu
WROCŁAW wrzesie ń 2014
2
Spis treści 1 Przedmiot ........................................................................................................................................ 4
2 Konfiguracja systemu ...................................................................................................................... 4
3 Podłączenie Raspberry Pi do Internetu ........................................................................................... 4
3.1 Połączenie kablowe. ................................................................................................................ 4
3.2 Instalacja połączenia WiFi z modułem EDUP. ......................................................................... 4
3.3 Instalacja połączenia WiFi z modułem TP-WN725N................................................................ 5
3.4 Statyczny adres IP na łączu WiFi .............................................................................................. 6
3.5 Połączenie z udostępnianiem Internetu poprzez komputer z systemem Windows ............... 7
3.6 Udostępnienie Internetu z komputera/laptopa przez stworzenie punktu dostępu. .............. 9
4 Praca zdalna z modułem Raspberry ................................................................................................ 9
5 Serwer w języku PYTHON ................................................................................................................ 9
6 Autologowanie .............................................................................................................................. 12
7 Autostart programu Python. ......................................................................................................... 12
8 Podłączanie urządzeń peryferyjnych ............................................................................................. 12
8.1 Obsługa wejść wyjść cyfrowych............................................................................................. 14
8.2 Uruchamianie I2C na Raspberry Pi ........................................................................................ 15
8.2.1 Funkcje SMBus (System Management Bus) – ............................................................... 16
8.3 Uruchamianie RS232 na Raspberry Pi ................................................................................... 17
9 Praca z modułem BlueTooth i obsługą SSP (opis zaczerpnięto z http://www.fritz-
hut.com/2012/09/14/raspberrypi-bluetooth-with-bluesmirf/ ). ......................................................... 20
10 Klonowanie systemu ................................................................................................................. 21
11 Uwagi inne ................................................................................................................................. 22
12 Literatura: .................................................................................................................................. 22
3
Spis ilustracji:
Rys. 1. Ustawienia karty sieciowej połączenia lokalnego komputera udostepniającego połączenie
internetowe. ............................................................................................................................................ 8
Rys. 2. Właściwości karty połączenia internetowego. ............................................................................. 8
Rys. 3.Aplikacja połączenia zdalnego Windows 7. .................................................................................. 9
Rys. 4. Skrypt prostego serwera w języku Python. ................................................................................ 10
Rys. 5. Działanie serwera w przeglądarce Midori uruchomionej lokalnie na RPi.................................. 11
Rys. 6. Działanie serwera na przeglądarce IE na komputerze zdalnym................................................. 11
Rys. 7. Opis złącza sygnałów cyfrowych RPi. ......................................................................................... 13
Rys. 8. Odpowiedź Rpi na komendę „sudo i2cdetect -y 1”, gdy do linii I2C podłączono urządzenie o
adresie 0x68 (7 bitów) = 0xC0 (8 bitów) oraz 0x77 (7 bitów) = 0xEE (8 bitów)..................................... 16
Rys. 9.Lista dostępnych portów szeregowych (fizyczny port szeregowy dostępny na złączu to
ttyAMA0). .............................................................................................................................................. 19
Rys. 10. Lista dostępnych portów szeregowych (fizyczny port szeregowy dostępny na złącz to
ttyAMA0 i nowy port ttyUSB0). ............................................................................................................. 19
Rys. 11. Widok programu Win32diskimager. ........................................................................................ 22
4
1 Przedmiot
W opracowaniu zebrano podstawowe wskazówki pozwalające wykorzystać moduł Raspberry Pi, jako
układ kontrolno-pomiarowy. Opisano czynności które pozwalają wykorzystać podstawowe peryferia ,
jak interfejsy RS232, I2C itp., oraz uruchomić serwer www prezentujący dane pomiarowe.
Do eksperymentów zastosowano moduł Rspberry Pi, model B, wersja 2 z systemem RASPBIAN
(wersja 3.6.11+ #538) dostarczone przez firmę KAMAMI.
Wszystkie informacje zawarte w tym opracowaniu pochodzą z Internetu, przy czym, opisano
wyłącznie procedury praktycznie sprawdzone w czasie eksperymentów.
2 Konfiguracja systemu Po pierwszym załączeniu układu pokazuj się menu z konfiguracją. Później do konfiguracji możemy
wchodzić używając komendy sudo raspi-config.
Wykonano następujące zmiany:
• Udostępnienie całej karty do wykorzystania przez system (pozycja: Expand Filesystem),
• Zmienioino hasło na bardziej wygodne (pozycja: Change User Password),
• Umożliwiono bezpośrednie logowanie (jak kto lubi ?) do środowiska graficznego (pozycja:
Enable Boot to Desktop…). - inną możliwość opisano jest w rozdz.6
• Zmieniono klawiaturę, czas, polskie znaki (pozycja: Internationalisation…):
o Czas - Europe/Warsaw,
o Język – dodano te zaczynające się z „pl”, ale zostawić domyślny „en”,
o Klawiatura – zostawiono „Generic….”, ale zmieniono „English(UK)” na „English (US)”;
(istotne jest, aby klawisze 2,3 miały @,#, bo najczęściej posiadają „brytyjski funt” i „już
nie pamiętam co?”)
3 Podłączenie Raspberry Pi do Internetu
3.1 Połączenie kablowe.
Po połączeniu komputera Raspberry Pi za pomocą kabla sieciowego do prawidłowo
skonfigurowanego routera z dynamicznym przydzielaniem adresów IP (dhcp) połączenie internetowe
powinno działać bez problemów.
3.2 Instalacja połączenia WiFi z modułem EDUP.
Drivery tego modułu firmy EDUP typu EP-N8508 opartego o układ Realtek RTL8192C, są
zainstalowane w systemie RASBIAN (przynajmniej w wersji – 3.6.11+ #538). RPi wykrył to urządzenie
bez konieczności jakichkolwiek interwencji.
5
3.3 Instalacja połączenia WiFi z modułem TP-WN725N
W powszechnym użyciu w modułach Raspberry Pi wykorzystuje się również karty Wi-Fi typu TP-
WN725N. Jej zainstalowanie wymaga ingerencji w oprogramowanie.
Pierwszym krokiem jest zainstalowanie sterownika karty w systemie Raspberry. Ponieważ wersja
sterownika zależy od wersji zainstalowanego systemu, należy ją sprawdzić za pomocą polecenia:
sudo uname –a
Przykładowa odpowiedź wygląda tak:
linux raspberry 3.6.11+ #538 PREEMPT Fri Aug 30……………….
W odpowiedzi tej istotny jest numer 3.6.11+ #538. W Internecie można znaleźć odpowiednie
sterowniki dla konkretnych wersji. Na przykład:
3.6.11+ #538, #541, #545, #551 oraz #557 8188eu-20130830.tar.gz
3.6.11+ #524, #528 lub #532 8188eu-20130815.tar.gz
3.6.11+ #371 do #520 8188eu-20130209.tar.gz
Należy teraz wykonać następujące komendy z odpowiednim numerem sterownika (komputer
Raspberry powinien mieć połączenie z Internetem np. połączenie kablowe):
wget https://dl.dropboxusercontent.com/u/80256631/8188eu-201300830.tar.gz
#ładuje sterownik
tar -zxvf 8188eu-20130209.tar.gz
#rozpakowujemy sterownik
sudo install -p -m 644 8188eu.ko /lib/modules/3.6.11+/kernel/drivers/net/wireless
#instalujemy sterownik
sudo depmod –a
#uaktualniamy jądro
sudo modprobe 8188eu
#ładujemy sterownik
W przypadku autora wersja ta nie zadziałała, ale z publikacji internetowych wiadomo, że w wielu
przypadkach taki sposób instalacji jest skuteczny. W przypadku naszego eksperymentu konieczne
okazało się skopiowanie z Internetu (http://www.mendrugox.net/2013/08/tp-link-tl-wn725n-v2-
working-on-raspberry-raspbian/) innego sterownika w wersji skompilowanej i rozpakowanej. Po
skopiowaniu go za pomocą „file managera” systemu Raspberry do katalogu:
/lib/modules/3.6.11+/kernel/drivers/net/wireless
oraz wykonaniu powtórnie komend:
sudo depmod –a
sudo modprobe 8188eu
połączenie internetowe udało się nawiązać. W poprzednim przykładzie po połączeniu radiowym nie
udawało się uzyskać z routera (Edimax) adresu IP.
6
3.4 Statyczny adres IP na łączu WiFi
Czasem istotne jest, by połączenie WiFi miało stały numer IP. W tym celu należy edytować zbiór:
sudo nano /etc/network/interfaces
linia
iface default inet dhcp
powinna być zastąpiona liniami (przykład):
iface default inet static
address 192.168.1.102
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
Parametry potrzebne do wpisania można uzyskać stosując komendy
netstat –nr
oraz
ifconfig
Oczywiście wpisany adres IP powinien być nie taki jak podają wyniki powyższych komend. Zanim
edytujemy zbiór interfaces będzie wyświetlany numer IP nadany dynamicznie. Do zbioru interfaces
należy wpisać numer wybrany z zakresu statycznego naszego routera.
W celu automatycznego połączenia z siecią bezprzewodową moduł Raspberry musi znać parametry sieci. Można je podać modyfikując zbiór:
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
Opcja network powinna przykładowo wyglądać tak:
network={
ssid=”nazwa sieci”
scan_ssid=0 #1 dla sieci bez rozgłaszania ssid
psk=”haslo do sieci”
proto=WPA # RSN dla WPA2
key_mgmt=WPA-PSK # lub WPA-EAP
pairwise=TKIP #dla WPA1 lub CCMP dla WPA2
auth_alg=OPEN #dla WPA i WPA2 lub SHARED&LEAP dla pozostałych
}
Wpisów tego typu może być kilka, jeśli będziemy łączyć się z kilkoma sieciami. Innym sposobem edycji tego zbioru jest włączenie trybu graficznego (startx) i posłużenie się programem WiFi_conf, gdzie można wpisać parametry dostępnych sieci.
7
3.5 Połączenie z udostępnianiem Internetu poprzez komputer z systemem Windows
W celu udostepnienia Internetu z komputera pracującego w systemie Winows należy edytować, jak
poprzednio zbiór /etc/network/interfaces za pomocą komendy:
sudo nano /etc/network/interfaces
W zbiorze tym linię:
iface eth0 inet dhcp
należy zastąpić następującymi liniami (Uwaga ważne: w linach address do gateway pierwszym znakiem jest znak tabulacji):
iface eth0 inet static
address 10.0.0.20
netmask 255.255.255.0
network 10.0.0.0
broadcast 10.0.0.255
gateway 10.0.0.10
W powyższym przykładzie stworzono sieć o arbitralnie przyjętych adresach. Mogą one być oczywiście inne. Uwaga: zauważono, że po załączeniu kabla i ustanowieniu połączenia istniejące połączenie WiFi jest przerywane. ?????
W następnej kolejności należy edytować (lub utworzyć) zbiór /etc/resolv.conf. Po jego otwarciu:
sudo nano /etc/resolv.conf
Należy usunąć wszystkie linie i wpisać adres IP DNS’ów na przykład (jeden wiersz wystarczy; to są DNS’y Googla):
nameserver 8.8.8.8
nameserver 8.8.4.4
Jeśli pracujemy przez router można dodać DNS w nim zapisane. Po tych czynnościach można zrestartować komputer:
sudo reboot
W systemie Widdows należy dojść do karty sieciowej połączenia lokalnego (karty kablowej) i we
właściwościach protokołu IP4 należy ustawić parametry jak na Rys. 1 (numery DNS mogą być inne
byle działały).
8
Rys. 1. Ustawienia karty sieciowej połączenia lokalnego komputera udostepniającego połączenie
internetowe.
Następnie należy przejść do właściwości karty, przez którą nasz komputer PC (laptop) łączy się z
Internetem. Należy zaznaczyć opcje udostępniania i interfejs (kartę), przez którą to udostępnianie
ma przebiegać (w przykładzie na Rys. 2 jest to Połączenie lokalne 2 – właściwości tej karty
pokazano na Rys. 1)
Rys. 2. Właściwości karty połączenia internetowego.
9
3.6 Udostępnienie Internetu z komputera/laptopa przez stworzenie punktu dostępu.
Tego zagadnienia nie sprawdzono praktycznie, ale można go znaleźć np. w
http://www.connectify.me/
4 Praca zdalna z modułem Raspberry
Do pracy z systemem Raspberry potrzebne są dodatkowe klawiatura i mysz. Aby tego uniknąć można
stosować połączenie konsoli (nie wykorzystamy programowo portu szeregowego) lub zdalnego
połączenia sieciowego.
Jedna z możliwości jest zainstalowanie programu XRDR (oczywiście Raspberry musi mieć połączenie
do Internetu):
sudo apt-get install xrdp
Po instalacji i zresetowaniu (sudo reboot) można pracować zdalnie z komputera PC lub laptopa. Nasz
komputer musi być w tej samej sieci, co Raspberry. Można wykorzystać połączenie lokalne opisane w
rozdziale 3.5 lub połączenie WiFi opisane w rozdziale 3.2.
Przykładowo w systemie Windows należy przejść do > Wszystkie programy > Akcesoria > Połączenie
Pulpitu Zdalnego oraz wprowadzić numer IP Raspberry (Rys. 3). W przypadku opisu z rozdziału 3.1
będzie to 10.0.0.20, w przypadku rozdziału 3.4 – 192.168.1.102 (numer statyczny) lub z routera
odczytać nadany dynamicznie numer IP.
W przypadku zwykłego połączenia kablowego z routerem (rozdział 4.1) trzeba skonfigurować
statyczny adres IP podobnie jak w rozdz. 3.1/3.4 dla WiFi lub znaleźć numer nadany dynamicznie.
Rys. 3.Aplikacja połączenia zdalnego Windows 7.
5 Serwer w języku PYTHON
Serwer sieciowy na komputerze RPi uruchomiono posługując się biblioteką Flask o dużych
możliwościach aplikacyjnych. Wcześniej zainstalowano narzędzie instalacyjne pip:
sudo apt-get install python-pip
i następnie bibliotekę Flask:
10
sudo pip install flask
Z poziomu IDE Pythona napisany został skrypt (Rys. 4) zawierający kod wyświetlanej strony w języku
HTLM odświeżanej, co około 5 sekund i podającej czas systemowy.
Poprawność pracy serwera można śledzić lokalnie na RPi podając adres 0.0.0.0 (jak w skrypcie
Python, domyślny adres RPi 127.0.0.1 lub adres RPi w sieci lokalnej - Rys. 5). Z poziomu komputera
zdalnego działa oczywiści tylko adres sieci lokalnej - Rys. 6.
Rys. 4. Skrypt prostego serwera w języku Python.
11
Rys. 5. Działanie serwera w przeglądarce Midori uruchomionej lokalnie na RPi.
Rys. 6. Działanie serwera na przeglądarce IE na komputerze zdalnym.
Wed Mar 12 14:53:55 2014
Wed Mar 12 13:33:33 2014
Wed Mar 12 12:50:03 2014
Wed Mar 12 15 :37:42 2014
12
6 Autologowanie
W przewidywanym zastosowaniu moduł Raspberry Pi powinien sam restartować po wyłączeniu i
ponownym włączeniu zasilania. Dlatego konieczne jest zaprogramowanie go w sposób pomijający
logowanie użytkownika. W tym celu należy edytować plik /etc/inittab:
sudo nano /etc/inittab
Następnie należy zaremować wiersz:
1:2345:respanw: /sbin/getty --noclear 38400 tty1
i dodać wiersz:
1:2345:respanw: /bin/login –f pi tty1 </dev/tty1 >/dev/tty1 2>&1
Następnie uruchomić RPi ponownie (sudo reboot). Efektem powinno być pominiecie logowania do
systemu i start środowiska graficznego.
Podobny efekt można uzyskać prze wybranie opcji Enable Boot to Desktop w programie
konfiguracyjnym (sudo raspi-config).
7 Autostart programu Python.
W celu uruchomienia automatycznego napisanego przez nas programu serwera w Python’ie należy
edytować zbiór:
sudo nano /etc/rc.local
Przed linią exit 0
Należy wpisać, co trzeba uruchomić, np.:
cd /home/pi #przejscie do kartoteki gdzie jest program
python helloweb.py #wykonanie programu jako super user
Ale jak znaleźć i zabić proces serwera ???????
8 Podłączanie urządzeń peryferyjnych
Głównym sposobem podłączenia urządzeń peryferyjnych w RPi jest wykorzystanie złącza IDE26, na
którym dostępne są sygnały cyfrowe GPIO (pojedyncze sygnały wejść lub wyjść), port szeregowy
AMA0, I2C0 oraz SPI0 (Rys. 7Rys. 7. Opis złącza sygnałów cyfrowych RPi.). W rozdziale tym opiszemy
sposób wykorzystania GPIO, portu szeregowego i magistrali I2C oraz ograniczymy się do sterownia
portami z programu Python.
Pamiętać należy, ze sygnały cyfrowe w RPi pracuje w standardzie 3.3V. Przy wykorzystaniu urządzeń
zewnętrznych z innym napięciem zasilania konieczne jest zastosowanie odpowiednich układów
dopasowujących.
13
Praca z sygnałami GPIO wymaga uprawnień administratora (inna biblioteka – „pigpio” nie wymaga
takich uprawnień. Najprostszym sposobem jest uruchomienie programu Python (odpowiednio dla
wersji konsoli lub idle) komendami:
sudo python
sudo idle
Program w Pythonie wykorzystujący GPIO również musi być utuchamiany z uprawnieniami:
sudo nazwa_programu.py
Raspberry Pi rev.2
3V3 1 2 5V
GPIO02
I2C1_SDA 3 4 5V
GPIO03
I2C1_SCL 5 6 GND
GPIO04
GPCLK0 7 8
GPIO14
TX
GND 9 10 GPIO15
RX
GPIO17 11 12 GPIO18
PCM_CKL
GPIO27 13 14 GND
GPIO22 15 16 GPIO23
3V3 17 18 GPIO24
GPIO10
SPI0_MOSI 19 20 GND
GPIO09
SPI0_MISO 21 22 GPIO25
GPIO11
SPI0_SCLK 23 24
GPIO08
SPI0_CE0_N
GND 25 26 GPIO07
SPI0_CE1_N
Rys. 7. Opis złącza sygnałów cyfrowych RPi.
14
8.1 Obsługa wejść wyjść cyfrowych
W opisach wejść i wyjść cyfrowych RPi istnieją przynajmniej da standardy ich numerowania. Jeden
odnosi się do numeru pinu złącza (1 do 26), drugi do numeru logicznego (GPIOxx). Np. na Rys. 7 pin
15 to GPIO22, co powoduje, ze możemy się do tego sygnału odwołać jako sygnału 22 lub 15 w
zależności od stosowanego sposobu numeracji.
Sygnały o podwójnym opisie na Rys. 7 mogą być wykorzystane jako GPIO, pod warunkiem, że nie
zainstalowano obsługi sygnałów alternatywnych. Np. jeśli zainstalowano moduł I2C, to nie możemy
wykorzystać GPIO02 i GPIO03.
W pierwszej kolejności (oczywiście musimy mieć dostęp do Internetu ) należy zaktualizować system i
zainstalować pakiet obsługi GPIO:
sudo apt-get update
sudo apt-get install python-rpi.gpio
Przykładowy program włączający i wyłączający sygnał GPIO22 może wyglądać następująco.
Importujemy bibliotekę GPIO:
import RPi.GPIO as GPIO
Ustawiamy numeracje wg opisu GPIO??
GPIO.setmode(GPIO.BCM)
lub alternatywnie (numeracja wg numeru pinu GPIO22=pin 15):
GPIO.setmode(GPIO.BOARD)
Ustawiamy port GPIO22 jako wyjściowy:
GPIO.setup(22,GPIO.OUT) #przy wyborze GPIO.setmode(GPIO.BCM)
lub:
GPIO.setup(15,GPIO.OUT) #przy wyborze GPIO.setmode(GPIO.BOARD)
Załączenie lub wyłączenie sygnału (napięcie wysokie i niskie) odbywa się odpowiednio, za pomocą
instrukcji:
GPIO.output(22,GPIO.HIGH)
GPIO.output(22,GPIO.LOW)
Analogicznie, przy wyborze numeracji „BOARD” zamiast liczby 22 należy wpisać 15.
Czytanie sygnału wejściowego (numeracja „BCM”) wymaga ustawienia portu jako wejścia:
GPIO.setup(22,GPIO.IN)
oraz odczytania wartości z ewentualnym przypisaniem do zmiennej x (True = stan wysoki, False= stan
niski):
x = GPIO.input(22)
15
Jeśli czytany będzie pin skonfigurowany jako wyjściowy, to odczytana wartość będzie odpowiadała
ostatnio wpisanej. Jeśli natomiast wystąpi próba zapisania wartości do portu otwartego jako
wejściowy, system zgłosi błąd.
8.2 Uruchamianie I2C na Raspberry Pi
Uruchomienie modułu I2C przydatnego do współpracy z układami czujnikowymi na komputerze RPi
wymaga edycji zbioru:
sudo nano /etc/modules
Wpisać należy tam wiersze (pierwszy zazwyczaj wystarcza):
i2c-bcm2708
i2c-dev
Po zapisaniu tego zbioru należy edytować zbiór:.
sudo nano /etc/modprobe.d/raspi-blacklist.conf
Należy zaremować linie dotyczącą I2C wpisując znak '#' na jej początku (jednocześnie można włączyć
moduł SPI):
#blacklist i2c-bcm2708
#blacklist spi-bmc2708
Tak zmodyfikowany zbiór należy zapisać.
W następnej kolejności należy zainstalować moduł I2C (trzeba mieć połączenie do Internetu):
sudo apt-get install python-smbus i2c-tools
Po pomyślnym załadowaniu sterowników należy restartować system:
sudo reboot
Sprawdzenie działania interfejsu można przeprowadzić podłączając dowolny układ I2C i wykonać
komendę:
sudo i2cdetect -y 0
lub
sudo i2cdetect -y 1
w zależności, czy uruchamiamy port „0” czy „1” (w wersji 2 na złączu dostępny jest port „1”, w wersji
1 był „0”).
16
W odpowiedzi wyświetlone zostaną adresy (7 bitowe) podłączonych urządzeń Rys. 8.
Rys. 8. Odpowiedź Rpi na komendę „sudo i2cdetect -y 1”, gdy do linii I2C podłączono urządzenie o adresie
0x68 (7 bitów) = 0xC0 (8 bitów) oraz 0x77 (7 bitów) = 0xEE (8 bitów)
Do pracy w Pythonie należy zaimportować bibliotekę:
import smbus
oraz utworzyć obiekt smbus „0” lub „1”:
i2c = smbus.SMBus(1)
Teraz można pracować z biblioteką. Na Przykład dla pamięci 24C16 o adresie 0x50 do zerowego bajtu
wpisujemy liczbę 0x65:
i2c.write_byte_data(0x50,0x00,0x65)
Odczyt tej pamięci wygląda następująco:
i2c.write_byte(0x50,0x00)
x = i2c.read_byte(0x50)
print hex(x)
Program powinien wyświetlić 0x65. Biblioteka obsługująca i2c jest szersza i zawiera obsługę
magistrali SMBus. Opisano ja poniżej.
8.2.1 Funkcje SMBus (System Management Bus) –
Rozdział ten został zaczerpnięty z http://www.raspberry-projects.com/pi/programming-in-
python/i2c-programming-in-python/using-the-i2c-interface-2
SMBus (System Management Bus) protokołem niższego rzędu niż protokół I2C. Pisząc program dla
urządzenia I2C, gdy użyjemy komend SMBus, program będzie pracował dla urządzeń I2C i SMBus.
17
Należy podkreślić, że adres w poniższych instrukcjach to adres 7 bitowy bez bitu zapis/odczyt (w
instrukcjach będzie on przesunięty o jeden bit w lewo I dodany do niego bit odczyt/zapis).
Znaczenie funkcji:
long write_quick(int addr)
wyślij bit odczytu/zapisu.
long read_byte(int addr)
odczytaj pojedynczy bajt z urządzenia bez podania adresu rejestru.
long write_byte(int addr,char val)
wyślij bajt do urządzenia.
long read_byte_data(int addr,char cmd)
odczytaj bajt.
long write_byte_data(int addr,char cmd,char val)
wpisz bajt .
long read_word_data(int addr,char cmd)
odczytaj słowo (dwa bajty).
long write_word_data(int addr,char cmd,int val)
wpisz słowo (dwa bajty).
Funkcje odcztytu/zapisu blokowego I2C:
long[] read_i2c_block_data(int addr,char cmd)
czytanie bloku danych.
write_i2c_block_data(int addr,char cmd,long vals[])
wpisywanie bloku danych
8.3 Uruchamianie RS232 na Raspberry Pi
Opis ten opracowano na podstawie strony Clayton Smiths .
18
Port szeregowy domyślnie obsługuje w Raspberry konsolę. Ustawienie to należy wyłączyć poprzez edycję zbioru /boot/cmdline.txt. Wcześniej można stary zbiór zachować na wszelki wypadek:
sudo cp /boot/cmdline.txt /boot/cmdline_old.txt
Edytujemy zbiór:
sudo nano /boot/cmdline.txt
Oryginalnie zbiór ten wygląda następująco:
dwc_otg.lpm_enable=0 rpitestmode=1 console=ttyAMA0,115200
kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4
rootwait
Wyrzucić należy zapisy z parametrami ttyAMA0, tj.:
console=ttyAMA0,115200 kgdboc=ttyAMA0,115200
Co da końcowy efekt:
dwc_otg.lpm_enable=0 rpitestmode=1 console=tty1 root=/dev/mmcblk0p2
rootfstype=ext4 rootwait
Zmiany należy zapisać i wyjść z edytora.
W następnej kolejności należy poprawić zbiór /etc/inittab :
sudo nano /etc/inittab
Należy w nim znaleźć ciąg ttyAMA0 ( CTRL+W i wpisać ttyAMA0).
Zazwyczaj jest to ostatnia linia:
2:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
Należy ją “zaremować” przez wpisanie na początku znaku ‘#’
Po tych czynnościach należy system zrestartować:
sudo reboot
W celu połączenia portu z oprogramowaniem w języku Python należy zainstalować bibliotekę (należy mieć połączenie internetowe):
sudo apt-get install python-serial
Przykładowy program obsługi portu szeregowego wygląda następująco:
19
import serial
sport = serial.Serial("/dev/ttyAMA0", 9600, timeout=0.5) txt = raw_input(“>>>> “) #czyta z shela Pythona sport.write(">>>: "+txt) #wypisuje na port
sport.close()
Istotne jest również, że sygnały portu szeregowego dostępne na złączu Raspberry pracują w
standardzie TTL 3,3V. Należy wiec zastosować odpowiedni dla danych potrzeb adapter.
W wierszu poleceń można wylistować wszystkie dostępne porty szeregowe:
ls /dev/tty*
Wynik może wyglądać tak:
Rys. 9.Lista dostępnych portów szeregowych (fizyczny port szeregowy dostępny na złączu to ttyAMA0).
Albo tak, po dołączeniu przejściówki USB na port szeregowy. Zamiast pracować przez port ttyAMA0
można uruchomić procedura Serial() port ttyUSB0.
Rys. 10. Lista dostępnych portów szeregowych (fizyczny port szeregowy dostępny na złącz to ttyAMA0 i nowy
port ttyUSB0).
20
9 Praca z modułem BlueTooth i obsługą SSP (opis zaczerpnięto z http://www.fritz-
hut.com/2012/09/14/raspberrypi-bluetooth-with-bluesmirf/ ).
W celu uruchomienia portu szeregowego poprzez moduł BT, musimy zainstalować bibliotekę obsługi
BlueTooth:
sudo apt-get install bluetooth bluez-utils
W jednym z eksperymentów musiano wykonać jeszcze instalacji:
sudo apt-get install bluetooth bluez-utils blueman
gdyż nie załadował się program graficzny do obsługi BT.
Lista podłączonych interfejsów może zostać wyświetlona komendą:
sudo hcitool dev
Lista ta będzie miała następującą postać:
Devices:
hci0 00:11:67:8f:5b:43
Inną metodą jest użycie polecenia lsusb , co spowoduje wylistowanie urządzeń USB, a między innymi
modułu BT. Np.:
Bus 001 Device 005: ID 1131:1001 Integrated System Solution Corp. KY-BT100 Bluetooth
Adapter
Poszukiwanie urządzeń znajdujących się w pobliżu można wykonać komendą:
sudo hcitool scan
Przykładowa odpowiedź:
Scanning…
D4:5d:42:1e:c3:c7 Nokia C3-01
00:12:6f:23:8b:ad fall #nazwa nadana modułowi BTM222
Pokazywane są urządzenia nieskojarzone !
Konfiguracja portu szeregowego rfcomm jest wykonywana poprzez edycję zbioru:
sudo nano /etc/bluetooth/rfcomm.conf
# RFCOMM configuration file.
#
rfcomm0 {
# Automatically bind the device at startup
bind yes;
# Bluetooth address of the device #to moduł BTM 222 o nazwie “fall”
device 00:12:6f:23:8b:ad;
21
# RFCOMM channel for the connection
channel 1;
# Description of the connection
comment "BTM222_fall";
}
W celu nawiązania połączenia z urządzeniem wymagającym PIN’u należy użyć komendy:
sudo bluez-simple-agent hci0 00:12:6f:23:8b:ad
po czym należy w terminalu RPi podać numer PIN I powtórzyć na urządzeniu. Automatyczne
wysyłanie pinu jest możliwe po uruchomieniu „agenta” (1234 to PIN):
sudo bluetooth-agent 1234 &
Aby dodać urządzenie do zaufanych należy wydać komendę:
sudo bluez-test-device trusted 00:12:6f:23:8b:ad yes
Połączenie uzyskujemy po wydaniu rozkazu:
sudo bluez-test-input connect 00:12:6f:23:8b:ad
Port szeregowy otworzyć można poleceniem:
sudo rfcomm bind rfcomm0
Po tej komendzie możliwe jest przesyłanie danych za pomocą poleceń cat lub echo.
Można pracować w Pythonie otwierając port /dev/rfcomm0 !!!!!! tak jak z ttyAMA0, czy ttyUSB0.
Uwaga: po otwarciu portu rfcomm0 procedurą Serial() i zamknięciu komendą close() powtórne
otwarcie wykazuje błąd z którego wynika, że port jest w użyciu ???????
10 Klonowanie systemu
Zapamiętanie obrazu systemu operacyjnego w systemie Windows możliwe jest poprzez zastosowanie
programu Win32diskmanager. Program ten jest całkowicie darmowy i można go pozyskać z sieci. Za
pomocą tego programu można zarówno zgrać obraz systemu z karty SD, jak i zapisać na karcie
(zostanie całkowicie skasowana) zapamiętany wcześniej obraz. Widok okna programu pokazano na
Rys. 11.
Uwaga: Niektóre karty SD o tej samej objętości nominalnej mogą różnić się objętością rzeczywistą.
Wtedy obraz odczytany z karty „większej” nie będzie mógł być zgrany do karty „mniejszej” !?
Dotychczas nie umiem zmniejszyć już zgranego obrazu, mimo że duża część tego obrazu jest
zazwyczaj pusta ?!
22
11 Uwagi inne
Moduł Raspberry Pi okazał się bardzo czuły na nawet krótkie spadki napięcia zasilania. Resetowanie
następowało nawet w czasie włączania pewnych urządzeń USB (np. portu szeregowego, dołączaniu
do zasilania 5V układu czujników itp.).
Zasilacze dostarczane przez firmy i dedykowane do RPi mogą okazać się niewystarczające. Pomimo
deklaracji o wysokim prądzie wyjściowym, zaobserwowano duże spadki napięcia wyjściowego po
obciążeniu ich stosunkowo małym (n. 0,5A) prądem. Spowodowane to było dużą opornością
wyjściową samego zasilacza i duża opornością kabki USB. Szczególnie dużą oporność mają kable z
wtyczka USB-mikro (zakupione „nie firmowe” kable miały całkowita oporność 2Ω !!!!!).
Duży spadek napięcia zaobserwowano również korzystając z dodatkowego gniazda USB w zasilaczu
sieciowym laptopa.
W związku z powyższym, pobieranie z RPi zasilania 5V do układów zewnętrznych wymagających dużej
precyzji napięcia zasilającego jest niecelowe. Należy raczej wykonać dodatkowy zasilacz o dużej
stabilności i dużym prądzie wyjściowym (np. 1 do 2A) i z niego zasilić RPi.
12 Literatura: Pisząc powyższy tekst korzystano głównie z Internetu. Odnośniki do odpowiednich stron zawarto w
samym tekście. Dla rozszerzenia wiedzy i możliwości wykorzystania modułu Raspberry Pi można
polecić liczne wydawnictwa książkowe. Niektóre z nich to:
[1] Matt Richardson, Wallace Shawn, Wprowadzenie do Raspberry Pi, APN Promise, 2013
[2] Eben Upton, Gareth Halfacree, Raspberry Pi – przewodnik użytkownika, Helion, 2013
[3] Andrew Robinson, Mike Cook, Raspberry Pi. Najlepsze projekty , Helion, 2013
[4] Simon Monk, Raspberry Pi. Receptury, Helion, 2013
[5] Simon MonkRaspberry Pi. Przewodnik dla programistów Pythona, Helion, 2014
[6] Donald Norris, Raspberry Pi. Niesamowite projekty. Szalony Geniusz, Helion, 2013
Rys. 11. Widok programu Win32diskimager.