ID.nl logo
Zo breid je met microcontrollers je computer uit met extra functies
© wittayayut - stock.adobe.com
Huis

Zo breid je met microcontrollers je computer uit met extra functies

Wil je je computer uitbreiden met zelfgemaakte hardware zoals extra waarschuwingsledjes of sensoren, dan kan dat eenvoudig met een microcontroller. Die sluit je via usb aan, waarna je de software op je computer met de microcontroller laat communiceren om de leds in en uit te schakelen of de sensordata uit te lezen. In dit artikel tonen we je hoe dat gaat en bouwen we een webinterface voor de seriële communicatie.

In dit artikel bekijken we wat er nodig is voor de communicatie tussen de computer en de microcontroller. Ook schrijven we de software daarvoor, zowel aan de kant van de microcontroller als aan de kant van je computer. Daarvoor nemen we de volgende stappen:

  • CircuitPython installeren
  • De code-editor Mu installeren
  • Protocol vastleggen
  • Eigen webinterface maken
  • Temperatuursensor installeren en data aan pc laten doorgeven

Lees ook: Tien microcontroller-bordjes vergeleken

Code downloaden In deze workshop worden lange voorbeelden van stukken code gegeven. Omdat overtikken van code erg foutgevoelig is, kun je die code beter downloaden en daarna bekijken of kopiëren. Zie het bestand code-mcusb.txt voor de stukken code die in dit artikel genoemd worden.

Op microcontrollerbordjes zoals een Arduino, Raspberry Pi Pico of ESP32 kun je allerlei leds, knoppen en sensoren aansluiten. Veel van die bordjes hebben een ingebouwde wifi-chip, waardoor je ze op afstand kunt aansturen. Maar soms is wifi niet mogelijk, te lastig of gewoon helemaal niet nodig.

Gelukkig zijn de meeste microcontrollerbordjes uitgerust met een usb-aansluiting en die kunnen we ook gebruiken om vanaf je computer opdrachten naar de microcontroller te sturen of informatie zoals sensordata terug te krijgen.

01 USB CDC

Voor de communicatie tussen microcontroller en computer gebruiken we een seriële interface via USB CDC. Onder Windows is het apparaat dan zichtbaar als een COM-poort, onder Linux als een apparaat zoals /dev/ttyACM0 en onder macOS /dev/cu.usbmodem<ennogiets>. Software op je computer kan dan met de microcontroller communiceren via deze COM-poort of het juiste apparaatbestand.

In de microcontroller moeten we dus een seriële verbinding via USB CDC opzetten. In dit artikel doen we dat met CircuitPython, dat honderden microcontrollerbordjes ondersteunt. Kies wel een bordje met ondersteuning voor USB CDC.

Wij hebben dit met succes getest met de Raspberry Pi Pico (W), Arduino Nano RP2040 Connect, Seeed Studio XIAO SAMD21 en Seeed Studio XIAO nRF52840. In de rest van dit artikel gaan we uit van een Raspberry Pi Pico. Voor de andere bordjes moet je de CircuitPython-code mogelijk lichtjes aanpassen of de firmware op een andere manier installeren.

Zoek in de documentatie van CircuitPython op of je microcontrollerbordje USB CDC ondersteunt.

02 CircuitPython installeren

Download de CircuitPython-firmware voor de Raspberry Pi Pico. Op het moment van schrijven was dat versie 8.2.2. Er is een Nederlandse versie beschikbaar, maar de taal maakt niet zoveel uit. Je ziet dat op de downloadpagina in de lijst met ingebouwde modules usb_cdc staat. Dat bevestigt dat we op dit bordje USB CDC kunnen gebruiken.

Het gedownloade firmwarebestand heeft de extensie .uf2. Houd op de Raspberry Pi Pico de witte knop BOOTSEL ingedrukt, sluit het bordje via een micro-usb-kabel op je computer aan en laat de knop dan los. De interne opslag van het bordje verschijnt nu als een usb-schijf met de naam RPI-RP2 op je computer. Sleep dan het .uf2-bestand naar die schijf. Na het kopiëren verschijnt de schijf onder een andere naam: CIRCUITPY.

Download het firmwarebestand van CircuitPython voor de Raspberry Pi Pico.

03 Mu

De eenvoudigste manier om je bordje in CircuitPython te programmeren is met de code-editor Mu, die zowel voor Windows als voor macOS en Linux bestaat. Start Mu op, klik links bovenaan op Mode en kies CircuitPython uit de lijst. Klik dan op OK. Normaal wordt nu je aangesloten bordje herkend met onderaan de boodschap Detected new CircuitPython device.

In het grote tekstveld kun je nu je code typen die je op je bordje wilt uitvoeren. Om te testen of de hardware werkt, typ je daarin de volgende code die de ingebouwde led doet knipperen:

De code kun je downloaden van en daarna vanuit een programma als Kladblok overnemen.

Klik bovenaan op Save, selecteer code.py en bevestig dat je dit bestand wilt overschrijven. Daarna zie je de ingebouwde led van de Raspberry Pi Pico knipperen. Hiermee weet je dat het bordje werkt.

In de code-editor Mu kunnen we CircuitPython-code schrijven en op de Raspberry Pi Pico installeren.

04 Afspraken maken

Voordat we nu de Pico gaan programmeren, moeten we een protocol vastleggen voor de communicatie tussen computer en microcontroller. Zo’n protocol is eigenlijk een lijst van afspraken. Welke communicatie verwacht de Pico en wat doet de microcontroller dan? Voor ons voorbeeld houden we het protocol eenvoudig. Elke opdracht die we aan de microcontroller geven, bestaat uit één teken dat bepaalt wat er met de ingebouwde led moet gebeuren:

0 - Schakel led uit

1 - Schakel led aan

2 - Schakel led om

3 - Knipper de led kort

Met de opdracht 2 schakelt de microcontroller de led dus aan als hij uit is en uit als hij aan is. Met opdracht 3 doet de microcontroller hetzelfde, maar schakelt hij de led na een korte pauze terug naar de originele toestand.

We verwachten ook dat de microcontroller na het uitvoeren van elke opdracht de toestand van de led daarna communiceert naar de computer:

0 - Led is uit

1 - Led is aan

Tot slot is het nog belangrijk om te weten dat we hier spreken over tekens (letters of in dit geval cijfers), maar dat seriële communicatie met bytes werkt. Zowel aan de kant van de computer als aan de kant van de microcontroller moeten de juiste tekens dus nog worden omgezet naar de overeenkomende bytes.

05 Wachten op opdrachten

Nu we weten aan welke afspraken de microcontroller zich moet houden, kunnen we de CircuitPython-code hiervoor programmeren. Maak in Mu eerst een nieuw bestand aan en plaats daarin de volgende code om dataoverdracht via USB CDC mogelijk te maken:

De code kun je downloaden van en daarna vanuit een programma als Kladblok overnemen.

Sla dit bestand op onder de naam boot.py. Dit bestand wordt door CircuitPython vlak na het opstarten van de microcontroller uitgevoerd.

Vervang dan de huidige code in code.py door de volgende:

De code kun je downloaden van en daarna vanuit een programma als Kladblok overnemen.

We controleren dus in een oneindige lus (while True) of er invoer op de seriële interface is van de computer. Zo ja, dan lezen we met serial.read(1) één byte in. We vergelijken dit dan met de waardes uit ons protocol. Omdat het om bytes gaat, moeten we de tekens naar bytes omzetten. Daarom vergelijken we bijvoorbeeld met b"0". We stellen dan telkens de juiste waarde van de led in. Met led.value = not led.value schakelen we de led om. En uiteindelijk schrijven we met serial.write de waarde van de led naar de seriële interface, waar de computer die kan uitlezen. Sla dit bestand op onder de naam code.py. De Pico wacht nu op opdrachten.

06 Opdrachten geven

Als je goed hebt opgelet, heb je gezien dat bij het aansluiten van je Pico er een COM-poort in Windows is verschenen en bij het programma uit paragraaf 5 zelfs twee. Dat kun je ook zien in het Apparaatbeheer van Windows. De COM-poort met het hoogste volgnummer is de seriële interface die we nodig hebben om opdrachten aan de Pico te geven.

Hoe geven we nu die opdrachten? Een eenvoudige manier is door in de browser Chrome of Edge de website www.serialterminal.com te bezoeken. Die maakt gebruik van de standaard Web Serial. Klik linksboven op Connect. Je browser toont dan een lijst met seriële interfaces. Selecteer de juiste uit de lijst (er staat de naam Pico bij) en klik dan op Verbinding maken.

Vink de opties send with /r, send with /n en echo uit. Voer dan in het tekstveld de opdrachten uit paragraaf 4 in. Typ bijvoorbeeld 1 in en klik rechts op Send. De led op je Pico gaat nu aan, omdat de code uit paragraaf 5 het teken 1 ziet en daarop reageert. Typ dan bijvoorbeeld 2 in. De led schakelt nu om en gaat dus uit. Je ziet in het grote tekstveld onderaan ook de uitvoer van de microcontroller: 1 als de led aan is en 0 als die uit is.

Op de website kun je de seriële communicatie testen.

07 Webinterface

Nu we weten dat de seriële communicatie werkt, kunnen we een handigere interface maken om de led aan te sturen. Dat kan bijvoorbeeld met dezelfde Web Serial-technologie van de website www.serialterminal.com. We maken daarvoor eerst een eenvoudige html-pagina aan:

De code kun je downloaden van en daarna vanuit een programma als Kladblok overnemen.

We maken dus een aantal knoppen: Connect om te verbinden; OFF, ON en TOGGLE om de led uit, aan en om te schakelen; en tot slot FLASH om de led te laten knipperen. Tot slot tonen we ook een icoontje van een gloeilamp (in de vorm van een emoji) voor de status van de lamp.

Met deze webinterface sturen we de led op de Raspberry Pi Pico aan.

Uitbreidingsmogelijkheden Voor de eenvoud hebben we ons voorbeeld maar vier opdrachten laten herkennen. Maar op dezelfde manier kun je een complexer protocol definiëren. Voeg bijvoorbeeld een tweede teken aan de opdrachten toe om een volgnummer voor een led te kiezen. Op deze manier kun je meerdere leds aansturen. Of definieer nog extra tekens in de opdracht om de kleur van een led in te stellen. Zo kun je zelfs meerdere RGB-kleurenleds aansturen. Probeer zelf de code in dit artikel eens uit te breiden, zowel aan de kant van de microcontroller als in de webinterface op de computer.

08 JavaScript-code

In de webpagina hebben we het bestand usb-led.js als script ingeladen. Hierin komt dan de code om via de Web Serial-API opdrachten naar de aangesloten microcontroller te sturen:

De code kun je downloaden van en daarna vanuit een programma als Kladblok overnemen.

De functie readState leest een byte uit de seriële interface en toont de gloeilamp als dit het teken 1 voorstelt en verbergt de gloeilamp als dit het teken 0 voorstelt. De functie writeCommand schrijft een opdracht naar de seriële interface en leest dan de toestand van de led.

De code erna wordt uitgevoerd nadat de DOM (Document Object Model) volledig is geladen. Dan koppelt die ‘event listeners’ aan alle knoppen. Klik je op Connect, dan wordt de poort gekozen via de Web Serial-API. Een klik op de andere knoppen roept de functie writeCommand aan met de overeenkomende opdracht.

Als je nu de html-pagina in Chrome opent en je Pico is aangesloten, klik dan op Connect. Verbind met de juiste poort en probeer de verschillende knoppen uit om de led van de Pico aan te sturen.

Geef de webpagina toegang tot je microcontroller via Web Serial.

09 Temperatuursensor

Op dezelfde manier kunnen we een temperatuursensor op de Raspberry Pi Pico aansluiten en die via usb zijn sensorwaardes aan de computer laten doorgeven. Voor de temperatuursensor kiezen we de populaire BME280 van Bosch in de uitvoering van Adafruit. Er bestaan ook goedkopere versies van Chinese fabrikanten. Controleer dan dat het om een I²C-versie gaat die op 3,3 V werkt.

Verwijder de usb-kabel van de Pico en prik het bordje op een breadboard. Sluit SDA (bij Adafruit SDI) aan op pin 1 (GP0) van de Pico; SCL (bij Adafruit SCK) op pin 2 (GP1); VCC (bij Adafruit Vin) op 3,3 V; en GND op GND. Twijfel je over de juiste pinnen bij de Raspberry Pi Pico? Bekijk ze dan op https://pico.pinout.xyz. Sluit daarna de Pico weer aan via usb.

Download nu de bundel met Adafruit-bibliotheken voor CircuitPython 8.x. Pak het zip-bestand uit, ga daarin naar de directory lib en kopieer de mappen adafruit_bme280 en adafruit_bus_device naar de directory lib van je CIRCUITPY-station. Hiermee installeer je de CircuitPython-driver voor de BME280.

Sluit de BME280-temperatuursensor op de Raspberry Pi Pico aan.

En wat te denken van een bewegingssensor?

Lees ook: Zo maak je je eigen bewegingssensor

10 Metingen doorsturen

Verander dan in Mu Editor de code in code.py in de onderstaande code, die continu de temperatuur en luchtvochtigheid van de sensor uitleest en die via de seriële interface doorstuurt:

De code kun je downloaden van en daarna vanuit een programma als Kladblok overnemen.

Eerst zetten we de I²C-bus op, waarbij we GPIO-pin 1 (GP1) als SCL definiëren en GPIO-pin 0 (GP0) als SDA. Daarna initialiseren we de driver voor de Adafruit BME280 en vragen we de dataverbinding voor de seriële interface op. Tot slot starten we in een oneindige lus het uitlezen van de temperatuur, ronden we die af op één cijfer na de komma en schrijven die naar de seriële interface, met telkens een seconde pauze tussen twee opeenvolgende metingen. Als je dit opslaat in code.py en dan op www.serialterminal.com in Chrome met je Pico verbindt, zie je de temperatuurmetingen over je scherm rollen. Dankzij de aanduiding "\n" (een newline) komt elke meting op een nieuwe regel.

Andere firmware en pc-software De kant van de microcontroller hebben we in dit artikel met CircuitPython uitgewerkt. Maar je kunt dit nog met allerlei andere ontwikkelomgevingen doen, bijvoorbeeld met Arduino-code. Zo is de Digispark een handig microcontrollerbordje dat via de Arduino-bibliotheek DigiCDC met je computer kan communiceren. Nu is dit bordje niet meer te koop bij de fabrikant zelf, maar op AliExpress vind je nog altijd Chinese klonen.

Helaas heeft het bordje geen ondersteunde drivers voor nieuwe Windows-versies. Gelukkig zijn er voor de software op de computer ook talloze alternatieven voor Web Serial in de browser. Zo kun je in Python een programma schrijven dat via de bibliotheek pySerial met de seriële poort communiceert. Zolang je ervoor zorgt dat beide kanten hetzelfde protocol gebruiken, zijn de verschillende alternatieven uitwisselbaar.

11 Webinterface

Hoe tonen we die sensorwaardes nu in een webinterface? Een eenvoudige html-pagina zou er zo uitzien:

De code kun je downloaden van en daarna vanuit een programma als Kladblok overnemen.

Deze bevat alleen een knop om de seriële verbinding op te zetten en een span-element dat de temperatuur toont. Het bijbehorende JavaScript-bestand usb-bme280.js is ook eenvoudig:

De code kun je downloaden van en daarna vanuit een programma als Kladblok overnemen.

We wachten hier dus tot de DOM is geladen en voegen dan een ‘event listener’ toe aan de verbindingsknop. Zodra je daarop klikt en de seriële verbinding is opgezet, blijft de code continu een tekststroom inlezen. Elke keer dat er een regel tekst binnenkomt, wordt die toegekend aan het span-element met de ID temperature. En zo wordt de temperatuur continu bijgewerkt op de webpagina.

Uiteraard kun je dit nog verder uitwerken. Je kunt bijvoorbeeld ook de luchtvochtigheid van de sensor uitlezen en in een ander blokje tekst tonen op de webpagina. En met een stylesheet is de lay-out natuurlijk veel mooier te maken. Dit laten we allemaal als oefeningen over aan jou.

De webpagina wordt continu bijgewerkt met de temperatuur van de sensor.
▼ Volgende artikel
Je NAS veilig bereiken via een VPN-server, Tailscale of Cloudflare-tunnel
© ER | ID.nl
Huis

Je NAS veilig bereiken via een VPN-server, Tailscale of Cloudflare-tunnel

Wil je een NAS op afstand gebruiken, dan doe je dat liefst natuurlijk veilig. Bijvoorbeeld door een VPN-server op te zetten, of een tunnel met extra toegangscontrole. Hiervoor zijn diensten als Tailscale en Cloudflare heel geschikt. In deze masterclass nemen we de beste opties met je door. We leggen uit wat de voor- en nadelen zijn en hoe je ze kunt gebruiken in combinatie met een NAS.

Een NAS is breed inzetbaar en bij veel huishoudens de spil in het netwerk. Je kunt niet alleen je documenten centraal bewaren, maar ook bijvoorbeeld media streamen naar je tv, foto’s bekijken op je tablet en talloze extra toepassingen installeren. Heb je (een deel van) deze toepassingen ook af en toe op afstand nodig? Het openzetten van een poortje in de router of het gebruik van een reverse proxy kan daarvoor een prima optie zijn. Maar publieke toegang is niet altijd nodig. Er zijn betere opties als je vooral voor jezelf goed beveiligde externe toegang tot je NAS nodig hebt. Een eenvoudige optie is een cloudservice van de fabrikant, zoals Synology QuickConnect. Betere en veiligere opties zijn een VPN-server met een protocol als OpenVPN of WireGuard, Tailscale (dat op de achtergrond met WireGuard werkt) of een Cloudflare-tunnel. In deze masterclass leggen we uit hoe je ze gebruikt. Wat je kiest, hangt ook af van je doel. Bij elke optie behandelen we de eventuele beperkingen. Voordat je begint, is het ook verstandig de beveiliging van je NAS nog even door te lichten (zie kader).

Optimale beveiliging voor je NAS

Bij het openstellen van je NAS is een goede beveiliging extra belangrijk. Ongeoorloofde toegang tot je NAS zul je altijd willen voorkomen. Gebruik altijd sterke wachtwoorden voor je gebruikersaccounts. Deactiveer bovendien de algemene accounts zoals admin en guest. Zet tweestapsverificatie aan. Hierbij wordt na het inloggen om een extra toegangscode gevraagd die je kunt genereren met een app op je smartphone. Op vertrouwde apparaten hoef je dat maar één keer te doen. Bij Synology vind je deze opties in je configuratiescherm, onder Beveiliging / Account. Je kunt kiezen voor welke gebruikers dit moet worden ingeschakeld. Bij QNAP ga je hiervoor in je configuratiescherm naar Systeem / Beveiliging. Open dan het tabblad Verificatie in 2 stappen. Maak ook gebruik van de ingebouwde firewall van je NAS, waarin je toegangsregels kunt instellen! In deze masterclass geven we daar tips voor. Zorg ten slotte dat je een goede back-upstrategie hebt voor de bestanden op je NAS.

Het is verstandig om tweestapsverificatie aan te zetten op je NAS.

Wat is een cloudservice?

Via een cloudservice kun je toegang tot een NAS vereenvoudigen door een soort tunnel op te zetten. Bij Synology heet dit QuickConnect, QNAP noemt het myQNAPcloud link. Hierbij wordt vanaf de NAS een uitgaande verbinding opgezet met een server, waardoor het firewalls omzeilt (ook die in je NAS!). De NAS geef je een herkenbare naam, ook wel QuickConnect ID of QNAP ID genoemd, die je ook gebruikt om te verbinden. Hierbij wordt eerst geprobeerd rechtstreeks verbinding te maken, wat ook het meest efficiënt is. Als dat mislukt, wordt de verbinding automatisch omgeleid via een relayserver, die als tussenpersoon het verkeer doorstuurt. De snelheid kan dan minder hoog zijn. We noemen hieronder alleen de dienst van Synology, omdat het een betere bescherming biedt en een betere reputatie heeft dan myQNAPcloud link. Zorg wel altijd zelf voor een goede basisbeveiliging. Overweeg veiligere methoden zoals een VPN of Tailscale. Het is veiliger en je bent niet afhankelijk van andere partijen (zoals een relayserver).

Diensten als myQNAPcloud link creëren een soort tunnel naar je NAS.

Synology QuickConnect

Bij Synology QuickConnect koppel je eerst je NAS aan een Synology-account. Daarna kun je een QuickConnect ID kiezen. Je NAS is daarna bereikbaar vanuit de Synology-apps of een browser via het adres https://quickconnect.to/ met daarachter de QuickConnect ID. Dit werkt ook bij een dynamisch ip-adres, dus je hoeft niet apart een Dynamic DNS-functie (DDNS) te gebruiken. Om QuickConnect te gebruiken open je Configuratiescherm. Ga dan naar Externe toegang. Zet een vinkje bij QuickConnect inschakelen. Hierna moet je je aanmelden met je Synology-account of een nieuw account maken. Vervolgens kies je een QuickConnect ID. Via de instellingen kun je nog kiezen of de relayserver mag worden gebruikt en welke toepassingen via QuickConnect toegankelijk zijn.

Via de instellingen kies je welke toepassingen toegankelijk moeten zijn.

Wat is VPN?

Door een VPN-server te installeren, heb je een ideale voorziening om op afstand je netwerk te bereiken en alle apparaten op dat netwerk, zoals je NAS, netwerkprinters en camera’s. Je installeert de VPN-server op één systeem, zoals een router, server, Raspberry Pi of je NAS. Bij Synology kun je bijvoorbeeld standaard met OpenVPN werken en QNAP ondersteunt het snellere WireGuard. We laten zien hoe je deze opties gebruikt. Na inloggen heb je volledige toegang tot je netwerk en alle toepassingen in het netwerk, alsof je rechtstreeks op het netwerk zit. Voor toegang tot bestanden op je NAS werken daarom alle protocollen als smb, nfs en WebDAV en toepassingen als Synology Drive en QNAP File Station. Je hoeft geen poorten in je router open te zetten, behalve een enkele poort naar de VPN-server.

Bij QNAP kun je standaard werken met WireGuard.

OpenVPN op Synology

Om je Synology-NAS als VPN-server in te zetten, kun je de toepassing VPN Server installeren via Package Center. Gebruik je een firewall, controleer dan of de benodigde poorten toegankelijk zijn. Bij de installatie kun je die aanpassing via een venster direct doorvoeren. Afhankelijk van het protocol moet je ook nog één of meerdere poorten doorsturen van je router naar je NAS. De toepassing ondersteunt PPTP, OpenVPN en L2TP/IPSec. Eigenlijk is vooral OpenVPN interessant. Het is veilig en stabiel, maar niet zo snel als WireGuard. Ook geeft het soms wat uitdagingen bij het opzetten van de verbinding.

Synology ondersteunt meerdere protocollen, waaronder OpenVPN.

Activeren OpenVPN

Om OpenVPN te gebruiken open je VPN Server. Ga dan naar OpenVPN. Zet een vinkje bij OpenVPN-server inschakelen. Bij Dynamisch ip-adres zie je het subnet dat OpenVPN gebruikt. De verbonden clients krijgen een ip-adres in dat bereik. Bij Poort en Protocol zie je dat standaard udp-poort 1194 wordt gebruikt. Die poort moet je doorsturen van je router naar je NAS. Controleer of de poort toegankelijk is in de firewall van je NAS. Voor een goede balans tussen snelheid en veiligheid kun je bij Codering bijvoorbeeld AES-128-CBC kiezen en bij Verificatie de optie SHA256. De optie Compressie op de VPN-koppeling inschakelen mag uit, omdat het weinig snelheidswinst geeft. Zet de optie Clients toegang geven de LAN-server aan, zodat je andere apparaten in je thuisnetwerk kunt bereiken. Zet ook de optie Verifieer TLS auth-sleutel aan. Klik op Toepassen om de instellingen te activeren. Je kunt nu clients gaan configureren.

Bij OpenVPN kun je zelf nog enkele instellingen kiezen.

Profiel voor OpenVPN

Ga naar OpenVPN en kies Configuratie exporteren om het configuratiebestand te exporteren als zip-bestand. Hierin vind je een .ovpn-bestand dat je nodig hebt voor toegang. Je hebt ook een gebruikersaccount nodig bij het inloggen. Onder Rechten kun je aanvinken welke gebruikers toegang hebben en via welke protocollen. Maak eventueel een nieuwe gebruiker voor alleen de VPN-verbinding! Open het bestand VPNConfig.ovpn met een teksteditor. Omdat je de VPN-server extern wilt gebruiken, verander je in onderstaande regel YOUR_SERVER_IP naar je ip-adres van je internetverbinding of de hostnaam als je bijvoorbeeld Dynamic DNS gebruikt. Synology ondersteunt ook Dynamic DNS en geeft bijvoorbeeld een naam.synology.me-adres. Je kunt het activeren in je configuratiescherm onder Externe toegang / DDNS. Het gaat om deze regel:

remote YOUR_SERVER_IP 1194

Je ziet ook de onderstaande optie. Haal hier eventueel het commentaarteken weg als je wilt dat ál het verkeer, dus ook het normale internetverkeer, via de VPN-server gaat. Dat geeft minder goede prestaties, maar is wel veiliger als je bijvoorbeeld een openbare wifi-hotspot gebruikt. Dit is de regel waar je het commentaarteken weg kunt halen:

#redirect-gateway def1

Gebruik dit profiel om verbinding te maken vanaf andere apparaten. Zet hierbij de optie aan dat zonder certificaat verbinding mag worden gemaakt.

WireGuard op QNAP

We zullen laten zien hoe je WireGuard op je QNAP-NAS gebruikt in combinatie met een Windows-client. Voor meer informatie over WireGuard en het opzetten van een aparte VPN-server verwijzen we je naar een eerder artikel dat je kunt lezen via www.kwikr.nl/wgvpn waarin dat uitgebreid aan bod komt. Zorg bij QNAP dat de toepassing QVPN Service is geïnstalleerd via App Center. Open dan de toepassing en ga naar WireGuard. Zet een vinkje bij WireGuard VPN-server inschakelen. Vul een naam in achter Servernaam. Klik achter Persoonlijke sleutel op Codeparen genereren. Noteer de waarde bij Openbare sleutel: die is straks nodig bij de configuratie van clients. Achter Luisterpoort zie je de poort (udp) die je moet doorsturen in de router. Bij DNS Server vul je een openbare DNS-server in (zoals 8.8.8.8) óf een DNS-server in je lokale netwerk. Klik op Toepassen om de instellingen te bewaren. Klik op Peer toevoegen. Hier kun je clients toevoegen (zie volgende stap).

De instellingen voor WireGuard bij een NAS van QNAP.

Client instellen

Elk apparaat dat verbinding met WireGuard maakt, is een zogenoemde peer. Voor het toevoegen van een apparaat kies je bij QNAP de optie Peer toevoegen. Vul een herkenbare naam in. De waarde bij Openbare sleutel komt bij deze ‘peer’ vandaan, die gaan we nu eerst instellen. Installeer en open de Windows-client en kies de optie Add Empty Tunnel. Er worden een privé- en openbare sleutel gegenereerd. Er opent een configuratiebestand met de privésleutel waarin je onder andere deze twee regels ziet:

[Interface]

PrivateKey = +MSQ3D2+M71SotRrWC3hnPyzYSTWNuaxWwc920=

Vul deze configuratie verder aan zoals in het voorbeeld hieronder. Bij Address kies je een vrij ip-adres binnen het VPN-subnet, dat nog niet door een andere peer wordt gebruikt. Je kunt dit voor elke client ophogen, dus 198.18.7.2/32, 198.18.7.3/32, en zo verder. Belangrijk is dat je bij PublicKey de openbare sleutel die QNAP laat zien invult. Bij Endpoint vervang je ipadres door het ip-adres (of de hostnaam) van je internetverbinding thuis. Dit is de configuratie die je moet aanpassen:

[Interface]

PrivateKey = +MSQ3D2+M71SotRrWC3hnPyzYSTWNuaxWwc920=

ListenPort = 51820

Address = 198.18.7.2/32

DNS = 1.1.1.1

[Peer]

PublicKey = KsCc+cRucH4F8T3VdyatvZXjqvunEerBZapulE=

AllowedIPs = 0.0.0.0/0

Endpoint = ipadres:51820

Bewaar de configuratie met Save. Kopieer nu de waarde bij Public key van deze client. Je leest deze af in het hoofdvenster van WireGuard (zorg dat de bewuste tunnel is geselecteerd). Plak deze in QNAP bij Openbare sleutel bij de configuratie van deze peer. Je kunt nu verbinding maken met je Windows-client!

Voltooi de configuratie voor de Windows-client voor WireGuard.

Firewall instellen voor je NAS

Een firewall op je NAS biedt extra bescherming. Bij Synology open je daarvoor Configuratiescherm. Ga dan naar Beveiliging en open het tabblad Firewall. Zet een vinkje bij Firewall inschakelen en kies Toepassen. Bij Firewallprofiel kun je een profiel kiezen of bewerken. Kies Regels bewerken om het huidige profiel aan te passen. Begin met een regel die alle apparaten op het lokale netwerk toestaat. Kies bij die regel bij Poorten de optie Alles. Bij Bron-IP kies je Specifiek ip. Klik daarachter op Selecteren en kies Subnet. Je moet hier het netwerkbereik van je router kennen. In veel gevallen is dat iets als 192.168.1.0 met subnetmasker 255.255.255.0. Dit omvat dan alle adressen van 192.168.1.0 t/m 192.168.1.255. Voeg hierna nog specifieke regels toe voor toepassingen die van buitenaf toegang moeten hebben. In dit voorbeeld staan we bijvoorbeeld SSH toe vanaf een bepaald ip-adres. Heel belangrijk is dat je als laatste een regel toevoegt die alles blokkeert. De regels worden namelijk van boven naar beneden doorlopen en bij de eerste match stopt de verwerking. Het configuratiescherm van QNAP biedt ook een firewall, maar dat is meer een soort toegangsfilter. Voor uitgebreidere opties kun je QuFirewall installeren via App Center.

Het is raadzaam om de firewall op je NAS te gebruiken voor toegangsbeperking.

Wat is Tailscale?

Met Tailscale kun je een virtueel privénetwerk maken tussen al je apparaten. Dit gebeurt op basis van identiteit, met bijvoorbeeld een standaard Google-account voor autorisatie. Je kunt alle toegevoegde apparaten benaderen via een intern ip-adres of de toegekende hostnaam. Tailscale gebruikt dezelfde technologie als WireGuard, wat het snel, veilig en betrouwbaar maakt. Je hebt geen centrale server nodig en hoeft ook geen poorten in je router open te zetten. Wel moet je elk apparaat in principe afzonderlijk aan je privénetwerk toevoegen. Dat is eenvoudig, ook voor een NAS, zoals je hieronder ziet. Als alternatief kun je Tailscale ook op één apparaat in je netwerk installeren en dat apparaat als subnetrouter instellen, zodat je via dat ene systeem toegang hebt tot alle andere apparaten in je netwerk. In dat geval hoef je Tailscale niet op elk afzonderlijk apparaat te installeren. Meer uitleg over Tailscale vind je in dit artikel.

Met Tailscale kun je een privénetwerk voor je apparaten maken.

Eerste stappen

Ga naar https://tailscale.com en kies de optie Get started. Log in met een van de ondersteunde identiteitsproviders, bijvoorbeeld een standaard Google-account of een van de andere opties. Hierna wordt automatisch je Tailscale-netwerk, of kortweg tailnet, gemaakt. Dat is een soort privé-VPN-netwerkje waar jouw apparaten deel van uit gaan maken. Als je op een ander apparaat inlogt met datzelfde account, is het bereikbaar vanuit je andere apparaten in dit tailnet. Een gratis account ondersteunt tot drie gebruikers en honderd apparaten.

Log in bij Tailscale met bijvoorbeeld je Google-account.

Apparaten toevoegen

Het toevoegen van apparaten is eenvoudig. Het volstaat om de software te installeren en in te loggen met dezelfde identiteitsprovider. Om Tailscale bijvoorbeeld op een iPad te gebruiken, installeer je eerst de toepassing via de App Store. Hierbij wordt een VPN-configuratie voor je iPad gemaakt. Daarna log je in en zie je een lijst met apparaten in je privénetwerkje, waarbij je ook de namen af kunt lezen.

Op een iPad maakt Tailscale een VPN-profiel aan.

Tailscale op je NAS

Je kunt Tailscale ook op een NAS installeren. Bij Synology zoek je daarvoor in Package Center naar Tailscale. Bij QNAP kun je in App Center terecht. Installeer en open de toepassing. Er wordt gevraagd om in te loggen, waarbij je weer hetzelfde account als hiervoor gebruikt. Zet daarna de verbinding op via Connect. Als je nog een keer de Tailscale-app opent, kun je details zien over het bewuste apparaat, zoals het ip-adres en de hostnaam die je kunt gebruiken om verbinding te maken.

Tailscale is als pakket beschikbaar voor Synology en QNAP.

Wat is een Cloudflare-tunnel?

Bij een Cloudflare-tunnel installeer je op één systeem in je netwerk (bijvoorbeeld je NAS) een klein programma, dat van binnenuit een versleutelde verbinding opzet naar Cloudflare. Daarna kun je toepassingen individueel toevoegen die deze tunnel mogen gebruiken. Daarbij kun je elke toepassing een eigen subdomein geven, zoals nas.domein.nl voor je NAS. De tunnel laat geen netwerkprotocollen zoals SMB en NFS door en WebDAV is een uitdaging. Het is vooral bedoeld voor webverkeer. Je kunt incidenteel wel bijvoorbeeld DS File gebruiken, voor het browsen door je bestanden en kleine uploads of downloads.

Bij Cloudflare kun je gratis een tunnel opzetten voor toegang op afstand.

Domein registreren

Log in bij Cloudflare met een bestaand account of maak een nieuw gratis account. Registreer een domeinnaam via Add / Register a domain of voeg een bestaand domein toe via Add / Connect a domain. In dat laatste geval moet je de DNS-instellingen bij je huidige provider aanpassen, zodat de nameservers naar die van Cloudflare verwijzen. Afhankelijk van de extensie betaal je bij Cloudflare vanaf zo’n 6 dollar per jaar (circa 6 euro) per domein. Je kunt een domein eventueel direct voor meerdere jaren registreren of voor automatische verlenging kiezen. Betalen kan met creditcard of PayPal. In je dashboard vind je je domein terug onder Domain registration / Manage domains.

Registreer tegen lage kosten een domein bij Cloudflare.

Tunnel voorbereiden

Ga via het menu aan de linkerkant naar Zero Trust. Klik dan op Networks en kies Tunnels. Klik op Create a tunnel. Selecteer de optie Cloudflared. Geef je tunnel een naam. Vervolgens moet je een zogeheten connector installeren op één systeem in je netwerk om een tunnel te maken. Alle toepassingen die je straks via de Cloudflare-tunnel gaat publiceren, moeten bereikbaar zijn vanaf dat systeem. Dat is meestal alleen een probleem bij gescheiden netwerken of strikte firewallregels. Installeer Cloudflared volgens de instructies op een systeem dat altijd aanstaat. Dat kan een server of Raspberry Pi zijn, maar óók je NAS, zoals we hieronder toelichten. Hierna komt de tunnel automatisch online.

Maak een tunnel via de website van Cloudflare.

Tunnel op Synology-NAS

Voor de installatie op een NAS heeft Cloudflare geen instructies, maar de procedure is relatief eenvoudig. Kopieer de opdracht die je ziet bij bijvoorbeeld de Windows-installatie en plak deze in een editor. Je ziet hierin een lange string van 184 tekens die meest begint met eyJh…. Dat is de benodigde token. Om Cloudflared op een Synology-NAS te installeren open je Package Center. Ga naar Gemeenschap en kies Cloudflare Tunnel. Klik op Installeren. Nu wordt om de token gevraagd. Je hoeft geen geavanceerde opties te kiezen. Na het voltooien van de installatie is je tunnel klaar voor gebruik.

Vul de token in bij de installatie van de software op je Synology-NAS.

Tunnel bij QNAP

QNAP biedt geen softwarepakket, maar je kunt Cloudflare wel vrij eenvoudig via Docker configureren en starten. Het is het makkelijkst om met Docker Compose te werken. Installeer indien nodig Container Station en open het programma. Ga dan naar Toepassingen en klik op Maken. Bij Naam van de toepassing vul je een herkenbare naam in, zoals cloudflared. Bij YAML-code vul je de onderstaande code in. Achter TUNNEL_TOKEN vul je uiteraard jouw token in. Klik dan op Maken om de tunnel te maken. Dit is de benodigde code:

version: "3"

services:

  cloudflared:

    image: cloudflare/cloudflared:latest

    container_name: cloudflared

    restart: unless-stopped

    network_mode: "host"

    command: tunnel run

    environment:

      - TUNNEL_TOKEN=eyJh...

Bij QNAP kun je Cloudflared het beste via Docker installeren.

Toepassing toevoegen

Je kunt nu elke toepassing via de tunnel beschikbaar maken met een uniek subdomein. Om zo’n zogeheten route aan te maken, ga je binnen Zero Trust naar Networks / Tunnels. Bij Status geeft het systeem als het goed is aan dat de tunnel gezond is. Open het menu (via de drie puntjes) en kies Configure. Ga dan naar het tabblad Published application routes. We nemen de webinterface van een NAS die lokaal bereikbaar is op https://10.0.10.200:5001. Bij Subdomain vul je bijvoorbeeld nas in. Bij Domain kies je een domein. Bij Type kiezen we HTTPS en bij URL vullen we 10.0.10.200:5001 in. Bij de optie HTTPS moet je oppassen. De NAS heeft in ons geval geen echt certificaat. Daarom is het belangrijk om onder Additional application settings / TLS de optie No TLS Verify aan te vinken. Cloudflare zal dan negeren dat het certificaat niet ondertekend is. Klik op Save. Er zal automatisch een DNS-record worden gemaakt en je kunt vrijwel direct op afstand je NAS benaderen.

We maken een route voor de NAS.

Extra beveiliging bij Cloudflare

Na het openstellen van een toepassing via een subdomein kan in feite iedereen die dat adres kent de toepassing benaderen, zoals de webinterface van je NAS. Of ze ook binnenkomen, hangt af van je beveiliging. Een NAS kun je zelf extra beveiligen, bijvoorbeeld met tweestapsverificatie. Maar je kunt toegang óók beperken via Cloudflare zelf. Je kunt bijvoorbeeld regelen dat alleen jij bij de tunnel mag, via een tijdelijke code die je per e-mail ontvangt, of door te verplichten dat je eerst moet inloggen met een specifiek Google-account.

▼ Volgende artikel
Actieve versus passieve speakers: welke luidsprekers passen bij jou?
© jipen
Huis

Actieve versus passieve speakers: welke luidsprekers passen bij jou?

Twijfel je tussen actieve en passieve luidsprekers? Het verschil zit in de versterker. In dit artikel leggen we uit wat de voor- en nadelen zijn, zodat je precies weet welk systeem het beste klinkt in jouw woonkamer. Geen gedoe, gewoon helder advies.

Als je op zoek bent naar beter geluid, vliegen de termen je om de oren. Het onderscheid tussen actief en passief is misschien wel de belangrijkste technische keuze die je moet maken, maar wordt vaak onnodig ingewikkeld gemaakt. Veel mensen denken dat het puur om geluidskwaliteit gaat, terwijl het vooral draait om gebruiksgemak en apparatuur. Na het lezen van dit stuk weet je precies of je voor alles-in-één gemak moet gaan of voor de vrijheid van losse componenten.

De kern: waar zit de krachtbron?

Het technische verschil is eigenlijk heel simpel: het draait allemaal om de locatie van de versterker. Een luidspreker kan namelijk geen geluid maken zonder stroom en aansturing.

Bij een actieve speaker is de versterker ingebouwd in de behuizing van de luidspreker zelf. Je herkent dat direct aan de achterkant: er zit een stroomkabel aan die het stopcontact in moet, en vaak knoppen voor volume of toonregeling. Je sluit je telefoon, pc of platenspeler direct aan op de speaker.

Bij een passieve speaker zit er géén elektronica in de kast die het geluid versterkt. De speaker heeft geen stekker voor het stopcontact, maar alleen aansluitingen voor luidsprekerdraad. Je hebt altijd een losse versterker of receiver nodig die het signaal krachtig genoeg maakt voordat het naar de speaker gaat. Een veelvoorkomend misverstand is dat 'passief' betekent dat ze slechter of zwakker zijn. Integendeel, de allerduurste hifi-systemen zijn bijna altijd passief.

©jipen

Wanneer is actief de slimste keuze?

Kies voor actief als je houdt van een opgeruimd huis en gebruiksgemak (dit soort speakers zijn meestal plug & play). Omdat de fabrikant de ingebouwde versterker helemaal heeft afgestemd op de luidspreker, ben je verzekerd van een goede match zonder dat je technisch inzicht nodig hebt. Dit is bij uitstek geschikt voor minimalisten die geen losse apparaten of een wirwar aan kabels in de woonkamer willen. Een soundbar is hier het bekendste voorbeeld van; dat is bijna altijd een actieve speaker. Ook voor een werkplek of gaming-setup op een bureau is dit de standaard, omdat je ze direct in je pc plugt zonder tussenkomst van een extra apparaat. Daarnaast zie je deze techniek terug in slimme multiroom-systemen met wifi of bluetooth (zoals die van Sonos), waarmee je direct vanaf je telefoon muziek streamt.

De beperking van alles-in-één

Het grote nadeel van actieve speakers is dat je vastzit aan het totaalpakket. Gaat de versterker in de speaker kapot? Dan doet je hele luidspreker het niet meer, ook al zijn de speaker-units zelf nog prima.

Daarnaast ben je minder flexibel in de toekomst. Bij passieve systemen kun je over vijf jaar besluiten om alleen een nieuwe versterker met de nieuwste streamingfuncties te kopen, terwijl je je geliefde speakers behoudt. Bij een actief systeem moet je bij veroudering van de software of aansluitingen vaak meteen de hele set vervangen. Daarnaast is het uitbreiden van een stereoset naar een volledige thuisbioscoop met actieve speakers vaak lastiger of beperkt tot één specifiek merk.

©Aboltin

Wanneer moet je absoluut niet voor actief kiezen?

Er zijn specifieke situaties waarin je een actief systeem beter links kunt laten liggen. Als je bijvoorbeeld al een prima werkende versterker of receiver hebt staan, is het zonde van je geld om actieve speakers te kopen. Je betaalt dan immers dubbel voor versterking die je niet gebruikt.

Ook als je speakers wilt wegwerken in het plafond of de muur is passief de enige logische route. Je wilt namelijk geen stroompunten bij elke inbouwspeaker aanleggen, en je kunt sowieso niet makkelijk bij de elektronica als er eenmaal iets stuk gaat.

Tot slot kun je in grote ruimtes, zoals een hal of showroom, beter met passief draad werken. Luidsprekerkabels zijn over lange afstanden veel makkelijker te trekken en te verlengen dan de combinatie van stroom- en signaalkabels bij actieve speakers.

Check je kabels en je kastruimte

Om de knoop door te hakken, kijk je eerst goed naar je eigen situatie. Heb je in je tv-meubel ruimte voor een los apparaat van ongeveer 44 cm breed (de standaardmaat voor receivers)? En vind je het leuk om zelf je set samen te stellen? Dan is passief jouw route naar topgeluid op maat.

Heb je daarentegen geen zin in gedoe, wil je met één afstandsbediening klaar zijn en heb je een hekel aan zichtbare apparatuur? Dan is een actief systeem of een actieve set boekenplank-speakers de moderne oplossing die je zoekt.

Kortom: eenvoud versus controle

Het verschil tussen actief en passief is een keuze tussen gemak en flexibiliteit. Actieve speakers bieden een alles-in-één oplossing: stekker erin en spelen, ideaal voor wie weinig ruimte of geduld heeft. Passieve speakers vereisen een losse versterker, maar geven je de vrijheid om je systeem oneindig aan te passen, te repareren en te upgraden. Kijk dus niet alleen naar het geluid, maar vooral naar hoeveel apparaten je in huis wilt halen.