DIY Ruftaste Teil 2. Bildtelefon von Raspberry Pi

In diesem Teil stellen wir ein Raspberry Pi-VoIP-Gerät für Videoanrufe mit dem SIP-Protokoll her.

Die ursprüngliche Aufgabe blieb die gleiche - ein Anruf durch äußere Einflüsse (Knopfdruck). Die Umsetzung der Idee hat sich jedoch etwas verändert. Wie im vorherigen Teil werden wir den SIP-Client des Linphonec-Terminals verwenden, aber um die Einrichtung zu vereinfachen, entschied ich mich, den VoIP-Anbieter von Zadarma.com für kostenlose On-Net-Anrufe einschließlich Video-Support zu verwenden. Für Videoanrufe verwendete ich eine preiswerte USB-Kamera.

Details sowie Schritt-für-Schritt-Anleitungen unter dem Schnitt.

Erster Teil
Das System wird sofort auf dem Basis-Image für RPI v3_40_int bereitgestellt , ohne dass zusätzliche Komponenten installiert werden müssen.

Verknüpfen Sie grundlegende MajorDoMo-Bilder für Raspberry

Die Webcam, die ich benutzte, ist preiswert (ungefähr 7 Jahre in Minsk) - Ritmix RVC-015M. Kann den Fokus manuell einstellen.

Während des Testens und des Schreibens eines Beitrags habe ich beschlossen, auf die Verwendung meines VoIP-Servers (Fresswitch) zu verzichten. Die Installation Ihres VoIP-Servers verkompliziert den Einrichtungsprozess, bietet Ihnen jedoch mehr Flexibilität.

Als Beispiel verwenden wir den auf Habr VoIP vorgestellten Betreiber Zadarma .

Für Anrufe benötigen wir zwei Konten auf dem SIP-Server. Unter einem funktionieren der Raspberry Pi und der Konsolen-Client, unter dem zweiten das Smartphone (oder der PC). Der Registrierungsvorgang ist intuitiv und erfordert keine Beschreibung.

Ich werde die Installation und Konfiguration des Linphone-Pakets kurz wiederholen, detailliertere Informationen im ersten Teil.

Installieren und Zusammenbauen von Linphone


Installation vorbereiten:


Nicht mehr ausgeführte, aber nicht verwendete Dienste:

Beenden von Diensten
sudo systemctl stop freeswitch.service sudo systemctl stop majordomo.service sudo systemctl stop avahi-daemon.socket sudo systemctl stop avahi-daemon.service sudo systemctl stop mosquitto.service sudo systemctl stop mysql sudo systemctl stop mpd.service sudo systemctl stop mpd.socket sudo systemctl stop homebridge.service sudo systemctl stop nginx.service sudo systemctl stop bluetooth.target sudo systemctl stop bluetooth.service 


Erstellen einer temporären Auslagerungsdatei
Für alle Fälle erstellen wir eine temporäre Auslagerungsdatei (Festplattenspeicher) (vor dem Neustart des Systems), die das Betriebssystem bei unzureichendem RAM verwendet.

Alternative Befehle: Überprüfen, ob die Auslagerungsdatei in unserer Raspbian (Debian) -Installation enthalten ist, und wenn die Ausgabe leer ist, bedeutet dies, dass die Auslagerungsdatei auf dem System fehlt.
Füge 1G Swap hinzu und erstelle eine Datei.

Wir haben die richtigen Berechtigungen für diese Datei festgelegt. Nur der Root-Benutzer kann in die Auslagerungsdatei lesen und schreiben.

Wir verwenden das Tool mkswap, um den Linux-Swap-Bereich in der Datei zu konfigurieren und zu aktivieren:

 sudo swapon --show sudo fallocate -l 1G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile 

Installieren des Linphonec Console SIP-Clients und des Linphonecsh-Verwaltungsdienstprogramms


Um das Paket aus den Quellen zu erstellen, installieren wir zusätzliche Abhängigkeiten:

 sudo apt-get install cmake automake autoconf libtool intltool yasm libasound2-dev libpulse-dev libv4l-dev nasm git libglew-dev 

Wir gehen in das Home-Verzeichnis und laden das Linphone-Paket selbst herunter. Der Download dauerte ungefähr 20 Minuten:

 cd /home/pi/ git clone git://git.linphone.org/linphone-desktop.git -recursive 

Wir gehen beim Herunterladen des Pakets in das erstellte Verzeichnis und bereiten die Installation der Version ohne grafische Oberfläche vor:

 cd linphone-desktop sudo ./prepare.py no-ui -DENABLE_OPENH264=ON -DENABLE_WEBRTC_AEC=OFF -DENABLE_UNIT_TESTS=OFF -DENABLE_MKV=OFF -DENABLE_FFMPEG=ON -DENABLE_CXX_WRAPPER=OFF -DENABLE_NON_FREE_CODECS=ON -DENABLE_VCARD=OFF -DENABLE_BV16=OFF -DENABLE_V4L=OFF 

Erstellen Sie mit dem Attribut –j4 (d. H. Erstellen Sie gleichzeitig 4 Threads:

 sudo make -j4 

Die Montage dauert 30-40 Minuten.

Die kompilierten Programmdateien wurden im Verzeichnis OUTPUT / no-ui / bin angezeigt. Um das Programm auszuführen, rufen Sie es auf und überprüfen Sie die Version des Programms:

 cd OUTPUT/no-ui/bin ./linphonec -v 

Wir erhalten das Ergebnis: Version: 3.12.0

Überladung unserer Himbeere.

Beim Neustart werden alle beim Start registrierten Dienste wiederhergestellt und die Auslagerungsdatei gelöscht.

Einrichten eines Terminal-SIP-Clients Linphonec


Führen Sie Linphonec im automatischen Antwortmodus vom aktuellen Pi-Benutzer aus:

 /home/pi/linphone-desktop/OUTPUT/no-ui/bin/linphonec 

Beim ersten Start versucht Linphonec, eine Datenbankdatei und eine Einstellungsdatei zu erstellen. Der Start erfolgt jedoch fehlerhaft und das Programm stoppt.

So erstellen Sie im ersten Teil ein Verzeichnis aus dem aktuellen Benutzer (pi)

 mkdir /home/pi/.local mkdir /home/pi/.local/share mkdir /home/pi/.local/share/linphone 

Weil In unserem Fall verwenden wir keinen VoIP-Server, dann wird der Standard-Port für IP-Telefonie 5060 verwendet.

Wir werden eines der Konten registrieren, indem wir den folgenden Befehl in Linphonec ausführen:

 register sip:XXXXXX@sip.zadarma.com sip.zadarma.com YYYYYYY 

Das Format des Befehls kann durch Eingabe von help register angezeigt werden.

In unserem Fall ist XXXXXX die Kontonummer (Login), YYYYY ist das Passwort, das bei der Registrierung vergeben wurde. Überprüfen Sie die Registrierung:

 status register 

Antwort bei erfolgreicher Registrierung: registriert, Identität = sip: XXXXX@sip.zadarma.com Dauer = 3600

Der Client wird durch Drücken von Strg + C oder durch Drücken des Befehls quit beendet.

Nach dem Beenden im Ausgangsverzeichnis / home / pi wurde die Konfigurationsdatei des Konsolenclients angezeigt: .linphonerc.

Anschließen eines WEB-Camcorders


Wir verbinden uns mit der Himbeer-Kamera.

Überprüfen, ob mein Konto in der Videogruppe enthalten ist

 cat /etc/group | grep video 

Antwort: video: x: 44: pi

Mal sehen, ob die Webcam in Ihrem System ermittelt wurde:

 sudo ls -l /dev/ | grep video 

Überprüfen Sie, ob das Mikrofon der Kamera bestimmt ist:

 arecord -l 

Die Antwort lautet:

Liste der CAPTURE-Hardwaregeräte
Karte 1: KAMERA [USB2.0 PC-KAMERA], Gerät 0: USB-Audio [USB-Audio]
Subdevices: 1/1
Subdevice # 0: Subdevice # 0

Alles ist in Ordnung, es gibt auch ein Mikrofon. Wir werden es alsemikser überprüfen

 alsamixer 

Ich werde gleich klarstellen, dass mein Mikrofon standardmäßig eingeschaltet ist. Es wurde als das Hauptmikrofon identifiziert und ist fast vollständig verdreht. Es gibt eine starke Überlastung.

Drücken Sie F6 (wählen Sie eine Karte aus), wählen Sie USB-PC-Kamera und dann F4 - das Aufnahmegerät (Mikrofon an der Kamera). Verringern Sie den Pegel mit gedrückten Cursortasten auf nahezu Null. Gleichzeitig wird die Option Aufnahme aktiviert.

"

Auf dem Anwendungsmarkt für Android installiere ich die Linphone-Anwendung (ich habe mehrere ausprobiert, nur die Übertragung von Videos). Unter Windows funktionieren alle von mir verwendeten SIP-Clients problemlos. Auf meinem SIP-Server (freeswitch, wenn lokal verwendet, und nicht nur das Netzwerk, die beste Option ist Ihr Server + Gateway für Anrufe von Ihrem lokalen Netzwerk).

Anweisungen zum Einrichten der Linphone Android-App finden Sie unter Zadarma.com.
Anweisungen vom SIP-Provider .

Wir registrieren das Mobiltelefon bei Zadarma und konfigurieren dann optional Video, Audio usw.

Zum Testen führen wir das Dienstprogramm linphonec im RPI mit der Funktion Videoanruf und automatische Antwort (durch Hinzufügen der Tasten -V -a) aus:

 /home/pi/linphone-desktop/OUTPUT/no-ui/bin/linphonec -V -a 

und rufen Sie im Terminal-Client an, indem Sie Folgendes eingeben:

 call 576935 

Die Ersetzung des VoIP-Servers (der Domäne) erfolgt automatisch, obwohl Sie die SIP-Adresse vollständig eingeben können.

Als Ergebnis erhalten wir:


(mehr oder weniger gute Qualität für diese Kamera in einem Abstand von 2-3 Metern vom Objektiv).

Wir können den automatischen Antwortmodus überprüfen, indem wir die RPI-Nummer auf dem Smartphone wählen.

Zum Ausführen und Steuern von Linphonec im Dämonmodus wird das Dienstprogramm Linphonecsh verwendet.

Beim Start ist zunächst die Initialisierung des Clients linphonecsh -init erforderlich. Wenn dieser Befehl ausgeführt wird, wird der Konsolenclient gestartet, ohne die Konfigurationsdatei zu laden.
Damit beim Start die Konfigurationsdatei gelesen wird, wird die Möglichkeit, einen Videoanruf zu tätigen und eingehende Anrufe automatisch zu beantworten, mit den Flags - s - V -a gestartet:

 /home/pi/linphone-desktop/OUTPUT/no-ui/bin/linphonecsh init -c /home/pi/.linphonerc -V -a 

Jetzt können wir den Konsolen-Client über die Befehlszeile des Betriebssystems und von MajorDoMo verwalten.

Der Befehl zum Starten eines Videoanrufs vom Terminal aus:

 /home/pi/linphone-desktop/OUTPUT/no-ui/bin/linphonecsh dial XXXXX 

Der erste Schritt kann getan werden.

Anschließen einer Taste und Arbeiten mit GPIO




Der Raspberry Pi verfügt über eine Reihe von GPIO-Ports (General Purpose Input / Output), die diese Schnittstelle bilden. Dies beinhaltet allgemeine Ein- und Ausgänge, an die verschiedene Aktoren angeschlossen werden können, in unserem Fall eine einfache Taste.

Fast jeder GPIO-Pin (es sind mehrere reserviert) kann auf einen von zwei Zuständen gesetzt werden: "Ausgang" (aka OUT oder logische 1) oder "Eingang" (IN oder logische 0). Die Ausgangsspannung beträgt 3,3V.

Für meinen Button verwende ich die beiden Stifte ganz rechts in der oberen Reihe. Anschluss 38 (GPIO20) wird auf "Ausgang" (OUT) und Anschluss 40 (GPIO21) auf "Eingang" (IN) gesetzt.

BBJ-Jumper werden zum Anschließen an den GPIO-Kamm verwendet. Es wird empfohlen, eine Verbindung herzustellen, wenn die Himbeere nicht mit dem Netzwerk verbunden ist.

Lassen Sie uns zwei Skripte erstellen. Der erste wird zum Initialisieren der GPIO-Ports verwendet, der zweite für Linphonecsh-Dienstprogramm-Steuerbefehle.

Bash-Skript zum Initialisieren von GPIO-Ports:

 sudo nano /usr/local/bin/gpio21.sh 

und fügen Sie den Inhalt ein

gpio21.sh
#! / bin / bash
# GPIO20 einrichten und auf Ausgabe einstellen
echo 20> / sys / class / gpio / export
echo out> / sys / class / gpio / gpio20 / direction
echo 1> / sys / class / gpio / gpio20 / value
# GPIO21 einrichten und auf Eingabe einstellen
echo 21> / sys / class / gpio / export
Echo in> / sys / class / gpio / gpio21 / direction

Wir machen die Datei ausführbar:

 sudo chmod +x /usr/local/bin/gpio21.sh 

Das zweite Skript zum Wählen auf Knopfdruck habe ich in PHP erstellt, um es anschließend in das MajorDoMo-Hausautomationssystem zu integrieren. Auf Knopfdruck ändert sich der Status von Port 21, das System liest regelmäßig den Wert von Port 21 und sendet bei Änderung einen Wählbefehl an Linphonecsh.

 sudo nano /usr/local/bin/dial.php 

und füge den Inhalt ein:

dial.php
<? php
$ old_state = 0;
während (wahr)
{
$ state = file_get_contents ('/ sys / class / gpio / gpio21 / value');
if ($ state! = $ old_state)
{
if ($ state == 1)
{
// Neuen Anruf tätigen
Echo "make";
exec ("sudo -u pi / home / pi / linphone-desktop / AUSGABE / no-ui / bin / linphonecsh dial sip: XXXXX@sip.zadarma.com");
usleep (200000);
}
$ old_state = $ state;
}
usleep (20000);
}
?>

Wir machen die Datei ausführbar.

Als nächstes schreiben wir drei Zeilen ganz am Ende der Startdatei:

  1. GPIO-Port-Initialisierungsskript
  2. Start des Verwaltungsdienstprogramms im automatischen Antwortmodus und Unterstützung für Videoübertragung
  3. Wählen von PHP-Skripten.

 crontab -e 


 @reboot sudo /usr/local/bin/gpio21.sh @reboot sudo -u pi /home/pi/linphone-desktop/OUTPUT/no-ui/bin/linphonecsh init -c /home/pi/.linphonerc -V -a @reboot sudo php /usr/local/bin/dial.php 

Überladen unserer Himbeere, sudo Neustart. Nach dem Neustart ist unser Bildtelefon einsatzbereit.

Weiter, falls gewünscht und möglich - Einbindung in ein Hausautomationssystem, Anbindung an Ihren SIP-Server usw.

Laden des RPI während des Wartens und Tätigen eines Videoanrufs
Laden des RPI während des Wartens und Tätigen eines Videoanrufs:





Ein kleiner Exkurs zum Abschluss


Ursprünglich plante ich, ein Gerät für die Kommunikation mit einer Person nach einer Krankheit zu entwickeln, die das Telefon nicht alleine benutzen kann. Danach verschwand die Notwendigkeit, aber ich beschloss, die Arbeit zu beenden, und sah die Möglichkeit, eine der Komponenten der Hausautomation für andere Zwecke zu verwenden.

Beim Erstellen möchte ich, dass die folgenden Kriterien erfüllt sind oder mindestens zwei von drei:

  1. Verfügbarkeit (die Möglichkeit, Komponenten hier und jetzt zu kaufen (in meiner Nähe).
  2. Budget (geringe Kosten für das Gerät am Ausgang).
  3. Einfache Ausführung oder zumindest die Vollständigkeit einer Schritt-für-Schritt-Anleitung (Die Fähigkeit einer Person, ein Gerät ohne besondere Kenntnisse und ohne Zeitaufwand zu erstellen und in Betrieb zu nehmen).

Source: https://habr.com/ru/post/de478970/


All Articles