Simple WebSocket server to control a tank.

Dependencies:   SNICInterface_mod WebSocketServer mbed-rtos mbed PowerControl C12832

au Firefox OS WoTハッカソン on ホワイトデーで使用した、タンクを動かすプログラムです。 ゲームパッドでタンクを操縦します。

ゲームパッドは PC に接続し、ブラウザ上の Web アプリから Gamepad API で入力を取得します。 取得した入力データは WebSocket で mbed 上の WebSocket サーバに送信します。

WebSocket サーバのコードはライブラリ化したので、他のプログラムでもインポートして使えます。

使用した機材

  • LPC1768
  • Murata TypeYD
  • LPC1768 用アプリケーションボード
  • TAMIYA トラック&ホイールセット
  • TAMIYA ダブルキヤボックス(左右独立4速タイプ)
  • TAMIYA ユニバーサルプレート
  • TOSHIBA TA7291P x 2
  • その他、モバイルバッテリー、電池ボックス等

左右のモータードライバにそれぞれ LPC1768 の p12, p13 と p14, p15 のピンを割り当てていますが、必要に応じてコードを変更してください。

コントローラー側(Webアプリ)

https://github.com/chikoski/wotxwot-control

Firefox ブラウザで動作確認しています(他のブラウザでは動かないかも)。 ゲームパッドの左右のスティックの前後の操作が左右それぞれのモータの前転・後転に対応しています。

動いているところの動画

https://www.facebook.com/video.php?v=456620974491805

ハッカソンでは ARM 賞をいただきました!

(参考) au Firefox OS WoTハッカソン on ホワイトデー

http://au-fx.kddi.com/event/20150314/wot_hackathon0314.html

Revision:
6:79ecd4e53456
Parent:
4:4a46982a4cf2
Child:
8:6635ca3b5a5c
--- a/main.cpp	Fri Mar 13 20:27:06 2015 +0900
+++ b/main.cpp	Fri Mar 13 11:55:55 2015 +0000
@@ -10,6 +10,8 @@
 #define SEC_TYPE    e_SEC_WPA2_AES
 #define SEC_KEY     "wotpasswd"
 
+static bool connectWiFi();
+
 // tx, rx, cts, rts, reset, alarm=NC, baud=115200
 C_SNIC_WifiInterface wifi(p9, p10, NC, NC, p30);
 
@@ -17,33 +19,9 @@
 #if defined(TARGET_LPC1768)
     PHY_PowerDown();
 #endif
-    int ret = 0;
-
-    printf("connecting wifi\r\n");
-
-    ret = wifi.init();
-    if (ret != 0) {
-        printf("ERROR: Failed to init wifi %d\r\n", ret);
-        return 1;
+    while (!connectWiFi()) {
+        wait(3);
     }
-    wait(0.5);
-    
-    ret = wifi.disconnect();
-    if (ret != 0) {
-        printf("ERROR: Failed to disconnect wifi %d\r\n", ret);
-        return 1;
-    }
-    wait(0.3);
-
-    wifi.connect(SSID, strlen(SSID), SEC_TYPE, SEC_KEY, strlen(SEC_KEY));
-    if (ret != 0) {
-        printf("ERROR: Failed to connect wifi %d\r\n", ret);
-        return 1;
-    }
-    wait(0.5);
-
-    wifi.setIPConfig(true);
-    wait(0.5);
 
     printf("WiFi connected: %s\r\n", wifi.getIPAddress());
 
@@ -57,3 +35,33 @@
     server.run();
 }
 
+bool connectWiFi() {
+    printf("connecting wifi\r\n");
+
+    int ret = wifi.init();
+    if (ret != 0) {
+        printf("ERROR: Failed to init wifi %d\r\n", ret);
+        return false;
+    }
+    wait(0.5);
+    
+    ret = wifi.disconnect();
+    if (ret != 0) {
+        printf("ERROR: Failed to disconnect wifi %d\r\n", ret);
+        return false;
+    }
+    wait(0.3);
+
+    wifi.connect(SSID, strlen(SSID), SEC_TYPE, SEC_KEY, strlen(SEC_KEY));
+    if (ret != 0) {
+        printf("ERROR: Failed to connect wifi %d\r\n", ret);
+        return false;
+    }
+    wait(0.5);
+
+    wifi.setIPConfig(true);
+    wait(0.5);
+    
+    return true;
+}
+