1

Intel Galileo プラットフォームを使用したガーデニング システムに取り組んでいます。openweathermaps からの予測と組み合わせてローカル センサー データを使用しています。結果を表示するために、必要に応じてパライプを使用してツイートします。ここまでは順調ですね。現在、トリガー ワードを含む着信ツイートにシステムを反応させる方法を探しています。Twython を使用して、このトリガー ワードをチェックする Python スクリプトを作成することができました。(最後の 1 分以内に) 新しいツイートがある場合、Python スクリプトは 0 でない場合は 1 を返します。

[...]
if timedelta<triggertime: 
    erg = 1 #Neuer Tweet vorhanden
else: 
    erg = 0 #Kein neuer Tweet vorhanden
print erg

そして、ここで行き詰まりました: Python スクリプト自体を呼び出すと、問題なく動作します。しかし、arduino コードでシステム関数を使用すると、数値が得られず、次のような奇妙な形式のものだけが得られます: |cßBð¿

char* checkTweets() {
  char result[1];
  system("python /media/realroot/Files/tweetcheck.py > /media/realroot/result.txt");
  FILE *tempFile;
  tempFile = fopen("result.txt", "r");
  fgets(result, 1, tempFile);
  fclose(tempFile);
  return (result);
}

私は Arduino/Python インターフェイスの経験があまりありません。ご提案ありがとうございます。

4

1 に答える 1

1

Python とインターフェイスする Galileo で動作する非常によく似たコードがありますが、エラーの原因となっている可能性のある 2 つの違いに気付きました。

システム コールを実行するときは、テキスト ファイルではなくファイルとして保存します。

system("python /media/realroot/Files/tweetcheck.py > /media/realroot/result");

テキスト ファイルとして保存したことが、奇妙な出力の原因ではないでしょうか。

または、エラーはファイルの読み取りにあります。これを行ったとき、プログラムの先頭で必要な SD Arduino ライブラリを使用して#include <SD.h>、ファイルを読み取りました。

File myfile = SD.open("result");
// read from file until we hit the a newline
while (myfile.peek() != '\n') {
  result = myfile.parseInt();
}
result.close();
system("rm /media/realroot/result");
于 2015-05-27T19:00:27.970 に答える