フォーラムへの返信
-
投稿者投稿
-
すみません。スケッチのコピー&ペーストがダブっていました。ひとつ前の投稿は無視してください。
ありがとうございます。簡単に下記スケッチを作成しテストしました。
結果ですが、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);
}ありがとうございます。簡単に下記スケッチを作成しテストしました。
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アプリでは受信されないようです。
ご確認お願いします。添付いただいた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の実行でアプリは起動します。なにか関係がありますでしょうか?『(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では動作しません。
テストアプリ添付致します。添付ファイル:
アプリケーションのファイル名にスペースを入れていたのですが、スペースを無くすことで起動できました。これが問題と言うことでよろしいでしょうか?
Raspbianの変更後『(3) MZアプリケーションの実行』まで正常に動作しました。
自作のアプリケーションで(3)同様の実施をしましたが、『バイナリファイルからのアプリケーション情報ロードに失敗しました』のエラーダイアログが表示されます。
自作アプリケーションは、フレームコンポーネントだけで、.mzaxです。
アプリケーションの配置位置は、cmd.mzaxと同じ場所です。どのような問題があるのでしょうか?
タイマーコンポーネントの使用も頭にはあったのですが、同じことをしているのに結果が違うと疑問を払いたくなり質問した次第です。繰返し制御(WHILE)は諦めます。
タイマーコンポーネントを使用しましたが、タイマーコンポーネントの設定間隔とスケッチのloop()内delay()の設定間隔でかなり結果の挙動が違います。
『タイマーが動作する間隔がご希望通りにできるかは状況次第ですが』この懸念のことでしょうか?
スケッチや通信環境にもよるのでしょうが、現状は、タイマーコンポーネントの間隔とスケッチのdelay()の間隔が同じもしくは近い値だと、タイマーコンポーネントを停止しても数秒間、シリアル通信コンポーネントの生成イベントが返ってきます。
タイマーコンポーネントの間隔を長くし、スケッチのdelay()を短くすると問題ありません。
具体的には、
タイマーコンポーネント500msec、delay(500)はNG。
タイマーコンポーネント1000msec、delay(500)はNG。
タイマーコンポーネント2000msec、delay(500)はOK。
こんな感じなんですが、こんなもんだと理解する以外ありませんか?別の方法とはですが、下記①から③で一番近いお考えを教えて下さい。
①
現在のMZの機能(ユーザー側でコンポーネント作成は省く)ではI2C通信のデバイスは使用できないから。②
別のコンポーネントを使用すれば可能だけど、Firmata通信コンポーネントを使用してのI2Cデバイスからの値の取得はできない。③
例えば、測定できるスケッチを実行し、.txtに書き込んだ上でMZでその値を取得するイメージ。
何かを中継してMZを利用する。重ね合わせ系列グラフの設定値についてはメソッドを調べて対応したいと思います。
グラフデータ作成複合コンポーネントを使用する使用しないについての違いを簡単にご説明願えませんか?
グラフ作成では『グラフデータ作成複合コンポーネント』を使用するのが一般的ですか?チュートリアルのLesson8気象情報では単純にテーブルデータを設定しているだけのようなんですが?
有効な使用箇所、メリット/デメリットなど。
添付のアプリは現在半径150です。201以上の設定で保存し再起動に戻すとエラーメッセージが表示され150に戻ります。
このメール直前の確認では次の事を実施後に添付しています。
MZ起動→ロード→円グラフコンポーネント属性確認(150)→実行(設定可)→円グラフ右クリックで半径を220に→画面を閉じて上書き保存→アプリ終了。
MZ再起動→ロード→エラーメッセージ表示される(okで)→円グラフコンポーネント属性確認(150)→実行(設定可)→円グラフは小さくなっている(たぶん半径150の設定)→画面を閉じて→アプリ終了。
MZ再起動→ロード→エラーメッセージ表示される(okで)→上書き保存→アプリ終了。
MZ起動→ロード→(エラーは発生しない)→実行(設定可)→円グラフ右クリックで半径を220に→画面を閉じて上書き保存→アプリ終了。
再起動すると又エラーです。
確認よろしくお願いします。
-
投稿者投稿