(WS19-01)Wetterballon Entwicklung: Unterschied zwischen den Versionen

Aus Verteilte Systeme - Wiki
Wechseln zu: Navigation, Suche
(Implementierung)
(Implementierung)
Zeile 39: Zeile 39:
  
 
Nach der Abwägung der Vor- und Nachteile haben wir uns für eine Implementierung mittels der bcm2835-Bibliothek entschieden, da uns die bessere Performance den größten Vorteil bei der Erfüllung der Anforderungen bietet, auch wenn darunter die Benutzerfreundlichkeit leidet.
 
Nach der Abwägung der Vor- und Nachteile haben wir uns für eine Implementierung mittels der bcm2835-Bibliothek entschieden, da uns die bessere Performance den größten Vorteil bei der Erfüllung der Anforderungen bietet, auch wenn darunter die Benutzerfreundlichkeit leidet.
 
 
==Versenden einer SMS über den Pi==
 
Um die Bergung nach der Landung zu vereinfachten, werden wir die GPS-Daten regelmäßig übermitteln. Als erste Variante nutzen wir dazu SMS. Neben dem Pi und dem GPS-Modul benötigen wir einen USB-Dongle (Huawei E3372), eine Sim-Karte und folgende Softwarepakete für den Pi:
 
usb-modeswitch
 
usb-modeswitch-data
 
smstools
 
 
Da der USB-Surfstick vom Pi nur als Massenspeicher erkannt wird, muss dieser in den Modem-Modus gewechselt werden:
 
<syntaxhighlight>
 
sudo usb_modeswitch -v 12d1 -p 1f01 -M '55534243123456780000000000000011062000000100000000000000000000'
 
</syntaxhighlight>
 
Die passenden Werte für -v und -p können über das Terminal mittels lsusb ermittelt werden.
 
 
Leider hat diese Methode unseren Stick nicht in den passenden Modus überführt. Für den passenden Modus muss zusätzlich unter ''/ets/usb_modeswitch.d/'' eine Datei mit dem Namen ''12d1:1f01''und folgendem Inhalt angelegt werden:
 
<syntaxhighlight>
 
# Huawei E3372 (fallback mode)
 
TargetVendor=  0x12d1
 
TargetProduct= 0x155f
 
MessageContent="55534243123456780000000000000011063000000100010000000000000000"
 
</syntaxhighlight>
 
 
Nun sollten alle notwendigen Schritte erledigt sein und der Pi kann SMS verschicken. Dazu muss einfach nur eine Datei in den Ordner ''/var/spool/sms/outgoing/''verschoben werden.
 
Zu beachten ist dabei, dass die Datei nach folgendem Schema aufgebaut ist.
 
 
<syntaxhighlight>
 
To: Empfängernummer(Bsp: 4915201234567)
 
 
Text, der übermittelt werden soll.
 
</syntaxhighlight>
 
 
Eine kleine Funktion zum Testen:
 
<syntaxhighlight lang = "c">
 
 
#include <stdio.h>
 
#include <stdlib.h>
 
#include <stdint.h>
 
#include <unistd.h>
 
#include <sys/types.h>
 
#include <string.h>
 
 
void send(char* message){
 
int fd_to, geschrieben;
 
char* path = "/var/spool/sms/outgoing/data.txt";
 
 
fd_to = open(path, O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH);
 
if(fd_to == -1){
 
printf("Error opening file");
 
}
 
printf("Size: %d\n", sizeof(message));
 
printf("Geöffnet\n");
 
char* msg = "To: xxxxxxxxxx\n\n";
 
 
char* fullmsg= malloc(strlen(msg)+strlen(message)+1);
 
strcpy(fullmsg, msg);
 
strcat(fullmsg, message);
 
strcat(fullmsg, "\n\0");
 
 
geschrieben = write(fd_to, fullmsg, strlen(fullmsg));
 
free(fullmsg);
 
 
 
}
 
 
int main(int argc, char *argv[])
 
{
 
send("Hallo Freunde");
 
}
 
 
</syntaxhighlight>
 

Version vom 13. Dezember 2019, 00:34 Uhr

Formalia

C-Styleguide

Für die Entwicklung wurde sich auf einen gemeinsamen Styleguide geeinigt. Weiterer Text folgt.

Der Guide kann hier eingesehen werden: C-Styleguide

CSV

Die Sensordaten werden im zur einfacheren Auswertung im CSV-Format gespeichert. Nährere Informationen gibt es hier:

CSV-Format

Doxygen

...Cooler Text kommt noch... Infos zu Doxygen hier: Doxygen

Implementierung

Als Implementierungssprache standen Python und C zur Auswahl. Unsere Wahl fiel auf C, da damit alle Gruppenmitglieder schon erste Erfahrungen sammeln konnten. Einen Styleguide haben wir unter nachfolgendem Link angeführt, um die [1] Zur Ansteuerung der über I2C angeschlossenen Sensoren standen uns die Schnittstellen i2c-dev, wiringPi und die Registermanipulation mittels der bcm2835-Bibliothek zur Auswahl. Um die passende Methode zu finden, haben wir uns mit allen Varianten beschäftigt und die Vor- und Nachteile wie folgt zusammengefasst.

i2c-dev:
+ einfache Verwendung
- adapter_nr muss ermittelt werden
- Umweg über Filesystem -> schlechtere Performance

WiringPi:
+ sehr einfache Verwendung
o bis auf Setup, zu unflexible Funktionen (Alternative: Verwendung von write und read)
- Umweg über Filesystem -> schlechtere Performance

Low Level (Registermanipulation):
+ potentiell beste Performance
+ maximale Kontrolle
+ Unabhängigkeit von I2C-Bibliotheken -> bessere Portabilität bei identischem Prozessor aber unterschiedlichen OSs
o root-only
- komplexer -> fehleranfälliger, zeitraubender, aber es gibt eine gute Vorlage zur Implementierung

Nach der Abwägung der Vor- und Nachteile haben wir uns für eine Implementierung mittels der bcm2835-Bibliothek entschieden, da uns die bessere Performance den größten Vorteil bei der Erfüllung der Anforderungen bietet, auch wenn darunter die Benutzerfreundlichkeit leidet.