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. Pornire rapidă
    • 2. Prezentare generală Python
    • 3. Controlul hardware-ului
    • 4. Senzori de viziune
    • 5. Procesarea imaginilor
    • 6. NumPy
    • 7. Învățarea automată
    • 8. Asyncio
    • 9. Rețelistică
      • 9.1. De ce rețele
      • 9.2. Protocoale stratificate
      • 9.3. Cablul și cadrul
      • 9.4. Activarea legăturii
      • 9.5. Adrese IP
      • 9.6. Pachete și dirijare
      • 9.7. Rețele private și NAT
      • 9.8. Porturi
      • 9.9. UDP – trimite un pachet și speră la ce e mai bun
      • 9.10. TCP – un flux fiabil de octeți
      • 9.11. Obiecte socket
      • 9.12. Socket-uri UDP
      • 9.13. Socket-uri TCP
      • 9.14. Socket-uri cu asyncio
      • 9.15. Nume și DNS
      • 9.16. Timpul și NTP
      • 9.17. Socluri criptate și TLS
      • 9.18. MQTT, octet cu octet
      • 9.19. MQTT în Python
      • 9.20. Recapitulare
    • 10. Servere web
    • 11. Bluetooth
    • 12. Protocolul de gazdă
    • 13. Instrumente
    • 14. Producție
  • Biblioteci
  • Plăci
  • Shield-uri
  • Senzori
  • Limbaj
  • CPython
  • Componente interne
  • Istoric modificări
  • Licență

On this page

  • 9.4.1. Modulul network
  • 9.4.2. Fluxul Wi-Fi
  • 9.4.3. Ce poate merge prost
  • 9.4.4. Menținerea conexiunii
  • 9.4.5. Ethernet, atunci când este prezent
micropython-doc 0 0
Edit this page
  1. OpenMV MicroPython /
  2. Tutorial OpenMV Cam /
  3. 9. Rețelistică /
  4. 9.4. Activarea legăturii
View Source Open in ChatGPT Open in Claude Open in Perplexity

9.4. Activarea legăturii¶

Stratul de legătură tratat pe pagina anterioară este în mare parte automat, dar există un loc în care un script Python trebuie să intervină: să îi spună camerei la ce rețea să se alăture. Până când acest pas reușește, niciuna dintre funcționalitățile de rețea acoperite în restul acestei secțiuni nu va funcționa.

9.4.1. Modulul network¶

Modulul network expune hardware-ul de rețea al camerei către Python. Setul exact de interfețe depinde de placă: multe camere au un cip wireless și expun o clasă WLAN (denumită după Wireless Local Area Network); unele plăci au de asemenea un port Ethernet încorporat și expun o clasă LAN (denumită după Local Area Network, adică versiunea cablată). Tiparul de utilizare este același pentru ambele, cu o diferență importantă: unei interfețe wireless trebuie să i se spună la ce rețea să se alăture, în timp ce Ethernet preia orice se află pe cablu.

9.4.2. Fluxul Wi-Fi¶

Alăturarea unei rețele Wi-Fi presupune trei pași: construiește interfața, activeaz-o, cere-i să se conecteze la o rețea numită cu o parolă. Interfața negociază cu punctul de acces în fundal; un apel isconnected() raportează când legătura a terminat de activat:

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

Argumentul IF_STA selectează modul station (stație) – camera se alătură unei rețele găzduite de altcineva. Modul opus, IF_AP, face camera să găzduiască propria sa mică rețea la care se pot alătura alte dispozitive; util pentru interfețe de configurare și configurare la fața locului, dar nu este cazul obișnuit.

Odată ce isconnected() returnează True, camera este în rețea. Tot ce mai aveau nevoie straturile superioare pentru a se configura s-a întâmplat automat în timp ce legătura se activa; paginile care urmează detaliază aceste elemente unul câte unul.

9.4.3. Ce poate merge prost¶

Câteva moduri practice de eșec apar la acest pas.

  • Nume de rețea sau parolă greșite. Încercarea de conectare reîncearcă în tăcere până când aplicația renunță. Înfășoară așteptarea cu un timp de expirare, astfel încât bucla de mai sus să nu se blocheze la nesfârșit:

    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)
    
  • În afara razei. Camera și punctul de acces trebuie să fie suficient de aproape încât semnalul să fie destul de puternic pentru a menține o legătură. status() returnează un cod care indică de ce legătura nu este activă; scan() returnează lista rețelelor pe care le poate vedea radioul, ceea ce reprezintă diagnosticul de rulat atunci când connect nu reușește.

  • Punctul de acces cere mai mult decât o parolă. Rețelele deschise (fără parolă) și cele obișnuite protejate prin parolă sunt acoperite de connect așa cum s-a arătat mai sus. Rețelele mai mari de la locuri de muncă și școli folosesc uneori o schemă diferită în care camera trebuie să se autentifice față de un server de autentificare separat; acestea necesită argumente suplimentare pentru connect. Consultă clasa WLAN – controlul interfețelor WiFi integrate pentru suprafața completă.

9.4.4. Menținerea conexiunii¶

Activarea legăturii este jumătate din problemă. Menținerea conexiunii este cealaltă jumătate – punctele de acces repornesc, camera iese din rază, leasing-urile DHCP expiră, firmware-ul radio se blochează ocazional. O cameră care urmează să trăiască în rețea luni de zile trebuie să observe asta și să se recupereze singură.

Tiparul de detectare este să apelezi isconnected() o dată per iterație a buclei principale și să reacționezi când returnează False. isconnected() poate minți pe scurt atunci când o conexiune a căzut fără ca radioul să fi observat încă – o trimitere prin soclu care eșuează atunci când legătura „ar trebui” să fie activă este cealaltă dovadă a aplicației privind o cădere. status() este sursa mai autoritară atunci când cele două nu concordă.

Tiparul de reconectare este disconnect() urmat de connect() cu aceleași credențiale, cu așteptarea înfășurată într-un timp de expirare ca la conexiunea inițială. Aplică o pauză crescătoare între încercări – o secundă, două, patru, dublând până la un minut sau cam așa ceva – astfel încât o pană lungă să nu bombardeze punctul de acces și să nu consume bugetul de energie al radioului în bucle de așteptare activă:

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

Atunci când acea funcție ajutătoare continuă să returneze False, firmware-ul radio în sine poate fi blocat. Ultima soluție este repornirea alimentării radioului: active(False), o scurtă pauză, active(True), reconectare de la zero. Acest lucru readuce firmware-ul radio la o stare cunoscută, cu prețul câtorva secunde suplimentare de inactivitate:

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

O cameră care a fost în afara rețelei timp de minute întregi este un eșec real pe care aplicația trebuie să îl vadă. Codul de recuperare ar trebui să expună acea stare – să marcheze rețeaua ca nesănătoasă într-un indicator pe care bucla principală îl verifică și să lase aplicația să sară peste trimiterile de rețea pe care le-ar fi făcut cât timp indicatorul este nesetat – astfel încât o pană lungă să nu blocheze aplicația în așteptarea unor socluri care nu vor scrie niciodată.

9.4.5. Ethernet, atunci când este prezent¶

Plăcile cu Ethernet încorporat expun același tipar fără pasul connect. Interfața LAN este activată cu active(), iar de îndată ce cablul este conectat, interfața este gata de utilizare:

import network

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

După acest punct, restul paginilor acestei secțiuni se aplică la fel, indiferent de interfața care a adus camera în rețea. Straturile superioare nu țin cont dacă legătura de sub ele este Wi-Fi sau Ethernet – „conectat” înseamnă „conectat”.

Pentru referința completă WLAN și LAN, inclusiv butoanele de configurare care nu au încăput aici, consultă network — configurarea rețelei.

Previous
9.3. Cablul și cadrul
Next
9.5. Adrese 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.