09 WIFI遙控手柄
(2023/03/26)
昨天取得宇宙機器的遙控手柄,這手柄支援NodeMCU-32S及Pico W的開發板,由於最近大都使用microBlock IDE來撰寫程式,剛好都支援這兩塊開發板,而且最新的V1.7c版也有MPU-6050的積木,可以把這手柄的功能都完全使用上!我今天測試了這手柄的基本功能,透過藍牙模擬電腦鍵盤,透過WIFI使用MQTT協定來互動,測試內容如下,供參
一、認識宇宙機器人的【WIFI遙控手柄】
適用開發板:NodeMCU-32S及Pico W
內容物:
按鍵:6個(A、B、C、D、E、F,共用到6個數位腳位)
搖桿:1個(用了1個數位腳位及2個類比腳位)
震動馬達:1個(用了1個數位腳位)
MPU-6050(六軸感測器):使用I2C腳位
I2C插槽:可接I2C元件,如OLED屏幕
2入AAA電池盒:1個,可提供【遙控手柄】電源
外觀:如下
二、使用軟硬體
這次寫程式的軟體:
microBlock IDE
這次採用microBlock.IDE.V2.2.0_Gyro_V1.7c , 內有MPU-6050積木
開發板:
主要是NodeMCU-32S
Pico W也可以,但要等支援Pico W的microBlock IDE釋出(採用之前的版本也可以,但沒有MPU6050的積木)
三、內建元件測試
內建元件的使用腳位: nodeMCU-32S(pico W)
按鍵:
A:2(4)
B:23(14)
C:14(17)
D:5(8)
E:18(9)
F:17(7)
搖桿:
1個數位腳位:16(5)
2個類比腳位:
X:32(27)
Y:33(26)
震動馬達:19(10)
MPU-6050(六軸感測器):I2C腳位(SCL:22(13);SDA:21(12)
測試按鍵:
取得按鍵的數位值
發現:未按按鍵時,其值為1;按下按鍵後,其值為0
測試搖桿:
取得搖桿的:
按鍵數位值:同前面測試的按鍵,未按按鍵時,其值為1;按下按鍵後,其值為0
X、Y軸的類比值:
X軸:正中時:1875-1878;向右到底:0、向左到底:4095
Y軸:正中時:1937-1941;向下到底:0、向上到底:4095
測試震動馬達:
按A鍵啟動震動馬達、按B鍵停止震動馬達:
測試6軸感測器(MPU-6050):
加速度計:測試X、Y、Z各軸加速度值的變化
陀螺儀:偵測旋轉時【瞬間】的角度變化
16位的ADC,每軸輸出的數據是1^16,也就是-32768~32768
測試內容:
取得3軸(X、Y、Z)的加速度值
取得3軸(X、Y、Z)的角加速度值
取得晶片上的溫度值(也可勉強當環境溫度)
發現:
加速度計:測試X、Y、Z各軸加速度值的變化
放平時:X約-100~-500間(可視為0)、Y約2200~2300間(可視為0)、Z約16700~17000間(可視為16384)
向左翻轉垂直時:X約(可視為16384)、Y約(可視為0)、Z約(可視為0)
向右翻轉垂直時:X約(可視為-16384)、Y約(可視為0)、Z約(可視為0)
向前翻轉垂直時:X約(可視為0)、Y約(可視為-16384)、Z約(可視為0)
向後翻轉垂直時:X約(可視為0)、Y約(可視為-16384)、Z約(可視為0)
水平左右(X軸)移動時,X值變化較大;同理水平前後(Y軸)移動時,Y值變化較大;上下(Y軸)移動時,Y值變化較大
陀螺儀:偵測旋轉時【瞬間】的角度變化
俯仰(pitch):繞Y軸前後旋轉
翻滾(Roll):繞X軸旋轉
偏擺(yaw):繞Z軸左右旋轉
不會使用這些數據
測試儀表板
可控制儀表板飛機的前後俯仰、左右翻轉
四、將手柄模擬成電腦鍵盤的按鍵
使用藍牙鍵盤HID的功能
將C、D、E、F鍵模擬成電腦鍵盤上的方向鍵
將搖桿模擬成電腦鍵盤上的方向鍵
五、利用MQTT的功能來控制其他設備
透過WIFI連線及MQTT協定來與其他設備(如小車)互動
MQTT的架構:
MQTT由三種角色構成,分別是Publisher(發布者)、 Broker(代理人)和Subscriber(訂閱者)
相當於youtube的訂閱機制(youtuber為【發布者】、youtube網站為【Broker】、你我為【訂閱者】)
利用手柄上的方向鍵或搖桿來控制小車的運動
利用mqttgo.io當MQTT Broker
payload如下:
手柄當發送端:前進(f)、後退(b)、原地左轉(l)、原地右轉(r)及停止(s)
手柄當接收端:啟動震動馬達(m)、停止震動馬達(n)
利用mqttgo.io網頁來與手柄互動
當發送端來傳送m、n訊息來啟動或關閉手柄上的震動馬達
當訂閱端,看是否有收到f、b、l、r、s等訊息