Arduinoのシリアル読み込み不具合調査 ノ巻
途中で止まってしまうシリアル通信により連続稼働が阻まれているArduino+PocketGeigerによる線量計だが、止まってしまう原因がArduinoなのか接続先のRaspberryPiなのかを見極めないといけない。ということでRaspberryPiの代わりにPCのTeratermでログを取りながら放置することで、どうなるか確認してみた。結果としては一晩動き続けていた。約2時間で止まってしまっていたので問題はRaspberryPiのほうにありそうだ。
消費電力的にもPCで稼働するのはやはり躊躇われる。とはいえ、RaspberryPiで解決する方法が見つかったわけではない。USBシリアルドライバに問題がありそうなので、まずはUSBシリアルを使わず、内蔵シリアルを使っての接続が出来れば良いが、Arduinoへのリセットおよび時刻設定のためにUSBシリアルが必要になっている。Arduino内にあるシリアル配線をUSBシリアル変換ではなく、直接RaspberryPiのシリアル配線と接続してやれば、通信はできそうである。ただし電気的・レベル(5V,3.3V)的に問題がないかは見ておく必要がある。
とりあえず、RaspberryPiのTX/RXとArduinoのTX/RX(+GND)を直結してシリアル通信をすることにした。Arduinoの0/1pinのTX/RXをRaspberryPiにつないでみたが、USBシリアルと同じ線らしく、給電のためにUSBを繋ぐ必要があり、ややこしいことになるのでSoftwareSerialというものがあるのでこれを使ってみた。おそらくソフトウェアでUARTをエミュレートしていると思われる。他の空き端子をシリアルのTX/RXとして割り当ててやればシリアルとして使えるようになる。
こうしてArduino側は空き端子を利用したSoftwareSerialでの運用とした。DTRの接続がないため、Arduinoへのリセットが入らないため、これまでのスケッチではArduinoのリセットとRaspberryPi側でのスクリプト起動を同時に行わなければならない。これはこの方法で行けるとなれば修正しよう。
とりあえずこの状態で長時間テストを行う。
消費電力的にもPCで稼働するのはやはり躊躇われる。とはいえ、RaspberryPiで解決する方法が見つかったわけではない。USBシリアルドライバに問題がありそうなので、まずはUSBシリアルを使わず、内蔵シリアルを使っての接続が出来れば良いが、Arduinoへのリセットおよび時刻設定のためにUSBシリアルが必要になっている。Arduino内にあるシリアル配線をUSBシリアル変換ではなく、直接RaspberryPiのシリアル配線と接続してやれば、通信はできそうである。ただし電気的・レベル(5V,3.3V)的に問題がないかは見ておく必要がある。
とりあえず、RaspberryPiのTX/RXとArduinoのTX/RX(+GND)を直結してシリアル通信をすることにした。Arduinoの0/1pinのTX/RXをRaspberryPiにつないでみたが、USBシリアルと同じ線らしく、給電のためにUSBを繋ぐ必要があり、ややこしいことになるのでSoftwareSerialというものがあるのでこれを使ってみた。おそらくソフトウェアでUARTをエミュレートしていると思われる。他の空き端子をシリアルのTX/RXとして割り当ててやればシリアルとして使えるようになる。
こうしてArduino側は空き端子を利用したSoftwareSerialでの運用とした。DTRの接続がないため、Arduinoへのリセットが入らないため、これまでのスケッチではArduinoのリセットとRaspberryPi側でのスクリプト起動を同時に行わなければならない。これはこの方法で行けるとなれば修正しよう。
とりあえずこの状態で長時間テストを行う。
α55 + Minolta AF ZOOM 24-50 1:4
コメント
コメントを投稿