0

Openwrtを実行しているルーターに接続されているArduinoで動作するWebページベースのシリアル通信を取得しようとしていますが、動作しますが、画面が実行されているか、パテ経由でリモート接続されている場合にのみ、何らかの理由でphpからシリアルへセッションを適切に開始しますか? 次の設定でser2netを使用してシリアルを管理します

1000:raw:0:/dev/ttyACM0:9600

このフォーラムでアドバイスされているさまざまな設定で stty も試しました

更新 1

80:raw:0:/dev/ttyACM0:9600ポート80がweb/httpポートであると仮定して、ser2netの設定としても試しました

私のphpコードは

 if (isset($_GET['action'])) 
 {
     $serial = new phpSerial();
     $serial->deviceSet('/dev/ttyACM0');
     $serial->confBaudRate(9600);
     $serial->confParity('none');
     $serial->confCharacterLength(8);
     $serial->confStopBits(1);
     $serial->confFlowControl('none');
     $serial->deviceOpen();

     if ($_GET['action'] == "PIN_12_HIGH") 
     {
         $serial->sendMessage("A");
     }
     if ($_GET['action'] == "PIN_12_LOW") 
     {
         $serial->sendMessage("B");
     }
     if ($_GET['action'] == "PIN_11_HIGH") 
     {
         $serial->sendMessage("C");
     }
     if ($_GET['action'] == "PIN_11_LOW") 
     {
         $serial->sendMessage("D");
     }

     $serial->deviceClose();
 }

更新 2

sleep(1);私のphpコードに追加すると、いくつかの問題が解決するようです

いくつかのポイント

  1. phpコードにスリープを追加すると、シリアル接続によるリセット後にコマンドがarduinoに到達できるようになりますが、led 2をオンにしたときにled 1をオンにすると、led 1がオフにリセットされます。したがって、これは選択肢の配列をログに記録し、更新された配列全体をarduinoに送信するという形のより複雑なコードを意味します。これを避けて、一度に1つのコマンドを送信したいと思います。
  2. 画面またはパテがアクティブな場合、arduinoにはこのリセットの問題はありませんか? 問題は、接続を維持するために screen と putty が何を行い、stty と php シリアルが行わないのかということです。

アップデート 3

この役立つ投稿を見つけた後、Arduino にハッキングをリセットする必要のない解決策を発見したようです。cat /dev/ttyACM0 &Openwrt ルーターのスタートアップ構成に追加すると、データの送信ごとにリセットせずに Arduino とのシリアル通信が可能になります。

残された問題:

  1. このコードはarduinoをルーターとのセッションにバインドしていると思いますか? しかし、私は確信が持てません。
  2. Arduinoからの戻り値を食べているようで、phpページがデータを返すのを止めていますか?
  3. 私のシステム ログ ファイルには、Arduino から返された欠落データが含まれていますか?

更新 4

  1. これを機能させる必要があったため、コンデンサを使用してarduinoのシリアル通信からの自動リセットを停止しました。
  2. 述べたように、スクリーンとパテはarduinoと通信するときにこのリセットの問題を作成しません.STTYでさまざまな設定を試しましたが、解決策が見つかりませんでした.
4

1 に答える 1