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
  • Tutoriál
    • 1. Rychlý start
    • 2. Přehled Pythonu
    • 3. Řízení hardwaru
    • 4. Vision Sensors
    • 5. Zpracování obrazu
    • 6. NumPy
    • 7. Strojové učení
    • 8. Asyncio
    • 9. Sítě
      • 9.1. Proč sítě
      • 9.2. Vrstvené protokoly
      • 9.3. Kabel a rámec
      • 9.4. Aktivace linky
      • 9.5. IP adresy
      • 9.6. Pakety a směrování
      • 9.7. Privátní sítě a NAT
      • 9.8. Porty
      • 9.9. UDP – odešli paket a doufej v nejlepší
      • 9.10. TCP – spolehlivý proud bajtů
      • 9.11. Objekty socketů
      • 9.12. UDP sokety
      • 9.13. TCP sokety
      • 9.14. Sockety s asyncio
      • 9.15. Jména a DNS
      • 9.16. Čas a NTP
      • 9.17. Šifrované sockety a TLS
      • 9.18. MQTT, byte po bytu
      • 9.19. MQTT v Pythonu
      • 9.20. Shrnutí
    • 10. Webové servery
    • 11. Bluetooth
    • 12. Hostitelský protokol
    • 13. Nástroje
    • 14. Produkce
  • Knihovny
  • Desky
  • Shieldy
  • Senzory
  • Jazyk
  • CPython
  • Vnitřní mechanismy
  • Seznam změn
  • Licence

On this page

  • 9.4.1. Modul network
  • 9.4.2. Postup pro Wi-Fi
  • 9.4.3. Co se může pokazit
  • 9.4.4. Udržení připojení
  • 9.4.5. Ethernet, pokud je přítomen
micropython-doc 0 0
Edit this page
  1. OpenMV MicroPython /
  2. Tutoriál k OpenMV Cam /
  3. 9. Sítě /
  4. 9.4. Aktivace linky
View Source Open in ChatGPT Open in Claude Open in Perplexity

9.4. Aktivace linky¶

Linková vrstva probíraná na předchozí stránce je převážně automatická, ale je jedno místo, kde musí zasáhnout pythonovský skript: sdělit kameře, ke které síti se má připojit. Dokud tento krok neuspěje, nebude fungovat žádná ze síťových funkcí, které pokrývá zbytek této části.

9.4.1. Modul network¶

Modul network zpřístupňuje Pythonu síťový hardware kamery. Přesná sada rozhraní závisí na desce: mnoho kamer má bezdrátový čip a vystavuje třídu WLAN (pojmenovanou podle Wireless Local Area Network); některé desky mají také vestavěný Ethernetový port a vystavují třídu LAN (pojmenovanou podle Local Area Network, tedy drátové verze). Vzor použití je u obou stejný, s jedním důležitým rozdílem: bezdrátovému rozhraní je třeba sdělit, ke které síti se připojit, zatímco Ethernet přebírá to, co je na kabelu.

9.4.2. Postup pro Wi-Fi¶

Připojení k Wi-Fi síti má tři kroky: zkonstruovat rozhraní, aktivovat jej a požádat jej o připojení k pojmenované síti s heslem. Rozhraní vyjednává s přístupovým bodem na pozadí; volání isconnected() hlásí, kdy se linka dokončila a je aktivní:

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

Argument IF_STA volí režim station (stanice) – kamera se připojuje k síti, kterou hostuje někdo jiný. Opačný režim, IF_AP, způsobí, že kamera hostuje vlastní malou síť, ke které se mohou připojit jiná zařízení; to je užitečné pro konfigurační rozhraní a nastavení na místě, ale nejde o běžný případ.

Jakmile isconnected() vrátí True, je kamera v síti. Vše ostatní, co vyšší vrstvy potřebovaly k vlastnímu nastavení, proběhlo automaticky během toho, jak se linka aktivovala; následující stránky tyto díly postupně rozeberou.

9.4.3. Co se může pokazit¶

V tomto kroku se objevuje několik praktických způsobů selhání.

  • Nesprávný název sítě nebo heslo. Pokus o připojení se tiše opakuje, dokud to aplikace nevzdá. Obalte čekání časovým limitem, aby výše uvedená smyčka neblokovala donekonečna:

    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)
    
  • Mimo dosah. Kamera a přístupový bod musí být dostatečně blízko, aby byl signál dost silný na udržení linky. Metoda status() vrací kód udávající, proč linka není aktivní; metoda scan() vrací seznam sítí, které rádio vidí, což je diagnostika, kterou je třeba spustit, když se connect nedaří.

  • Přístupový bod žádá více než heslo. Otevřené sítě (bez hesla) a běžné sítě chráněné heslem pokrývá connect, jak je ukázáno výše. Větší sítě na pracovištích a školách někdy používají odlišné schéma, kde se kamera musí autentizovat vůči samostatnému přihlašovacímu serveru; ty vyžadují další argumenty pro connect. Pro úplnou nabídku viz třída WLAN – ovládání vestavěných WiFi rozhraní.

9.4.4. Udržení připojení¶

Aktivace linky je polovina problému. Udržení připojení je ta druhá polovina – přístupové body se restartují, kamera se přesune mimo dosah, DHCP zápůjčky vyprší, firmware rádia se občas zasekne. Kamera, která má žít v síti měsíce, si toho musí všimnout a sama se zotavit.

Vzor detekce spočívá ve volání isconnected() jednou za iteraci hlavní smyčky a v reakci na to, když vrátí False. isconnected() může na chvíli lhát, když spojení vypadlo, aniž by si toho rádio dosud všimlo – selhání odeslání přes socket ve chvíli, kdy by linka „měla“ být aktivní, je dalším důkazem výpadku, který aplikace má. Metoda status() je směrodatnějším zdrojem, když si tyto dva odporují.

Vzor pro opětovné připojení je disconnect() následované connect() se stejnými přihlašovacími údaji, přičemž čekání je obaleno časovým limitem jako při počátečním připojení. Mezi pokusy zařaďte odstupňované čekání – jedna sekunda, dvě, čtyři, zdvojnásobujte až na zhruba minutu – aby dlouhý výpadek nepřetěžoval AP a nespaloval energetický rozpočet rádia na smyčkách naprázdno:

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

Když tento pomocník stále vrací False, může být zaseknutý samotný firmware rádia. Posledním východiskem je vypnutí a zapnutí rádia: active(False), krátká pauza, active(True), opětovné připojení od začátku. Tím se firmware rádia vrátí do známého stavu za cenu několika sekund výpadku navíc:

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

Kamera, která je mimo síť celé minuty, je skutečné selhání, které aplikace musí vidět. Kód zotavení by měl tento stav vynést na povrch – označit síť jako nezdravou v příznaku, který hlavní smyčka kontroluje, a nechat aplikaci přeskakovat síťová odeslání, která by jinak provedla, dokud je příznak nastaven – aby dlouhý výpadek nezablokoval aplikaci čekáním na sockety, do kterých nikdy nezapíše.

9.4.5. Ethernet, pokud je přítomen¶

Desky s vestavěným Ethernetem vystavují stejný vzor bez kroku connect. Rozhraní LAN se aktivuje pomocí active() a jakmile je kabel zapojen, je rozhraní připraveno k použití:

import network

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

Od tohoto bodu se zbytek stránek této části uplatňuje stejně bez ohledu na to, které rozhraní přivedlo kameru do sítě. Vyšší vrstvy se nestarají o to, zda je linka pod nimi Wi-Fi nebo Ethernet – „připojeno“ je „připojeno“.

Pro úplnou referenci WLAN a LAN, včetně konfiguračních možností, které se sem nevešly, viz network — konfigurace sítě.

Previous
9.3. Kabel a rámec
Next
9.5. IP adresy

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.