OpenMV MicroPython OpenMV MicroPython OpenMV MicroPython
  • Trang chủ
  • Hướng dẫn
  • Thư viện
  • Bo mạch
  • Shield
  • Cảm biến
  • Ngôn ngữ
  • CPython
  • Nội bộ
  • Nhật ký thay đổi
  • Giấy phép
/
  • English
  • العربية
  • 简体中文
  • 繁體中文
  • Hrvatski
  • Čeština
  • Nederlands
  • Suomi
  • Français
  • Deutsch
  • עברית
  • Magyar
  • Bahasa Indonesia
  • Italiano
  • 日本語
  • 한국어
  • Polski
  • Português (Brasil)
  • Português (Portugal)
  • Română
  • Русский
  • Español
  • Svenska
  • ไทย
  • Türkçe
  • Українська
  • Tiếng Việt
  • Thảo luận
  • Hướng dẫn
    • 1. Bắt đầu nhanh
    • 2. Tổng quan về Python
    • 3. Điều khiển phần cứng
    • 4. Cảm biến thị giác
    • 5. Xử lý ảnh
    • 6. NumPy
    • 7. Học máy
    • 8. Asyncio
    • 9. Kết nối mạng
      • 9.1. Tại sao cần mạng
      • 9.2. Giao thức phân lớp
      • 9.3. Cáp và khung hình
      • 9.4. Khởi động liên kết
      • 9.5. Địa chỉ IP
      • 9.6. Các gói tin và định tuyến
      • 9.7. Mạng riêng và NAT
      • 9.8. Cổng (Ports)
      • 9.9. UDP -- gửi gói tin, hy vọng điều tốt nhất
      • 9.10. TCP -- luồng byte đáng tin cậy
      • 9.11. Đối tượng socket
      • 9.12. UDP sockets
      • 9.13. TCP sockets
      • 9.14. Sockets với asyncio
      • 9.15. Tên và DNS
      • 9.16. Thời gian và NTP
      • 9.17. Socket mã hóa và TLS
      • 9.18. MQTT, từng byte một
      • 9.19. MQTT trong Python
      • 9.20. Tổng kết
    • 10. Web Server
    • 11. Bluetooth
    • 12. Giao thức Host
    • 13. Công cụ
    • 14. Production
  • Thư viện
  • Boards
  • Shields
  • Cảm biến
  • Ngôn ngữ
  • CPython
  • Nội bộ
  • Changelog
  • Giấy phép

Trên trang này

  • 9.4.1. Module network
  • 9.4.2. Quy trình Wi-Fi
  • 9.4.3. Những gì có thể xảy ra sai
  • 9.4.4. Duy trì kết nối
  • 9.4.5. Ethernet, khi có
micropython-doc 0 0
Chỉnh sửa trang này
  1. OpenMV MicroPython /
  2. Hướng Dẫn OpenMV Cam /
  3. 9. Kết nối mạng /
  4. 9.4. Khởi động liên kết
Xem nguồn Mở trong ChatGPT Mở trong Claude Mở trong Perplexity

9.4. Khởi động liên kết¶

Lớp liên kết được đề cập ở trang trước hầu như là tự động, nhưng có một nơi mà tập lệnh Python phải can thiệp: cho camera biết mạng nào để tham gia. Cho đến khi bước đó thành công, không có tính năng mạng nào mà phần còn lại của phần này đề cập sẽ hoạt động.

9.4.1. Module network¶

Module network cung cấp phần cứng mạng của camera cho Python. Tập hợp giao diện chính xác phụ thuộc vào bo mạch: nhiều cam có chip không dây và cung cấp class WLAN (đặt tên theo Wireless Local Area Network); một số bo mạch cũng có cổng Ethernet tích hợp và cung cấp class LAN (đặt tên theo Local Area Network, tức là phiên bản có dây). Mẫu sử dụng là giống nhau cho cả hai, với một sự khác biệt quan trọng: giao diện không dây phải được cho biết mạng nào để tham gia, trong khi Ethernet lấy bất cứ thứ gì trên cáp.

9.4.2. Quy trình Wi-Fi¶

Tham gia mạng Wi-Fi gồm ba bước: khởi tạo giao diện, bật nó lên, yêu cầu nó kết nối với mạng được đặt tên với mật khẩu. Giao diện thương lượng với điểm truy cập trong nền; lệnh gọi isconnected() báo cáo khi liên kết đã kết nối xong:

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

Đối số IF_STA chọn chế độ trạm -- camera tham gia một mạng mà người khác đang lưu trữ. Chế độ ngược lại, IF_AP, làm cho camera lưu trữ mạng nhỏ của riêng nó mà các thiết bị khác có thể tham gia; hữu ích cho giao diện cấu hình và thiết lập tại chỗ, nhưng không phải trường hợp phổ biến.

Khi isconnected() trả về True, camera đã ở trên mạng. Mọi thứ khác mà các lớp cao hơn cần để tự thiết lập đã xảy ra tự động trong khi liên kết đang khởi động; các trang tiếp theo giải thích từng phần một lần.

9.4.3. Những gì có thể xảy ra sai¶

Một vài chế độ thất bại thực tế xuất hiện ở bước này.

  • Sai tên mạng hoặc mật khẩu. Lần thử kết nối thầm lặng thử lại cho đến khi ứng dụng từ bỏ. Bọc việc chờ đợi với thời gian chờ để vòng lặp ở trên không bị chặn mãi mãi:

    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)
    
  • Ngoài tầm phủ sóng. Camera và điểm truy cập phải đủ gần để tín hiệu đủ mạnh để duy trì liên kết. status() trả về mã cho biết lý do liên kết không khởi động; scan() trả về danh sách các mạng mà radio có thể thấy, đây là chẩn đoán cần chạy khi connect không thành công.

  • Điểm truy cập yêu cầu nhiều hơn mật khẩu. Các mạng mở (không có mật khẩu) và các mạng được bảo vệ bằng mật khẩu phổ biến được bao gồm bởi connect như được hiển thị ở trên. Các mạng lớn hơn tại nơi làm việc và trường học đôi khi sử dụng sơ đồ khác trong đó camera phải xác thực với máy chủ đăng nhập riêng; những mạng đó cần các đối số bổ sung cho connect. Xem lớp WLAN -- điều khiển giao diện WiFi tích hợp để biết toàn bộ bề mặt.

9.4.4. Duy trì kết nối¶

Khởi động liên kết là một nửa vấn đề. Duy trì kết nối là nửa kia -- điểm truy cập khởi động lại, cam di chuyển ra ngoài tầm phủ sóng, thuê bao DHCP hết hạn, firmware radio đôi khi bị kẹt. Một cam sẽ sống trên mạng hàng tháng phải nhận thấy điều đó và tự khôi phục.

Mẫu phát hiện là gọi isconnected() một lần cho mỗi lần lặp vòng lặp chính và phản ứng khi nó trả về False. isconnected() có thể nói dối ngắn khi kết nối đã bị ngắt mà radio chưa nhận ra -- một lần gửi socket thất bại khi liên kết "nên" hoạt động là bằng chứng khác của ứng dụng về sự cố. status() là nguồn có thẩm quyền hơn khi hai bên không đồng ý.

Mẫu kết nối lại là disconnect() theo sau là connect() với cùng thông tin xác thực, với việc chờ được bọc trong thời gian chờ như trong kết nối ban đầu. Rút lui giữa các lần thử -- một giây, hai, bốn, tăng gấp đôi lên đến một phút hoặc hơn -- để mất điện kéo dài không tấn công AP và không đốt hết ngân sách điện của radio trong các vòng quay:

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

Khi hàm trợ giúp đó tiếp tục trả về False, chính firmware radio có thể bị kẹt. Phương sách cuối cùng là tắt nguồn radio: active(False), một khoảng dừng ngắn, active(True), kết nối lại từ đầu. Điều này đưa firmware radio về trạng thái đã biết với chi phí thêm vài giây ngừng hoạt động:

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

Một cam đã mất kết nối mạng hàng phút là một lỗi thực sự mà ứng dụng phải thấy. Code khôi phục nên hiển thị trạng thái đó -- đánh dấu mạng là không lành mạnh trong một cờ mà vòng lặp chính kiểm tra, và để ứng dụng bỏ qua các lần gửi mạng mà nó sẽ thực hiện trong khi cờ đó rõ ràng -- để mất điện kéo dài không làm ứng dụng bị treo khi chờ trên các socket sẽ không bao giờ ghi.

9.4.5. Ethernet, khi có¶

Các bo mạch có Ethernet tích hợp cung cấp cùng mẫu mà không cần bước connect. Giao diện LAN được bật lên bằng active(), và ngay khi cắm cáp vào, giao diện đã sẵn sàng để sử dụng:

import network

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

Sau thời điểm này, các trang còn lại của phần này áp dụng theo cùng cách bất kể giao diện nào đã đưa camera lên mạng. Các lớp cao hơn không quan tâm liên kết bên dưới chúng là Wi-Fi hay Ethernet -- "đã kết nối" là "đã kết nối".

Để tham khảo đầy đủ WLAN và LAN, bao gồm các núm điều chỉnh cấu hình không phù hợp ở đây, xem network --- cấu hình mạng.

Trước
9.3. Cáp và khung hình
Tiếp theo
9.5. Địa chỉ IP

Dành cho OpenMV firmware v5.0.0 · dựa trên MicroPython v1.28 · tài liệu được xây dựng 18 tháng 6, 2026 · Bản quyền © 2014-2026 bởi OpenMV, Damien P. George và những người khác.

Được tạo bằng Sphinx sử dụng chủ đề Shibuya.