iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0
自我挑戰組

WiFiBoy Python 玩學機介紹系列 第 21

21. 無線網路連線

  • 分享至 

  • xImage
  •  

無線網路簡介

Wi-Fi 又稱為「無線網路」,是一個基於 IEEE 802.11 標準無線區域網路技術。在1997年 Wi-Fi 聯盟公布相關規範,並致力於讓這項技術變得更通用、廠商設備能彼此相容,增進使用者使用無線技術的便利性。

https://ithelp.ithome.com.tw/upload/images/20230922/20105707ddPxpRksJo.jpg

https://ithelp.ithome.com.tw/upload/images/20230922/2010570735wZv4JmTM.jpg

無線網路的世代可分為:

世代名稱 名稱 發布年份 最大傳輸速率(Mbit/s) 頻率(GHz)
Wi-Fi 7 802.11be 2024 1376~46120 2.4/5/6
Wi-Fi 6E 802.11ax 2020 574~9608 6
Wi-Fi 6 802.11ax 2019 574~9608 2.4/5
Wi-Fi 5 802.11ac 2014 433~6933 5
Wi-Fi 4 802.11n 2008 72~600 2.4/5
Wi-Fi 3 802.11g 2003 6~54 2.4
Wi-Fi 2 802.11a 1999 6~54 5
Wi-Fi 1 802.11b 1999 1~11 2.4
Wi-Fi 0 802.11 1997 1~2 2.4

無線網路成員與組成結構

  • 站點(Station),網路最基本的組成元件。
  • 基本服務單元(Basic Service Set, BSS),最簡單的服務單元,由兩個站點組成,每個站點可以動態連結到基本服務單元中。
  • 分配系統(Distribution System),連結不同的基本服務單元,例如連結不同的無線頻段。
  • 存取點(Access Point, AP)。存取點有普通站點功能,又有連結到分配系統的能力。
  • 關口(Portal),用來將無線網路與有線區域網路連接起來的功能。

運作原理

Wi-Fi 設定最少需要有一個 AP(存取點),和一個或一個以上的客戶端(Client)使用者。無線AP 會以每100ms 將 SSID(Service Set Identifier) 經由訊號台封包廣播一次。Wi-Fi規定其最低傳輸速率為1 Mbit/s,以確保所有的Wi-Fi client端都能收到這個SSID廣播封包,client可以藉此決定是否要和這一個SSID的AP連線。使用者可以決定要連到哪一個 SSID。

玩學機支援的無線網路模式

玩學機內建的通訊晶片是 ESP32 ,這個微控制器整合了 Wi-Fi、低功耗藍牙與傳統藍牙功能。頻段為 2.4Ghz,支援協議: 802.11 b/g/n,使用 802.11n 最高速度為 150Mbps。

https://ithelp.ithome.com.tw/upload/images/20230922/20105707XbBMJRXX1n.png

根據ESP32技術手冊,我們可以得知有兩種無線網路模式:

  1. STATION : 工作站模式(STA),將ESP32 模組連接到 WiFi AP,如同我們的桌機連到路由器一樣,透過路由器連接到網際網路。ESP32模組可充當用戶端也可以成為伺服器端。
  2. AP: 存取點,這個模式,ESP32模組類似Wi-Fi 路由器,其他的設備也能連接它,透過ESP32模組連接至網際網路。不過因為此模式計算量大,ESP32 會發燙,網路延遲與整體頻寬都會比直接連接到實體路由設備要差。

如何連到家中的無線基地台

首先您要確定家中有無線基地台,抄下基地台發放的 SSID 名稱與Wi-Fi連線密碼。如果您還能查到此基地台的內網IP位址,也請記錄下來,未來網路如果有異常需要測試,就能按照各個節點的IP,進行通訊連線測試。範例資料如下:

  1. IP: 192.168.1.1
  2. SSID: ESP32AP
  3. Wi-Fi 連線密碼: abc@1234

您可以使用底下的指令,檢查無線網路卡並確認其狀態。

import network
sta_if = network.WLAN(network.STA_IF)
ap_if = network.WLAN(network.AP_IF)

sta_if.active()		# 如果是 False 代表沒有啟動 STATION 模式
ap_if.active()              # 如果是 True 代表啟動 AP 模式

還可以用 ifconfig() 函數來檢查網路的設定值。

ap_if.ifconfig()
('192.168.1.1', '255.255.255.0', '192.168.1.1', '8.8.8.8')
# 傳回的值分別為 IP 位址、子網路遮罩、匝道器與 DNS伺服器 IP


此時我們可以自行定義一個函數來連接到無線基地台。

WiFi_SSID = 'ESP32AP'
WiFi_PASSWORD = abc@1234
def WiFi_connect(WiFi_SSID, WiFi_PASSWORD):
    import network
    sta_if = network.WLAN(network.STA_IF)
    if not sta_if.isconnected():
        sta_if.active(True)
        sta_if.connect(WiFi_SSID, WiFi_PASSWORD) # should be modified
        while not sta_if.isconnected(): pass	
	 print('network config:', sta_if.ifconfig())
WiFi _connect()

好了,執行完上面的程式應該就能連到家中的無線基地台。明天,我們會帶著大家寫一個網路對時程式。感謝各位的支持,明天見。


上一篇
20. 經典遊戲(五): 小蜜蜂
下一篇
22. NTP時間伺服器對時
系列文
WiFiBoy Python 玩學機介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言