This is a fork: First established at University of Freiburg, Enviromental Meteorology by Andreas Christen
- The original documentation and code can be found here
- Raspberry Pi Zero W
- Temperatur- und Feuchte-Sensor (Adafruit DHT22 oder besser Sensirion SHT85)
- GPS Modul - Adafruit Ultimate Breakout
- Nova PM-Sensor (optional)
- UART zu USB Adapter (5V) zum Anschluss des PM-Sensors (optional)
- Adapter Micro-USB zu USB zum Anschluss des PM-Sensors (optional)
- Kabel (bunte Steckbrücken) zum Anschluss aller Sensoren
- Powerbank zur Stromversorgung des Raspberry Pi's
- Gehäuse und Tasche zur Montage am Fahrrad
- Ansaugschlauch für PM-Sensor (optional)
- Adapterplatine (nur bei SHT 85)
- Laptop/Computer mit VNC Viewer (Download hier)
- Raspberry Pi Imager um das Operating System zu installieren. Download hier für:
- WLAN-Netzwerk mit Zugang zum Internet
- Smartphone mit VNC-Viewer (Download über Smartphone Android oder iOS)
- Operating System Image herunterladen und entpacken (Link siehe moodle)
- Die MicroSD-Karte (ggf. mit Adapter) in den Computer einlegen.
- Raspberry Pi Imager starten
- Bei
OS WÄHLEN
→Eigenes Image
das eben heruntergeladene Image auswählen. - Bei
SD-KARTE WÄHLEN
die eingeschobene SD-Karte wählen. Hinweis: genau kontrollieren dass das richtige Laufwerk ausgewählt ist. Es wird im Verlauf formatiert und alle Daten werden überschrieben! - Auf Zahnrad (Einstellungen) klicken
- Bei
Hostnamen
Haken setzen undcrowdbike13
(Nummer eures Raspberry Pis) eintragen - Haken bei
SSH aktivieren
setzen und Passwort zur Authentifizierung setzen - Passwort als
Bike4Climate
setzen, Nutzerpi
belassen - Mit
SCHREIBEN
den Schreibvorgang starten. - Wenn der Schreib- und Verify-Vorgang nach einiger Zeit abgeschlossen ist, SD-Karte kurz entnehmen und wieder einstecken. Dann das Laufwerk
boot
im Explorer öffnen. - Hier die Datei
config.txt
öffnen und folgende Einträge so verändern wie hier dargestellt. Dies ändert die Bildschirmauflösung, sodass sie hochkant und für den Smartphone-Bildschirm passend ist (Dies kann auch erst nach der Einrichtung am Computer geschehen).# uncomment to force a console size. By default it will be display's size minus # overscan. framebuffer_width=720 framebuffer_height=1280
- Die Datei speichern und schließen.
- Eine neue Datei mit dem exakten Namen
wpa_supplicant.conf
anlegen- Rechtsklick → Neu → Textdokument →
wpa_supplicant.conf
als Dateinamen eingeben (darauf achten, dass kein.txt
mehr am Ende steht!)) - Eventuell müssen in Windows erst die Dateinamenerweiterungen aktiviert werden. Dies geschieht über Ansicht und dann einen Haken bei Dateinamenerweiterungen setzen.
- Rechtsklick → Neu → Textdokument →
- Bei der Frage "Wollen Sie die Dateinamenerweiterung ändern, wird die Datei möglicherweise unbrauchbar" mit
Ja
bestätigen. - Nun mit Rechtsklick → Öffnen mit den Editor auswählen
- Es müssen nun Folgende Einträge eingefügt werden:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country=DE network={ ssid="Name eures Heim-WLANs" priority=1 psk="Passwort eures Heim-WLANs" } network={ ssid="Name eures Smartphone-Hotspots" priority=2 psk="Passwort eures Smartphone-Hotspots" }
- Darauf achten, dass Name und Passwort in
""
stehen! - Es dürfen keine Leerzeichen das
=
umgeben! - 3x kontrollieren dass das Passwort und die SSID stimmt!!
- Die Datei speichern und schließen.
- Anschließen der Powerbank an den Raspberry Pi an den Eingang
PWR IN
- Raspberry pi sollte nun booten (grüne LED blinkt)
- Ca. 2-3 Minuten warten
- Verbinden des Laptops/Computers mit dem gleichem WLAN-Netzwerk wie der Raspberry Pi → Heim-WLAN wie zuvor eingestellt.
- Starten von VNC Viewer am Laptop/Computer
- Datei → Neue Verbindung
- VNC Server:
crowdbike13
(eure Nummer) (oder lokale IP-Adresse wenn bekannt) - Name: → Name der Verbindung z.B.
Mein Crowdbike
→OK
- Doppelklick auf neue Verbindung und bei Frage nach Identität bestätigen
- Verbindung sollte nun hergestellt werden
- Benutzername
pi
und KennwortBike4Climate
eingeben, ggf. Haken bei Kennwort speichern setzen →OK
- Automatisches Ergänzen des Ausdrucks oder Pfads im Terminal immer mit der TAB-Taste
- Bestätigen von Befehlen immer mit Enter. Wenn erfolgreich, keine Rückgabe, ansonsten erscheint eine Error-Mitteilung anhand derer festgestellt werden kann, was nicht funktioniert hat.
- Verzeichnis/Ordner wechseln
cd <Ordnername>
(im Stammverzeichnis'/'
mitcd /<Ordnername>
) - Ordnerinhalt anzeigen
ls
oderls -l
(-l für Liste) - Order in aktuellem Verzeichnis erstellen
mkdir <Ordnername>
- In übergeordnetes Verzeichnis wechseln
cd ..
- Letzte eingegebene Befehle wieder aufrufen mit ↑ und ↓ (Pfeiltasten rauf/runter)
- Einfügen von sich im Zwischenspeicher befindlichen Text mit
Rechtsklick
- Terminal öffnen (obere Leiste, schwarzes Symbol):
-
Falls die Schrift sehr klein ist, kann diese im Terminal mit ctrl++ vergrößert werden
-
Serielle Schnittstelle und I2C aktivieren
- Eingabe von
sudo raspi-config
- mit Pfeiltasten zu "3 Interface Options" navigieren und mit Enter bestätigen
- Zu "P5 I2C" navigieren → Enter
"Would you like the ARM I2C interface to be enabled?" hier
<YES>
auswählen "ARM I2C interface is enabled" mit<OK>
bestätigen - erneut mit Pfeiltasten zu "3 Interface Options" navigieren und mit Enter bestätigen
- Zu "P6 Serial" navigieren → Enter
"Would you like to a login shell to be accessible over serial?" hier
<No>
auswählen - "Would you like the serial port hardware to be enabled?" hier
<Yes>
auswählen - "The serial login shell is disabled"
- "The serial interface is enabled"
- Mit
<Ok>
bestätigen - Mit
<Finish>
beenden (Hinweis: Pfeiltasten ←/→ oder TAB nutzen um zu<Finish>
zu springen) - "Would you like to reboot now?" mit
<yes>
bestätigen - Ca. 1-2 Minuten warten
- Eingabe von
-
Verbindung mit Doppelklick wieder herstellen und Warnung zur Identitätsbestätigung mit
Forsetzen
bestätigen → ggf. Kennwort erneut eingeben und Haken bei Kennwort speichern setzen.
- wieder den Terminal öffnen und ggf. mit ctrl++ wieder die Schriftgröße erhöhen
sudo pip3 install https://github.com/jkittner/crowdbike/releases/download/0.9.0/crowdbike-0.9.0-py2.py3-none-any.whl
- Das dauert einige Minuten, der Raspberry Pi Zero ist nicht sehr schnell.
- Nun den Raspberry Pi erneut ausschalten, um die Sensoren anzuschließen.
sudo shutdown -P now
- Warten bis grüne LED nicht mehr leuchtet, dann Stromversorgung (Powerbank) trennen
- Kabel wie folgt verbinden
Sensor | Pi | Kabelfarbe |
---|---|---|
+ | PIN 1 (3,3 V+) | rot |
- | PIN 9 (GND) | schwarz |
out | PIN 7 (GPCLK0) | gelb |
- Kabel wie folgt verbinden
Sensor | Pi | Kabelfarbe |
---|---|---|
SCL | PIN 3 (SCL1I2C) | violett |
VDD | PIN 1 (3,3 V+) | weiß |
VSS | PIN 9 (Ground) | grau |
SDA | PIN 2 (SDA1I2C) | grün |
- Kabel wie folgt verbinden
Ampel | Pi | Kabelfarbe |
---|---|---|
G | PIN 22 (GPIO25) | grün |
Y | PIN 18 (GPIO24) | gelb |
R | PIN 16 (GPIO23) | rot |
GRN | PIN 14 (Ground) | schwarz |
- Kabel wie folgt verbinden
GPS | Pi | Kabelfarbe |
---|---|---|
VIN | PIN 4 (5V+) | schwarz |
GND | PIN 6 (GND) | weiß |
TX | PIN 10 (RXD) | violett |
RX | PIN 8 (TXD) | grau |
- Micro-USB auf USB Adapter an den Micro-USB-Port
USB
anschließen - An die USB-A-Buchse den UART-USB-Adapter anschließen
- Weißes Kabel vom PM-Sensor zum UART-Adapter einstecken
-
Raspberry Pi wieder mit der Powerbank verbinden und warten bis dieser gebootet hat
-
Wieder Verbindung über VNC Viewer herstellen (siehe oben)
-
Hinweis:
-
Um Werte zu erhalten, muss das GPS Empfang haben. Dies ist erkennbar, wenn die mit
FIX
gekennzeichnete LED auf dem GPS-Modul nur noch ca. alle 10-15 Sekunden blinkt. Blinkt sie in kürzeren Intervallen, ist noch kein Empfang vorhanden.
Es müssen im Folgenden noch einige kleinere Anpassungen vorgenommen werden, um die Software zu personalisieren und einzurichten
-
Verbindung wieder über VNC herstellen und erneut den Terminal öffnen
-
Software initialisieren durch Eingabe von
crowdbike init
-
Öffnen des Files durch Eingabe von
nano ~/.config/crowdbike/config.json
und Bestätigen durch Enter -
im Texteditor kann nur mit dem Pfeiltastnavigiert werden, nicht mit der Maus
{
"user": {
"studentname": "insert_username",
"bike_nr": "01",
"logfile_path": "/home/pi/crowdbike/logs/",
"pm_sensor": false,
"sampling_rate": 5,
"sensor_type": "SHT85",
"sensor_id": "1"
},
"cloud": {
"folder_token": "abcde1234",
"passwd": "my_password",
"base_url": "https://example.nextcloud.de"
}
}
- Bei
studentname =
euren Namen eingeben. Ohne Leerzeichen und Umlaute. Der Name muss in doppelten Anführungszeichen stehen z.B."vorname_nachname"
. Komma am Ende beachten! - Anpassung bei
bike_nr =
eure Nummer zuweisen (Aufkleber auf SD-Karten-Slot z.B.06
) - Bei
pm_sensor
angeben ob ihr einen angeschlossen habt oder nicht (es ist nurtrue
oderfalse
erlaubt!) - Die
sampling_rate
steuert die Häufigkeit in der eine Messung durchgeführt wird in Sekunden. - Die
sensor_id
ist eine eindeutige Identifikation des Temperatur- und Feuchte Sensors (Aufkleber auf der Platine) - Bei
folder_token
den in der PPP mitgeteilten Token eintragen. - Ebenfalls bei
passwd
undbase_url
die in der PPP mitgeteilten Daten eintragen. - speichern mit ctrl+s und schließen mit ctrl+x
- Die Kalibrierung der Sensoren muss im File
~/.config/crowdbike/calibration.json
eingetragen werden. - Öffnen des Files mit
nano ~/.config/crowdbike/calibration.json
- Darauf achten, dass die Faktoren für die entsprechende Sensornummer eingetragen werden.
{ "temp_cal_a1": 1.0, "temp_cal_a0": 0.0, "hum_cal_a1": 1.0, "hum_cal_a0": 0.0 }
- speichern mit ctrl+s und schließen mit ctrl+x
- die Farbgebung der GUI kann in
~/.config/crowdbike/theme.json
angepasst werden - diese Keys müssen vorhanden sein
- Farben könnne hexadezimale Werte sein oder
red
,green
etc. b_*
= buttonbg_*
= backgroundfg_*
= foregroundf_*
= font
{
"font_size": 24,
"f_family": "Helvetica",
"bg_col": "#36393f",
"fg_col": "#ffffff",
"fg_header": "#AAB8E8",
"b_col": "#7289da",
"b_disabled": "#5B6DAE",
"b_hover": "#546cb2",
"b_hl_border": "#AAB8E8"
}
- Ausführen durch Eingabe von
crowdbike run
(Das Starten dauert einen Moment). Es sollte sich nun ein Fenster mit einer grafischen Benutzeroberfläche geöffnet haben.
- Sollten aktuell keine Werte vorhanden sein, werden sie als
nan
angezeigt und der 'Counter' ist rot hinterlegt.- Dies kann der Fall sein:
- Wenn das GPS (noch) keinen Empfang hat,
- Wenn der PM-Sensor nicht angeschlossen oder richtig verbunden ist
- Ist alles in Ordnung ist dieser grün hinterlegt.
- Dies kann der Fall sein:
- Sobald das Programm gestartet wurde, werden Daten aufgezeichnet
- Die Momentanwerte werden angezeigt und aktualisieren sich automatisch
- Der Switch 'PM-Sensor' schaltet die Abfrage des Feinstaubsensors ein bzw. aus und versetzt ihn, falls angeschlossen in einen Schlafmodus.
- Ist kein PM-Sensor angeschlossen, sollte der Schalter ausgeschaltet (rot) sein.
- Die Aufzeichnung der Daten kann durch drücken des 'Stop' Buttons beendet werden
- Eine neue Aufzeichnung kann mit Record gestartet werden
- Das Programm verlassen und die Aufzeichnung beenden kann man über den 'Exit' Button.
-
Die LEDs der Status Ampel sind mit den Threads der Sensoren verbunden, für jeden erfassten Messwert blinkt diese einmal auf.
-
Diese sollten während der Messung im Auge behalten werden und falls die LEDs nicht mehr blinken, sollten die Kabelverbindungen geprüft werden und das Programm neugestartet werden
-
Das GPS (grün) beginnt erst zu blinken, wenn Satelliten gefunden wurden.
LED Bedeutung Messung aktiv Messung nicht aktiv rot Temperatursensor blinkend aus gelb PM Sensor blinkend aus grün GPS blinkend aus
-
Um das Programm am Smartphone einfacher starten zu können, müssen wir noch eine Art Verknüpfung erstellen
- Navigieren auf den Desktop mit
cd ~/Desktop/
- Erstellen einer neuen Datei mit
nano start_crowdbike.sh
- In die Datei folgendes schreiben:
crowdbike run
- Speichern wieder mit ctrl+s
Strg + s
und Schließen mit ctrl+x - Nun muss das kleine Skript noch ausführbar gemacht werden. Diese geschieht durch Eingabe von
chmod +x start_crowdbike.sh
und Bestätigen mitEnter
.
- Navigieren auf den Desktop mit
-
Hotspot am Smartphone einschalten, der Raspberry Pi sollte sich automatisch verbinden, wenn keine anderen bekannten, stärkeren WLAN-Netzwerke vorhanden sind.
-
VNC-Viewer am Smartphone starten (es ist keine Registrierung notwendig!)
-
Per + eine Verbindung hinzufügen
-
Bei
Address
den Hostname z.B. (crowdbike1
) eingeben sollte das nicht funktionieren, kann man in den Smartphone-Einstellungen unter Hotspot die verbundenen Geräte anzeigen lassen und bei einem Klick aufcrowdbike1
kann die IP-Adresse angezeigt werden. Notiert diese und gebt diese statt dem Hostname ein. Sollte die in VNC-Viewer erstellte Verbindung beim nächsten mal nicht funktionieren, kann es sein, dass das Smartphone dem Raspberry Pi eine andere IP-Adresse zugewiesen hat. Kontrolliert dies wie oben beschrieben und versucht es erneut. -
Namen der Verbindung festlegen z.B.
'crowdbike1'
-
Nun funktioniert der Touchscreen des Smartphones wie ein Mousepad am Laptop
-
Auf dem Desktop sollte das Skript jetzt sichtbar sein, das wir eben erstellt haben. Mit einem Doppelklick und einem Klick auf Ausführen sollte nach kurzer Zeit das Programm starten.
- sollte eine neue Version verfügbar sein, kann diese mit diesem Befehl installiert werden:
sudo pip3 install git+https://github.com/jkittner/crowdbike.git@master --upgrade
- die aktuelle Version kann über den Terminal mit
crowdbike --version
abgefragt werden
- Die Daten können über den Upload Button in der GUI hochgeladen werden. Dazu muss die Messung mit dem Stop Button vorher gestoppt werden.
- Der Upload kann je nach Datenmenge einige Sekunden dauern. In dieser Zeit werden die angezeigten Messwerte nicht aktualisiert, da der Upload Prozess nicht asynchron stattfindet (#13).
- Eine Progressbar zeigt den Fortschritt und die hochgeladenen Dateien an
- der Upload kann auch nach Beenden des Programms noch mit
crowdbike upload
gestartet werden
- das Programm schreibt ein systemlog nach
~/crowdbike.log
, in dem je nach Loglevel Fehler aufgezeichnet werden - Der Speicherort kann durch
crowdbike run --logfile /home/pi/Dokumente
geändert werden - auch das Loglevel kann durch angepasst werden
crowdbike run --loglevel DEBUG
pi@crowdbike:~ $ crowdbike --help
usage: crowdbike [-h] [-V] [--logfile LOGFILE]
[--loglevel {DEBUG,INFO,WARNING,ERROR,CRITICAL}]
{init,run,upload}
positional arguments:
{init,run,upload}
optional arguments:
-h, --help show this help message and exit
-V, --version show program's version number and exit
--logfile LOGFILE file to write the system logs to
--loglevel {DEBUG,INFO,WARNING,ERROR,CRITICAL}
Andreas Christen (2018): Meteobike - Mapping urban heat islands with bikes. GitHub. [19.01.2020].