lớp WLAN -- điều khiển giao diện WiFi tích hợp¶
Lớp WLAN điều khiển các radio WiFi tích hợp trên các OpenMV Cam hiện đại. Cùng một lớp bao bọc hai trình điều khiển nền tảng khác nhau tùy thuộc vào WiFi MCU của bo mạch:
CYW43 (Mô-đun WiFi Infineon CYW43xxx Murata). Được sử dụng bởi OpenMV Cam N6, OpenMV Cam RT1062, Arduino Portenta H7, Arduino Nicla Vision và Arduino Giga R1 WiFi.
NINA W10 (u-blox NINA-W10 / ESP32-WROOM). Được sử dụng bởi Arduino Nano RP2040 Connect.
Hai trình điều khiển này cung cấp các tên phương thức giống nhau nhưng khác nhau ở một số đối số và tập hợp các khóa config() được chấp nhận. Các điểm khác biệt được đánh dấu bên dưới.
Các OpenMV Cam có shield WiFi WINC1500 cũ (M4 / M7 / H7 / H7 Plus / Pure Thermal) sử dụng WINC thay thế.
Ví dụ sử dụng:
import network
# Enable the station interface and connect to a WiFi AP.
nic = network.WLAN(network.WLAN.IF_STA)
nic.active(True)
nic.connect("your-ssid", "your-key")
while not nic.isconnected():
pass
print(nic.ipconfig("addr4"))
Các Constructor¶
- class network.WLAN(interface_id: int = WLAN.IF_STA) None¶
Tạo một đối tượng giao diện
WLAN.interface_idchọn giao diện nào để thao tác:WLAN.IF_STA-- chế độ trạm / client. Kết nối đến điểm truy cập thượng nguồn bằngconnect(). Đây là mặc định.WLAN.IF_AP-- chế độ điểm truy cập. Cấu hình AP bằngconfig()và chấp nhận kết nối client.
Cùng một radio vật lý hỗ trợ cả hai giao diện; tạo một giao diện không loại trừ giao diện kia.
Các Phương thức¶
- active(is_active: bool | None = None) bool¶
Bật hoặc tắt radio WiFi.
Không có đối số, trả về trạng thái hiện tại --
Truekhi radio đang hoạt động,Falsenếu không.active(True)cấp nguồn cho WiFi MCU, tải firmware của nó (CYW43 tải blob firmware từ bộ nhớ flash; NINA xác thực phiên bản firmware hiện đang được flash) và khởi động lwIP netif cho giao diện này. Tất cả các phương thức khác --connect(),scan(),ipconfig()và các phương thức liên quan -- yêu cầu giao diện phải đang hoạt động.active(False)tắt nguồn radio. Trên giao diện STA, điều này cũng ngắt kết nối với AP hiện tại và giải phóng netif.
- connect(ssid: str, key: str | None = None, *, security: int = -1, bssid: bytes | None = None, channel: int = -1) None¶
Liên kết giao diện STA với điểm truy cập đã cho.
ssid-- SSID của mạng (chuỗi hoặc bytes).key-- mật khẩu / khóa chia sẻ trước. TruyềnNonecho mạng mở.security(chỉ từ khóa) -- một trong các hằng sốSEC_*.-1(mặc định) tự động chọn:SEC_OPENkhikeyrỗng,SEC_WPA_WPA2nếu không.bssid(chỉ từ khóa, chỉ CYW43) -- giới hạn liên kết với AP có địa chỉ MAC 6 byte này. Bị bỏ qua bởi trình điều khiển NINA.channel(chỉ từ khóa) -- kênh radio ưu tiên. Mặc định là "để trình điều khiển tự chọn".
- disconnect() None¶
Trong chế độ STA, ngắt kết nối với điểm truy cập hiện đang liên kết. Giao diện vẫn hoạt động; gọi
connect()lại để kết nối lại, hoặcactive()(False)để tắt nguồn radio hoàn toàn. Không thực hiện gì khi không có liên kết hiện tại.
- isconnected() bool¶
Trong chế độ STA, trả về
Truekhi đã liên kết với điểm truy cập và địa chỉ IPv4 đã được lấy từ DHCP (hoặc được gán tĩnh quaipconfig()). Trả vềFalsetrong khi liên kết vẫn đang ở giai đoạn xác thực/liên kết/DHCP.Trong chế độ AP, trả về
Truekhi có ít nhất một trạm đã tham gia.
- scan(*, passive: bool = False, ssid: bytes | None = None, bssid: bytes | None = None) List[Tuple[bytes, bytes, int, int, int, int]]¶
Quét các điểm truy cập lân cận và trả về danh sách các 6-tuple:
[0]SSID (bytes; rỗng cho mạng ẩn).[1]BSSID (MAC 6 byte,bytes). Chuyển đổi bằngbinascii.hexlify().[2]Số kênh.[3]RSSI tính bằng dBm.[4]Chế độ bảo mật (một trong các hằng sốSEC_*).[5]Dành riêng (luôn là1).
Tất cả các đối số từ khóa chỉ dành cho CYW43:
passive-- nếu làTrue, sử dụng quét thụ động thay vì quét yêu cầu thăm dò chủ động mặc định.ssid-- giới hạn quét đến một SSID.bssid-- giới hạn quét đến một BSSID.
Quét chỉ có ý nghĩa trên giao diện STA.
- status() int¶
- status(param: str) Any
Truy vấn trạng thái kết nối.
Không có đối số, trả về trạng thái liên kết dưới dạng số nguyên nhỏ (mã hóa theo trình điều khiển -- giá trị truthy nghĩa là "đã liên kết").
Với đối số chuỗi:
"rssi"-- trong chế độ STA, trả về RSSI hiện tại tính bằng dBm."stations"-- trong chế độ AP, trả về danh sách các trạm đã kết nối. CYW43 trả về[(mac_bytes,), ...]; NINA trả về[ip_string, ...].
- ifconfig(config: Tuple[str, str, str, str] | None = None) Tuple[str, str, str, str] | None¶
Lấy hoặc đặt các tham số giao diện IPv4 dưới dạng 4-tuple của các chuỗi dấu chấm
(ip, subnet, gateway, dns).Ghi chú
Ưu tiên sử dụng
ipconfig()cho mã mới:nic.ipconfig(addr4="192.168.0.4/24", gw4="192.168.0.1") network.ipconfig(dns="8.8.8.8")
- ipconfig(param: str) Any¶
- ipconfig(**kwargs: Any) None
Lấy hoặc đặt các tham số giao diện IPv4 / IPv6. Trình điều khiển CYW43 ủy quyền cho triển khai lwIP tiêu chuẩn và hỗ trợ đầy đủ tập hợp các khóa được ghi lại trên
AbstractNIC.ipconfig(). Trình điều khiển NINA triển khai tập hợp con nhỏ hơn theo từng giao diện --dhcp4vàhas_dhcp4(chỉ đọc), cùng vớiaddr4vàgw4để lấy / đặt.
- config(param: str) Any¶
- config(**kwargs: Any) None
Lấy hoặc đặt các tham số giao diện đặc thù cho WiFi.
Với một đối số chuỗi vị trí duy nhất, trả về giá trị của tham số đó. Với các đối số từ khóa, đặt một hoặc nhiều tham số cùng lúc -- các thay đổi ảnh hưởng đến AP đang chạy khiến AP tắt và khởi động lại tự động.
Ví dụ:
# Set up the access-point name and channel. ap.config(ssid="My AP", channel=11) # Query params one at a time. print(ap.config("ssid")) print(ap.config("mac"))
Trình điều khiển CYW43 -- các tham số có thể lấy:
"antenna"-- bộ chọn anten (int)."channel"-- kênh hiện tại."ssid"/"essid"-- SSID hiện tại (chuỗi)."security"-- chế độ xác thực của AP (một trongSEC_*)."mac"-- địa chỉ MAC của giao diện (6bytes)."pm"-- giá trị quản lý nguồn điện."txpower"-- công suất phát tính bằng dBm."hostname"-- tên máy chủ DHCP/mDNS. Không dùng nữa; sử dụngnetwork.hostname()thay thế.
Trình điều khiển CYW43 -- các tham số có thể đặt:
antenna=<int>-- bộ chọn anten.channel=<int>-- kênh AP.ssid=<str>/essid=<str>-- SSID của AP.key=<str>/password=<str>-- khóa chia sẻ trước của AP.security=<int>-- chế độ xác thực của AP (một trongSEC_*).pm=<int>-- chế độ quản lý nguồn điện (một trongPM_NONE,PM_PERFORMANCE,PM_POWERSAVE).monitor=<int>-- bật chế độ monitor / all-multicast.txpower=<int>-- công suất phát tính bằng dBm.trace=<int>-- bitmask theo dõi nội bộ của trình điều khiển.hostname=<str>-- tên máy chủ DHCP/mDNS. Không dùng nữa; sử dụngnetwork.hostname()thay thế.
Trình điều khiển NINA -- các tham số có thể lấy:
"ssid"-- SSID hiện tại (chuỗi)."security"-- chế độ xác thực của AP."mac"/"bssid"-- địa chỉ MAC của giao diện (6bytes)."fw_version"-- một 3-tuple(major, minor, patch).
Trình điều khiển NINA -- các tham số có thể đặt: lệnh gọi chuyển tiếp đến
connect()và chấp nhận các đối số từ khóa tương tự (ssid,key,security,channel). Chỉ hợp lệ trên giao diện AP.
- deinit() None¶
Khởi động lại nguồn WiFi MCU và giải phóng mọi tài nguyên mà trình điều khiển đang giữ (bộ đệm firmware, lwIP netif, bus SPI/SDIO). Sau khi gọi hàm này, đối tượng
WLANphải được xây dựng lại trước khi sử dụng. Sử dụng hàm này thay vìactive()(False)khi bạn cần đặt lại hoàn toàn (ví dụ: trước khi flash lại firmware của radio hoặc để khôi phục từ trạng thái trình điều khiển bị treo). Chỉ dành cho CYW43.
- send_ethernet(buf: bytes) None¶
Đưa frame Ethernet thô
buftrực tiếp vào đường truyền của trình điều khiển, bỏ qua ngăn xếp IP. Dành cho các consumer chỉ dùng L2 -- bridging, các giao thức EtherType tùy chỉnh, và tương tự. Frame phải bao gồm MAC đích/nguồn và EtherType (không có FCS -- phần cứng thêm vào). Chỉ dành cho CYW43.
- ioctl(cmd: int, buf: bytearray) None¶
Phát lệnh điều khiển đặc thù cho trình điều khiển.
cmdlà mã ioctl số được xác định bởi firmware radio nền tảng vàbuflà bộ đệm có thể thay đổi được sử dụng cho cả payload lệnh và phản hồi. Tập hợp các giá trịcmdhợp lệ là đặc thù của trình điều khiển và không thể chuyển đổi giữa CYW43 và NINA. Chủ yếu được sử dụng bởi các tập lệnh kiểm tra cấp thấp và mã khởi động chip.
Các Hằng số¶
- SEC_WPA_WPA2: int¶
Giá trị bảo mật cho WPA / WPA2 với khóa chia sẻ trước. Mặc định khi cung cấp khóa cho
connect(). Có sẵn trên cả hai trình điều khiển.
- SEC_WEP: int¶
Giá trị bảo mật cho WEP (Wired Equivalent Privacy). Được cung cấp để tương thích với các điểm truy cập cũ -- WEP đã bị phá vỡ về mặt mật mã và không nên được sử dụng trong các triển khai mới. Chỉ dành cho NINA.
- WPA_PSK: int¶
Bí danh tương thích ngược cho
SEC_WPA_WPA2. Mã mới nên sử dụngSEC_WPA_WPA2. Chỉ dành cho NINA.