マイクロコントローラーとの通信としてのシリアル、UART、Android

画像

私たちの主題:



Android 4.1.1タブレット「DNS AirTab M101w」および次のデバイス:

1. Tiva CシリーズTM4C123G LaunchPad

2. Stellaris LaunchPad EK-LM4F120XLボード

3. Arduino MEGA 2560ボード

4.ボードMSP430 LaunchPad、M430G2553



そして、順番に、これらすべてのボードをUSB OTG経由でタブレットに接続し、ルートアクセスに頼らずにそれらとの接続を確立しようとします。



件名1. Tiva CシリーズTM4C123G LaunchPad



このボードには、マイクロUSB「DEBUG」コネクタとRGB LEDがあり、それらを使用します。

次のスケッチがEnergia IDEでアップロードされました。

char data = ' '; //    boolean rs, gs, bs = false; //   void setup() { //  pinMode(RED_LED, OUTPUT); pinMode(GREEN_LED, OUTPUT); pinMode(BLUE_LED, OUTPUT); Serial.begin(9600); // Serial    9600 } void loop() { if (Serial.available()){ //    data = Serial.read(); //  switch (data){ //  case '1': rs = !rs; break; case '2': gs = !gs; break; case '3': bs = !bs; break; } //  digitalWrite(RED_LED, rs); digitalWrite(GREEN_LED, gs); digitalWrite(BLUE_LED, bs); //    Serial.print("RGB="); Serial.print(rs); Serial.print(gs); Serial.println(bs); } }
      
      







私の場合、タブレットに接続すると、tty1-1:1.0ファイルが/ dev / usb /ディレクトリに表示されます。 ターミナルエミュレーターで以下を登録してみましょう。

 $ echo 2 > /dev/tty1-1:1.0 $ read s < /dev/tty1-1:1.0 $ echo $s RGB=010
      
      







そして、予想外に、緑色のライトが点灯し、出力ラインが表示されました。 なぜ予想外に? 接続を事前に設定するのを怠ったため、指を空に突きましたが、どれだけうまくいきましたか! これにこだわることはありません。 しかし、カーネルのバージョンが異なると、ボードの定義が異なると言うでしょう。そして、松葉杖のない単一のコマンドラインを想像することはできません(はい、Linuxは普通です)



色で少し遊んで、いわゆるCOMポートに異なる番号を送信して、私は普遍的なAndroidソリューションを探し始めました。 Google Playには「シリアルUART」用の多くの機能があり、ほとんどのアプリケーションはテキサスインスツルメンツのおもちゃで期待どおりに動作します。 しかし、オープンソースと互換性のあるスレッドを見つけようとする私の試みはほとんど何も終わりませんでした。 Arduinoについては、クールなライブラリを見つけましたが、その詳細については以下をご覧ください...



件名2:Stellaris LaunchPad EK-LM4F120XLボード



私が理解しているように、これは最初のテスト対象の以前のバージョンであり、アンドロイドでもまったく同じように動作します。 しかし、現在のEnergia 0101E0010では、スケッチを埋めようとすると、このボードが表示されません(Windows 8)。

 No ICDI device with USB VID:PID 1cbe:00fd found! Failed!
      
      







そこで、コンソールへの最終バイナリパスの出力をオンにし、LM Flash Programmerを使用して手動でロードしました。



件名3:Arduino MEGA 2560ボード



スケッチを少し変更してみましょう。1つのLEDだけで点滅します。

Arduino IDEで埋める

 #define LED 13 char data = ' '; boolean ls = false; void setup() { pinMode(LED, OUTPUT); Serial.begin(9600); } void loop() { if (Serial.available()){ data = Serial.read(); switch (data){ case '1': ls = !ls; break; } digitalWrite(LED, ls); Serial.print("LED="); Serial.println(ls); } }
      
      







タブレットに接続します。ここでも/ dev / usb /ディレクトリにtty1-1:1.0ファイルがあります。実験を繰り返します。

 $ echo 1 > /dev/tty1-1:1.0
      
      





ここで、約100ミリ秒の周期でLEDが2回点滅して消灯することがわかります。 さて、私は次のことを試しています:

 $ read s < /dev/tty1-1:1.0
      
      





そして、端末は予期せずに凍結しました... OK、Ctrl + C

 $ echo $s
      
      





出力に何もないことは論理的です。



しかし、これは単なる紹介であり、 Physicaloid Libraryのすばらしいプロジェクトがあります 。 まず、Eclipseでライブラリを通常のAndroidプロジェクトとして開きます。 次に、新しいプロジェクトを作成し、アイテムAndroidのプロパティで、[ライブラリ]をクリックして[追加...]をクリックし、[Physicaloid Library]を選択します。 次に、ボタンを押して文字列「1」をarduinoに送信します。

 public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.button1: mPhysicaloid = new Physicaloid(this); if(mPhysicaloid.open()) { byte[] buf = "1".getBytes(); mPhysicaloid.write(buf, buf.length); mPhysicaloid.close(); } break; }
      
      





すべてがライブラリのドキュメントにあるため、受信したデータの読み方を説明する必要はないと思います。



件名4:MSP430 LaunchPadボード、M430G2553。



このボードは、私のハードウェアではまったく動作しませんでした。 システムによって決定されるのではなく、USBデバイス情報が更新されるとハングします。



結果:



Tiva Cシリーズボードを操作するためのこのようなライブラリが欲しいです。 スキルが十分でない間に自分を作り直します。



All Articles