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
  • Opastus
    • 1. Pika-aloitus
    • 2. Pythonin yleiskatsaus
    • 3. Laitteiston ohjaus
    • 4. Konenäkösensorit
    • 5. Kuvankäsittely
    • 6. NumPy
    • 7. Koneoppiminen
    • 8. Asyncio
    • 9. Verkkotoiminta
      • 9.1. Miksi verkkoja
      • 9.2. Kerroksittaiset protokollat
      • 9.3. Kaapeli ja kehys
      • 9.4. Yhteyden pystyttäminen
      • 9.5. IP-osoitteet
      • 9.6. Paketit ja reititys
      • 9.7. Yksityiset verkot ja NAT
      • 9.8. Portit
      • 9.9. UDP – lähetä paketti ja toivo parasta
      • 9.10. TCP – luotettava tavuvirta
      • 9.11. Socket-objektit
      • 9.12. UDP-socketit
      • 9.13. TCP-socketit
      • 9.14. Socketit asyncion kanssa
      • 9.15. Nimet ja DNS
      • 9.16. Aika ja NTP
      • 9.17. Salatut soketit ja TLS
      • 9.18. MQTT, tavu tavulta
      • 9.19. MQTT Pythonissa
      • 9.20. Yhteenveto
    • 10. Web-palvelimet
    • 11. Bluetooth
    • 12. Isäntäprotokolla
    • 13. Työkalut
    • 14. Tuotanto
  • Kirjastot
  • Kehitysalustat
  • Lisäkortit
  • Sensorit
  • Kieli
  • CPython
  • Sisäiset toiminnot
  • Muutosloki
  • Lisenssi

On this page

  • 9.4.1. network-moduuli
  • 9.4.2. Wi-Fi-kulku
  • 9.4.3. Mikä voi mennä pieleen
  • 9.4.4. Yhteyden ylläpitäminen
  • 9.4.5. Ethernet, kun saatavilla
micropython-doc 0 0
Edit this page
  1. OpenMV MicroPython /
  2. OpenMV Cam -opastus /
  3. 9. Verkkotoiminta /
  4. 9.4. Yhteyden pystyttäminen
View Source Open in ChatGPT Open in Claude Open in Perplexity

9.4. Yhteyden pystyttäminen¶

Edellisellä sivulla käsitelty linkkikerros on enimmäkseen automaattinen, mutta on yksi paikka, johon Python-skriptin on puututtava: kameran kertominen siitä, mihin verkkoon liittyä. Ennen kuin tuo vaihe onnistuu, mikään tämän osion käsittelemistä verkko-ominaisuuksista ei toimi.

9.4.1. network-moduuli¶

network-moduuli paljastaa kameran verkkolaitteiston Pythonille. Tarkka rajapintajoukko riippuu kortista: monilla kameroilla on langaton siru ja ne paljastavat WLAN-luokan (nimetty sanoista Wireless Local Area Network); joillakin korteilla on myös sisäänrakennettu Ethernet-portti ja ne paljastavat LAN-luokan (nimetty sanoista Local Area Network, eli langallisen version). Käyttötapa on sama molemmille, yhdellä tärkeällä erolla: langattomalle rajapinnalle on kerrottava, mihin verkkoon liittyä, kun taas Ethernet poimii sen, mitä kaapelissa onkin.

9.4.2. Wi-Fi-kulku¶

Wi-Fi-verkkoon liittyminen on kolme vaihetta: rakenna rajapinta, pystytä se, pyydä sitä yhdistymään nimettyyn verkkoon salasanalla. Rajapinta neuvottelee tukiaseman kanssa taustalla; isconnected()-kutsu raportoi, kun yhteys on saatu pystyyn:

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")

Argumentti IF_STA valitsee asematilan – kamera liittyy verkkoon, jota joku muu ylläpitää. Päinvastainen tila, IF_AP, saa kameran ylläpitämään omaa pientä verkkoaan, johon muut laitteet voivat liittyä; hyödyllinen konfigurointirajapintoja ja paikan päällä tehtävää asennusta varten, mutta ei yleinen tapaus.

Kun isconnected() palauttaa True, kamera on verkossa. Kaikki muu, mitä ylemmät kerrokset tarvitsivat asettuakseen, on tapahtunut automaattisesti yhteyden pystyyntulon aikana; tulevat sivut erittelevät nämä osat yksitellen.

9.4.3. Mikä voi mennä pieleen¶

Tässä vaiheessa ilmenee muutamia käytännön vikatiloja.

  • Väärä verkon nimi tai salasana. Yhteysyritys yrittää hiljaa uudelleen, kunnes sovellus luovuttaa. Kääri odotus aikakatkaisulla, jotta yllä oleva silmukka ei estyisi ikuisesti:

    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)
    
  • Kantaman ulkopuolella. Kameran ja tukiaseman on oltava riittävän lähellä toisiaan, jotta signaali on tarpeeksi vahva pitämään yhteyden. status() palauttaa koodin, joka ilmoittaa miksi yhteys ei ole pystyssä; scan() palauttaa luettelon verkoista, jotka radio näkee, ja se on diagnostiikka, joka ajetaan kun connect ei onnistu.

  • Tukiasema pyytää enemmän kuin salasanaa. Avoimet verkot (ei salasanaa) ja yleiset salasanasuojatut verkot kattaa connect yllä esitetyllä tavalla. Suuremmat verkot työpaikoilla ja kouluissa käyttävät joskus eri menetelmää, jossa kameran on todennettava itsensä erillistä kirjautumispalvelinta vastaan; ne tarvitsevat lisäargumentteja kutsulle connect. Katso täysi pinta kohdasta class WLAN – sisäänrakennettujen WiFi-rajapintojen ohjaus.

9.4.4. Yhteyden ylläpitäminen¶

Yhteyden pystyttäminen on puolet ongelmasta. Yhteyden ylläpitäminen on toinen puoli – tukiasemat käynnistyvät uudelleen, kamera kulkeutuu kantaman ulkopuolelle, DHCP-vuokrasopimukset vanhenevat, radion laiteohjelmisto jumiutuu satunnaisesti. Kameran, joka aikoo elää verkossa kuukausia, on huomattava tämä ja toivuttava itsenäisesti.

Havaintomalli on kutsua isconnected()-kutsua kerran pääsilmukan iteraatiota kohden ja reagoida, kun se palauttaa False. isconnected() voi valehdella hetken, kun yhteys on katkennut ilman, että radio on vielä huomannut sitä – soketin lähetys, joka epäonnistuu kun yhteyden ”pitäisi” olla pystyssä, on sovelluksen toinen todiste katkoksesta. status() on luotettavampi lähde, kun nämä kaksi ovat eri mieltä.

Uudelleenyhdistämismalli on disconnect() ja sen jälkeen connect() samoilla tunnuksilla, odotus aikakatkaisulla käärittynä kuten alkuperäisessä yhteydessä. Pidä taukoa yritysten välillä – yksi sekunti, kaksi, neljä, kaksinkertaistaen jopa minuuttiin asti – jotta pitkä katkos ei kuormita tukiasemaa eikä polta radion virtabudjettia pyörintäsilmukoissa:

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

Kun tuo apufunktio palauttaa jatkuvasti False, radion laiteohjelmisto itse voi olla jumissa. Viimeinen keino on radion virtakierto: active(False), lyhyt tauko, active(True), uudelleenyhdistäminen tyhjästä. Tämä palauttaa radion laiteohjelmiston tunnettuun tilaan muutaman ylimääräisen sekunnin käyttökatkoksen hinnalla:

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

Kamera, joka on ollut poissa verkosta minuutteja, on todellinen vika, joka sovelluksen on nähtävä. Palautuskoodin tulisi tuoda tämä tila näkyviin – merkitä verkko epäterveeksi lippuun, jota pääsilmukka tarkistaa, ja antaa sovelluksen ohittaa verkkolähetykset, jotka se olisi tehnyt sillä aikaa kun lippu on nostettuna – jotta pitkä katkos ei pysäytä sovellusta odottamaan soketteja, jotka eivät koskaan kirjoita.

9.4.5. Ethernet, kun saatavilla¶

Kortit, joissa on sisäänrakennettu Ethernet, paljastavat saman mallin ilman connect-vaihetta. LAN-rajapinta pystytetään metodilla active(), ja heti kun kaapeli on kytketty, rajapinta on valmis käytettäväksi:

import network

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

Tämän jälkeen tämän osion loput sivut pätevät samalla tavalla riippumatta siitä, mikä rajapinta toi kameran verkkoon. Ylemmät kerrokset eivät välitä siitä, onko niiden alla oleva yhteys Wi-Fi vai Ethernet – ”yhdistetty” on ”yhdistetty”.

Täydellinen WLAN- ja LAN-viite, mukaan lukien tähän mahtumattomat konfigurointisäätimet, katso network — verkkomääritykset.

Previous
9.3. Kaapeli ja kehys
Next
9.5. IP-osoitteet

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.