Raspberry Pi Setup
Ssh naar raspberry pi via VPS
ssh -J sam@spirit.cleanmobilityhva.nl -p 2222 pi@localhost
Een nieuwe Raspberry Pi instellen
De raspberry pi maakt gebruik van de spirit.cleanmobilityhva.nl VPS (virtual private server) om een reverse ssh-verbinding op te zetten zodat er altijd een manier is om op afstand in te loggen op de raspberry pi zonder een kabel eraan te hoeven hangen. Zowel de pi als de server gebruiken sleutelauthenticatie om een wachtwoordloze oplossing te bieden.
Raspberry Pi OS installeren
Om het Raspberry Pi OS te installeren is het het makkelijkst om de Raspberry Pi Imager te gebruiken en in het instellingenvenster de volgende instellingen in te stellen:
- Algemeen
- Hostnaam:
raspberrypi.local - Gebruikersnaam: pi
- Wachtwoord: raspberrypi
- Tijdzone: Amsterdam
- Hostnaam:
- Services
- SSH inschakelen
- Wachtwoordinlog gebruiken
Wacht vervolgens tot de imager klaar is met het maken van het image op de micro SD-kaart.
Maak verbinding met de raspberry pi via een ethernetkabel met dit commando:
en gebruik dan het eerder ingestelde wachtwoord. Het kan nodig zijn om enkele adapteropties in te stellen om de raspberry pi internet te geven, deze gids is handig voor Windows 10/11.! Belangrijk !
Doe pas een sudo apt-get update of sudo apt-get upgrade nadat de SIM7600 module werkt.
Modem instellen voor usb-internet
Kijk eerst naar de modem-pcb, er zouden enkele DIP-switches moeten zijn met silkscreen ernaast. Deze DIP-switches stellen de gekozen module in voor de seriële poort, en moeten ingesteld worden voor de module die wordt gebruikt. Momenteel (2025) is de gebruikte module een SIM7600, dus de volgende switches moeten worden omgezet.
Let ook op dat de schakelaar op de SIM7600 module zelf op de juiste positie staat. De schakelaar moet in de "USB" positie staan om via USB te kunnen communiceren. Dit is de standaardpositie, maar het is goed om te controleren of deze niet per ongeluk is veranderd.
Na het instellen van deze switches kan de hat op de raspberry pi worden geplaatst en de meegeleverde usb-naar-usb-stekker worden ingeplugd om de verbinding te maken.
Installeer minicom
Om de SIM7600 module te configureren, moet je eerst de seriële poort activeren die door de module wordt gebruikt. Dit kan gedaan worden met het commando:
Kies dan de optie "Interface Options" en vervolgens "Serial Port". Zet de seriële poort aan en kies ervoor om de console niet te gebruiken. Herstart de Pi na het aanpassen van deze instellingen.Installeer de benodigde software om de QMI-verbinding te beheren:
ModemManager is niet nodig voor deze setup en kan conflicteren met de QMI-verbinding. Schakel het uit:
Maak het configuratiebestand aan:
Plak dit erin (vervang fast.t-mobile.com door de APN van je provider als het geen T-Mobile sim is):
Sla op en sluit af (CTRL+O, Enter, CTRL+X).
maak een script aan om de QMI-verbinding te beheren. Dit script zal de modem initialiseren en de netwerkinterface activeren.
Plak dit script:
#!/bin/bash
# Wacht tot modem is geïnitialiseerd
sleep 10
# Zet modem online
qmi-network /dev/cdc-wdm0 stop
qmi-network /dev/cdc-wdm0 start
# Activeer netwerkinterface
ip link set wwan0 up
udhcpc -i wwan0
Maak het script uitvoerbaar:
Maak een systemd service aan om het script automatisch te starten bij het opstarten van de Pi:
Plak dit:
[Unit]
Description=QMI Connect Script
After=network.target
[Service]
ExecStart=/usr/local/bin/qmi-connect.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
Activeer en start de service:
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable qmi-connect.service
sudo systemctl start qmi-connect.service
Herstart de Raspberry Pi om de wijzigingen toe te passen:
Na het opstarten, controleer of wwan0 een IP-adres heeft:
Test de verbinding:
Je kunt controleren of dit werkt na een herstart met `sudo systemctl status ModemManager`.SSH-sleutels instellen
Genereer een SSH-sleutel op de Pi
Test het vervolgens door een ssh-sessie te starten en de knownhost-popup te accepteren
Voordat je de Pi op afstand kunt bereiken, moet je een reverse SSH-tunnel opzetten. Dit zorgt ervoor dat je altijd verbinding kunt maken met de Pi, zelfs als deze achter een NAT-router zit.
AutoSSH instellen
Installeer autossh
Kopieer de publieke sleutel van de VPS naar de Pi:
Dit moet handmatig gedaan worden, omdat de Pi geen internetverbinding heeft. Kopieer de inhoud van ~/.ssh/id_rsa.pub op de VPS naar ~/.ssh/authorized_keys op de Pi.
Test de verbinding
Vanaf de remote server:
als je nu verbinding kunt maken met de Pi via de reverse SSH-tunnel. Door Ctrl+C te gebruiken op de raspberry pi terminal, sluit je de verbinding.
Maak een aangepaste systemd service file. Maak bijvoorbeeld een bestand genaamd /etc/systemd/system/ssh-tunnel.service met de volgende inhoud:
[Unit]
Description=SSH Reverse Tunnel
After=network-online.target
Wants=network-online.target
[Service]
User=pi
ExecStart=/usr/bin/autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -N -R 2222:127.0.0.1:22 sam@77.72.144.252
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Herlaad daarna de systemd daemon, activeer en start de service:
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable autossh-tunnel.service
sudo systemctl start autossh-tunnel.service
Controleer de status:
Deze methode geeft je controle over het opnieuw starten van de service als deze faalt.
Git repository klonen
Installeer git op de Raspberry Pi als het nog niet is geïnstalleerd:
Voor git te kunnen gebruiken moet je de ssh sleutel van de Pi toevoegen aan je Gitlab account. Dit kan gedaan worden door de publieke sleutel van de Pi te kopiëren naar je Gitlab account. volg deze gitlab gids om dit te doen.
maak een map aan voor het project en ga er naartoe:
Om de code van het project te klonen, gebruik je het volgende commando:
Code compilen en PM2 opzetten
Code compileren via Makefile
Om de code te compileren op de Raspberry Pi, kun je een Makefile gebruiken. Dit maakt het proces eenvoudiger en gestandaardiseerd. Zorg ervoor dat je de Makefile in de root van je project hebt staan, en dat deze correct is geconfigureerd om de benodigde bestanden te compileren.
Zorg ervoor dat je de benodigde build-tools hebt geïnstalleerd op de Raspberry Pi. Dit kan gedaan worden met het volgende commando:
Voor de code van de wireless logger op de Raspberry Pi, is er een Makefile aanwezig die de benodigde stappen uitvoert om de code te compileren. Daarvoor heb je de volgende dependencies nodig:
gccofg++voor C/C++ compilatiemakevoor het uitvoeren van de Makefilepaho.mqtt.cppvoor MQTT-functionaliteit
Paho mqtt installeren
Om de Paho MQTT C++ bibliotheek te installeren, kun je de volgende stappen volgen: 1. Installeer de benodigde pakketten:
-
Clone de Paho MQTT C++ repository:
-
Ga naar de directory van de Paho MQTT C++ bibliotheek:
bash
cd paho.mqtt.cpp
-
Initialiseer en update de submodules:
-
Maak de build directory aan en compileer de bibliotheek:
CAN hardware installeren
Om de CAN hardware te installeren, moet je deze intitalieseren. Volg hiervoor de Preperation for CAN bus sectie bij de documentatie van de waveshare CAN Hat
Om de code te compileren met behulp van een Makefile, volg je deze stappen:
-
Zorg ervoor dat je een Makefile hebt in de root van je project.
-
Open een terminal en navigeer naar de map waar de Makefile zich bevindt:
-
Voer het volgende commando uit om de code te compileren:
-
Als de compilatie succesvol is, wordt het uitvoerbare bestand
maingegenereerd in dezelfde map. demainbestand kan je uitvoeren met: -
Om de code opnieuw te compileren na wijzigingen, voer je opnieuw het
make-commando uit. - Om de code schoon te maken (bijvoorbeeld om objectbestanden te verwijderen), gebruik je:
PM2 opzetten via de command line
PM2 is een procesmanager voor Node.js-applicaties. Volg deze stappen om PM2 in te stellen:
installeer eerst Node.js en npm als deze nog niet zijn geïnstalleerd. Dit kan gedaan worden met de volgende commando's:
-
Installeer PM2 als het nog niet is geïnstalleerd:
-
Start je applicatie met PM2:
-
Zorg ervoor dat PM2 automatisch opnieuw opstart na een systeemherstart:
Volg de instructies die worden weergegeven om de configuratie te voltooien. -
Sla de huidige PM2-processen op zodat ze automatisch worden hersteld na een herstart:
-
Controleer de status van je applicaties:
Met deze stappen kun je eenvoudig je code compileren en je applicatie beheren met PM2.
ModemManager uitschakelen
Tijdens een testdag in Den Helder was er een duidelijk probleem: de 4G-router stopte met verbinden en leek volledig opnieuw op te starten zodra de auto begon te rijden. Stijn heeft de logs bekeken na het incident en het bleek dat de ModemManager op de Raspberry Pi probeerde om de modem te beheren terwijl dit niet nodig was. Omdat de ModemManager-service de modem reset, valt de internetverbinding weg en is deze moeilijk opnieuw op te zetten. Dat dit gebeurde was uiteindelijk te zien in de volgende logs.