Skip to content

Raspberry Pi als Wi Fi Direct Access Point

Marvin edited this page Feb 1, 2023 · 5 revisions

Voraussetzungen

Auf dem Raspberry Pi wurde für das Projekt das Betriebssystem Raspberry Pi OS installiert. Um den Raspberry Pi als Access Point (AP), einzurichten kann das Kommandozeilenprogramm wpa_cli verwendet werden. Damit der Raspberry Pi als Wi-Fi Direct Zugriffspunkt dienen kann, müssen zuvor noch einige Pakete installiert werden und einige Konfigurationen vorgenommen werden.

Anwendung für den Verbindungsaufbau auf der Seite des Raspberry's

Da das Kommandozeilenprogramm nicht sehr benutzerfreundlich ist und es häufig zu Fehlern kommt, wurde ein Wrapper erstellt, welcher alle diese genannten Funktionen als Python Methoden bereitstellt. Zudem bietet das Programm den Vorteil alle Funktionen direkt aus dem Python Code auszuführen, ohne diese händisch eingeben zu müssen. Dadurch ist es möglich mit nur einem Kommando den Raspberry Pi auf eingehende Verbindungen vorzubereiten.

Die Anwendung bietet die folgenden Funktionen:

  • Überprüfen anhand des Gerätenamens, ob ein P2P-Geräte bereits mit dem Raspberry verbunden ist
  • Ausgeben aller in der nähe befindlichen Wi-Fi Direct Geräte
  • den Raspberry Pi für andere Geräte in der Umgebung sichtbar machen
  • eine Verbindung zu einem Wi-Fi Direct Gerät herstellen
  • auf eine eingehende Verbindung warten und die Verbindungsanfrage bestätigen

Die genannten Funktionen werden von der Klasse WifiDirectConnector implementiert.

Klassendiagramm WifiDirectConnector

Die Methoden der Klasse können direkt von einer anderen Python-Klasse aufgerufen werden. Zudem implementiert die Klasse ein CLI, womit die Anwendung auch standalone verwendet werden kann, um die P2P Verbindung aufzubauen. Das ist in dem Fall sinnvoll, wenn der Code für den Datenaustausch in einer anderen Programmiersprache als Python geschrieben werden soll.

Senden und Empfangen von Daten unter Verwendung von Wi-Fi Direct

Nachdem das Smartphone mit dem Access Point vom Raspberry Pi verbunden worden ist, können zwischen den beiden Endgeräten Daten ausgetauscht werden. Dazu wird auf dem Raspberry Pi ein TCP-Server-Socket gestartet und auf dem Smartphone ein TCP-Client-Socket, welches eine Verbindung zum Server-Socket aufbaut.

Sockets

Wenn für die Konfiguration des Raspberry Pi's das config.sh Konfigurationsskript verwendet wird, so hat der Raspberry Pi die IP-Adresse 192.168.4.1. Diese IP-Adresse sollte muss für die Initialisierung des Server-Sockets verwendet werden.

Dabei ist es egal welche Programmiersprache verwendet wird, um den Socket zu initalisieren. Somit ist es für eine Vielzahl an Anwendungen möglich die WiFi Direct Schnittstelle zur Kommunikation zu nutzen.

Verwendung der abstrakten Klasse WifiDirectSocket

Um das Erstellen einer Python-Anwendung für den Datenaustausch über WiFi Direct zu erleichtern, stellt das Repository die abstrakte Klasse WifiDirectSocket bereit. Wenn eine Klasse von dieser Klasse abgeleitet wird, müssen nur wenige Event-Methoden implementiert, um die P2P nutzen zu können. Auf diese Weise kann mit nur wenigen Zeilen Code P2P Verbindung in neue oder bestehende Anwendungen integriert werden.

Die Dokumentation zu dieser abstrakten Klassen ist als Github Page innerhalb dieses Repositories gehostet.

Beispiel: SimpleMessenger

Bei der Klasse SimpleMessenger handelt es sich um ein Beispiel, welche zeigt wie die abstrakte Klasse WifiDirectSocket verwendet werden kann, um WiFi Direct für die Kommunkation zu nutzen. Die Klasse implementiert ein einfaches Kommandozeilen-Chatprogramm. Da der Großteil der Logik für den Verbindungsaufbau bereits in der abstrakten Klasse WifiDirectSocket nimplementiert worden ist, werden für die Chat-Anwendung nur sehr wenige Codezeilen benötigt.

Klassendiagramm WifiDirectSocket