[實驗目的]
D1 mini 本身具備連線上網的功能,只要手機和 D1 mini 都連接到同一個 WiFi 網路,即可實現兩者之間的資料互傳:
[指令說明]
若要使用網路功能,首先需要匯入 network 模組,然後使用其中的 WLAN 類別來建立控制無線網路的物件。
import network |
sta = network.WLAN(network.STA_IF) |
network.STA_IF = 使用工作站(station)介面,可以連接到現有的 Wi-Fi 無線網路基地台,以便連接到網際網路。
network.AP_IF = 熱點(access point)介面可以使 D1 mini 成為無線基地台,以建立區域網路。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
由於後續的章節需要使用網路資源,因此我們使用工作站介面(network.STA_IF)。在取得無線網路物件後,需要先啟用網路介面:
sta.active(True) |
參數 True 表示啟用網路介面;如果傳入 False,則會停用該介面。接下來,我們可以嘗試連接到無線網路:
sta.connect('網路名稱', '網路密碼')
|
注意 = 網路的大小寫務必正確 !
為了避免由於網路名稱或密碼錯誤而無法連接到網路,導致後續程式執行出錯,通常會在呼叫函式來確認是否已成功連接到網路:
while not sta.isconnected(): pass |
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
若要使用 ESP8266WebServer 模組,必須先導入該模組,然後再啟用網站功能:
import ESP8266WebServer |
ESP8266WebServer.begin(80) |
步驟 1:開啟「Thonny」軟體。
步驟 2:選擇板子「工具」>「選項」。
步驟 3:選擇「ESP8266」>「序列阜」。
步驟 4:點「確認」> 查看訊息是否換成ESP8266。
注意:如未安裝ESP8266,請參考上篇文章 步驟4
上篇連結 = [ https://ccplus2561.pixnet.net/blog/post/188284249 ]
步驟 5:開啟「myWemotor_IP」。
步驟 6:點「停止」>「執行」。
步驟 7:再「模組」> 「ESP8266WebServer.py」>「右鍵」>「上傳到/」 。
步驟 8:在下方就可以看到「ESP8266WebServer.py」。
步驟 9:點「停止」>「執行」。
步驟 10:點「檔案」>「儲存副本」。
步驟 11:點「MicroPython設備」> 輸入「main.py」>「確定」。
步驟 12:在程式中 第49行 改為自己得網路。
步驟 13:輕按 「板子上重啟鈕」 > 顯示「伺服器位址」。
步驟 14:在相同網路下 搜尋「http://伺服器位址/Race?output=狀態」。
import network #匯入無限網路模組
import ESP8266WebServer #匯入網站模組
import wemotor #匯入馬達模組
from machine import I2C,Pin #匯入machine模組 並 命名為 I2C與Pin
motor = wemotor.Motor() #motor為馬達物件
def left(): # 副程式,左
motor.move(0,50)
def right(): # 副程式,右
motor.move(50,0)
def forward(): # 副程式,前
motor.move(40,40)
def backward(): # 副程式,後
motor.move(-40,-40)
def stop(): # 副程式,停
motor.move(0,0)
def handleCmd(socket, args): #網址輸入指令
if 'output' in args: #檢查output參數
if args['output'] == 'L': #output為 L
print("左轉")
left()
elif args['output'] == 'R': #output為 R
print("右轉")
right()
elif args['output'] == 'F': #output為 F
print("前進")
forward()
elif args['output'] == 'B': #output為 B
print("後退")
backward()
elif args['output'] == 'S': #output為 S
print("停止")
stop()
ESP8266WebServer.ok(socket, "200", "OK") #將OK傳給瀏覽器
else:
ESP8266WebServer.err(socket, "400", "ERR") #將ERR傳給瀏覽器
LED = Pin(2,Pin.OUT,value=1) #LED設為D2輸出模式 數值1(暗)
sta = network.WLAN(network.STA_IF) #已預設WiFi 連線網際網路
sta.active(True) # 啟用無線網路
sta.connect('網路名稱', '網路密碼') #連結無線網路(基地台)
while not sta.isconnected(): # 等待無線網路連上
pass
LED.value(0) # LED亮表示連上網路
ESP8266WebServer.begin(80) #啟用網站
ESP8266WebServer.onPath("/Race",handleCmd) #指定處理指令的函式 Race
print("伺服器位址: " + sta.ifconfig()[0]) #顯示我的IP碼
ap = network.WLAN(network.AP_IF) #設ap為 已熱點方式 開啟無線網路基地台(區域)
ap.active(True)
ap.config(essid='LAB06-'+str(sta.ifconfig()[0])) #熱點名稱()
while True: #無窮迴圈
ESP8266WebServer.handleClient() #檢查是否有新指令
motor.avoidTimeout() #避免time.out
|
[成果影片]
[附件]
(左轉) http://192.168.47.228/Race?output=L
(右轉) http://192.168.47.228/Race?output=R
(前進) http://192.168.47.228/Race?output=F














請先 登入 以發表留言。