步驟 1:進入「appinventor」。
官網連結 = [ http://appinventor.mit.edu/ ]
步驟 2:點「Create Apps!」> 「註冊/登入」。
步驟 3:就可以進來appinventor專案頁。
步驟 4:點「專案」>「匯入專案(.aia)」>「選擇檔案」。
步驟 5:選擇「D1_mini_Lab14.aia」並確定。
步驟 6: 進入 APP 編輯頁。
步驟 7: 在素材處 >「點擊」>「刪除...」>「確定」。
步驟 8: 在素材處 >「上傳文件...」>「選擇檔案」>「上傳剛訓練好模型」>「確定」。
步驟 9: 在「PersonalImageClassifier1(眼鏡圖示)」> 改為「剛上傳的模組」。
步驟 10: 點「打包Apk」>「Android App(.apk)」。
步驟 11: 這是 APP 的編輯程式碼。
注意:appinventor僅支援Android安卓作業系統
步驟 12: 開啟「Thonny」軟體。
步驟 13: 選擇「工具」>「選項」>「ESP8266」>「序列阜」。
步驟 14: 開啟「myWemotor_APP_IP」。
步驟 15: 點「停止」>「執行」。
步驟 16: 點「檔案」>「儲存副本」 。
步驟 17: 點「MicroPython設備」> 輸入「main.py」>「確定」。
步驟 18: 在程式碼中 第35行 改為自己的網路。
步驟 19: 輕按「板子上重啟鈕」>「顯示網路位址」。
步驟 20: 點「使用應用程式時 / 允許相機」> 等待模組 >「開始辨識」。
import network
import ESP8266WebServer
import wemotor
from machine import I2C,Pin
import time
result = '' # 網頁接收到的值
move = False # 車子是否開始動
turn_time = 0 # 開始轉彎的時間
motor = wemotor.Motor()
# 處理 /Race 指令的函式
def handleCmd(socket, args):
global result, turn_time
# 檢查是否有 output 參數
if 'output' in args:
result = args['output']
turn_time = time.ticks_ms()
ESP8266WebServer.ok(socket, "200", "OK")
else:
ESP8266WebServer.err(socket, "400", "ERR")
LED=Pin(2,Pin.OUT,value=1)
sta = network.WLAN(network.STA_IF)
sta.active(True)
sta.connect('網路名稱', '網路密碼')
while(not sta.isconnected()):
pass
LED.value(0)
ESP8266WebServer.begin(80)
ESP8266WebServer.onPath("/Race",handleCmd)
print("伺服器位址:" + sta.ifconfig()[0])
ap = network.WLAN(network.AP_IF)
ap.active(True)
ap.config(essid='LAB15-'+str(sta.ifconfig()[0]))
while True:
ESP8266WebServer.handleClient()
motor.avoidTimeout()
# 如果接收到 A 且車子還沒開始動
if(result == 'A' and move == False):
move = True # 開始移動
if(move == True):
motor.constantSpeed('forward',0.02,0.02)
# 如果接收到 L
if result == 'L':
# 如果還沒轉 1 秒
while (time.ticks_ms() - turn_time) <= 1000:
# 定速左轉
motor.constantSpeed('left',0.02,0.02)
motor.move(0,0)
time.sleep(0.8)
# 如果接收到 R
elif result == 'R':
# 如果還沒轉 1 秒
while (time.ticks_ms() - turn_time) <= 1000:
# 定速右轉
motor.constantSpeed('right',0.02,0.02)
motor.move(0,0)
time.sleep(0.8)
# 如果接收到 B
elif result == 'B':
motor.move(0,0) # 避免前傾
time.sleep(0.8)
turn_time = time.ticks_ms()
# 如果還沒轉 1 秒
while (time.ticks_ms() - turn_time) <= 1000:
# 定速後退
motor.constantSpeed('backward',0.02,0.02)
motor.move(0,0)
time.sleep(0.8)
# 如果接收到 S
elif result == 'S':
motor.constantSpeed('stop',0,0)
move = False
result = ''
|
[成果影片]



















