作成した返信
-
著者投稿
-
ORIteck CO., LTD一般参加者
伊予研究会様
コメントいただきありがとうございます。シリアルモニタでの操作ではスケッチ通りになること(Serial.read()とSerial.print()の関係)は確認できておりました。当方の伝達の仕方に問題があり長引いてしまったようです。結論ですが、
シリアル通信コンポーネントの属性情報設定でReadModeを0から2に変更することで解決しました。
Serial.printとSerial.println改行の有無については今回のスケッチでは関係無いようです。『F』の文字は一度しか送っていないからだと思いますが、今後は、Serial.printlnを使用したいと思います。最後に2つ質問させてください。
➀シリアルコンポーネントの属性情報ReadModeですが、Windows版MZでは『0』『2』ともに変化はありませんでした、デフォルトは『0』ですので、Raspbian版MZでは『2』に設定し使用します。ユーザー側での知識としてなにかあればお願いします。
➁シリアル通信コンポーネントはポートへの接続時のアクションとして処理完了イベントがありますが、このイベントの最初の処理にシリアル通信コンポーネントの『ポートに文字列データを出力』メソッドを使用した場合、文字列が遅れませんでした。(このトピックの環境です)これは、WindowsでもRaspbianでも同じでした。PC等の能力や通信環境によるものと考えおけばいいものでしょか?
Raspbianでは、シリアル通信コンポーネントの処理完了イベントで、いくつかのサプルーチンコンポーネントでの処理の後にシリアル通信コンポーネントの『ポートに文字列データを出力』メソッドを使用した場合も、文字列は遅れませんでした。ダイアログコンポーネントを使用しスレッドを一旦止めることが有効のようで現在は、このようにしています。ORIteck CO., LTD一般参加者すみません。スケッチのコピー&ペーストがダブっていました。ひとつ前の投稿は無視してください。
ありがとうございます。簡単に下記スケッチを作成しテストしました。
結果ですが、MZアプリかの文字列送信でArduino側のLEDが点灯することを確認しました。
Arduino側から文字を送信しているのにMZアプリでは受信されないようです。
ご確認お願いします。const int LED = 4;
void setup()
{
pinMode(LED, OUTPUT); //LED(D4ピンを出力に)
Serial.begin(115200);
delay(1000); //1秒間待つ
}void loop()
{
char start = Serial.read(); //シリアルから一文字を取得
if(start == ‘F’){
digitalWrite(LED, HIGH);
delay(2000);
}
digitalWrite(LED, LOW);
}ORIteck CO., LTD一般参加者ありがとうございます。簡単に下記スケッチを作成しテストしました。
const int LED = 4;
void setup()
{
pinMode(LED, OUTPUT); //LED(D4ピンを出力に)
Serial.begin(115200);
delay(1000); //1秒間待つ
}void loop()
{
char start = Serial.read(); //シリアルから一文字を取得
if(start == ‘F’){
digitalWrite(LED, HIGH);
delay(2000);
}
digitalWrite(LED, LOW);
}
const int LED = 4;
void setup()
{
pinMode(LED, OUTPUT); //LED(D4ピンを出力に)
Serial.begin(115200);
delay(1000); //1秒間待つ
}void loop()
{
char start = Serial.read(); //シリアルから一文字を取得
if(start == ‘F’){
digitalWrite(LED, HIGH);
delay(2000);
}
digitalWrite(LED, LOW);
}結果ですが、MZアプリかの文字列送信でArduino側のLEDが点灯することを確認しました。
Arduino側から文字を送信しているのにMZアプリでは受信されないようです。
ご確認お願いします。ORIteck CO., LTD一般参加者添付いただいたRXTXcomm.jarファイルの配置とsudoコマンドでの実行でも症状がかわりませんので、問題としている内容について説明します。
接続ボタンのアクションイベントで、シリアル通信コンポーネントのメソッド「通信速度を設定する」でArduinoのスケッチ速度に設定後、シリアル通信コンポーネントのメソッド「指定されたポートに接続する」※私の環境では/dev/ttyUSB0に接続します。
シリアル通信コンポーネントの処理完了イベントで、メッセージダイアログコンポーネントのメソッド「情報メッセージダイアログを表示する」※イベント番号0:ポートに接続したとき。この時、情報メッセージダイアログは表示されますので、ポートへの接続はできていると考えています。
ここからが問題としているところです。
送信ボタンのアクションイベントで、シリアル通信コンポーネントのメソッド「ポートに文字列データを出力する」で’F’の一文字を送信しています。Arduino側では、この文字を受信時Serial.read()に、’Ftemp,hum’の文字列を送信Serial.print()するスケッチです。これを、シリアル通信コンポーネントのデータ生成イベントで、テキストフィールドに設定しているのですが、設定(表示)されません。もう一つですが、
$ sudo /home/pi/MZPlatform/3.6/pfloader ***.mzax
このように実行した場合、エラーメッセージが表示され『バイナリファイルからのアプリケーション情報ロードに失敗しました』アプリは起動しません。
カレントディレクトリを /MZPlatformで、$sudo 3.6/pfloader ***.mzaxの実行でアプリは起動します。なにか関係がありますでしょうか?ORIteck CO., LTD一般参加者『(4)データベース接続』まで正常に動作できるようになりました。
Raspberry PiとArduino NaNoをUSB接続している環境で自作アプリのテストをしています。MZIoTtoolkit-3.6-20181219のIoTEdgeApp.mzaxをRaspberry Piで使用するイメージです。
Firmata通信コンポーネントの使用での送受信は問題ないのですが、シリアル通信コンポーネント使用時、ポートの開通はできているようなのですが送受信ができません。
Arduinoのスケッチは、シリアルポートから’F’一文字を受信したとき、”Ftemp,hum”をシリアルポートに送信するです。
void setup(){Serial.begin(115200); dalay(10);}
void loop(){
char start = Serial.read();
if(start == ‘F’){Serial.print(“Ftemp”); Serial.print(“,”); erial.print(“hum”);}
delay(100);
}Windowsでは問題ありませんが、Raspberry Piでは動作しません。
テストアプリ添付致します。添付ファイル:
ORIteck CO., LTD一般参加者アプリケーションのファイル名にスペースを入れていたのですが、スペースを無くすことで起動できました。これが問題と言うことでよろしいでしょうか?
ORIteck CO., LTD一般参加者Raspbianの変更後『(3) MZアプリケーションの実行』まで正常に動作しました。
自作のアプリケーションで(3)同様の実施をしましたが、『バイナリファイルからのアプリケーション情報ロードに失敗しました』のエラーダイアログが表示されます。
自作アプリケーションは、フレームコンポーネントだけで、.mzaxです。
アプリケーションの配置位置は、cmd.mzaxと同じ場所です。どのような問題があるのでしょうか?
ORIteck CO., LTD一般参加者タイマーコンポーネントの使用も頭にはあったのですが、同じことをしているのに結果が違うと疑問を払いたくなり質問した次第です。繰返し制御(WHILE)は諦めます。
タイマーコンポーネントを使用しましたが、タイマーコンポーネントの設定間隔とスケッチのloop()内delay()の設定間隔でかなり結果の挙動が違います。
『タイマーが動作する間隔がご希望通りにできるかは状況次第ですが』この懸念のことでしょうか?
スケッチや通信環境にもよるのでしょうが、現状は、タイマーコンポーネントの間隔とスケッチのdelay()の間隔が同じもしくは近い値だと、タイマーコンポーネントを停止しても数秒間、シリアル通信コンポーネントの生成イベントが返ってきます。
タイマーコンポーネントの間隔を長くし、スケッチのdelay()を短くすると問題ありません。
具体的には、
タイマーコンポーネント500msec、delay(500)はNG。
タイマーコンポーネント1000msec、delay(500)はNG。
タイマーコンポーネント2000msec、delay(500)はOK。
こんな感じなんですが、こんなもんだと理解する以外ありませんか?ORIteck CO., LTD一般参加者別の方法とはですが、下記①から③で一番近いお考えを教えて下さい。
①
現在のMZの機能(ユーザー側でコンポーネント作成は省く)ではI2C通信のデバイスは使用できないから。②
別のコンポーネントを使用すれば可能だけど、Firmata通信コンポーネントを使用してのI2Cデバイスからの値の取得はできない。③
例えば、測定できるスケッチを実行し、.txtに書き込んだ上でMZでその値を取得するイメージ。
何かを中継してMZを利用する。ORIteck CO., LTD一般参加者重ね合わせ系列グラフの設定値についてはメソッドを調べて対応したいと思います。
グラフデータ作成複合コンポーネントを使用する使用しないについての違いを簡単にご説明願えませんか?
グラフ作成では『グラフデータ作成複合コンポーネント』を使用するのが一般的ですか?チュートリアルのLesson8気象情報では単純にテーブルデータを設定しているだけのようなんですが?
有効な使用箇所、メリット/デメリットなど。
-
著者投稿