Processingを介したコンピューターとAndroidデバイス間の通信

プログラムを書きたいが、深刻なプログラミング言語を恐れている人々の特定のカテゴリがあります。 これらには、子供、人文科学、職人、高齢者などが含まれます。 誰かが、スクラッチや他の単純化されたコンストラクターのような「子供向け」言語を使用しようとしています。



私の意見では、Habréであまり頻繁に言及されていないProcessingは、勉強の良い選択肢になる可能性があります。



処理は、クラスの数が限られたシンプルなJava開発環境です。 変数、ループ、オブジェクトがあります。 処理は、主にグラフィックス、アニメーション、およびコンピューティングで動作するように設計されています。 その子供たちはとても気に入っています。 すべてが明確で美しいです。

ユーザーが新しいレベルに移動して完全なJava言語の使用を開始したい場合、すべての成果が無駄になることはありません。 ほとんどのコードは処理を必要とせず、コードのより多くのセクションを自由にコピーできます。



処理は絶えず進化しており、第3バージョンに成長しています。 彼女には、ソースコードを共有する活発なコミュニティがあります。



インストールプロセスは簡単です-アーカイブをダウンロードして解凍します。 実行可能ファイルを実行し、プログラムを作成する準備が整いました。



ソースコードが書き込まれて保存されるファイルは、スケッチと呼ばれます。 本格的なウィンドウを作成するには、1行書くだけです!



ellipse(50, 50, 80, 80);
      
      





結果が得られます。







もちろん、このようなアプリケーションはほとんど役に立たず、もう少し複雑なコードを書く必要があります。 通常、標準プログラムには、setup()とdraw()の2つのメソッドがあります。 例を複雑にしましょう。



 void setup() { size(480, 120); } void draw() { if (mousePressed) { fill(0); } else { fill(255); } ellipse(mouseX, mouseY, 80, 80); }
      
      





480x120ピクセルのサイズのウィンドウを作成しました。 マウスカーソルをウィンドウ領域に置いて移動すると、白い円が重なり合って描画されます。 左または右のボタンを押したまま、ウィンドウ内でマウスを動かし続けます。 これで、円の色が黒に変わります。



Arduinsは、おなじみの構文を見た後、ここで活気づくことができます。 驚くことではありませんが、Arduino IDEは処理に基づいて構築されています(Wiringマイクロコンピューターで動作する別のプログラムのように)。 draw()関数の代わりにのみloop()を使用します 。 しかし、意味は同じままです-setup()で初期化が行われ、 draw()/ loop()でデータを更新するために無限ループが回転します



ウォームアップでした。 さらに複雑なことに移りましょう。 デフォルトでは、プログラムはJavaモードで実行されます。 ただし、Processingは他のモード、特にAndroidをサポートしています。 右上隅で、ドロップダウンリストをクリックして、[ モード追加...]コマンドを選択します。







ダイアログボックスで[ Androidモード ]オプションを選択し、[ インストール ]をクリックします







前のスクリーンショットはすでにインストールされているコンポーネントを示していますが、少し異なります。



必要なファイルをダウンロードしたら、Android用の本格的なアプリケーションを作成できます(このモードに切り替えることを忘れないでください)。



必要に応じて、完全なAndroid SDKを使用できますが、このアプローチは少し奇妙に見えます。 SDKを知っているなら、なぜAndroid Studioを使用しないのですか? したがって、組み込みの処理機能を使用します。 やってみましょう。



 void setup() { } void draw() { text(" ", 100, 100); }
      
      





電話をUSB経由でコンピューターに接続し、プログラムを実行します。 エミュレータを実行することもできます(メニュースケッチ|エミュレータで実行 )。 そこで彼はコンピューターを見ます。







可能な限り、実際の電話を使用してください。 ただし、iPhoneをお持ちの場合、USBケーブルが失われ、電話が認識されないなどの理由が1000ある場合は、エミュレータを使用してください。 エミュレータですべてのことができるわけではないことを忘れないでください。 しかし、それを楽しむことはかなり可能です。



警告
コンピューターが弱い場合、エミュレーターは非常に遅くなります。



このクエストを正常に完了した場合、コンピューターと電話で友達を作るという難しい段階に進みます。 電話の加速度計の測定値をコンピューターに転送するプログラムを作成し、コンピューターは押されたマウスボタンの状態を送信します。

この問題を解決するには、KetaiとoscP5のライブラリが必要です。



Ketaiライブラリを使用すると、センサー、カメラ、ネットワークなどを操作できます。

oscP5ライブラリを使用すると、デバイス間でメッセージを転送できます。



数回クリックするだけでインストールされます。 スケッチメニューを開く| ライブラリのインポート| ライブラリを追加...必要なライブラリが見つかりました。 クイック検索にフィルターを使用します。







目的のライブラリを選択し、 iInstallボタンをクリックします。 プログラムが残りの処理を行います。



メッセージングの場合、コンピューターと電話は共有Wi-Fiネットワークを使用する必要があります。 次に、コンピューターのIPアドレスを見つけます。 Windowsでは、 ipconfig



コマンドを使用してこれを実行できます。



アドレスを覚えて、Androidモードのスケッチに書き込みます。



 import netP5.*; import oscP5.*; import ketai.net.*; import ketai.sensors.*; OscP5 oscP5; KetaiSensor sensor; NetAddress remoteLocation; float myAccelerometerX, myAccelerometerY, myAccelerometerZ; float proximity; String msg; int x, y, p; String myIPAddress; String remoteAddress = "192.168.1.42"; //    void setup() { sensor = new KetaiSensor(this); //println(sensor.list()); //    orientation(PORTRAIT); textAlign(CENTER, CENTER); textSize(40); msg = "hello"; initNetworkConnection(); sensor.start(); } void draw() { background(78, 93, 75); text("Remote Mouse Info: \n" + "mouseX: " + x + "\n" + "mouseY: " + y + "\n" + "mousePressed: " + p + "\n\n" + "Local Accelerometer Data: \n" + "x: " + nfp(myAccelerometerX, 1, 3) + "\n" + "y: " + nfp(myAccelerometerY, 1, 3) + "\n" + "z: " + nfp(myAccelerometerZ, 1, 3) + "\n" + " : " + proximity + "\n" + "Message: " + msg + "\n\n" + "Local IP Address: \n" + myIPAddress + "\n\n" + "Remote IP Address: \n" + remoteAddress, width/2, height/2); OscMessage myMessage = new OscMessage("accelerometerData"); myMessage.add(myAccelerometerX); myMessage.add(myAccelerometerY); myMessage.add(myAccelerometerZ); myMessage.add(msg); myMessage.add(proximity); oscP5.send(myMessage, remoteLocation); } void oscEvent(OscMessage theOscMessage) { if (theOscMessage.checkTypetag("iii")) { x = theOscMessage.get(0).intValue(); y = theOscMessage.get(1).intValue(); p = theOscMessage.get(2).intValue(); } } void onAccelerometerEvent(float x, float y, float z) { myAccelerometerX = x; myAccelerometerY = y; myAccelerometerZ = z; } void onProximityEvent(float d) { proximity = d; } void initNetworkConnection() { oscP5 = new OscP5(this, 12000); remoteLocation = new NetAddress(remoteAddress, 12000); myIPAddress = KetaiNet.getIP(); }
      
      





電話はインターネット経由でデータを送信するため、使用するには許可を有効にする必要があります。 Androidメニューに移動| 権限スケッチし、 インターネットの横にあるチェックボックスをオンにします







電話でアプリケーションを起動します(Wi-Fiをオンにすることを忘れないでください)。 電話では、加速度計、距離センサー、メッセージテキスト、および2つのIPアドレス(1つとリモートコンピューター)からのデータが表示されます。 電話アドレスを記憶し、Javaモードでスケッチに入れます。



 import oscP5.*; import netP5.*; OscP5 oscP5; NetAddress remoteLocation; float accelerometerX, accelerometerY, accelerometerZ; float proximity; String msg; void setup() { size(480, 480); oscP5 = new OscP5(this, 12000); remoteLocation = new NetAddress("192.168.1.43", 12000); // ip-  textAlign(CENTER, CENTER); textSize(24); } void draw() { background(78, 93, 75); text("Remote Accelerometer Info: " + "\n" + "x: "+ nfp(accelerometerX, 1, 3) + "\n" + "y: "+ nfp(accelerometerY, 1, 3) + "\n" + "z: "+ nfp(accelerometerZ, 1, 3) + "\n\n" + "Message: " + msg + "\n\n" + " : " + proximity + "\n\n" + "Local Info: \n" + "mousePressed: " + mousePressed, width/2, height/2); if (proximity == 0.0) { background(10, 10, 45); } OscMessage myMessage = new OscMessage("mouseStatus"); myMessage.add(mouseX); myMessage.add(mouseY); myMessage.add(int(mousePressed)); oscP5.send(myMessage, remoteLocation); } void oscEvent(OscMessage theOscMessage) { if (theOscMessage.checkTypetag("fffsf")) { accelerometerX = theOscMessage.get(0).floatValue(); accelerometerY = theOscMessage.get(1).floatValue(); accelerometerZ = theOscMessage.get(2).floatValue(); msg = theOscMessage.get(3).stringValue(); proximity = theOscMessage.get(4).floatValue(); } }
      
      





コンピューターでスケッチを実行します。 電話をテーブルの上に置きます。 何が起こっているのか見てください。

マウスボタンをクリックします。 テキストはmousePressed:trueに変わるはずです







電話を見てください。 そこで、碑文はmousePressed:1に同期して変化ます







マウスボタンを放して押して、両方のデバイスがお互いを認識し、自身に関する情報を送信することを確認します。 同様に、手で携帯電話を回転させて、モニターで加速度センサーの測定値の変化を確認できます。



それだけではありません! 電話をテーブルの上に置き、手のひらで覆います。 近接センサーが機能し、デスクトップアプリケーションウィンドウの色が突然変わります。







手のひらを離すと、情報が再び表示されます。



「hello」というテキストも電話から受信しました。 電話のコードで変更し、スケッチを再起動して変更を確認できます。



電話のスケッチでは、すべてのセンサーのリストを取得できるコードをコメントアウトしました。 コメントを削除して、コンソールにリストを表示できます。



コードのすべての行を説明しません。 誰かがこのトピックに興味がある場合は、いずれにしてもドキュメントを勉強する必要があります。 一言で言えば、ここでは説明できません。



Android StudioおよびIDEAでこのような機能を記述する必要がある場合、最初に多くの関連技術を習得し、多くのコードで複雑なプロジェクトを作成する必要があります。 Processingでは、多くの詳細が開発者から隠されています。 もちろん、複雑なビジネスアプリケーションを作成することはできません。 ただし、Processingは主にグラフィックスを「操作する」ことを目的としていることを思い出してください。 そして、これは子供向けプログラミングの世界における最初のステップかもしれません。 さらに、Processingはシリアルポートを介してArduinoボードと通信できます。



したがって、3つのデバイス(コンピューター、電話、およびマイクロコンピューターボード)をすぐにカバーします。 スマートホームは自由に使用できます。想像力を示すだけで十分です。 唯一の問題は、ロシア語のリソース不足です。 独立してそれを把握することは困難であり、すべての親が支援できるわけではありません。 この場合、メンターを探すか、適切なコースにサインアップする必要があります。



ロシア語では、コンピューターでの作業に関する基本レベルの書籍が2冊出版されました。 GitBookの電子書籍(英語)であるAndroidを操作するための無料のツールがあります。 おそらく、時間があれば、私のバージョンを補充します。



プログラミングを頑張ってください!



All Articles