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
  • Samouczek
    • 1. Szybki start
    • 2. Przegląd Pythona
    • 3. Sterowanie sprzętem
    • 4. Sensory wizyjne
    • 5. Przetwarzanie obrazu
    • 6. NumPy
    • 7. Uczenie maszynowe
    • 8. Asyncio
    • 9. Sieci
      • 9.1. Dlaczego sieci
      • 9.2. Protokoły warstwowe
      • 9.3. Kabel i ramka
      • 9.4. Aktywowanie łącza
      • 9.5. Adresy IP
      • 9.6. Pakiety i trasowanie
      • 9.7. Sieci prywatne i NAT
      • 9.8. Porty
      • 9.9. UDP – wyślij pakiet i miej nadzieję na najlepsze
      • 9.10. TCP – niezawodny strumień bajtów
      • 9.11. Obiekty gniazd
      • 9.12. Gniazda UDP
      • 9.13. Gniazda TCP
      • 9.14. Gniazda z asyncio
      • 9.15. Nazwy i DNS
      • 9.16. Czas i NTP
      • 9.17. Szyfrowane gniazda i TLS
      • 9.18. MQTT, bajt po bajcie
      • 9.19. MQTT w Pythonie
      • 9.20. Podsumowanie
    • 10. Serwery WWW
    • 11. Bluetooth
    • 12. Protokół hosta
    • 13. Narzędzia
    • 14. Produkcja
  • Biblioteki
  • Płytki
  • Nakładki
  • Sensory
  • Język
  • CPython
  • Wewnętrzne mechanizmy
  • Dziennik zmian
  • Licencja

On this page

  • 9.4.1. Moduł network
  • 9.4.2. Przebieg dla Wi-Fi
  • 9.4.3. Co może pójść nie tak
  • 9.4.4. Utrzymywanie połączenia
  • 9.4.5. Ethernet, gdy jest obecny
micropython-doc 0 0
Edit this page
  1. OpenMV MicroPython /
  2. Samouczek OpenMV Cam /
  3. 9. Sieci /
  4. 9.4. Aktywowanie łącza
View Source Open in ChatGPT Open in Claude Open in Perplexity

9.4. Aktywowanie łącza¶

Warstwa łącza omówiona na poprzedniej stronie jest w większości automatyczna, ale jest jedno miejsce, w którym skrypt Pythona musi wkroczyć: poinformowanie kamery, do której sieci ma dołączyć. Dopóki ten krok się nie powiedzie, żadna z funkcji sieciowych omawianych w dalszej części tej sekcji nie zadziała.

9.4.1. Moduł network¶

Moduł network udostępnia Pythonowi sprzęt sieciowy kamery. Dokładny zestaw interfejsów zależy od płytki: wiele kamer ma układ bezprzewodowy i udostępnia klasę WLAN (nazwaną od Wireless Local Area Network); niektóre płytki mają również wbudowany port Ethernet i udostępniają klasę LAN (nazwaną od Local Area Network, czyli wersji przewodowej). Sposób użycia jest taki sam dla obu, z jedną ważną różnicą: interfejsowi bezprzewodowemu trzeba powiedzieć, do której sieci ma dołączyć, podczas gdy Ethernet odbiera to, co jest na kablu.

9.4.2. Przebieg dla Wi-Fi¶

Dołączenie do sieci Wi-Fi to trzy kroki: utworzenie interfejsu, jego aktywowanie i poproszenie go o połączenie z nazwaną siecią przy użyciu hasła. Interfejs negocjuje z punktem dostępowym w tle; wywołanie isconnected() informuje, kiedy łącze zakończyło aktywację:

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 wybiera tryb station – kamera dołącza do sieci, którą hostuje ktoś inny. Tryb przeciwny, IF_AP, sprawia, że kamera hostuje własną małą sieć, do której mogą dołączyć inne urządzenia; przydatne w przypadku interfejsów konfiguracyjnych i konfiguracji na miejscu, ale nie jest to typowy przypadek.

Gdy isconnected() zwróci True, kamera jest w sieci. Wszystko inne, czego wyższe warstwy potrzebowały do skonfigurowania się, wydarzyło się automatycznie, gdy łącze było aktywowane; kolejne strony omawiają te elementy po kolei.

9.4.3. Co może pójść nie tak¶

Na tym etapie pojawia się kilka praktycznych trybów awarii.

  • Błędna nazwa sieci lub hasło. Próba połączenia po cichu ponawia się, dopóki aplikacja nie zrezygnuje. Otocz oczekiwanie limitem czasu, aby powyższa pętla nie blokowała się w nieskończoność:

    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)
    
  • Poza zasięgiem. Kamera i punkt dostępowy muszą być na tyle blisko siebie, aby sygnał był wystarczająco silny do utrzymania łącza. status() zwraca kod wskazujący, dlaczego łącze nie jest aktywne; scan() zwraca listę sieci, które widzi radio, co jest diagnostyką do uruchomienia, gdy connect się nie powiedzie.

  • Punkt dostępowy wymaga czegoś więcej niż hasła. Sieci otwarte (bez hasła) oraz powszechne sieci chronione hasłem są obsługiwane przez connect w sposób pokazany powyżej. Większe sieci w miejscach pracy i szkołach czasami używają innego schematu, w którym kamera musi uwierzytelnić się względem osobnego serwera logowania; te wymagają dodatkowych argumentów dla connect. Pełną powierzchnię znajdziesz w klasa WLAN – sterowanie wbudowanymi interfejsami WiFi.

9.4.4. Utrzymywanie połączenia¶

Aktywowanie łącza to połowa problemu. Utrzymanie połączenia to druga połowa – punkty dostępowe się restartują, kamera wychodzi poza zasięg, dzierżawy DHCP wygasają, a oprogramowanie układowe radia od czasu do czasu się zawiesza. Kamera, która ma żyć w sieci przez miesiące, musi to zauważyć i samodzielnie się odbudować.

Wzorzec wykrywania polega na wywoływaniu isconnected() raz na iterację głównej pętli i reagowaniu, gdy zwróci False. isconnected() może chwilowo kłamać, gdy połączenie zostało zerwane, zanim radio to zauważyło – nieudane wysłanie przez gniazdo, gdy łącze „powinno” być aktywne, to drugi dowód aplikacji na zerwanie. status() jest bardziej wiarygodnym źródłem, gdy te dwa się nie zgadzają.

Wzorzec ponownego łączenia to disconnect(), a następnie connect() z tymi samymi poświadczeniami, z oczekiwaniem otoczonym limitem czasu jak przy pierwszym połączeniu. Stosuj odczekiwanie między próbami – jedna sekunda, dwie, cztery, podwajając aż do około minuty – aby długa awaria nie zarzucała punktu dostępowego żądaniami i nie zużywała budżetu mocy radia na pętle aktywnego oczekiwania:

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

Gdy ten pomocnik wciąż zwraca False, samo oprogramowanie układowe radia może być zaklinowane. Ostatecznością jest wyłączenie i ponowne włączenie radia: active(False), krótka pauza, active(True), ponowne połączenie od zera. To przywraca oprogramowanie układowe radia do znanego stanu kosztem kilku dodatkowych sekund niedostępności:

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

Kamera, która od kilku minut jest poza siecią, to prawdziwa awaria, którą aplikacja musi dostrzec. Kod odzyskiwania powinien uwidocznić ten stan – oznaczyć sieć jako niesprawną we fladze sprawdzanej przez główną pętlę i pozwolić aplikacji pomijać wysyłki sieciowe, które wykonałaby, gdy flaga jest wyczyszczona – tak aby długa awaria nie wstrzymywała aplikacji oczekującej na gniazda, które nigdy nie zapiszą danych.

9.4.5. Ethernet, gdy jest obecny¶

Płytki z wbudowanym Ethernetem udostępniają ten sam wzorzec bez kroku connect. Interfejs LAN jest aktywowany za pomocą active(), i gdy tylko kabel zostanie podłączony, interfejs jest gotowy do użycia:

import network

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

Od tego momentu pozostałe strony tej sekcji mają zastosowanie w ten sam sposób, niezależnie od tego, który interfejs wprowadził kamerę do sieci. Wyższe warstwy nie dbają o to, czy łącze pod nimi to Wi-Fi czy Ethernet – „połączony” znaczy „połączony”.

Pełną dokumentację WLAN i LAN, w tym pokrętła konfiguracyjne, które się tutaj nie zmieściły, znajdziesz w network — konfiguracja sieci.

Previous
9.3. Kabel i ramka
Next
9.5. Adresy IP

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.