Websocketのソースコード(mugbot_server)の解説です。
このソースコードはRubyで書かれており、拡張子は「rb」になっています。
HTML(mugbot_web)から送られてきた内容をArduino(mugbot_arduino)がわかるコマンドに変換して送信しています。HTMLとArduinoの仲介役をしています。
1 2 |
#! /usr/bin/ruby # -*- coding: utf-8 -*- |
一行目で「Ruby」の場所を定義し、二行目でコーディングが「UTF-8」であることを定義してしています。二行目のことをマジックコメントといい、Ruby2.0では不必要になりましたが、Ruby1.9が現在も多く使われているため、マジックコメントを利用しています。
1 2 3 4 5 |
#Mugbot Project Tokyo City University Koike Lab. 2014 #Mugbot System ver. 1.0.0. require 'em-websocket' require 'serialport' |
マグボットプロジェクトの内容とソースコードのバージョンが「1.0.0」であることを記しています。
「require」というのは「’ ’」で囲まれた名前のライブラリを探し出し、読み込んでくれます。
「require ‘em-websoket’」はEventMachineをベースにしたRuby上で動作するWebSocketサーバである「em-websoket」を読み込んでいます。
「require ‘serialport’」はシリアル通信を行うためのライブラリ「serialport」を読み込んでいます。
1 2 3 4 |
#シリアルポート設定 port = "/dev/ttyACM0" #/dev/ttyACM0はRaspberry Piから見たArduinoのポート sp = SerialPort.new(port, 9600, 8, 1, SerialPort::NONE) |
「port」で、シリアル通信をするポートを設定しています。
「/dev/ttyACM0」というのはRaspberry PiからみたArduinoのポート番号です。
「SerialPort.new」でシリアル通信を開始します。
1 2 |
#WebSocket設定 EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 51234) do |ws| |
「WebSocket.start」でホスト名(0.0.0.0)とポート番号(51234)を設定し、 「ws」でWebSocketを使えるようにします。
1 2 3 4 5 6 7 8 9 |
ws.onmessage { |msg| if msg[0,2]=="@x" msg.slice!(0,2) puts msg sp.write msg+"x" sleep 0.01 #目の上下のアクション #最初の2文字が@xであればその2文字を取り除いてxの値をArduinoに送信 |
WebSocketで「msg」というデータを受信し、if文の中身を実行します。
「if msg[0,2]==”@x”」というのは「msg」の1番目から2文字分が「@x」だったら以下の内容を実行するということです。
「msg.slice!(0,2)」というのは1番目から2文字分を削除するということです。
「puts」というのは文字列に変換するということです。
(例 @x50という値が送られてきたら、@xを取り除き、50にして、文字列に変換した50にxをつけて50xとしてシリアル通信で書き込む(送信する)ということです。)
「sleep」というのはその時間の分だけ待つということです。
1 2 3 4 5 6 7 8 |
elsif msg[0,2]=="@y" msg.slice!(0,2) puts msg sp.write msg+"y" sleep 0.01 #首の左右のアクション #最初の2文字が@yであればその2文字を取り除いてyの値をArduinoに送信 |
msgの1番目から2文字分が「@y」だったら、xと同じ内容をyでも行っています。
1 2 3 4 5 6 7 8 |
elsif msg[0,2]=="@z" msg.slice!(0,2) puts msg sp.write msg+"z" sleep 0.01 #目の明るさ変調のアクション #最初の2文字が@zであればその2文字を取り除いてzの値をArduinoに送信 |
msgの1番目から2文字分が「@z」だったら、xと同じ内容をzでも行っています。
1 2 3 4 5 |
elsif msg[0,1]=="@" sp.putc msg[1,1] sleep 0.01 #最初の1文字が@であれば@を取り除いてアクションを指示するアルファベット1文字をArduinoに送信 |
msgの1文字目が「@」だったら、msgの1文字目を飛ばして、2文字目から1文字をAruduinoに送信しています。
1 2 3 4 5 6 7 8 9 |
else sp.putc "t" system(`jsay #{msg}`) sp.putc "n" # tをArduinoに送って口の点滅開始、発話させ、nを送って点滅終了 end } end |
上記以外の場合は「t」というコマンドを送り、「jsay」という音声合成システムを使って「msg」の内容を発話させ、最後に「n」というコマンドを送ります。
Websocketのソースコード(mugbot_server)の解説を終了します。