Jeffrey Cross
Jeffrey Cross

Galileoプロジェクト:MAKEがニューススタンドにヒットするまでの日数を追跡するためのディスプレイの作成

以下は、今後の著書 『Getting Started with Intel Galileo』からの抜粋です。

家庭内のネットワークプロジェクトにIntel Galileoを使用するのは当然のことです。 Arduinoのピン互換性、ネットワーキング、そしてLinuxにより、強力で柔軟なボードです。今週はコネクテッドホームについて調査しているので、そのテーマに合ったGalileoプロジェクトを共有したいと思います。コネクテッドホームは、スイッチを切り替えて温度を上げることだけではないと思いますが、情報を居住者に表示することも目的です。

MAKEが出るまでに何日かかるという単純なWebサイトを作成しましたか。これは1つの簡単な目的にかなっています:それはMAKE Magazineの次号がニューススタンドに当たると予想される日数を教えてくれます。私がMAKE寄稿編集者として受け取ったプロダクションカレンダーに基づいて、データは私によってデータベースに入力されます。それはGoogle App Engineの無料層によって提供されます、そして、私がそれを作った方法を見たいならば、サイトのソースコードはGithubで利用可能です。

Webブラウザでhttp://nextmakemagazine.appspot.com/にアクセスすると、情報が人間に表示および理解されるようにフォーマットされているのがわかりますが、サーバーはストリッピングによって単純なマイクロコントローラに直接話すようにも設定されています。余分なスタイルと言語をすべて取り除き、次の号がリリースされるまでの時間数だけを返します。あなたがURL http://nextmakemagazine.appspot.com/simpleにアクセスするとこれを見ることができます

あなたのGalileoはイーサネット経由のインターネット接続を使ってこのURLに接続し、受け取ったデータを受け取ってそれをどのように表示するかを評価することができます。まず、サーバーに接続できることを確認しましょう。

注:このプロジェクトでは、GalileoのSDカードイメージから起動する必要があります。こちらからダウンロードできます。

接続をテストする

  1. イーサネットケーブルを介してGalileoをネットワークに接続します。ルータの空いているポートに直接接続するか、またはイーサネットに接続されている場合はアクティブなジャックに接続します。
  2. ガリレオを電源に接続します。
  3. USBクライアントポートを介してコンピュータをGalileoに接続します。
  4. Arduino IDE内で、ファイル→例→イーサネット→Webクライアントを選択します。
  5. アップロードをクリックします。
  6. シリアルモニタを開きます。

ボードがサーバーへの接続に成功した場合は、テキストがシリアルモニタに表示されます(下記参照)。この例では、ガリレオが「Arduino」という用語をGoogleで検索するようにプログラムしています。GoogleのサーバーからHTML応答が受信されると、それらの文字がシリアルモニターに送信されます。

ネットワーク接続が機能していることを確認したので、GalileoをMAKEが出るまでの日数に接続しますか。サーバ:

  1. 新しいスケッチを作成して、下からコードを入力してください
  2. コードをアップロードしてから、シリアルモニタを開きます。

うまくいった場合、MAKEが出るまでの時間数が5秒ごとにシリアルモニタに表示されます。

void setup(){} void loop(){Serial.println(getHours());}遅延(5000)。 } int getHours(){char output [5];} system( "curl http://nextmakemagazine.appspot.com/simple> response.txt"); FILE * fp; fp = fopen( "response.txt"、 "r"); fgets(出力、5、fp)。 fclose(fp); atoi(出力)を返します。 }

上記のコードで最初に気付くかもしれないことは、loop関数には2行のコードしかないということです。遅延(5000)は、ループの各繰り返しが5秒ごとにのみ行われるようにするものです。しかし、Serial.println(getHours());?はどうでしょうか。最も内側の関数getHours()は、実際にはループ関数のすぐ下に定義されています。

関数定義の最初の行は、この関数がgetHoursという名前で、結果として整数を返すことを示しています。関数がsetup関数またはloop関数から呼び出されるたびに、関数内のコードが実行されます。 getHoursの場合、サーバーにデータを要求し、その応答をファイルに格納してからファイルを読み取り、MAKEの新しい号が利用可能になるまで待つ必要がある時間数を表す整数値を返します。

Linuxコマンドにデータをファイルに書き込ませてからArduinoスケッチにそのファイルを読み取らせることは、データをスケッチに入れるための1つの方法です。このユニークなガリレオ機能を確実に示すことができたのは、ファイルを読み書きする方法がたくさんあるからです。

そのコードには別の興味深いことが起こっています。サーバーが45の応答を送信したとしましょう。実際には2つのASCII文字、4と5を送信しています。Arduinoがこれらの文字を読むとき、それらを整数45として理解するのではなく、むしろ文字4と5を表す2バイトを理解するつもりです。つまり、値で数学をする必要があるなら、あなたはそれらを整数に変換しなければなりません。それが関数atoi()の目的です。それは文字の配列を調べ、それらの値を整数として出力します。これはあなたが算術に使うことができます。

PythonによるJSONの解析

MAKEが出るまでの日数は?これは、1つの単純なデータを提供するためです。他のサービスは、次の形式で構造化されたいくつかの異なるデータを提供することがあります。 JSONJavaScriptオブジェクト表記

JSONは、Webを介して構造化データを伝送するための標準形式になりました。 JSONを提供しているサイトからデータを読み込めるようにしたい場合は、それを解析する必要があります。これはArduinoのコードでは難しいので、他の言語を使ってこの作業を行い、適切な情報をArduinoのコードに渡すことができます。

JSONデータをプレビューするには、Webブラウザでhttp://nextmakemagazine.appspot.com/jsonにアクセスしてください。

{totalHours:1473、volumeNumber:「38」、daysAway:61}

応答はおそらく1行にまとめられますが、改行とインデントを追加する場合は、上の例のようになります。次の発行までの時間数、次の巻数、および次の発行までの日数の3つのキーと値のペアがあります。

以下のコードは、Pythonプログラミング言語を使用してhttp://nextmakemagazine.appspot.com/jsonにあるサーバーのJSONフィードに接続し、ボリューム数と時間数を解析します。

import json import urllib2 httpResponse = urllib2.urlopen( 'http://nextmakemagazine.appspot.com/json')jsonString = httpResponse.read()jsonData = json.loads(jsonString)print "Volume"、jsonData ['volumeNumber'] 、「jsonData ['totalHours']、「時間」にリリースされます」
  1. SSH、Telnet、またはシリアルを使用してGalileoのコマンドラインに接続します
  2. ルートのホームディレクトリに移動します
#cd / home / root /
  1. ファイル_json-parse.py_を指定してテキストエディタviを起動し、そのファイルを作成します。
#vi json-parse.py
  1. 画面の左側には、チルダ(〜)の列があります。挿入モードに入るには、文字iを入力します。画面の左下隅に「I」が表示されます。
  2. 上からviにコードを入力してください。
  3. 挿入モードからコマンドモードに切り替えるには、エスケープキーを押します。左下隅の「私」が消え、代わりにダッシュが表示されます。
  4. 「:x」と入力してEnterキーを押すとファイルが保存され、viが終了します。
  5. コマンドラインからコードを実行してスクリプトをテストします。
#python json-parse.py

すべてが正しければ、コマンドラインに次のような出力が表示されるはずです。

ボリューム38は1473.0時間でリリースされます。

上の例からわかるように、WebサイトからJSONレスポンスを解析することは、PythonをGalileoで利用できる場合はそれほど難しくありません。これで、Pythonからの応答をArduinoのコードに結び付けるだけで済みます。

それを試すためには、まずjson-parse.pyを修正してください。

  1. ガリレオのコマンドラインで、まだルートのホームディレクトリにいることを確認します。
#cd / home / root /
  1. 編集するファイルをviで開きます。
#vi json-parse.py
  1. 挿入モードに入るには、文字iを入力します。画面の左下隅に「I」が表示されます。
  2. 以下のコードを反映するようにファイルを編集します。
import json import urllib2 httpResponse = urllib2.urlopen( 'http://nextmakemagazine.appspot.com/json')jsonString = httpResponse.read()jsonData = json.loads(jsonString)print jsonData ['daysAway']
  1. Arduino IDEで、以下のコードのコードで新しいスケッチを作成します。あなたはそれが上のArduinoコードと非常に似ているのを見るでしょう。コマンドラインからcurlを呼び出す代わりに、Pythonを使ってあなたが書いたスクリプトを実行します。

void setup(){} void loop(){Serial.println(getDays());}遅延(5000)。 } int getDays(){char output [5];} system( "python /home/root/json-parse.py> /response.txt"); FILE * fp; fp = fopen( "response.txt"、 "r"); fgets(出力、5、fp)。 fclose(fp); atoi(出力)を返します。 }

  1. コードをボードにアップロードしてシリアルモニタを開きます。

今度は、サーバーからの応答が、次回のMAKEの発行までの日数として表示されます。

LCDキャラクターディスプレイの接続

シリアルモニタでしか見ることができない場合、この情報は何に役立ちますか?この情報をプリントアウトするためにLCDディスプレイを接続しましょう。

これまでに使用してきた部品に加えて、次のものも必要になります。

  • Adafruit、Sparkfun、またはMaker Shedから入手可能な標準16 x 2 LCD文字ディスプレイ。
  • ブレッドボード
  • ジャンパー線
  • 10Kまたは2Kポテンショメータ

LCDをGalileoに接続するには:

  1. GalileoボードをコンピュータのUSBポートと電源から外します。
  2. LCDをブレッドボードに挿入します(必要に応じてヘッダーピンをハンダ付けします)。
  3. ポテンショメータもブレッドボードに挿入します。
  4. 下の図に示すように、ジャンパー線を使用して、ポテンショメーターとLCDをGalileoに接続します。

  1. ジャンパー線を使用して、下図に示すようにLCDを接続します。

  1. ガリレオに電源を接続します。
  2. USBを介してGalileoをコンピュータに接続します。
  3. Arduino IDEから、以下のコードをアップロードしてください。

#含める 液晶結晶(12、11、5、4、3、2)。 void setup(){lcd.init(1,12,255,11,5,4,3,2,0,0,0,0); lcd.begin(16、2); lcd.setCursor(3、0); lcd.print( "までの日数"); lcd.setCursor(0、1); lcd.print( "MAKE is here!"); void loop(){lcd.setCursor(0、0);} lcd.print( ""); lcd.setCursor(0、0); lcd.print(getDays());遅延(30×60×1000)。 } int getDays(){char output [5];} system( "python /home/root/json-parse.py> /response.txt"); FILE * fp; fp = fopen( "response.txt"、 "r"); fgets(出力、5、fp)。 fclose(fp); atoi(出力)を返します。 }

今度は、次回のMAKEがニューススタンドに登場するときに、簡単に情報を入手できます。もっとネットワークに接続されたGalileoプロジェクトのための入門Intel Galileo入門のリリースに注目してください!

シェア

コメントを残します