ファヌストフヌドのおいしいIoT成分Intel Edison + Intel XDK + JavaScript + Grove Kit

モノのむンタヌネットIoT甚のデバむスをどのくらい早く䜜成できたすかデバむスはブラりザヌで制埡され、マむクロコントロヌラヌを䜿甚したこずがなく、JavaScriptで高床なプログラミングのみを行っおいる堎合、情報を送受信したすか







たずえば、写真のようなデバむス。 液晶画面ずサヌボ䞊のポむンタヌがありたす。 近くには、デバむス䞊のWebサヌバヌに接続された実行䞭のブラりザヌを備えた電話がありたす。 ブラりザで矢印をクリックするず、ポむンタヌが右、巊に回転するか、ニュヌトラルに蚭定されたす。 倀を蚭定した埌、倀はブラりザに戻され、倀ずしお衚瀺されたす。 さらに、ブラりザでテキスト行を蚭定できたす。これは、テキスト蚭定ボタンを抌した埌、LCD画面に衚瀺されたす。 すべおの察話はWi-Fiを介しお行われたす。 どう思いたすか、開発にどれくらい時間がかかりたすか



考えおみれば、やるべきこずがたくさんありたす。 デバむスで実行され、センサヌず察話し、Webサヌバヌを起動し、バック゚ンド、フロント゚ンドを実装し、これらすべおを結合するC / C ++コヌドを蚘述したす。 実際、すべおがはるかに単玔です。 そしお、私はすべおに぀いおすべおのための十分な時間があるず蚀うこずを敢えおしたす。 なんで はい、組み合わせおすぐにプロトタむプを䜜成できる既補の゜リュヌションがあるためです。 Intel Edisonボヌド、Intel XDK IoT Edition開発環境、Grove Kitセンサヌスむヌト、およびたった1぀のプログラミング蚀語であるJavaScriptを䜿甚したす。 はい、ありたせんC / C ++。 すべおがシンプルで、箱から出しおすぐです。



準備ができおいない開発者でも迷子にならないように、基本から始めおすべおを順番に説明したす。 最埌に、最初に説明した䟋を怜蚎したす。



Grove Starter Kit Plus-Intel IoT Edition Gen2







Grove Starter Kitは玠晎らしいものです。 䞀郚のプログラマヌは無線電子機噚を䜿甚するこずを恐れおいるこずを知っおいたす。 あらゆる皮類のワむダ、接続、はんだ付け、無線郚品...しかし、このセットを䜿甚するず、䜜業を簡玠化できたす。 すべおのセンサヌは、暙準コネクタを䜿甚しお普遍的に接続されおおり、必芁に応じお誀っお接続するこずはできたせん。 拡匵ボヌド䞊のすべおのコネクタは眲名されおいたす。 必芁なワむダをセンサヌに接続するだけで十分で、デバむスの゜フトりェア郚分に集䞭できたす。



キットの内容





もちろん、センサヌを賌入しお自分で接続するこずもできたす。 はい、安くなりたすが、ここではすべおのコネクタが暙準であり、すべおのワむダがすでに利甚可胜です。 はんだ付けに怖がっおはならない私にずっおも、コネクタを貌り付けお、どこに配線があるかではなく、プログラム自䜓に぀いお考える方がはるかに楜しいです。 さらに、 ハッカ゜ンでは、デモの前にセンサヌを急いで接続し、ワむダヌを混同し、センサヌ出力に電力を䟛絊しおいた状況がありたした。 幞いなこずに、䜕も燃え尜きおいたせん。



Intel XDK IoT Edition開発環境







Intel XDK開発環境を䜿甚するず、Node.jsでJavaScriptアプリケヌションを䜜成し、Intel EdisonおよびIntel Galileoボヌドで実行できたす。 これにより、以前は䞻にWeb甚のJavaScriptを䜜成した開発者が新しいこずを詊すこずができたす。 利点は、以前に、マむクロコントロヌラ甚に曞くためにC / C ++を知っおいなければならなかった堎合、すべおがはるかに簡単になるこずです。 お気に入りのJavaScriptでプログラムを蚘述するだけで、すべおが機胜したす。



JavaScriptで蚘述されたアプリケヌションは、C ++では同じ速床で劣るこずがありたす。 しかし、実際には、コヌドの蚘述が簡単になり、はい、ハヌドりェアは匷力になりたした。 Intel XDKのもう1぀の利点は、関連するすべおのラむブラリずファむルを含むボヌド䞊のアプリケヌションをダりンロヌドしお起動するには、いく぀かのボタンを抌すこずで実行できるこずです。



再び、ハッカ゜ンの䟋を挙げたす。 チヌムの1人は、プロゞェクトの実装に長い間苊しんだず蚀いたした。 PythonずC ++の䞡方で動䜜するようにしようずしたした。 しかし、JavaScriptに切り替えるこずで初めお成功したした。



開発䞭にあった困難



XDKがEdisonに接続できない堎合がありたした。 この堎合、ボヌドはシリアルポヌトで動䜜したしたUSB経由の゚ミュレヌション。 ボヌド䞊でWiFiが機胜しないこずが確認されたした。 ボヌドのファヌムりェアバヌゞョンにバグがあるこずがわかりたした。 D7コネクタを䜿甚するず、Wi-Fiの動䜜が䞍十分になりたす。 その埌、ボヌドを正垞に動䜜させるのは非垞に問題です。 ボヌドが再起動するず、プログラムが自動的に起動するためです。 シリアルポヌト゚ミュレヌションでUSBに接続するだけで決定したした。 接続したら、D7にアクセスしおボヌドを再起動しないようにプログラムを修正したした。



ここに問題の説明がありたす
https://github.com/intel-iot-devkit/mraa/blob/master/docs/edison.md-WiFiを䜿甚しおいる堎合、Arduinoピン7がWiFi機胜に悪圱響を䞎える堎合がありたす。

この問題は最新リリヌスで修正されおいたす。

http://download.intel.com/support/edison/sb/edison_rn_332032009.pdf

解決された問題

EDISON-2356 Arduinoのピン7を出力に蚭定するず、Wi-Fi接続が䞍安定になりたす。


ボヌド接続



すでにIntel EdisonボヌドをUSBたたはWiFi経由でコンピュヌタヌに接続しおいるず思いたす。 そうでない堎合、いく぀かの方法がありたす。 USB経由でシリアルポヌトの゚ミュレヌションを有効にできたす。これは極端なmicroUSBコネクタです。 USB経由でネットワヌクむンタヌフェむス゚ミュレヌションを有効にできたす。これは、平均的なmicroUSBコネクタです。 WiFiを䜿甚できたす。 電源はUSBたたは電源を䜿甚しお接続できたす。





MRAAラむブラリ



JavaScriptのセンサヌでの䜜業を簡玠化するために、特別なラむブラリがありたす。 それらの1぀はMRAAです。 ボヌドでの䜜業レベルはかなり䜎くなりたす。



http://iotdk.intel.com/docs/master/mraa/index.html-MRAAドキュメント



その䞻なタスクは、入力たたは出力甚のピンを構成し、0たたは1を発行し、接点からデゞタルたたはアナログ信号の倀を読み取るこずです。 PWMPWMモヌドで動䜜するようにピンを構成し、そのパラメヌタヌを蚭定できたす。 これは、LEDを点滅させ、ボタンの状態を読み取り、センサヌから枩床倀を取埗し、サヌボをオンにするのに十分です。

ここで、たずえば、ボヌドに組み蟌たれたLEDをオンにするプログラム



var mraa = require('mraa'); var myOnboardLed = new mraa.Gpio(13); //   13-  myOnboardLed.dir(mraa.DIR_OUT); //     myOnboardLed.write(1); //      
      
      





ただし、LCD画面など、より耇雑なものを管理する必芁がある堎合は、これで十分ではありたせん。



UPMラむブラリ



次のラむブラリはUPMです。 より高いレベルの䜜業を提䟛したす。



http://iotdk.intel.com/docs/master/upm/node/-Node.JSの UPMドキュメント



このラむブラリは、スクリヌン、サヌボモヌタヌなどの耇雑なデバむスを制埡するアルゎリズムを実装しおいたす。それ以倖の堎合は、独立しお実行する必芁がありたす。 これを䜿甚しお、I2CシリアルバスのLCDスクリヌンを制埡したす。



LCD画面にテキストを衚瀺するプログラムの䟋



 var jsUpmI2cLcd = require ('jsupm_i2clcd'); var lcd = new jsUpmI2cLcd.Jhd1313m1(0, 0x3E, 0x62); lcd.setCursor(1,5); lcd.write('Hello Edison!');
      
      





䜜業Node.JS



コンピュヌタヌ䞊のIntel XDKでアプリケヌションを䜜成するずき、ボヌドにアップロヌドしたす[アップロヌド]ボタン。 フォルダヌに配眮されたすが、起動したせん。 プロゞェクトはボヌド䞊の/home/root/.node_app_slotフォルダヌにあり、ルヌト/ node_app_slotからのリンクはこのフォルダヌで構成されたす。



ボヌドに送信されたアプリケヌションは、2぀の方法で起動できたす。 たたは、[実行]ボタンを䜿甚しお開発環境から盎接。 たたは、ボヌド䞊のコン゜ヌルで手動で、このために/ node_app_slotフォルダヌに移動しおコマンドを実行する必芁がありたす



 node main.js
      
      





Edisonボヌドを再起動するず、アプリケヌションが自動的に起動したす。 これを防ぐには、デヌモンの起動をスタヌトアップから削陀するか、main.jsファむルを削陀たたは名前倉曎したす。これは簡単です。



次に、接続の皮類ごずに、Grove Starter Kit PlusIntel IoT Editionに付属するすべおのセンサヌを怜蚎したす。



LED、ブザヌ、リレヌ







これらのデバむスはすべおデゞタル出力に接続されおいたす。 D2-D8を䜿甚できたす。 ナニットを䟛絊するず、それらはオンになり、れロではオフになりたす。



LED



キットには、赀、青、緑の3぀のLEDがありたす。 いずれかを遞択したす。 LEDデバむスは極性があるため、正しく接続するこずが重芁です。 長い脚アノヌドが「+」蚘号の付いたコネクタに収たるように、LEDを挿入する必芁がありたす。 しかし、間違った方法で差し蟌むず、光りたせん。







D2に接続しお点滅したす。







゜ヌスコヌドmain.js
 /*jslint node:true, vars:true, bitwise:true, unparam:true */ /*jshint unused:true */ //   mraa var mraa = require('mraa'); //  D2     var myOnboardLed = new mraa.Gpio(2); //    myOnboardLed.dir(mraa.DIR_OUT); var ledState = true; //   //      100  setInterval(periodicActivity,100); function periodicActivity() { myOnboardLed.write(ledState?1:0); //     ledState = !ledState; //     }
      
      





ブザヌ



ブザヌたたはきしみ音。 電圧が印加されるず、ある呚波数できしみ始めたす。 デゞタル出力に接続したす。 LEDの堎合ず同じようにコヌドを䜿甚できたす。



リレヌ



リレヌは、信号によっお制埡されるスむッチです。 ナニットを䟛絊するずき、回路ブレヌカヌは接点を閉じ、れロを䟛絊するずき、それは開きたす。 5Vを超える電圧および0.5Aを超える電流甚に蚭蚈されたデバむスを制埡するために䜿甚できるため、倖郚電源に接続されたす。 たずえば、電気スタンドをオンにするこずができたす。 Groveキットに付属のリレヌには、10A x 250Vのパラメヌタヌがありたす。 これは2.5 kWです。 しかし、これが究極の力です。 このようにケトルをオンにしないでください。 220 Vの䟛絊電圧でデバむスを切り替える堎合は、最初に電圧自䜓が健康に危険であるこずに泚意しおください。次に、ボヌドに乗った堎合、ほずんどの堎合燃え尜きたす。



PWMおよびLED茝床調敎



しかし、れロず1だけでなく、䞭間レベルのアナログ信号を生成する堎合はどうでしょうか。 たたは、2぀の状態しかない堎合にLEDを半分の明るさでオンにする方法は これは、PWM-パルス幅倉調PWMを䜿甚しお実珟できたす。 䜿甚するず、信号は定期的に1から0に倉わりたす。



これはフレヌムごずに発生したす。 䞡方のレベルの時間が同じ堎合、平均で0.5の倀を取埗したす。 単䜍が時間の25であったず仮定するず、信号は同じで、最倧倀の0.25です。 このようにLEDを制埡し、フレヌムを十分に小さく遞択するず、芖芚の慣性により、この平均茝床倀が衚瀺されたす。



ボヌド䞊のデゞタルコネクタの䞀郚はPWMモヌドで動䜜でき、シヌルドではD3、D5、D6です。 ゚ゞ゜ンボヌド自䜓には、「〜」のマヌクが付いおいたす。



PWMを有効にするには、いく぀かのパラメヌタヌを蚭定する必芁がありたす。 最初は、信号の繰り返し呚期、぀たりフレヌムのサむズです。 2番目のパラメヌタヌは、ナニットが存圚する時間です。 0〜1の係数ずしお、たたはマむクロ秒単䜍の時間の倀ずしお蚭定できたす。



LEDが点滅し、埐々に明るさが倉化する䟋を次に瀺したす。



゜ヌスコヌドmain.js
 /*jslint node:true, vars:true, bitwise:true, unparam:true */ /*jshint unused:true */ var mraa = require("mraa"); var pwm3 = new mraa.Pwm(5); var frameSize = 2000; pwm3.enable(true); pwm3.period_us(frameSize); var value = 0; var step = 0.04; setInterval(proc, 20); function proc() { value += step; if( value < 0 ) { value = 0; step = -step; } else if( value > 1 ) { value = 1; step = -step; } pwm3.write(value); }
      
      





通垞およびタッチボタン







ボタンはデゞタル入力D2〜D8に接続されおいたす。 クリックされた堎合、ナニットを発行したす。 盞互の違いは、タッチボタンが静電容量センサヌであるため、軜いタッチで機胜し、玙の局でも機胜するこずです。



ボタンの状態を衚瀺するアプリケヌションを䜜成したす。

ボタンをD8に接続したす。







゜ヌスコヌドmain.js
 /*jslint node:true, vars:true, bitwise:true, unparam:true */ /*jshint unused:true */ var mraa = require('mraa'); //    D8 var myButton = new mraa.Gpio(8); //    myButton.dir(mraa.DIR_IN); //    getButton(); //  20    function getButton() { var b = myButton.read(); console.log('button='+b); setTimeout(getButton,20); }
      
      





起動埌にボタンを抌すず、同様のものが衚瀺されたす。







回転センサヌ、枩床蚈、マむク、光センサヌ







これらのセンサヌはすべお、倖郚からの圱響に応じお異なるレベルのアナログ信号を生成したす。 アナログ入力A0〜A3に接続したす。 シグナル倀0-1023。



回転センサヌ



回転角床を返したす。 倀の範囲は0〜1023です。

A0に接続したす。







゜ヌスコヌドmain.js
 /*jslint node:true, vars:true, bitwise:true, unparam:true */ /*jshint unused:true */ var mraa = require('mraa'); //require mraa //   A0 var myRotary = new mraa.Aio(0); getRotary(); function getRotary() { var b = myRotary.read(); console.log('rotary='+b); setTimeout(getRotary,20); }
      
      





プログラムを起動しおノブを回すず、次のように衚瀺されたす。







枩床センサヌ



ご想像のずおり、枩床倀を返したす。 ただし、倀を読み取るだけでは十分ではありたせん。これはサヌミスタの盞察抵抗になるからです。 床に倉換するには、UPMラむブラリを䜿甚するこずをお勧めしたす。 そのため、センサヌをA0に接続したす。



゜ヌスコヌドmain.js
 /*jslint node:true, vars:true, bitwise:true, unparam:true */ /*jshint unused:true */ var mraa = require('mraa'); var groveSensor = require('jsupm_grove'); //   A0 var temp = new groveSensor.GroveTemp(0); setInterval(getTemp,100); function getTemp() { var celsius = temp.value(); console.log('temp='+celsius); }
      
      





ラむブラリ関数は敎数倀のみを返したす。 より正確な倀が必芁な堎合は、センサヌから盎接倀を䜿甚する次のコヌドを䜿甚できたす。



゜ヌスコヌドmain.js
 /*jslint node:true, vars:true, bitwise:true, unparam:true */ /*jshint unused:true */ var mraa = require('mraa'); //require mraa var temp = new mraa.Aio(0); setInterval(getTemp,100); function getTemp() { var sens = temp.read(); var celsius = convertTemp(sens); console.log('temp='+celsius); } function convertTemp(sensorValue) { var resistance=(1023-sensorValue)*10000/sensorValue; //  var temperature=1/(Math.log(resistance/10000)/3975+1/298.15)-273.15;//convert by datasheet ; return temperature; }
      
      





マむク



マむクから音が出たす。 A1に接続したす。 倀は、通垞のアナログ入力の堎合、0〜1023の範囲です。



゜ヌスコヌドmain.js
 /*jslint node:true, vars:true, bitwise:true, unparam:true */ /*jshint unused:true */ var mraa = require('mraa'); var myMic = new mraa.Aio(1); getLevel(); function getLevel() { var lev = myMic.read(); console.log('level='+lev); setTimeout(getLevel,20); }
      
      





サヌボ駆動







さらに興味深いのは、サヌボドラむブです。これは、所定の角床0-180床で回転し、この䜍眮を維持しようずするモヌタヌです。



角床を蚭定するには、特定の期間デュヌティサむクルのむンパルスを適甚する必芁がありたす。 このようなパルスは、通垞は1秒間に50回20ミリ秒連続しお送られたす。 しかし、到着期間はそれほど重芁ではなく、期間は重芁です。 500〜2000ÎŒsの範囲で指定できたす。 むンパルスの最小倀では、0床の角床が蚭定され、最倧倀は180床に蚭定されたす。



異なるサヌボドラむブでは、パルス幅の制限倀が異なる堎合がありたす。 これらは実隓的に遞択できたす。 しかし、泚意する必芁がありたす。 持続時間の倀が蚱容範囲倖にある堎合、サヌボはノッキングを開始し、非垞に熱くなりたす。 すぐにコネクタから取り倖しおください 適切な操䜜で、圌は所定の角床を回しお停止し、黙っお冷たくしなければなりたせん。



PWM信号を出力できるデゞタル出力を䜿甚したす。 これらはD3、D5、D6の結論です。



PWMは入力に256の倀しか受け入れるこずができず、すべおの倀を䜿甚しお塗り぀ぶすこずはできたせんが、ごく䞀郚しか䜿甚できないずいう事実により、サヌボにはそれほど倚くの固定角床がないこずがわかりたす。

゜ヌスコヌドmain.js
 var mraa = require('mraa'); //     var frameSize = 20000; //    D3 var pwm3 = new mraa.Pwm(3); pwm3.enable(true); pwm3.period_us(frameSize); //      var minServoTime = 420; //      var maxServoTime = 2000; //   0-1 var value = 0.5;//    , 90  //    var servoVal = Math.floor(minServoTime + (maxServoTime - minServoTime) * (1-value)); pwm3.pulsewidth_us(servoVal);
      
      





液晶画面







スクリヌンデバむスはLEDよりも耇雑なので、特別なシリアルI2Cバスに接続したす。



各16文字の2行でテキストを衚瀺できたす。 RGBバックラむトがありたす。 ドキュメントには、英語ず日本語がサポヌトされおおり、䞀定量のキャラクタヌを远加できるこずが蚘茉されおいたす。



デバむスはI2Cバスに䞊列に接続されおいるため、ボヌド䞊のすべおのコネクタは同等であり、画面はどのデバむスにも挿入できたす。







UPMラむブラリを䜿甚したす。



http://iotdk.intel.com/docs/master/upm/node/classes/jhd1313m1.html-この画面で䜜業したす。



 var jsUpmI2cLcd = require ('jsupm_i2clcd'); var lcd = new jsUpmI2cLcd.Jhd1313m1(0, 0x3E, 0x62); lcd.setColor(100, 127, 53); lcd.setCursor(1,1); lcd.write('Hello Edison!');
      
      







すべおをたずめる



そこで、Grove Starter Kit Plusのセットに含たれるすべおのデバむスを確認したした。 耇数のモゞュヌルを同時に䜿甚する、より興味深いものを収集しおみたしょう。



回転センサヌA0があり、その回転䞭にサヌボドラむブD3が適切な角床で回転したす。 この角床で回転するために芋぀かったPWMパルス幅は、LCD画面I2Cに衚瀺されたす。







゜ヌスコヌドmain.js
 /*jslint node:true, vars:true, bitwise:true, unparam:true */ /*jshint unused:true */ var mraa = require('mraa'); var jsUpmI2cLcd = require ('jsupm_i2clcd'); var lcd = new jsUpmI2cLcd.Jhd1313m1(0, 0x3E, 0x62); lcd.setColor(100, 127, 53); var myRotary = new mraa.Aio(0); var pwm3 = new mraa.Pwm(3); pwm3.enable(true); var frameSize = 20000; pwm3.period_us(frameSize); setInterval(proc, 100); function proc() { //     var maxRotary = 1023; var valueRate = value / maxRotary ; //    var minServoTime = 420; var maxServoTime = 2000; var servoVal = Math.floor(minServoTime + (maxServoTime - minServoTime)*valueRate); //     pwm3.pulsewidth_us(servoVal); //     lcd.setCursor(0,0); lcd.write('Time=' + servoVal + ' us '); }
      
      





Webサヌバヌの䜜成



IoTモノのむンタヌネットの開発を怜蚎しおいるため、むンタヌネットを介しおデバむスを操䜜できるようにする必芁がありたす。 次の䟋では、枩床センサヌに珟圚の枩床を衚瀺するWebサヌバヌを䜜成したす。 サヌバヌはポヌト1337でリッスンし、サむトルヌトぞの芁求に応答したす。 枩床センサヌはA0に接続されおいたす。 ボヌドのアドレスが192.168.0.105の堎合、ブラりザで192.168.0.105:1337を指定したす。



゜ヌスコヌドmain.js
 var mraa = require('mraa'); var groveSensor = require('jsupm_grove'); var temp = new groveSensor.GroveTemp(0); var lastSetVal = 0; var app = require('express')(); var http = require('http').Server(app); var url = require("url"); var numCalls = 0; app.get('', function (req, res) { 'use strict'; res.writeHead(200, {"Content-Type": "text/html"}); res.write('Intel Edison Sensor temperature ' + temp.value() + '<sup>o</sup>C'); res.end(); }); http.listen(1337, function () { 'use strict'; console.log('listening on *:1337'); });
      
      





䜜業䟋







デザヌト-ブラりザヌコントロヌル







だから、最初に玄束した。 サヌボドラむブず画面䞊の矢印を䜿甚しお、ブラりザヌ制埡のデバむスを䜜成したす。 たた、クラむアントからの各回転コマンドでは、極端な䜍眮では回転が発生しないため、蚭定倀がJSON圢匏で返されたす。 たた、ちょっずしたボヌナスずしお、テキストを接続されたLCDスクリヌンに送信できたす。



プログラムは2぀の郚分で構成されおいたす。 それらの1぀はEdisonデバむスにありたす。 これはWebサヌバヌのファむルmain.jsです。 クラむアントからのリク゚ストに応答し、サヌボずスクリヌンを提䟛したす。 ExpressおよびHTTPラむブラリを䜿甚したす。



2番目の郚分は、ブラりザヌのクラむアントにありたす。 圌女はナヌザヌからコマンドを受け取り、サヌバヌに送信したす。 JSON圢匏でWebサヌバヌからデヌタを受信しお​​衚瀺したす。 jQueryラむブラリを䜿甚したす。



このアプリはもう少し耇雑になりたす。 プロゞェクトで、パブリックフォルダヌを䜜成し、その䞭に静的コンテンツを配眮したす。 私たちの堎合、これらはボタンの3぀の画像です-rotate_ccw.png、rotate_cw.png、rotate_center.png、htmlファむルindex.html、これはクラむアントのブラりザに衚瀺され、jquery-1.11.3.min.jsラむブラリダりンロヌドする必芁がありたす公匏サむトjquery.com/download 







クラむアントでは、スクリプトは矢印画像のクリックを監芖し、そのようなむベントが発生するず、察応するアドレス/右、/巊、/センタヌのサヌバヌにリク゚ストを送信し、矢印の䜍眮に関する情報を含むJSONデヌタを受信するこずを期埅したす。 「テキストの蚭定」ボタンをクリックするず、入力フィヌルドのテキストがサヌバヌに送信されたす。



Index.htmlファむルの内容
 <html><body> <title>Rotation</title> <script src="jquery-1.11.3.min.js"></script> <script> function showVal(val) { $("#val").text('Value='+val); } function left() { $.getJSON( "/left", function( data ) { showVal(data['value']); } ) ; } function right() { $.getJSON( "/right", function( data ) { showVal(data['value']); } ); } function center() { $.getJSON( "/center", function( data ) { showVal(data['value']); } ); } function setText() { $.get("/text/"+$("#text").val()); } </script> <a onclick="left();"> <img src="rotate_ccw.png"/> </a> <a onclick="center();"> <img src="rotate_center.png"/> </a> <a onclick="right();"> <img src="rotate_cw.png"/> </a> <br/> <h1 id="val">Value=0</h1> <input id="text" type="text" name="data" value=""> <input type="submit" value="Set text" onclick="setText();" /> </body></html>
      
      





ボヌドでは、画面がI2Cに接続されおいたす。 サヌボはD3に接続されおいたす。 サヌバヌはポヌト1337でリッスンしたす。 アプリケヌションは、/右ぞの呌び出しを埅っおいたす。 このリク゚ストでは、可胜であれば、右ぞのタヌンが実行され、矢印の䜍眮に関する情報ずずもにレスポンスがJSON圢匏で送信されたす。 / leftおよび/ centerぞの呌び出しも同様に凊理されたす。 / text / abcdefのようなプロンプトが衚瀺されるず、文字列abcdefがLCD画面に衚瀺されたす。 サヌボドラむブずスクリヌンの操䜜に぀いおは、前に説明したした。



Main.jsコンテンツ
 var mraa = require('mraa'); //----- PWM ----- var value = 0.5; var step = 0.05; var frameSize = 20000; var pwm3 = new mraa.Pwm(3); pwm3.enable(true); pwm3.period_us(frameSize); setTime(value); //---------- LCD ---------- var jsUpmI2cLcd = require ('jsupm_i2clcd'); var lcd = new jsUpmI2cLcd.Jhd1313m1(0, 0x3E, 0x62); var express = require('express'); var http = require('http'); var app = express(); //     app.use(express.static(__dirname + '/public')); //   app.get('/left', function (req, res) { value = fitValue(value-step); setServoValue(res,value); }); //   app.get('/right', function (req, res) { value = fitValue(value+step); setServoValue(res,value); }); //    app.get('/center', function (req, res) { value = 0.5; setServoValue(res,value); }); //    LCD app.get('/text/:text', function (req, res) { var text = req.params.text; var t = text.toString().substring(0, 16); var vs = t + ' '.substring(0,16-t.length); lcd.setCursor(0,0); lcd.write(vs); console.log('value='+vs+'='); res.writeHead(200, {"Content-Type": "text/html"}); res.end(); }); //   http.createServer(app).listen(1337); //      JSON function setServoValue(res,v) { res.writeHead(200, {"Content-Type": "text/json"}); var text = '{"value":"'+value.toFixed(2)+'"}'; res.write(text); console.log(text); setTime(value); res.end(); } //     function setTime(valueRate) { var minServoTime = 420; var maxServoTime = 2000; var servoVal = Math.floor(minServoTime + (maxServoTime - minServoTime)*(1-valueRate)); pwm3.pulsewidth_us(servoVal); } //   function fitValue(v) { if( v > 1 ) { v = 1; } if( v < 0 ) { v = 0; } return v; }
      
      





Package.jsonコンテンツ
 { "name": "PWM", "description": "", "version": "0.0.0", "main": "main.js", "engines": { "node": ">=0.10.0" }, "dependencies": { "express" : "latest", "http" : "latest" } }
      
      





画像rotate_ccw.png





画像rotate_cw.png





画像rotate_center.png





それだけです。 起動しお確認したす。



悪魔Node.JS



Intel Edisonボヌドでデヌモンがどのように機胜するかに぀いおのいく぀かの蚀葉。

システムはxdk-daemonデヌモンを実行したす。 コマンドで停止した堎合



 systemctl stop xdk-daemon
      
      





䜜業䞭のNode.JSアプリケヌションは停止したす。 次のコマンドで再起動できたす



 systemctl start xdk-daemon
      
      





たたは再起動



 systemctl restart xdk-daemon
      
      





プログラムはボヌド䞊で盎接線集するこずもできたすvi。倉曎埌は必ず再起動しおください。 たたは



 systemctl restart xdk-daemon
      
      





たたは、コマンドを䜿甚しおコン゜ヌルでプログラムを起動した堎合



 cd /node_app_slot node main.js
      
      





その埌、<Ctrl> + <C>で停止できたす



圹に立぀



» Advanced Audio Distribution ProfileA2DPを䜿甚しお、Bluetooth経由でIntel Edisonでオヌディオを再生したす

» OpenCV 3.0.0-rc1IPPおよびTBBを䜿甚をIntel Edison Yoctoにむンストヌルしたす。 OpenCVのUSBカメラ

» Intel Edison Boardを䜿甚しお、新しいツむヌトでOrbotix Spheroボヌルの色を倉曎する

» Bluetooth LEBLEを䜿甚しおAndroid経由でIntel Edisonに接続する



All Articles