03 - Raspberry Pi
Systemy Wbudowane i Przetwarzanie Brzegowe
Politechnika Poznańska, Instytut Robotyki i Inteligencji Maszynowej
Ćwiczenie laboratoryjne 3: Raspberry Pi - konfiguracja
Powrót do spisu treści ćwiczeń laboratoryjnych
Konfiguracja urządzenia
Przygotowanie karty SD z obrazem systemu
UWAGA: karty SD z systemem operacyjnym Raspberry Pi OS zostały już przygotowane przez prowadzącego i nie należy ich nadpisywać. Poniższa instrukcja odnosi się jedynie do użytkowania poza zajęciami.
Podczas zajęć wykorzystywany będzie system operacyjny Raspberry Pi OS wcześniej dostępny pod nazwą Raspbian. System ten jest dostępny w wersji 32-bitowej i 64-bitowej. Podczas zajęć wykorzystywana będzie wersja 64-bitowa w wersji Desktop (Raspberry Pi OS). Instrukcja instalacji systemu znajduje się w oficjalnej dokumentacji Raspberry Pi: Setting up your Raspberry Pi.
Uruchomienie systemu
Komputery PC oraz mikrokontrolery Raspberry Pi znajdują się w jednej sieci lokalnej. W celu uzyskania dostępu do Raspberry Pi należy wykonać następujące kroki:
Zasilić Raspberry Pi i zaczekać na uruchomienie systemu.
Korzystając z listy podłączonych do sieci urządzeń dostępnej po zalogowaniu pod adresem
192.168.0.1
do panelu sterowania routera, lub wykorzystując komendęsudo nmap -sn 192.168.0.1/24
, sprawdzić adres IP przypisany do Raspberry Pi. Adres ten będzie wykorzystywany do zdalnego połączenia. Nazwa hosta (urządzenia) toswpb<NUMER ZESTAWU>
.Połączyć się z urządzeniem przy wykorzystaniu komendy ssh:
ssh pi@<ADRES IP>
. Hasło do urządzenia toraspberry
.Utworzyć własne wirtualne środowisko Pythona:
python3 -m venv ~/<NUMER INDEKSU> --system-site-packages
, a następnie aktywować środowisko poleceniem:source ~/<NUMER INDEKSU>/bin/activate
. Wszystkie polecenia realizowane podczas laboratoriów wykorzystujących Raspberry Pi należy wykonywać w tym środowisku.
Tabela adresów IP
Urządzenie | Adres IP |
---|---|
swpb00 | 192.168.0.20 |
swpb01 | 192.168.0.21 |
swpb02 | 192.168.0.2 |
swpb03 | 192.168.0.3 |
swpb04 | 192.168.0.4 |
swpb05 | 192.168.0.5 |
swpb06 | 192.168.0.6 |
swpb07 | 192.168.0.7 |
swpb08 | 192.168.0.8 |
swpb09 | 192.168.0.9 |
swpb10 | 192.168.0.10 |
swpb11 | 192.168.0.11 |
swpb12 | 192.168.0.12 |
swpb13 | 192.168.0.13 |
Konfiguracja zdalnego edytora kodu
Visual Studio Code (Zalecane)
- Zainstalować rozszerzenie Remote - SSH w Visual Studio Code.
- Wykorzystując rozszerzenie dostępne w lewym dolnym rogu okna Visual Studio Code otworzyć zdalne połączenie.
- Połączyć się z dostępnym urządzeniem lub gdy nie jest ono widoczne na liście wybrać opcję Add new SSH host...
- Wprowadzić hasło użytkownika jeśli jest ono wymagane. Jeśli urządzenie jest dodawane po raz pierwszy, konfiguracja połączenia może trwać chwilę dłużej.
PyCharm
- Z menu interpretatorów języka Python znajdującego się w prawym dolnym narożniku wybierz opcję Add Interpreter....
- Dodaj nowy interpreter poprzez SSH i wprowadź dane dostępowe do urządzenia.
Wykorzystanie interfejsów
Raspberry Pi 3. Źródło grafiki: Raspberry Pi Pinout Diagram | Circuit Notes
Raspberry Pi 5. Źródło grafiki: Raspberry Pi 5 Introduction
Uwaga: W celu aktywacji interfejsów I2C oraz SPI należy wykorzystać odpowiednie opcje narzędzia raspi-config
(sekcja Interface Options -> I2C -> Yes), a następnie uruchomić ponownie Raspberry Pi.
Interfejs GPIO
Do obsługi interfejsu GPIO na platformie Raspberry Pi można wykorzystać bibliotekę gpiozero. W celu instalacji biblioteki należy wykonać polecenie sudo apt install python3-gpiozero
w aktywowanym środowisku wirtualnym.
Dioda LED | Raspberry Pi | Numer pinu RPi |
---|---|---|
Anoda | GPIO 17 | 11 |
Katoda | GND | 6 |
Przycisk | Raspberry Pi | Numer pinu RPi |
---|---|---|
SW2 | GPIO 4 | 7 |
GND | GND | 6 |
Zadanie 1. Korzystając z powyższej tabeli podłącz do Raspberry Pi diodę LED (pamiętając o zastosowaniu rezystora) oraz przycisk. Następnie wykorzystując skonfigurowany, zdalny edytor kodu napisz program, który wykorzystując interfejs GPIO będzie:
Zapalał i gasił diodę LED podłączoną do pinu np. GPIO 17 z interwałem 1 sekundy.
Odczytywał i wyświetlał w konsoli stan przycisku z interwałem jednosekundowym. UWAGA: Przed podłączeniem przycisku należy ustawić pin do którego będzie on podłączony w tryb wejścia z podciągnięciem do napięcia zasilania!
Odczytywał stan przycisku i w przypadku wykrycia zbocza opadającego zmieniał stan logiczny diody LED.
Interfejs I2C
Zadanie 2. Podłącz do Raspberry Pi moduł z żyroskopem zgodnie z poniżej przedstawionym układem pinów czujnika oraz wykorzystując schemat urządzenia brzegowego przedstawiony w sekcji Wykorzystanie interfejsów. Następnie z wykorzystaniem polecenia sudo raspi-config
aktywuj interfejs i zweryfikuj połączenie korzystając z poniższych instrukcji.
L3GD20H Gyro | Raspberry Pi | Numer pinu RPi |
---|---|---|
VDD | 3.3 V | 1 |
GND | GND | 6 |
SDA | SDA | 3 |
SCL | SCL | 5 |
Źródło grafiki: L3GD20H 3-Axis Gyro Carrier with Voltage Regulator
Korzystając z narzędzia I2C-Tools (w razie potrzeby należy zainstalować poleceniem sudo apt install i2c-tools
) można wyświetlić listę urządzeń podłączonych do interfejsu I2C. W przypadku poprawnego podłączenia modułu z żyroskopem, po wywołaniu komendy i2cdetect -y 1
wyświetlona zostanie poniższa tablica opisująca adresy urządzeń podłączonych do interfejsu I2C:
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- 6b -- -- -- --
70: -- -- -- -- -- -- -- --
Wykorzystywany sensor jest podłączony do adresu 0x6b
. W celu odczytania danych z czujnika można wykorzystać bibliotekę smbus2. W celu instalacji biblioteki należy wykonać polecenie pip3 install smbus2
w aktywowanym środowisku wirtualnym.
Zadanie 3. Wykorzystując informacje zawarte na stronie dystrybutora, producenta oraz przykładową implementację dostępną w repozytorium L3GD20H-gyroscope :
- Odczytaj prędkości kątowe w trzech osiach sensora.
- Przygotuj program, który będzie wyświetlał w konsoli informację jeśli żyroskop został poruszony z prędkością większą niż 30°/s. Wiadomość powinna zawierać informację w jakiej osi i z jaką prędkością kątową czujnik został poruszony.
Do komunikacji z czujnikiem wykorzystaj interfejs I2C. Do przetworzenia danych z odczytanych rejestrów na liczbę całkowitą ze znakiem można wykorzystać poniższą funkcję:
def twos_complement_combine(msb: int, lsb: int) -> int:
= 256 * msb + lsb
twos_comp if twos_comp >= 32768:
return twos_comp - 65536
else:
return twos_comp