前の記事
Arduino YUN上の温湿度センサデータをIBM IoT Foundation QuickStartへ送信する
ではArduino YUNを使ったのだけど、今回はIntel Edison Kit for Arduinoで試してみた。
ただ、DHTライブラリをつかおうとすると、ヘッダファイルに埋め込まれた"#error CPU SPEED NOT SUPPORTED"にひっかかってしまったので、以下の光センサを使った。
スイッチサイエンス:Grove - 光センサ
配線はほぼDHTの場合と同じ。オス・オスのジャンパ線で以下のように結線した。
- 光センサ側GND(黒)→Edison(Arduino)GND
- 光センサ側VCC(赤)→Edison(Arduino)5V
- 光センサ側SIG(黄)→Edison(Arduino)A0
Edisonのほうは、前に書いた記事
Intel Edison をセットアップしてLチカまで持っていく
を済ませて、PuTTYから「configure_edison --setup」を実行して初期設定をすませておいた状態のものを使った。
Edison用のArduino IDE(執筆時1.6.0)を起動して、ボードを「Intel Edison」、ポートを「Intel Edison Virtual COM Port」のCOM番号を選択しておく。ライブラリは前の記事を参考のこと。
Sketchプログラムは、以下のとおり。
#include <SPI.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <PubSubClient.h>
// Intel Edison Kit for Arduino
// MAC アドレス(PuTTYでifconfigすればわかるので書き換える)
byte mac[] = {0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX };
char macstr[] = "xxxxxxxxxxxx";
// WiFi(環境に合わせて書き換える)
char ssid[] = "XXXXX";
char pass[] = "XXXXXXX";
// クライアントオブジェクト
WiFiClient c;
// 光量センサ
// LIGHT sig ピン
#define LIGHTPIN A0
float lightLevel = 0.0;
// MQTTブローカ
// PC (mosquitto)
//byte localserver[] = {192, 168, 1, 13 };
// IBM IoTF quickstart
char servername[]="messaging.quickstart.internetofthings.ibmcloud.com";
String clientName = String("d:quickstart:arduino:") + macstr;
String topicName = String("iot-2/evt/status/fmt/json");
// MQTTクライアントオブジェクト
//PubSubClient client(localserver, 1883, 0, c);
PubSubClient client(servername, 1883, 0, c);
void setup() {
// シリアル初期化
Serial.begin(9600);
while (!Serial) {
; // 待機
}
Serial.println("Start serial");
// WiFi 初期化
WiFi.begin(ssid, pass);
Serial.println("Start wifi");
// 待機
delay(2000);
}
void loop() {
char clientStr[34];
clientName.toCharArray(clientStr,34);
char topicStr[26];
topicName.toCharArray(topicStr,26);
getData();
if (!client.connected()) {
Serial.print("Trying to connect to: ");
Serial.println(clientStr);
client.connect(clientStr);
}
if (client.connected() ) {
String json = buildJson();
char jsonStr[200];
json.toCharArray(jsonStr,200);
boolean pubresult = client.publish(topicStr,jsonStr);
Serial.print("attempt to send ");
Serial.println(jsonStr);
Serial.print("to ");
Serial.println(topicStr);
if (pubresult)
Serial.println("successfully sent");
else
Serial.println("unsuccessfully sent");
}
delay(5000);
}
String buildJson() {
String data = "{";
data+="\n";
data+= "\"d\": {";
data+="\n";
data+="\"myName\": \"Intel Edison for Arduino Light\",";
data+="\n";
data+="\"lightLevel\": ";
data+=(int)lightLevel;
data+="\n";
data+="}";
data+="\n";
data+="}";
return data;
}
void getData() {
int sensorValue = analogRead(LIGHTPIN);
lightLevel = (float) (1023-sensorValue)*10/sensorValue;
}
前の記事に書いたとおりIBM IoT FoundationのTry QuickStartからMACをアドレスを指定してしばらく待つと、グラフ表示される。
光センサの補正は、どこかの本で書いたものを使ったが、補正は必要かな。
Arduino IDEのWiFiライブラリがつかえるのがありがたい。これでWiFi接続がとっても簡単。
でも本当はmarrとかをJavaScriptで書かないとダメなことはわかっているんだけど..
しかもEdisonでpsしたら、mosquittoあがってるし..ブローカとしてEdisonを使ってあげるのが正しい?!
0 件のコメント:
コメントを投稿