PCとAndroidエミュレータ間の仮想シリアル通信

多くの場合、シリアル通信を行うときにシリアルポートをシミュレートしてデバッグする必要があるため、作業が非常に容易になります。通常の状況下では、コンピューターのシリアルポートをシミュレートした後で最初にシリアルポートをシミュレートし、最後に最終段階でハードウェアデバイスをデバッグします。

ツール紹介

Virtual Serial Port Driver

f:id:OliverSpace:20190626214138p:plain



ソフトウェアは、仮想ヌルモデムケーブルを介して仮想シリアルポートおよび利用可能なシリアルポートのペアのエミュレーションを提供します。このソフトウェアとペアになっている2つのアプリケーションはデータを交換できます。各ポートの各データは表示用にコンピュータのデバイスマネージャに表示され、COMポートは目的の設定と実行中のプロセスをシミュレートします。ユーザーはシリアルポートの不足や物理的なハードウェアの輻輳を心配せずに仮想ポートを作成できます。このソフトウェアの次の利点は、ActiveX、DDL、コアレベルユーティリティなどのテクノロジと統合できることです。

公式ウェブサイトアドレス:https://www.virtual-serial-port.org/

Oracle VM VirtualBox

f:id:OliverSpace:20190626214237p:plain

Virtualboxは、企業や家庭向けの強力なx86およびAMD64 / intel64仮想化製品です。 Virtualboxは、企業顧客にとって非常に機能豊富で高性能な製品であるだけでなく、GNU General Public License(GPL)バージョン2の条件の下でオープンソースソフトウェアとして利用可能な唯一のプロフェッショナルソリューションです。

現在、virtualboxはウィンドウズ、リナックス、マッキントッシュそしてソラリスのホスト上で動き、ウィンドウズを含むがこれに限定されない多数の他のオペレーティングシステムをサポートする(NT4.0、2000、XP、サーバー2003、ビスタ、ウィンドウズ7、ウィンドウズ8、ウィンドウズ10)。 DOS / Windows 3.x、Linux(2.4、2.6、3.x、および4.x)、SolarisとOpenSolaris、OS / 2、およびOpenBSD。

Oracle VM VirtualBoxを使用すると、Linuxシステムを仮想化し、エミュレータで仮想シリアルポート用のシリアルポートを作成できます(AndroidのシリアルポートはLinuxに基づいているため)。

公式ウェブサイトアドレス:https://www.virtualbox.org/

シリアルデバッグアシスタント
グーグルやバイドゥの検索で見つけることができるシリアルデバッグアシスタントがたくさんあります。

フレンドリーなシリアルデバッグアシスタント(v2.6.5)

利点:

使いやすく、バッグを紛失しません。
シリアルポートの自動識別、COM9以上のシリアルポートをサポート。
マルチシリアルポートのデバッグをサポートします。
履歴送信レコードをサポートします。
特にコンピュータハードウェアに関連した、最大10 Mbpsのボーレートをサポートします。
デメリット:データが失われ、画面表示が滑らかではなく、安定性試験に適していません。

シリアルデバッグアシスタント(V2.2)

利点:使いやすく、ほとんどのユーザーグループ、書籍の紹介、無料のソースコード。

デメリット:

マルチスレッド受信テクノロジのため、特に高ボーレートまたはUSB toシリアルポートが使用されている場合、受信した呼び出しの数が失われることがあります。
最大115.2Kのボーレートしかサポートされていません。
COM1〜COM2しか選択できませんシリアルポートにUSBを使用する場合、シリアルポートを再マッピングする必要があります。
SSCOM 3.2

利点:接続されているシリアルデバイスの自動識別をサポートし、使いやすく、カウントしません。安定効果は良いです。インターフェースはシンプルで、ユーザーエクスペリエンスはとても良いです。

デメリット:シリアルポートプログラムを抜き差しするとクラッシュし、コンピュータにブルースクリーンが表示されます。高速ボーレートは115.2K、128K、256Kのみで、230.4Kはありません。コンソールとしては、echoはサポートされていません。表示データの保存はwin10ではサポートされていません。

PCOMAPR 1.5(pcomtest)

長所:ボーレートが高く、最大921.6Kで、受信は失われません。

デメリット:シリアルポートにUSBを使用する場合は、COM1〜COM4のみがオプションです。

アクセスポート1.3

利点:強力な機能、多くの設定パラメータ、受信の損失なし。

デメリット:ボーレートが高い場合(230.4Kなど)、受信データ量が多い(その分受信した)場合、データを送信できません。

通信プロセス
最初にVirtual Serial Port Driverで2つの仮想ポートCOM2とCOM3を作成しますもちろん、COM4とCOM5も作成できますが、これは以下のように効果がありません。

仮想ポートCOM2とCOM3を作成する

次に、Oracle VM VirtualBoxを開いて仮想マシンを作成し、Linuxシステムを選択します。メモリは状況に応じて1GBまたは2GBを選択します。ハードディスクのデフォルトは8Gです。


作成が成功したら、[設定]ボタンをクリックし、シリアルポートの項目を見つけてポートを設定します1


ポート番号COM1はアンドロイド仮想マシンの /dev/ttyS0 に対応し、アドレス(p)のCOM2ポートは当社の仮想COM2ポートに対応しますが、前面に2つ作成したのでもちろんCOM3に設定することもできます。仮想ポート

次に、Androidエミュレータを起動します。Genymotionを使用しています。ここで作成したエミュレータはAndroid 4.4バージョンより低いことに注意してください。それ以外の場合、エミュレータは仮想シリアルポートをサポートしません。

 

f:id:OliverSpace:20190626214942p:plain

エミュレータ起動後、シリアルデバッグアシスタントを開き、シリアルデバッグアシスタントを別のポート(エミュレータはCOM2、ここではCOM3に接続)に接続し、設定後にクリックしてシリアルポートを開きます。

 

この時点で、以下に示すように、Virtual Serial Port Driverの2つの仮想シリアルポートがアクティブになっていることがわかります。

 

f:id:OliverSpace:20190626215008p:plain

最後に、アナログデータを送信するためにapkでシリアルポート /dev/ttyS0 を開きます受信したデータはシリアルデバッグアシスタントで見ることができます。両側で同じボーレートを設定する必要があることに注意してください。

mSerialPort = new SerialPort("/dev/ttyS0", "9600", 0);
mInputStream = new BufferedInputStream(mSerialPort.getInputStream());
mOutputStream = new BufferedOutputStream(mSerialPort.getOutputStream());
mReadThread = new SerialReadThread();
mReadThread.start();