注意
まだ試作段階で、接続が切れることも多いので、参考程度にご覧ください。ブロックはArduinoのコードとほとんど同じです。
作り方・コード
ArduinoでStringを扱うのはちょっと重たいのですが、解読しやすいので、今回はStringを使っています。Arduinoのコードはこちらです。
Pythonのコードはこちらです。ThreadingでArduinoと通信し、Queueを使って順番に実行しています。無理やりつないだ感じが否めないです。練習が必要…
Scratchのコード(index.js)はこちらです。scratch-guiの方も変更する必要があります。こちらを参考にしてください。
仕組み
少しややこしくなるのですが、Pythonを通訳として、ArduinoとScratchを繋げています。クライアントのJavaScriptからは、シリアル通信にアクセスできないため、このような構造になっています。
シリアル WebSocket
非常にややこしいことに、Python、Scratchは、それぞれデータを格納するバッファを持っています。通信には時間がかかるのですが、Scratchは終了まで待ってくれません。もっと効率的な方法もあると思います。あくまで、今回のプログラムは、一つの例としてとらえてください。
command,index,value
と言う文字列を送るようになっていて、commandで指定した、関数に、index、valueが渡されて、Arduinoで実行されます。byteで送るのは断念しました。
commandの表はこちらです。各自で追加することもできます。
(例)
digitalWrite(0,1);を実行したいときは、
1,0,1というコードを送信します。
i,j,value/
となっているのですが、/で区切っているので、まとめて送ってバッファに保存することができます。ここでの、i、jは、Pythonのバッファの場所を指定するものだと考えてください。
digitalRead > i=0, j=pin
analogRead > i=1, j=pin
Scratch⇒Pythonの通信は、
command/data
これだけ見て、やって下さいというのも酷だと思うのですが、あまりいい表現が見つかりませんでした。
Python⇒Scratchの通信は、