マイコンでの実行

ArduinoでLEDサンプルのサーバーを実行し、パソコン上のクライアントと通信させます。

なお、このサンプルの動作確認はArduino UNOで行っています。

Arduino IDEのダウンロードとインストール

公式サイトからIDEをダウンロードしてインストールします。

このLEDのサンプルはarduino-1.6.4とarduino-1.0.5で動作を確認しています。 しかし、この後のリアルタイムシステムのサンプルで利用するDuinOSがarduino-1.6.4では動作しませんので、 ここではarduino-1.0.5を利用します。

http://www.arduino.cc/en/Main/OldSoftwareReleases#previous からarduino-1.0.5-r2-windows.zipをダウンロードして、インストールしたい先へ解凍します。 arduino.exeをダブルクリックすれば、IDEが起動します。

ドライバのインストール

WindowsにArduinoを接続するのにドライバのインストールが必要となる場合があります。 ハードウェアの種類により違いがありますので、詳細はArduinoハードウェアの購入先が提供する情報を確認して下さい。以下は公式サイトの情報です。

http://arduino.cc/en/Guide/Windows#toc4

ArduinoへのHIPCライブラリのインストール

まず、起動中のArduino IDEがある場合は、全て終了させて下さい。

hipcarduino-0.5.zipをダウンロードして解凍します。 Arduino IDEのインストール先を確認して、librariesフォルダを探して下さい。 解凍して出来たhipcフォルダを丸ごとlibrariesフォルダの中にコピーして下さい。

ビルドと書き込み

Arduinoのスケッチをビルドするためにledという名前のフォルダを作ります。 パソコンのPOSIX環境で前のLEDサンプルmakeしたディレクトリからledフォルダへファイルをコピーします。 具体的には、LEDサンプルのhipccfgディレクトリとserverディレクトリから以下のファイルを新しく作ったledフォルダにコピーして下さい。

注意: CFGled.h、CFGled_scfg.c、CFGled_scfg.hの3つのファイルは、必ず先ほどサンプルをビルドしたときに使ったファイルをコピーして下さい。別の場所で作り直すと構成IDが変わってしまい、先ほどビルドしたクライアントとは通信できなくなってしまいます。

Arduino IDEを立ち上げて、led.inoを開きます。 スケッチをArduinoへ書き込んで下さい。

シリアルモニタでの確認

まず、Arduino IDEのシリアルモニタを使って、Arduinoと通信できることを確認します。

デバイス名の確認

ArduinoのPosix環境でのデバイス名を確認します。

Cygwinでは、WindowsでのCOM1が/dev/ttyS0、COM2が/dev/ttyS1というように対応しています。 http://cygwin.com/cygwin-ug-net/using-specialnames.html#pathnames-posixdevices

仮想マシンを利用している場合は、仮想マシンにArduinoの接続します。 例えば、VirtualBoxではメニューバーから"Devices" - "USB Devices" - "Arduino"と選択します。

環境によってはArduinoを接続した後にdmesgコマンドを実行することで、デバイス名を確認します。例:

[ 1110.173072] cdc_acm 1-2:1.0: ttyACM0: USB ACM device

Linuxを使っている場合などで、ユーザーをdialoutグループに所属させる必要がある場合は、gpasswdなどを使って下さい。

Arduinoはインターネット上の情報が充実しているので、その他不明な点があれば検索してみることをお勧めします。

(参考)Ubuntuへのインストール方法: http://playground.arduino.cc/Linux/Ubuntu

socatの確認

socatが作動することを確認します。 先ほどのLEDサンプルをビルドしたPOSIX環境から、以下のコマンドを実行してます。(ttyS2は適切なデバイス名に変更して下さい。)

socat /dev/ttyS2,raw,b9600,echo=0 STDIO

キーボードからaを入力してEnterキーを押します。 Failed to acceptという文字列が表示されるのを確認して、Ctrl+Cでsocatを終了します。

うまく行かない場合は、Arduino IDEのシリアルモニタやpicocomで確認を行って下さい。

Arduinoとパソコン上のクライアントとの通信

パソコンのPOSIX環境で先ほどLEDサンプルmake runしたディレクトリに移動して、以下のコマンドを実行します。(ttyS2は適切なデバイス名に変更して下さい。)

ruby ../../utilities/hipcdump 'socat /dev/ttyS2,raw,b9600,echo=0 STDIO' 'sleep 3; client/client'

クライアントプログラムが終了したらCtrl+Cで終了します。

なお、コマンドの中の'sleep 3'は、Arduinoの自動リセットに対応するためのものです。

トラブルシューティング

自動リセット

Arduinoボードの種類や通信設定によっては、通信開始時に自動的にArduinoがリセットされます。リセットスイッチを押さずにArduinoへ書き込みが出来るなら、自動リセットが有効になっている可能性があります。自動リセット直後はブートローダーが走っているため、ユーザーか書き込んだプログラムは通信開始直後に送信されたデータを受信することが出来ません。

従って、自動リセットが有効になっているときは、通信開始直後のデータ送信を避けて下さい。具体的には、sleep等でクライアントが通信を開始するのを遅らせて下さい。また、シリアルモニタやsocatを使って手動で動作を確認する場合は、1秒程度待ってから操作を開始して下さい。

socatのTERMIOSオプション

Arduinoとの通信がうまくいかないときは、シリアル通信の特殊処理が行われて問題となっている可能性があります。 この場合は、socatのオプションにonlcr=0ixoff=0等を追加して、明示的に特殊処理を無効にして下さい。

socatで設定できるTERMIOSオプションはsocatのサイトhttp://www.dest-unreach.org/socat/doc/socat.html#GROUP_TERMIOS で確認できます。それぞれのTERMIOSフラグの詳細はTERMIOSのマニュアル等で確認できます。

また、socatの新しいバージョンではrawオプションではなく、新たに実装されたrawercfmakerawの利用が推奨されています。rawで通信がうまくいかない場合は、これらの新しいオプションを利用して下さい。

Cygwinでtcgetattrエラー

Cygwinで以下のようなtcgetattrエラーが発生した場合は、WindowsでArduino IDEを起動させ、一度シリアルモニタから通信を行うとエラーが解消されるようです。

2015/06/20 09:25:06 socat[4124] E tcgetattr(5, 0x23c580): Invalid argument

前のページ 次のページ


TOPページ

Last modified: 2015/07/27 08:00:59 +09:00