UARTの受信データの先頭にnullが付加されてしまう



  • 同一obniz間のUART送信→受信で、送信データの先頭にNull(0)が付加されて受信されます。原因はなんでしょうか?

    以下の構成です。
    Webhook query(A)をEvent(B)で受けてUART0に送信。同一obnizでクロス接続(C)されたUART1の画面プログラム(D)で受信しconsole.logに表示(E)。

    同一データで3回実行してみましたが、1回目と2回目は0と送信データが2文字まとめて受信され、3回目は0と送信データが別タイミングで受信されるという挙動の違いもあります。(D参照)

    ■【A】Webhook query(同一を3回実行)
    0_1557622382760_68a0cf3d-c0bb-4c5b-8097-20bf06c0d7f8-image.png

    ■【B】Webhookを受けてUART0にコマンド送信するプログラム(Event)

    <!-- HTML Example -->
    <html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">  
        <script src="https://unpkg.com/obniz@2.0.2/obniz.js" crossorigin="anonymous"></script>
    </head>
    <body>
    <script>
    var obniz = new Obniz("xxxx-xxxx");
    obniz.onconnect = async function () {
    //   obniz.resetOnDisconnect(false);
    
       if (typeof done === "function"){ 
          if (typeof req === "object") {
             if ( req.query.cmd0 ) cmd = "0";
             if ( req.query.cmd1 ) cmd = "1";
             if ( req.query.cmd3 ) cmd = "2";
             if ( req.query.cmd3 ) cmd = "3";
             if ( req.query.cmd4 ) cmd = "4";
             obniz.uart0.start({tx:0,rx:1});
    //         obniz.uart0.send(cmd,0x0D,0x0A); 
             obniz.uart0.send(cmd);         
         }
       }
       await obniz.wait(1000);
       obniz.close();
    }  
    </script>
    </body>
    </html>
    

    ■【C】同一obnizでUART0からUART1にコマンド送信
    ジャンプワイヤーでUART0とUART1をクロス接続

    ■【D】UART1でコマンドを受信して画面に表示するプログラム(HTML)

    <!-- HTML Example -->
    <html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">  
        <script src="https://unpkg.com/obniz@2.0.2/obniz.js" crossorigin="anonymous"></script>
    
    </head>
    UART1_To_Web
    <body>
    <br> 
    <div id="text"></div>
    <script>
    
    var obniz = new Obniz("xxxx-xxxx");  
      
    obniz.onconnect = async function () {
       obniz.resetOnDisconnect(false); 
       obniz.uart1.start({tx: 2 ,rx: 3 });
    
       obniz.uart1.onreceive = async function(data,text){
          console.log(data);
          console.log(text);
          $("#text").text('text='+text);
       }
    
    }
    
    </script>
    </body>
    </html>
    

    ■【E】実行結果 (console.log)

    0_1557623430863_cb39e598-b076-4469-b6ff-f811d738abf6-image.png

    24行目がdata、25行目がtextです。
    以上


  • administrators

    @Google-Homer さん

    おそらく、uartの立ち上げ時の波形を読み取ってしまっているのかと思います。
    検証用のビットをつけることで回避が可能ですので、パリティビットの設定をして試してみてもらえないでしょうか。

    obniz.uart0.start({tx: 1, rx: 2, parity: "odd"});
    

    もしくは

    obniz.uart0.start({tx: 1, rx: 2, parity: "even"});
    

  • administrators

    また、2回に分かれるかどうかですが、uartの仕組み上、スタートとストップがわかりませんので、
    バラバラでくることもあれば一括で来ることもあります。

    uartの状況に左右されないプログラムを作りたい場合は、
    obniz.js 2.0.3にて1文字ずつ取得する関数obniz.uart0.readByte()を追加していますので、
    そちらを使っていただければと思います。



  • odd/evenともに現象変わりませんでした。他の可能性どうでしょうか?


  • administrators

    試していただきありがとうございます。
    こちらでも再現するか確認してみますので、しばしお待ちください。


 

Recent Projects

  • @nak435 かしこまりました。よろしくお願いします。

    read more
  • @Yuki-Sato さん、

    外部の3.3vを使うとはいえ普通にvccやgndを供給して問題なくうごくのであれば、弊社での動作確認後Flick Hatのライブラリとして公開できればと思っているのですがいかがでしょう。

    今週末に確認しますので、お待ちください。

    read more
  • @nak435 時間がかかってすいません、

    なんとか3.3vをgndにつないでFlick Largeを動かしたかったのですが、うまく動かすことができなかったです。
    3.3vをgndを繋がずに接続するというのはライブラリで推奨して伝えることは難しいと思ってます。

    Flick LargeでなくFlick Hatの方で、外部の3.3vを使うとはいえ普通にvccやgndを供給して問題なくうごくのであれば、弊社での動作確認後Flick Hatのライブラリとして公開できればと思っているのですがいかがでしょう。

    よろしくお願い致します。

    read more
  • @nak435 ありがとうございます。
    接続は3.3vのgnd以外同じでした。
    エラーはそのせいかもしれませんが、しかし電気的にはgndを繋がない場合3.3vとしてうまく供給できないはずなのでそこが不思議です。

    教えていただいたプログラムの部分を修正して試してみたいと思います。
    また少し時間がかかりそうなのですが、早めに試したいと思います。

    引き続きよろしくお願い致します。

    read more