ThingSpeak 是一個專為物聯網而產生的應用程式平台,它允許你使用網路設備即時地將數據上傳到雲端使之聚集在一起(成為資料)。
而頻道(Channel)是 ThingSpeak 心臟之所在,您可以切換不同的頻道以存取不同的資料。
下列圖片是您可以在 ThingSpeak 達成的事情之一,將住家的光線數據上傳到雲端:
Thingspeak 官網 https://thingspeak.com/
想要瞭解 Thingspeak 能為您做什,我們來看影片比較快,影片網址 https://www.youtube.com/watch?v=JsHGxe6lRSY
建議在使用 Thingspeak.com 之前要先註冊,註冊網址 https://thingspeak.com/users/sign_up
ThingSpeak 所提供的API,下載網址 https://github.com/iobridge/ThingSpeak
2015年7月19日 星期日
將光線數據上傳到雲端(ThingSpeak)
Thingspeak.com 允許你使用網路設備即時地將數據上傳到雲端使之聚集在一起(成為資料),所以我決定要用一個簡單的光線感測器來測試這個系統。而 Processing 應用軟體剛好符合我的需求,可以透過它操控網路攝影機來偵測人的移動,然後將結果上傳到 ThingSpeak 頻道。
開始前的測試
首先,下載這個簡單的程式,你可以透過它和 ThingSpeak.com 從事簡單的聯繫:
https://drive.google.com/file/d/0B2ZbLCPalrgEZWZjNWMxYjYtZTZmYS00YTExLThkNWYtYzI0ZjYxYWY4YzRm/view?ddrp=1&hl=en#
你可以用鍵盤隨便打幾個數字,這些數字將會被上傳到 ThingSpeak.com,如果出現下列畫面表示可以正常工作。
上傳光線感測數據
在這兒我們會使用 LDR 去偵測光線的強度,請依照下列電路圖在麵包板上插妥零件與接線。
底下這個程式很簡單,它單純地只是把 A0 腳位的值透過序列埠傳送出去,程式如下:
請您將上述程式複製並貼到 Arduino IDE 裡,並上傳到板子。
接收數據
我們要用 Processing 來接收這些數據,需要變更一些程式碼,如下:
/**
* Tests the thinkspeak channel by sending any numeric
* keypress using the specified APIKEY and FIELD
*/
import processing.serial.*;
import processing.net.*;
//CONFIGURATION
String APIKEY = "YOURAPI"; //your api key
String FIELD = "field1";
int PORTNUM = 0; //port number of your arduino
//END CONFIGURATION
Serial arduino;
Client c;
String data;
int number; //read from arduino
void setup() {
size(600, 400);
//setup the serial port
// List all the available serial ports:
println(Serial.list());
//Init the Serial object
arduino = new Serial(this, Serial.list()[PORTNUM], 9600);
// The font must be located in the sketch's
// "data" directory to load successfully
PFont font;
font = loadFont("Monaco-12.vlw");
textFont(font);
}
void draw() {
background(50);
fill(255);
text("ThinkSpeak Processor", 10, 20);
fill(0, 255, 0);
text("Light Value Read: " + number, 10, 40);
if( data != null ) {
fill(0, 255, 0);
text("Server Response:", 10, 60);
fill(200);
text(data, 10, 80);
}
if(c != null) {
if (c.available() > 0) { // If there's incoming data from the client...
data = c.readString(); // ...then grab it
println(data);
}
}
//if we have a new line from our arduino, then send it to the server
String ln;
if( (ln = arduino.readStringUntil('\n')) != null) {
try {
number = new Integer(trim(ln));
if(number < 1025) {
println("Writing " + number);
sendNumber(number);
}
}
catch(Exception ex) {
}
}
}
void sendNumber(float num) {
c = new Client(this, "api.thingspeak.com", 80); // Connect to server on port 80
c.write("GET /update?key="+APIKEY+"&"+FIELD+"=" + num + " HTTP/1.1\n");
c.write("Host: my_domain_name.com\n\n"); // Be polite and say who we are
}
請您將上述程式複製並貼到 Processing IDE 裡,並執行它。
如果你看到下列畫面,其中 Light Value Read:的值每 2 秒跳動一次,那麼恭喜你,你成功了。
開始前的測試
首先,下載這個簡單的程式,你可以透過它和 ThingSpeak.com 從事簡單的聯繫:
https://drive.google.com/file/d/0B2ZbLCPalrgEZWZjNWMxYjYtZTZmYS00YTExLThkNWYtYzI0ZjYxYWY4YzRm/view?ddrp=1&hl=en#
你可以用鍵盤隨便打幾個數字,這些數字將會被上傳到 ThingSpeak.com,如果出現下列畫面表示可以正常工作。
上傳光線感測數據
在這兒我們會使用 LDR 去偵測光線的強度,請依照下列電路圖在麵包板上插妥零件與接線。
底下這個程式很簡單,它單純地只是把 A0 腳位的值透過序列埠傳送出去,程式如下:
void setup(){ Serial.begin(9600); } void loop(){ Serial.println(analogRead(0)); delay(2000); }
請您將上述程式複製並貼到 Arduino IDE 裡,並上傳到板子。
接收數據
我們要用 Processing 來接收這些數據,需要變更一些程式碼,如下:
/**
* Tests the thinkspeak channel by sending any numeric
* keypress using the specified APIKEY and FIELD
*/
import processing.serial.*;
import processing.net.*;
//CONFIGURATION
String APIKEY = "YOURAPI"; //your api key
String FIELD = "field1";
int PORTNUM = 0; //port number of your arduino
//END CONFIGURATION
Serial arduino;
Client c;
String data;
int number; //read from arduino
void setup() {
size(600, 400);
//setup the serial port
// List all the available serial ports:
println(Serial.list());
//Init the Serial object
arduino = new Serial(this, Serial.list()[PORTNUM], 9600);
// The font must be located in the sketch's
// "data" directory to load successfully
PFont font;
font = loadFont("Monaco-12.vlw");
textFont(font);
}
void draw() {
background(50);
fill(255);
text("ThinkSpeak Processor", 10, 20);
fill(0, 255, 0);
text("Light Value Read: " + number, 10, 40);
if( data != null ) {
fill(0, 255, 0);
text("Server Response:", 10, 60);
fill(200);
text(data, 10, 80);
}
if(c != null) {
if (c.available() > 0) { // If there's incoming data from the client...
data = c.readString(); // ...then grab it
println(data);
}
}
//if we have a new line from our arduino, then send it to the server
String ln;
if( (ln = arduino.readStringUntil('\n')) != null) {
try {
number = new Integer(trim(ln));
if(number < 1025) {
println("Writing " + number);
sendNumber(number);
}
}
catch(Exception ex) {
}
}
}
void sendNumber(float num) {
c = new Client(this, "api.thingspeak.com", 80); // Connect to server on port 80
c.write("GET /update?key="+APIKEY+"&"+FIELD+"=" + num + " HTTP/1.1\n");
c.write("Host: my_domain_name.com\n\n"); // Be polite and say who we are
}
如果你看到下列畫面,其中 Light Value Read:的值每 2 秒跳動一次,那麼恭喜你,你成功了。
2015年7月12日 星期日
error: 'TKD2' was not declared in this scope
新版的 Arduino IDE 在使用 IR Library 時會編譯錯誤,如下圖:
導致錯誤的原因是因為在 IRremoteTools.cpp 裡面沒有宣告 'TKD2' 變數。
歸根究底的原因是新版的 IDE 會讀取內建的紅外線函式庫,而這個內建的紅外線函式庫是專為 Adafruit 公司產品訂製的,如果你沒有該公司的產品可能就無法使用它的函式庫。
那麼該如何解決這個問題呢?
解決辦法有很多種,其中一種是去修改 RobotIRremote.cpp,但這個方法對於不熟悉 C 語言的人來說似乎是有點困難,有可能會愈弄愈糟。
另一種辦法是用其他可用的紅外線函式庫取代內建的 RobotIRremote Library,此舉應該是最簡單又安全的作法了。
下載 IR Library https://github.com/coopermaa/Arduino-IRremote/archive/master.zip
下載後解壓縮,將資料夾名稱更改為「IRremote」,然後複製到 [Arduino]\libraries 路徑下,再重新啟動 Arduino IDE 即可。
你也可以把 Robot_Control、Robot_Motor 和 RobotIRremote 這幾個資料夾移除掉,這樣並不會影響紅外線函式庫的運作。
檢查新的紅外線函式庫是否正常運作
我們可以開啟內建的範例程式:
1. 點擊下拉功能表 File > Examples > IRremote > IRrecvDemo
2. 點擊工具列的 Upload 按鈕。
成功編譯,如下圖:
導致錯誤的原因是因為在 IRremoteTools.cpp 裡面沒有宣告 'TKD2' 變數。
歸根究底的原因是新版的 IDE 會讀取內建的紅外線函式庫,而這個內建的紅外線函式庫是專為 Adafruit 公司產品訂製的,如果你沒有該公司的產品可能就無法使用它的函式庫。
那麼該如何解決這個問題呢?
解決辦法有很多種,其中一種是去修改 RobotIRremote.cpp,但這個方法對於不熟悉 C 語言的人來說似乎是有點困難,有可能會愈弄愈糟。
另一種辦法是用其他可用的紅外線函式庫取代內建的 RobotIRremote Library,此舉應該是最簡單又安全的作法了。
下載 IR Library https://github.com/coopermaa/Arduino-IRremote/archive/master.zip
下載後解壓縮,將資料夾名稱更改為「IRremote」,然後複製到 [Arduino]\libraries 路徑下,再重新啟動 Arduino IDE 即可。
你也可以把 Robot_Control、Robot_Motor 和 RobotIRremote 這幾個資料夾移除掉,這樣並不會影響紅外線函式庫的運作。
檢查新的紅外線函式庫是否正常運作
我們可以開啟內建的範例程式:
1. 點擊下拉功能表 File > Examples > IRremote > IRrecvDemo
2. 點擊工具列的 Upload 按鈕。
成功編譯,如下圖:
訂閱:
文章 (Atom)