Last Updated on 26 november 2024 by Syds
Ik had al een tijdje het plan om iets met LoRaWan te doen. LoRa staat voor Long Range, LoRaWan is een netwerk voor IOT-devices waarmee korte berichten (50 bytes) verzonden kunnen worden over afstanden tot wel 20 km. Kenmerkend is het lage energieverbruik van LoRaWan-devices.
Naast domotica, electronica en wandelen mag ik ook graag vissen. Nadat ook de afstand tussen de beetmelders op de steiger en ontvanger in huis van mijn tweede setje te groot bleek, ontstond het idee om de beetmelders aan te sluiten op een LoRa device en zo de aanbeet middels een app op de telefoon te kunnen ontsluiten.
De use-case van dit project is het aansluiten van één tot zes beetmelders op een microcontroller. Bij een aanbeet wordt er middels een LoRa zender een kort bericht naar een server gestuurd. Je kunt je via MQTT abonneren op events gegenereerd middels voorgenoemde berichten. De app ontvangt middels MQTT de berichten en stuurt vervolgens een melding naar het startscherm van de telefoon, speelt een signaal af en of trilt. In de app is te zien om welke beetmelder het gaat en hoe lang de run was/is. Tevens wordt een led op de beetLoRa geactiveerd welke aangeeft op welke beetmelder de aanbeet is geregistreerd. Middels een resetknop op de beetLora of in de app kan de led uitgezet worden.
Ben met beettracker.nl in contact om te kijken of de aanbeet vervolgens ook automatisch geregistreerd kan worden in hun app.
Onderdelenlijst:
Aantal | Onderdeel | Te bestellen bij | Kosten |
1 | Pico LiPo 16mb PIM560 | www.raspberrystore.nl | € 13,50 |
2 | 20-pins male header 2.54mm pitch | Op voorraad | |
2 | 20-pins female header 2.54mm pitch | Op voorraad | |
1 | RFM95W LORA module | www.aliexpress.com | € 6,48 |
2 | 8-pins male header 2.0mm pitch | www.reichelt.com | € 0,28 (30-pins) |
2 | 8-pins female header 2.0mm pitch | www.reichelt.com | € 1,37 (32-pins) |
6 | Lumbert 1501-09 2.5mm Jack chassis socket Mono | www.reichelt.com | € 6,30 |
6 | Led 5mm geel | Op voorraad | |
2 | Weerstand 10K Ohm | Op voorraad | |
1 | Weerstand 30K Ohm | Op voorraad | |
1 | Weerstand 4.7K Ohm | Op voorraad | |
12 | Condensator 10uF | Op voorraad | |
6 | LF1117T 3.3 volt regulator | www.tinytronics.nl | € 9,00 |
1 | Momentary tactile switch haaks 6x6x8 | www.aliexpress.com | € 1,51 (per 20) |
1 | LiPo batterij oplader 3.7v USB Type-C | www.aliexpress.com | € 0,87 |
1 | LiPo batterij 3.7v | Op voorraad | |
1 | IPEX-1 coaxiale connector SMD | www.aliexpress.com | € 4,29 (per 10) |
1 | 868Mhz Lora Antenne + IPEX-1 kabel | www. aliexpress.com | € 5,69 (per 2) |
1 | Diode 1N5819 | Op voorraad | |
1 | IRF4905 P-Mosfet | www.aliexpress.com | € 2,26 (per 10) |
1 | XH2.54 2-pair JST connector haaks | Op voorraad | |
1 | MSK-12D19 Tuimel-schakelaar | www.aliexpress.com | € 2,16 (per 20) |
1 | PCB | www.pcbway.com | € 14,36 (per 5) |
6-12 | 2.5mm mono headset plug (2-polig) | www.aliexpress.com | € 2,55 (per 10) |
5 meter | Microfoonkabel ML108-5 1×0.1mm2, rond | www.reichelt.com | € 3,25 |
Benodigd:
- Soldeerbout + tin
- 3D printer + PLA
- Epoxy
- Striptang
- Krimpkous + vuuraansteker
- 704 rubber siliconen lijm of vergelijkbaar
Up-and-running:
- GIT client (zie https://git-scm.com/downloads/win)
- Python 3 (zie https://www.python.org/downloads/)
Stap 1. PCB ontworpen
Belangrijkste componenten op de PCB zijn de Raspberry Pico en de RFM95W LoRa zender. Daarnaast uiteraard de inputs voor de beetmelders en de LED’s. Hiervoor de volgende pinout bedacht:
Pinout
Raspberry Pico | Device |
GPIO 0 (1) | 2.5mm jack Input 1 |
GPIO 1 (2) | 2.5mm jack Input 2 |
GPIO 2 (4) | 2.5mm jack Input 3 |
GPIO 3 (5) | 2.5mm jack Input 4 |
GPIO 4 (6) | 2.5mm jack Input 5 |
GPIO 5 (7) | – |
GPIO 6 (9) | Reset switch |
GPIO 7 (10) | RFM95W-DIO0 (14) |
GPIO 8 (11) | RFM95W-NSS (5) |
GPIO 9 (12) | RFM95W-RESET (6) |
GPIO 10 (14) | RFM95W-DIO1 (15) |
GPIO 11 (15) | – |
GPIO 12 (16) | LED 3 |
GPIO 13 (17) | – |
GPIO 14 (19) | LED 4 |
GPIO 15 (20) | 2.5mm jack Input 6 |
GPIO 16 (21) | RFM95W-MISO (2) |
GPIO 17 (22) | LED 5 |
GPIO 18 (24) | RFM95W-SCK (4) |
GPIO 19 (25) | RFM95W-MOSI (3) |
GPIO 20 (26) | LED 6 |
GPIO 21 (27) | LED 2 |
GPIO 22 (29) | LED 1 |
GPIO 26 (31) | Battery Level |
GPIO 27 (32) | – |
GPIO 28 (34) | – |
ADC_REF (35) | – |
RUN (30) | – |
3v3_EN (37) | – |
3v3(OUT) (36) | RFM95W-3.3V (13) |
VSYS (39) | 3.3v input |
VBUS (40) | – |
GND (23) | RFM95W-GND (10) |
Dit resulteert in het volgende schema en PCB ontwerp:
Korte toelichting:
De meeste beetmelders beschikken over een 2.5mm jack-aansluiting voor het aansluiten van een hanger of swinger die tevens oplicht wanneer er een aanbeet is. De beetmelder wordt middels deze 2.5mm jack-aansluiting en een (kort) kabeltje aangesloten op de beetLora. Uit metingen van een aantal beetmelders bleek dat het uitgangsvermogen varieert tussen de 0 (geen aanbeet) en 9v (bij een aanbeet), dit blijkbaar afhankelijk van het voltage van de toegepaste batterij. Daarom tussen 1501-09 mono 2.5mm jack van beetLora een LF1117T spanningsregulator geplaatst die het voltage terugbrengt naar 3.3 volt. Voor stabiliteit zowel op de ingang als uitgang van de LF1117T een 10uF condensator geplaatst. De LED’s worden op de GPIO’s van de Pico aangesloten. De momentary (reset) switch is op een GPIO poort en GND aangesloten. Tot slot is de batterij middels een voltage divider aangesloten op een analoge ingang van de Pico voor het meten van het batterijniveau.
Wil je een ook een verlichte swinger aan kunnen sluiten ? Sommige beetmelders beschikken over twee 2.5mm jacks, dus dan is het geen probleem om een verlichte swinger aan te sluiten. In één van onderstaande vervolgstappen realiseren we de kabeltjes tussen de beetmelder en beetLoRa, hierbij ook aandacht voor het maken van een splitter.
De Eagle en gerber files zijn te downloaden:
File | Download link |
BeetLoRa schema | https://drive.google.com/file/d/1_bQ_FW3s61ZJdQwxlfD9Xd2vluVrqwMA/view?usp=drive_link |
BeetLoRa board | https://drive.google.com/file/d/1oY4wz1f_n_SeytfDUGrLpf983aPl3odN/view?usp=drive_link |
BeetLoRa Gerber files | https://drive.google.com/file/d/1kIPMbydtlkn0f3wDIwZWCmFCV4WS4-x3/view?usp=drive_link |
Stap 2. PCB’s besteld bij pcbway.com
De PCB’s besteld via de menuoptie “PCB Instant Quote”->”PCB Manufactoring Calculator” met de volgende instellingen:
In de volgende stap de Gerber files (gezipt) geuploaded. De gerber files worden automatisch gereviewed waarna je vervolgens de bestelling kunt afronden en betalen. Om de kosten laag te houden heb ik gekozen voor verzending via China Post. Dit is het resultaat:
<foto nog toevoegen>
Stap 3. Device toevoegen aan the Things Network (TTN)
Maak eerst een account aan op TTN, navigeer in je browser naar https://www.thethingsindustries.com/stack/plans/, en kies voor het “pricing plan” Discovery, en klik op “Get started for free”
De rest van de stappen wijzen voor zich. Log vervolgens in met je vers aangemaakte account via https://www.thethingsnetwork.org/login/ Klik nu rechts bovenin op je profiel, en kies voor “Console”
Het volgende scherm verschijnt:
Kies hier voor “Europe 1”, je wordt nogmaals gevraagd om in te loggen, daarna verschijnt het volgende scherm:
Voeg eerst een “Application” toe, klik links bovenin op “Applications”, het volgende scherm verschijnt:
Klik rechts bovenin op “+ Add application”, het volgende scherm verschijnt:
Toelichting op invulvelden:
Veld | Waarde | Toelichting |
Application ID | beetlora | Kies zelf een ID voor je applicatie, uitsluitend lowercase |
Application name | beetLoRa | Kies zelf een naam voor je applicatie |
Description | Een optionele omschrijving van je applicatie |
Vul het formulier in en klik op “Create application”. De applicatie wordt aangemaakt en het volgende scherm verschijnt:
Voeg nu een device toe aan je applicatie. Het device is je Raspberry Pi Pico met RFM95W Lora module. Klik op “+ Register end device”, het volgende scherm verschijnt:
Kies voor de optie “Enter end device specifics manually”, en vul het formulier in.
Toelichting op invulvelden:
Veld | Waarde | Toelichting |
Frequency plan | Europe 868.1 MHz | De RFM95W module is geschikt voor het Europees 868.1 MHz netwerk |
LoRaWAN version | LoRaWAN Specification 1.04 | De circuitpython library https://github.com/BNNorman/CircuitPython-LoRaWAN voor de RFM95W module ondersteund de LoRaWAN 1.0x versie, zie de README.md |
Regional Parameters version | RP002 Regional Parameters 1.0.4 | Geen idee, dit werkt |
JoinEUI | 00 00 00 00 00 00 00 00 |
Klik op “Confirm” en er volgen nog 3 tal invulvelden:
Veld | Waarde | Toelichting |
DevEUI | Klik op “Generate” om een DevEUI te generen, en sla die op in een documentje | |
AppKey | LoRaWAN Specification 1.04 | Klik op “Generate” om een AppKey te generen, en sla die op in een documentje |
End device ID | beetlora | Kies een naam voor je device, alleen lowercase |
Klik de optie “View registered end device” aan, het ingevulde scherm ziet er dan zo uit:
Klik vervolgens op “Register end device”, en het device wordt aangemaakt. Het volgende scherm verschijnt:
Klik rechtsboven op het tandwieltje “Settings”, het volgende scherm verschijnt:
Scroll naar beneden tot het kopje “Network layer”, en klik op expand. Het volgende scherm verschijnt:
Klik achter NwkSKey op “Generate”, noteer in je documentje het Device address en de NwkSKey. Scroll vervolgens naar het kopje “Application layer” en klik op “Expand”, het volgende scherm verschijnt:
Klik achter “AppSKey” op “Generate” en neem de waarde van AppSKey over in je documentje.
Klik vervolgens op “Save changes”. Kies in het linker menu voor “Integrations” en daarbinnen voor “MQTT”, het volgende scherm verschijnt:
Klik op “Generate new API key” en noteer de waarden van “Public address”, “Username” en “Password” in je documentje.
Jou documentje met de settings bevat nu:
- DevEUI, 16 bytes
- AppKey, 32 bytes
- Device address, 8 bytes
- NwkSKey, 32 bytes
- AppSKey, 32 bytes
- Public address, eu1.cloud.thethings.network:1883
- Username, beetlora@ttn
- Password, 98 karakters (API Key)
Sla dit documentje ergens op, je hebt deze keys nodig bij de configuratie in stappen 5 en 7.
Je bent nu eerst klaar in TTN.
Stap 4. Circuitpython geflashed op Raspberry Pi Pico
Zie hiervoor de tutorial van Adafruit over het flashen van Circuitpython op een Raspberry Pi Pico: Installing CircuitPython | Getting Started with Raspberry Pi Pico and CircuitPython | Adafruit Learning System
Stap 5. BeetLora software installeren en configureren op de Raspberry Pi Pico
Download de source code van “beetLoRa” hier: https://github.com/sydspost/beetlora.git, en unzip de bestanden op je laptop/desktop. Sluit de Raspberry Pi Pico met een USB kabel aan op je laptop/desktop, onthoud de drive letter waaraan je Raspberry Pi Pico wordt gekoppeld. Start een command prompt en installeer beetLoRa met het commando:
c:\install.bat <drive-letter van Circuitpy>
vervang <drive-letter van Circuitpy> door de drive-letter van je Raspberry Pi Pico, bijvoorbeeld F: Het commando wordt dan:
c:\install.bat F:
Nadat alle benodigde software is geïnstalleerd wordt automatisch kladblok geopend met hierin de file settings.json. In deze settings file dien je de waarden uit het documentje over te nemen die in stap 3. hebt opgeslagen. Eerst hieronder een korte toelichting op de settings die je onder het kopje “OTAA” moet aanpassen:
Setting | Default waarde | Toelichting |
appeui | 0,0,0,0,0,0,0,0 | Laat deze waarde ongewijzigd |
deveui | 0,0,0,0,0,0,0,0 | De hexadecimale waarde van de deveui die je in stap 3 hebt genoteerd dient omgezet te worden naar een 8 decimale representatie conform onderstaande beschrijving |
appkey | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 | De hexadecimale waarde van de appkey die je in stap 3 hebt genoteerd dient omgezet te worden naar een 16 decimale representatie conform onderstaande beschrijving |
devadr | 0,0,0,0 | De hexadecimale waarde van de devadr die je in stap 3 hebt genoteerd dient omgezet te worden naar een 4 decimale representatie conform onderstaande beschrijving |
Voor het omzetten van een hexadecimale waarde naar een decimale waarde kun je de online tool Hexadecimal to Decimal Converter gebruiken via https://www.binaryhexconverter.com/hex-to-decimal-converter
Vul de hexadecimale waardes stuk voor stuk in in het veld “Hex Value”, en druk bij iedere ingevoerde waarde op “Convert”. Het deveui van mijn LoRaWan device is “70 B3 D5 7E D0 06 B1 34”. In bovenstaande afbeelding zie je dat het eerste hexadecimale getal “70” geconverteerd wordt naar een decimale waarde van “112”, B3 wordt 179 en zo verder. De zelfde procedure dien je te volgen voor de appkey en het devaddr.
Nadat je de waarden overgenomen hebt in de settings.json file in kladblok ziet het “OTAA” blokje er dan bijvoorbeeld als volgt uit:
"OTAA": {
"appeui": [0,0,0,0,0,0,0,0],
"deveui": [112,179,213,126,208,6,173,71],
"appkey": [134,144,255,153,23,125,235,38,199,136,154,5,211,79,137,63],
"devaddr": [138,131,9,185]
},
Sluit kladblok en sla de file op. beetLoRa is nu volledig geïnstalleerd en geconfigureerd op de Raspberry Pico. De Raspberry Pico is nu klaar om in de volgende stap op de PCB bevestigd te worden.
Stap 5. PCB assembleren
Soldeer eerst headers op de Raspberry Pi Pico en RFM95W LoRa zender. Benodigd:
- Raspberry Pi Pico
- 2 x 20-pins male header 2.54mm pitch
- RFM95W
- 2 x 8-pins male header 2.0mm pitch
Plaats de headers op een breadboard, schuif de Raspberry Pi Pico erop en soldeer de headers vast. Door de 2mm pitch van de RFM95W is dezelfde truc niet mogelijk, maar soldeer hier ook de headers vast op de RFM95W.
Stap 6. Casing printen
<nog uitwerken>
Stap 7. beetLoRa app installeren op je telefoon
Open deze blog op je telefoon en scroll door naar deze stap. Download de Application Package (.apk) file hier: https://drive.google.com/file/d/1YIOnA13dMQP8tpTjqOzNCAg1NsNsBZjM/view?usp=drive_link
Het volgende scherm verschijnt (Op m’n oude OnePlus5T moest ik nog even aangeven dat ik de link met Google Drive wilde openen):
Selecteer “Pakket-installatie”, en de apk wordt gedownload. Daarna wordt gevraagd om de apk te scannen, voer dit uit door op “Scannen” te klikken. Nadat de apk gescanned is, installeer de apk door op “Installeren” te klikken.
De app wordt geinstalleerd:
En de app kan geopend worden door op “Openen” te klikken. Nu moeten we eerst de MQTT configuratie van de app configureren. Als je voor de eerste keer opstart wordt automatisch het volgende scherm getoond:
Toelichting op de mogelijke instellingen:
Instelling | Mogelijke waarde | Toelichting |
Server URI | <Public address TTN Europe>, bijv. tcp://eu1.cloud.thethings.network:1883 | Deze heb je genoteerd in stap 4. |
Client ID | Willekeurige naam, bijv. beetlora | Alleen lowercase letters gebruiken |
Username | <TTN username> | Deze heb je genoteerd in stap 4. |
Password | <TTN password (API Key)> | Deze heb je genoteerd in stap 4 en is zo’n 98 karakters. |
Topic | # | default topic van TTN |
Sound | aan of uit | Speelt wel of geen geluid af op je telefoon als je beet hebt |
Vibrate | aan of uit | Laat je telefoon wel of niet trillen als je beet hebt |
Nadat je op “Connect” hebt geklikt wordt er verbinding gemaakt met de MQTT server van het TTN netwerk en de instellingen opgeslagen. Testen of de app werkt wordt uitgelegd in stap 9.
Stap 8. Kabeltjes maken
Voor het maken van kabeltjes heb je per kabel het volgende nodig:
- 2x 2.5mm mono headset plug (2-polig)
- stukje 2-aderig draad rond
- soldeerbout + tin
- striptang
- Krimpkous en een vuuraansteker
- 704 rubber siliconen lijm of vergelijkbaar
In totaal gaan we 3 tot 6 kabeltjes maken. Afhankelijk van waar je de beetLoRa wilt plaatsen op je rodpod(s), en de afstand tussen je beetmelders en beetLoRa knip je een stuk draad af. Ik had 5 meter draad besteld en sluit in eerste instantie 3 beetmelders aan. Daarnaast is de afstand tussen de beetmelders en de beoogde plek voor de beetLoRa op mijn rodpod zo’n 30 cm. Ik kies dus voor een lengte van 50cm voor het kabeltje.
Na het afknippen strip ik het kabeltje aan beide zijden. Ik draai de koperen bescherming tot een draadje, en knip zo’n 5mm van de kern af en strip die ook. Ik schuif de kunststof hoes over de kabel en schuif een stukje krimpkous over de opgerolde koperen bescherming en verhit deze even met een vuuraansteker. Dit voorkomt kortsluiting tussen de kern en de koperen bescherming na het solderen op de jack.
Vertin vervolgens de twee draden en soldeer de kern op het middelste soldeerpunt boven het zwarte kunststof en de bescherming op het onderste soldeerpunt onder het zwarte kunststof. Doe een drupje 704 siliconen rubber lijm op de draad en op het deel van de jack die in kunststof hoes gestoken wordt, en schuif de kunststof hoes over de jack. Herhaal bovenstaande voor de andere zijde van de kabel. Test nog even met een multimeter de kabel door en dan is dit het resultaat:
Maak op bovenstaande wijze 3 tot 6 kabeltjes.
Stap 9. Stap voor stap testen
Stap voor stap testen we de totale oplossing, hiervoor maken we een tijdelijke proefopstelling. Plaats een beetmelder op een bankstick of rodpod. Sluit de beetmelder middels een kabeltje die je in stap 7. hebt gemaakt aan op de beetLoRa.
Pak een rol visdraad, bevestig een 10 of 20 grams loodje aan de draad. Leg de draad over de beetmelder en zorg voor wat lichte weerstand op het afrollen van de draad. Door het loodje te laten zakken simuleer je een aanbeet.
Voorzie de beetLoRa van voeding door de Raspberry Pi middels een USB kabel aan te sluiten op een USB adapter of je laptop. Uiteraard kun je ook de LiPo accu aansluiten op de LiPo oplader aansluiting op de beetLoRa PCB.
Open de TTN console (zie ook stap 3.) en navigeer naar je beetlora device:
Klik op het tabblad “Live data”, het volgende scherm verschijnt:
Simuleer een aanbeet door het visdraad met het loodje over de beetmelder te laten zakken. Als je de beetLoRa goed geconfigureerd hebt verschijnt er nu een bericht in de TTN console:
Volgende stap is testen of de app op je telefoon werkt. Ga binnen de TTN console naar het tabblad “Messaging”, het volgende scherm verschijnt.
klik binnen dit scherm op het (sub)tabblad “Simulate uplink”, het volgende scherm verschijnt:
Vul bij Payload twee of meer bytes in. De eerste byte geeft de beetmelder weer waarbij 30 (Hexadecimaal het cijfer 0) beetmelder 1 is en 35 beetmelder 6. De tweede byte geeft de status van de beetmelder weer, 31 = geen beet, 33 = beet, led is uit, 34 = beet, led is aan. Dus bijvoorbeeld 31 33 32 34 35 30 . Zorg altijd voor een afsluitende spatie. Klik op “Simulate uplink”. Als je sound en vibrate hebt aangezet gaat nu je telefoon trillen, hoor je een signaal en verschijnt er een notificatie:
Je app werkt !