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:
5:ce3f1dd90068
Child:
7:6cfe0638b957
--- a/WebSocketServer.cpp	Fri Mar 13 20:27:06 2015 +0900
+++ b/WebSocketServer.cpp	Fri Mar 13 11:55:55 2015 +0000
@@ -1,5 +1,5 @@
 #include "WebSocketServer.h"
-// #include "sha1.h"
+#include "sha1.h"
 
 WebSocketServer::WebSocketServer() {
 }
@@ -40,7 +40,7 @@
 		while (connection.is_connected()) {
 			ret = connection.receive(buf, sizeof(buf) - 1);
 			if (ret == 0) {
-				printf("No data to receive\r\n");
+//				printf("No data to receive\r\n");
 				continue;
 			}
 			if (ret < 0) {
@@ -87,9 +87,9 @@
 			}
 			printf("%s\r\n", line);
 			if (line == &buf[0]) {
-				char* method = strtok(buf, ' ');
-				char* path = strtok(NULL, ' ');
-				char* version = strtok(NULL, ' ');
+				char* method = strtok(buf, " ");
+				char* path = strtok(NULL, " ");
+				char* version = strtok(NULL, " ");
 				printf("[%s] [%s] [%s]\r\n", method, path, version);
 
 			} else if (strncmp(line, UPGRADE_WEBSOCKET, strlen(UPGRADE_WEBSOCKET)) == 0) {
@@ -100,7 +100,7 @@
 				isSecWebSocketKeyFound = true;
 				char* ptr = line + strlen(SEC_WEBSOCKET_KEY);
 				while (*ptr == ' ') ++ptr;
-				strcpy(ptr, key);
+				strcpy(key, ptr);
 				printf("key=%s\r\n", key);
 			}
 			i += 2;
@@ -180,7 +180,7 @@
 
     unsigned char hash[20];
 	char encoded[30];
-    sha1((unsigned char*)buf, strlen(buf), hash);
+    sha1(buf, strlen(buf), (char*)hash);
     base64_encode(hash, 20, encoded, sizeof(encoded));
 
     char resp[] = "HTTP/1.1 101 Switching Protocols\r\n" \