OpenMV MicroPython OpenMV MicroPython OpenMV MicroPython
  • Home
  • Tutorial
  • Libraries
  • Boards
  • Shields
  • Sensors
  • Language
  • CPython
  • Internals
  • Changelog
  • License
/
  • English
  • 简体中文
  • 繁體中文
  • Deutsch
  • 日本語
  • Español
  • Русский
  • Français
  • 한국어
  • Italiano
  • Português
  • Nederlands
  • Română
  • Hrvatski
  • Čeština
  • Polski
  • Suomi
  • Svenska
  • Magyar
  • Türkçe
  • Discussion
  • Tutorial
    • 1. Snelstartgids
    • 2. Python-overzicht
    • 3. Hardwarebesturing
    • 4. Vision Sensors
    • 5. Beeldverwerking
    • 6. NumPy
    • 7. Machine Learning
    • 8. Asyncio
    • 9. Netwerken
      • 9.1. Waarom netwerken
      • 9.2. Gelaagde protocollen
      • 9.3. De kabel en het frame
      • 9.4. De verbinding tot stand brengen
      • 9.5. IP-adressen
      • 9.6. Pakketten en routering
      • 9.7. Privénetwerken en NAT
      • 9.8. Poorten
      • 9.9. UDP – verstuur een pakket, hoop op het beste
      • 9.10. TCP – een betrouwbare stroom van bytes
      • 9.11. Socketobjecten
      • 9.12. UDP-sockets
      • 9.13. TCP-sockets
      • 9.14. Sockets met asyncio
      • 9.15. Namen en DNS
      • 9.16. Tijd en NTP
      • 9.17. Versleutelde sockets en TLS
      • 9.18. MQTT, byte voor byte
      • 9.19. MQTT in Python
      • 9.20. Afronding
    • 10. Webservers
    • 11. Bluetooth
    • 12. Host-protocol
    • 13. Tools
    • 14. Productie
  • Bibliotheken
  • Boards
  • Shields
  • Sensors
  • Taal
  • CPython
  • Interne werking
  • Changelog
  • Licentie

On this page

  • 9.4.1. De network-module
  • 9.4.2. De Wi-Fi-stroom
  • 9.4.3. Wat er mis kan gaan
  • 9.4.4. Verbonden blijven
  • 9.4.5. Ethernet, indien aanwezig
micropython-doc 0 0
Edit this page
  1. OpenMV MicroPython /
  2. OpenMV Cam-tutorial /
  3. 9. Netwerken /
  4. 9.4. De verbinding tot stand brengen
View Source Open in ChatGPT Open in Claude Open in Perplexity

9.4. De verbinding tot stand brengen¶

De linklaag die op de vorige pagina is besproken is grotendeels automatisch, maar er is één plek waar een Python-script moet ingrijpen: de camera vertellen aan welk netwerk hij moet deelnemen. Totdat die stap slaagt, werkt geen van de netwerkfuncties die de rest van deze sectie behandelt.

9.4.1. De network-module¶

De network-module stelt de netwerkhardware van de camera bloot aan Python. De exacte set interfaces hangt af van het board: veel cams hebben een draadloze chip en stellen een WLAN-klasse bloot (genoemd naar Wireless Local Area Network); sommige boards hebben ook een ingebouwde Ethernet-poort en stellen een LAN-klasse bloot (genoemd naar Local Area Network, oftewel de bekabelde versie). Het gebruikspatroon is voor beide hetzelfde, met één belangrijk verschil: een draadloze interface moet verteld worden aan welk netwerk hij moet deelnemen, terwijl Ethernet oppikt wat er ook maar op de kabel zit.

9.4.2. De Wi-Fi-stroom¶

Deelnemen aan een Wi-Fi-netwerk is drie stappen: construeer de interface, breng hem omhoog, en vraag hem verbinding te maken met een genoemd netwerk met een wachtwoord. De interface onderhandelt op de achtergrond met het toegangspunt; een isconnected()-aanroep meldt wanneer de verbinding helemaal tot stand is gekomen:

import network
import time

wlan = network.WLAN(network.WLAN.IF_STA)
wlan.active(True)
wlan.connect("my-network", "my-password")

while not wlan.isconnected():
    time.sleep_ms(100)

print("link up")

Het argument IF_STA selecteert station-modus – de camera neemt deel aan een netwerk dat iemand anders host. De tegenovergestelde modus, IF_AP, laat de camera zijn eigen kleine netwerk hosten waar andere apparaten aan kunnen deelnemen; handig voor configuratie-interfaces en setup ter plaatse, maar niet het gangbare geval.

Zodra isconnected() True teruggeeft, zit de camera op het netwerk. Al het andere dat de hogere lagen nodig hadden om zichzelf op te zetten is automatisch gebeurd terwijl de verbinding tot stand kwam; de volgende pagina’s lichten die onderdelen één voor één toe.

9.4.3. Wat er mis kan gaan¶

Bij deze stap duiken een paar praktische faalwijzen op.

  • Verkeerde netwerknaam of wachtwoord. De verbindingspoging probeert stilletjes opnieuw totdat de toepassing het opgeeft. Verpak het wachten met een time-out zodat de bovenstaande lus niet voor altijd blokkeert:

    start = time.ticks_ms()
    while not wlan.isconnected():
        if time.ticks_diff(time.ticks_ms(), start) > 10000:
            raise OSError("Wi-Fi did not come up in 10 s")
        time.sleep_ms(100)
    
  • Buiten bereik. De camera en het toegangspunt moeten dicht genoeg bij elkaar zijn dat het signaal sterk genoeg is om een verbinding vast te houden. status() geeft een code terug die aangeeft waarom de verbinding niet actief is; scan() geeft de lijst terug van netwerken die de radio kan zien, wat de diagnose is om uit te voeren wanneer connect niet wil slagen.

  • Toegangspunt vraagt om meer dan een wachtwoord. Open netwerken (geen wachtwoord) en de gangbare met wachtwoord beveiligde netwerken worden gedekt door connect zoals hierboven getoond. Grotere netwerken op werkplekken en scholen gebruiken soms een ander schema waarbij de camera zich moet authenticeren tegen een aparte inlogserver; die hebben extra argumenten voor connect nodig. Zie class WLAN – ingebouwde WiFi-interfaces aansturen voor het volledige oppervlak.

9.4.4. Verbonden blijven¶

De verbinding tot stand brengen is de helft van het probleem. Verbonden blijven is de andere helft – toegangspunten herstarten, de cam zwerft buiten bereik, DHCP-leases verlopen, de radio-firmware loopt af en toe vast. Een cam die maandenlang op het netwerk moet leven, moet dat opmerken en zelfstandig herstellen.

Het detectiepatroon is om isconnected() eenmaal per hoofdlus-iteratie aan te roepen en te reageren wanneer het False teruggeeft. isconnected() kan even liegen wanneer een verbinding is weggevallen zonder dat de radio het al heeft gemerkt – een socket-send die mislukt terwijl de verbinding “zou moeten” werken, is het andere bewijs van de toepassing dat er een wegval is. status() is de meer gezaghebbende bron wanneer de twee het oneens zijn.

Het herverbindingspatroon is disconnect() gevolgd door connect() met dezelfde inloggegevens, met het wachten verpakt in een time-out zoals bij de eerste verbinding. Wacht oplopend tussen pogingen – één seconde, twee, vier, verdubbelend tot ongeveer een minuut – zodat een lange storing het AP niet bestookt en het stroombudget van de radio niet opbrandt aan spin loops:

import network
import time

_BACKOFF_S = (1, 2, 4, 8, 16, 32, 60)

def reconnect(wlan, ssid, password):
    for delay in _BACKOFF_S:
        wlan.disconnect()
        wlan.connect(ssid, password)
        deadline = time.ticks_add(time.ticks_ms(), 10_000)
        while not wlan.isconnected():
            if time.ticks_diff(deadline, time.ticks_ms()) < 0:
                break
            time.sleep_ms(100)
        if wlan.isconnected():
            return True
        time.sleep(delay)
    return False

Wanneer die helper False blijft teruggeven, kan de radio-firmware zelf vastzitten. Het laatste redmiddel is het uit- en weer inschakelen van de radio: active(False), een korte pauze, active(True), opnieuw verbinden vanaf het begin. Dit brengt de radio-firmware terug naar een bekende staat tegen de prijs van een paar extra seconden downtime:

def radio_power_cycle(wlan, ssid, password):
    wlan.active(False)
    time.sleep(1)
    wlan.active(True)
    return reconnect(wlan, ssid, password)

Een cam die minutenlang van het netwerk af is geweest, is een echte storing die de toepassing moet zien. De herstelcode zou die staat moeten kenbaar maken – markeer het netwerk als ongezond in een vlag die de hoofdlus controleert, en laat de toepassing de netwerk-sends overslaan die hij gedaan zou hebben terwijl de vlag gewist is – zodat een lange storing de toepassing niet doet stilvallen terwijl die wacht op sockets die nooit zullen schrijven.

9.4.5. Ethernet, indien aanwezig¶

Boards met ingebouwde Ethernet stellen hetzelfde patroon bloot zonder de connect-stap. De LAN-interface wordt omhoog gebracht met active(), en zodra de kabel is ingeplugd is de interface klaar voor gebruik:

import network

lan = network.LAN()
lan.active(True)
print("link up")

Na dit punt zijn de rest van de pagina’s van deze sectie op dezelfde manier van toepassing, ongeacht welke interface de camera op het netwerk heeft gebracht. De hogere lagen kan het niet schelen of de verbinding onder hen Wi-Fi of Ethernet is – “verbonden” is “verbonden”.

Voor de volledige WLAN- en LAN-referentie, inclusief de configuratieknoppen die hier niet pasten, zie network — netwerkconfiguratie.

Previous
9.3. De kabel en het frame
Next
9.5. IP-adressen

For OpenMV firmware v5.0.0 · based on MicroPython v1.28 · docs built 16 Jun 2026 · Copyright © 2014-2026 by OpenMV, Damien P. George, and others.

Made with Sphinx using the Shibuya theme.