[D1 mini] Ch12 - APP影像辨識控制馬達 - 好康爆報

[D1 mini] Ch12 - APP影像辨識控制馬達

閱讀數: 6

字體大小設置: 16px

步驟 1:進入「appinventor」。

投影片1.JPG

官網連結 = [ http://appinventor.mit.edu/ ]


步驟 2:點「Create Apps!」> 「註冊/登入」。

投影片2.JPG


步驟 3:就可以進來appinventor專案頁。

投影片3.JPG


步驟 4:點「專案」>「匯入專案(.aia)」>「選擇檔案」。

投影片4.JPG


步驟 5:選擇「D1_mini_Lab14.aia」並確定。

投影片5.JPG


步驟 6: 進入 APP 編輯頁。

投影片6.JPG


步驟 7: 在素材處 >「點擊」>「刪除...」>「確定」。

投影片7.JPG


步驟 8: 在素材處 >「上傳文件...」>「選擇檔案」>「上傳剛訓練好模型」>「確定」。

投影片8.JPG


步驟 9: 在「PersonalImageClassifier1(眼鏡圖示)」> 改為「剛上傳的模組」。

投影片9.JPG


步驟 10: 點「打包Apk」>「Android App(.apk)」。

投影片10.JPG


步驟 11: 這是 APP 的編輯程式碼。

投影片11.JPG

注意:appinventor僅支援Android安卓作業系統


步驟 12: 開啟「Thonny」軟體。

投影片12.JPG


步驟 13: 選擇「工具」>「選項」>「ESP8266」>「序列阜」。

投影片13.JPG


步驟 14: 開啟「myWemotor_APP_IP」。

投影片14.JPG


步驟 15: 點「停止」>「執行」。

投影片15.JPG


步驟 16: 點「檔案」>「儲存副本」 。

投影片16.JPG


步驟 17: 點「MicroPython設備」> 輸入「main.py」>「確定」。

投影片17.JPG


步驟 18: 在程式碼中 第35行 改為自己的網路。

投影片18.JPG


步驟 19: 輕按「板子上重啟鈕」>「顯示網路位址」。

投影片19.JPG


步驟 20: 點「使用應用程式時 / 允許相機」> 等待模組 >「開始辨識」。

投影片20.JPG


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 = ''

[成果影片]

上一篇: 貓奴。貓咪關節健康從日常開始!貓咪關節營養品推薦奧沛【OurPet貓用關沛錠】,跟著飼料丟一顆就好。 下一篇: 為天地寫日記(關渡靜思堂彩虹)(2025.08.01)

網站公告:

用戶註冊時,上傳的內容需為原創或已獲授權,如若被侵權,請連繫平台管理者,且平台會盡速移除下架該內容。

聯絡我們

信箱:zonchits@gmail.com