network --- 網路設定¶
本模組提供網路驅動程式與路由設定。要使用本模組,必須安裝具備網路功能的 MicroPython 變體/組建。本模組內提供針對特定硬體的網路驅動程式,用於設定硬體網路介面。經過設定的介面所提供的網路服務,接著便可透過 socket 模組使用。
例如:
import network
import socket
import time
nic = network.WLAN(network.WLAN.IF_STA)
nic.active(True)
nic.connect("your-ssid", "your-key")
print("Waiting for connection...")
while not nic.isconnected():
time.sleep(1)
print(nic.ipconfig("addr4"))
# Open a TCP socket as usual.
addr = socket.getaddrinfo("micropython.org", 80)[0][-1]
s = socket.socket()
s.connect(addr)
s.send(b"GET / HTTP/1.1\r\nHost: micropython.org\r\n\r\n")
data = s.recv(1000)
s.close()
請視相機情況,將 WLAN 替換為 WINC(舊式 WiFi 擴充板)或 LAN(內建乙太網路)。建構 -> 啟用 -> 連線 -> 使用 socket 這套高階模式在這三種情況下都相同。
通用網路介面卡介面¶
本節描述一個(隱含的)抽象基底類別,供 MicroPython 移植版 為不同硬體所實作的所有網路介面類別共用。這表示 MicroPython 實際上並未提供 AbstractNIC 類別,但後續各節所述的任何實際 NIC 類別,都會實作此處所描述的方法。
- class network.AbstractNIC(id: int | None = None, *args: Any, **kwargs: Any) None¶
實例化一個網路介面物件。參數視網路介面而定。若有多個相同類型的介面,第一個參數應為
id。- active(is_active: bool | None = None, /) bool¶
啟動或關閉網路介面。
若不帶引數,則回傳目前的狀態 -- 介面作用中時為
True,否則為False。傳入
True以啟用介面:對底層網路控制器供電 / 重設、在適用時載入韌體,並在此介面上啟動 IP 堆疊。後續與網路通訊的呼叫(connect()、scan()、ipconfig()、...)都需要介面處於作用中狀態。傳入
False以停用介面:拆除 IP 堆疊並釋放驅動程式資源。在無線介面上,這也會與任何目前已加入的網路解除關聯。在非作用中的介面上呼叫其他方法的行為未定義。
- connect(service_id: str | None = None, key: str | None = None, *, bssid: bytes | None = None, **kwargs: Any) None¶
將介面連線至網路。此方法為選用,且僅適用於並非「永遠連線」的介面。若未提供任何參數,則連線至預設(或唯一)的服務。若提供單一參數,則該參數為要連線的服務的主要識別碼。它可能會伴隨存取該服務所需的金鑰(密碼)。視網路媒介類型及/或特定裝置而定,還可能有進一步的任意僅限關鍵字參數。參數可用於:a) 指定其他服務識別碼類型;b) 提供額外的連線參數。對於各種媒介類型,有不同組的預先定義/建議參數,其中包括:
WiFi:bssid 關鍵字,用於連線至特定的 BSSID(MAC 位址)
- scan(**kwargs: Any) List[Tuple]¶
掃描可用的網路服務/連線。回傳一個包含所探索服務參數的元組清單。對於各種網路媒介,有不同變體的預先定義/建議元組格式,其中包括:
WiFi:(ssid, bssid, channel, RSSI, security, hidden)。可能還有特定裝置專屬的其他欄位。
此函式可接受額外的關鍵字引數,以篩選掃描結果(例如掃描特定服務、特定頻道、特定集合的服務等),並影響掃描持續時間與其他參數。在可能的情況下,參數名稱應與 connect() 中的名稱相符。
- status(param: str | None = None) Any¶
查詢介面的動態狀態資訊。當不帶引數呼叫時,回傳值描述網路連結狀態。否則 param 應為一個字串,用於指定要擷取的特定狀態參數。
回傳的類型與值視網路媒介/技術而定。可能支援的部分參數包括:
WiFi STA:使用
'rssi'來擷取 AP 訊號的 RSSIWiFi AP:使用
'stations'來擷取所有已連線至 AP 的 STA 清單。該清單包含 (MAC, RSSI) 形式的元組。
- ipconfig(param: str) Any¶
- ipconfig(**kwargs: Any) None
取得或設定介面特定的 IP 設定介面參數。支援的參數如下(特定參數的可用性視移植版與特定網路介面而定):
dhcp4(True/False)透過 DHCP 取得 IPv4 位址、閘道與 dns 伺服器。此方法不會封鎖並等待取得位址。要檢查是否已取得位址,請使用唯讀屬性has_dhcp4。gw4取得/設定 IPv4 預設閘道。dhcp6(True/False)透過無狀態 DHCPv6 取得 DNS 伺服器。目前尚未實作透過 DHCPv6 取得 IP 位址。autoconf6(True/False)透過路由器通告中所共用的網路前綴取得無狀態 IPv6 位址。要檢查是否已取得無狀態位址,請使用唯讀屬性has_autoconf6。addr4(例如192.168.0.4/24)取得目前的 IPv4 位址與網路遮罩,格式為(ip, subnet)元組,不論此位址是如何取得的。此方法可用於設定靜態 IPv4 位址,可採(ip, subnet)元組或 CIDR 表示法。addr6(例如fe80::1234:5678)取得目前 IPv6 位址的清單,格式為(ip, state, preferred_lifetime, valid_lifetime)元組。這包括 link-local、slaac 與靜態位址。preferred_lifetime與valid_lifetime代表每個 IPv6 位址剩餘的有效與偏好生命週期,以秒為單位。state表示位址的目前狀態:0x08-0x0f表示位址為暫定(tentative),計算已送出的探測次數。0x10位址已棄用(但仍有效)0x30位址為偏好(且有效)0x40位址重複,無法使用。
此方法可用於設定靜態 IPv6 位址,方法是將此參數設為該位址,例如
fe80::1234:5678。
- ifconfig(config: Tuple[str, str, str, str] | None = None) Tuple[str, str, str, str] | None¶
備註
此函式已棄用,請改用
ipconfig()。取得/設定 IP 層級的網路介面參數:IP 位址、子網路遮罩、閘道與 DNS 伺服器。當不帶引數呼叫時,此方法會回傳一個包含上述資訊的 4 元組。要設定上述值,請傳入一個包含所需資訊的 4 元組。例如:
nic.ifconfig(('192.168.0.4', '255.255.255.0', '192.168.0.1', '8.8.8.8'))
- config(param: str) Any¶
- config(**kwargs: Any) None
取得或設定一般網路介面參數。這些方法可用於處理標準 IP 設定(由
ipconfig()處理)以外的額外參數,包括網路特定與硬體特定的參數。設定參數時應使用關鍵字引數語法,且可一次設定多個參數。查詢時,參數名稱應以字串形式加上引號,且一次只能查詢一個參數:# Set WiFi access point name (formally known as SSID) and WiFi channel ap.config(ssid='My AP', channel=11) # Query params one by one print(ap.config('ssid')) print(ap.config('channel'))
特定網路類別實作¶
下列具體類別實作了 AbstractNIC 介面,並提供控制各種網路介面的方式。
網路函式¶
下列為 network 模組中可用的函式。
- network.country(code: str | None = None) str | None¶
取得或設定用於無線電法規遵循的兩字母 ISO 3166-1 Alpha-2 國家代碼。
若提供了 code 參數,則國家將設為此值。若呼叫此函式時不帶參數,則回傳目前的國家。
預設代碼
"XX"代表「全球」區域。
- network.hostname(name: str | None = None) str | None¶
取得或設定用於在網路上識別此裝置的主機名稱。它將被所有介面使用。
- 此主機名稱用於:
在用戶端請求中傳送給 DHCP 伺服器。(若使用 DHCP)
透過 mDNS 廣播。(若已啟用)
若提供了 name 參數,則主機名稱將設為此值。若呼叫此函式時不帶參數,則回傳目前的主機名稱。
主機名稱的變更通常僅在連線期間套用。對於 DHCP,這是因為主機名稱是 DHCP 用戶端請求的一部分,而大多數移植版中的 mDNS 實作只在連線期間初始化主機名稱一次。基於此原因,您必須在啟用/連線網路介面之前設定主機名稱。
主機名稱的長度限制為 32 個字元。MicroPython 移植版 可能會基於記憶體因素設定較低的限制。若給定的名稱無法符合,則會引發
ValueError。預設主機名稱通常為板子的名稱。