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:

  1. Zasilić Raspberry Pi i zaczekać na uruchomienie systemu.

  2. 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) to swpb<NUMER ZESTAWU>.

  3. Połączyć się z urządzeniem przy wykorzystaniu komendy ssh: ssh pi@<ADRES IP>. Hasło do urządzenia to raspberry.

  4. 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)
  1. Zainstalować rozszerzenie Remote - SSH w Visual Studio Code.

  1. Wykorzystując rozszerzenie dostępne w lewym dolnym rogu okna Visual Studio Code otworzyć zdalne połączenie.

  1. Połączyć się z dostępnym urządzeniem lub gdy nie jest ono widoczne na liście wybrać opcję Add new SSH host...

  1. 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
  1. Z menu interpretatorów języka Python znajdującego się w prawym dolnym narożniku wybierz opcję Add Interpreter....

  1. 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:

  1. Zapalał i gasił diodę LED podłączoną do pinu np. GPIO 17 z interwałem 1 sekundy.

  2. 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!

  3. 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 :

  1. Odczytaj prędkości kątowe w trzech osiach sensora.
  2. 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:
    twos_comp = 256 * msb + lsb
    if twos_comp >= 32768:
        return twos_comp - 65536
    else:
        return twos_comp