人類的未來:透過THINGSPEAK網站監控居家亮度【轉譯】手工電子DIY教程
在家居生活中,亮度是保護我們眼睛最重要的靈藥,如果亮度不足,不但沒有安全感,對視力的保健更是一大殺手。我們如果在家裏看到這樣的情形,當然可以馬上調整光線,但是如果我們在外面上班,就不太容易查覺到這個隱藏的問題。
如果我們能夠用創客神器Arduino來照顧我們的眼睛,透過手機上網,直接使用瀏覽器監控我們家的亮度,那該有多好?所以本月我們要使用Arduiono,透過簡單的上網擴充卡,和網際網絡中頂尖的物聯網平台:ThingSpeak網站。
主要材料:
Arduino 開發板 | 太網路模組 |
所需工具:
電腦 |
製作步驟:
第1步:
ThingSpeak網站
ThingSpeak網站是一個專業的物聯網網站,可以利用這個網站先行開發。(若有不懂之處,可以參考網路資源和網站文章)該網站提供許多免費的資源,瞬間就讓我們的家庭進化成先進的智慧家庭。所以本篇要告訴大家,如何簡單、快速、有效的建立一個居家亮度監控的物聯網。
建立帳號
先到ThingSpeak網站建立帳號,進入網站後到主頁,先點選下圖紅框區,建立一個帳號(有帳號的讀者可以跳過本節)。
第2步:
先登入ThingSpeak網站後,依下圖紅框處,先行查看目前的Channel。
第3步:
創建新Channel
進入網站後,選擇Channel區,由下圖紅框區所示,沒有任何東西,代表需要先行創建新的Channel。
第4步:
如由下圖紅框區所示,點選New Channel菜單來創建新的Channel。
第5步:
下圖為創建新的Channel信息的簡單介紹畫面。
第6步:
可以參考下圖紅框區,將必要的信息填入。
第7步:
輸入數據後,將畫面卷軸拉至下方後,參考下圖紅框處,選Save Channel的菜單,將此Channel存盤。
第8步:
由下圖所示,完成Channel創建後,可以看到這個Channel的畫面。
第9步:
取得Channel寫入密鑰
進入網站建立一個新的Channel之後,先點選下圖紅框區,查看Channel的API Key的數據。
第10步:
由下圖紅框區處,可以看到本Channel寫入密鑰,本書示例是『UR42ZTYTE4PBQ8Y2』。
第11步:
實做亮度監控之物聯網
首先,組立W5100以太網路模塊是非常容易的一件事,如下圖所示,只要將W5100以太網路模塊堆疊到任何Arduino開發板之上就可以了。
第12步:
之後,再將組立好的W5100以太網路模塊(如下圖所示),只要將USB線插入Arduino開發板,再將RJ 45的網路線一端插入W5100以太網路模塊,另一端則插入可以上網的集線器(Switch HUB)的任何一個區域網接口(Lan Port)就可以了。為了取得亮度的值,作者使用 BH1750FVI 亮度模組來偵測亮度,可依照下表之 BH1750FVI 亮度模組接腳表,將 BH1750FVI 亮度模組接在 W5100 以太網路模組堆疊卡之上。
第13步:
BH1750FVI 亮度模組接腳表:
第14步:
我們遵照前幾章所述,將 Arduino 開發板的驅動程式安裝好之後,打開 Arduino 開發板的開發工具:Sketch IDE 整合開發軟體,攥寫一段程式,如下表所示之 ThingSpeak 之亮度監控程式,我們就可以讓 W5100 以太網路模組堆疊卡變成一台簡易的物聯網之亮度監控伺服器來運作了。
ThingSpeak 之亮度監控程式(範例原始碼網址):
Arduino_to_ThingSpeak (Arduino_to_ThingSpeak)
/*_to_ Arduino –> ThingSpeak Channel via Ethernet The ThingSpeak Client sketch is designed for the Arduino and Ethernet. This sketch updates a channel feed with an analog input reading via the ThingSpeak API () using HTTP POST. The Arduino uses DHCP and DNS for a simpler network setup. The sketch also includes a Watchdog / Reset function to make sure the
Arduino stays connected and/or regains connectivity after a network outage.
Use the Serial Monitor on the Arduino IDE to see verbose network feedback
and ThingSpeak connectivity status.
Getting Started with ThingSpeak:
* Sign Up for New User Account –
* Create a new Channel by selecting Channels and then Create New Channel
* Enter the Write API Key in this sketch under “ThingSpeak Settings"
Arduino Requirements:
* Arduino with Ethernet Shield or Arduino Ethernet
* Arduino 1.0+ IDE
Network Requirements:
* Ethernet port on Router
* DHCP enabled on Router
* Unique MAC Address for Arduino
Created: October 17, 2011 by Hans Scharler ()
Additional Credits:
Example sketches from Arduino team, Ethernet by Adrian McEwen
*/
#include <SPI.h>
#include <Ethernet.h>
#include <Wire.h>
#include <BH1750.h>
// Local Network Settings
byte mac[] = {
0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF
};
IPAddress ip(192, 168, 30, 200);
IPAddress dnServer(168, 95, 1, 1);
// the router’s gateway address:
IPAddress gateway(192, 168, 30, 254);
// the subnet:
IPAddress subnet(255, 255, 255, 0);
// ThingSpeak Settings
byte server[] = { 184, 106, 153, 149 }; // IP Address for the ThingSpeak API
String writeAPIKey = “UR42ZTYTE4PBQ8Y2 “; // Write API Key for a ThingSpeak Channel
const int updateInterval = 30000; // Time interval in milliseconds to update ThingSpeak
EthernetClient client ;
// Variable Setup
long lastConnectionTime = 0;
boolean lastConnected = false;
int resetCounter = 0;
// Initialize Arduino Ethernet Client
BH1750 lightMeter;
void updateThingSpeak(String tsData)
{
if (ect(server, 80))
{
tln(“Connected to ThingSpeak…");
tln();
t(“POST /update HTTP/1.1n");
t(“Host: n");
t(“Connection: closen");
t(“X-THINGSPEAKAPIKEY: “+writeAPIKey+"n");
t(“Content-Type: application/x-www-form-urlencodedn");
t(“Content-Length: “);
t(th());
t(“nn");
t(tsData);
lastConnectionTime = millis();
resetCounter = 0;
}
else
{
tln(“Connection Failed.");
tln();
resetCounter++;
if (resetCounter >=5 ) {resetEthernetShield();}
lastConnectionTime = millis();
}
}
void resetEthernetShield()
{
tln(“Resetting Ethernet Shield.");
tln();
();
delay(1000);
n(mac, ip, gateway, subnet);
delay(1000);
}
void setup()
{
// Start Serial for debugging on the Serial Monitor
n(9600);
n();
// Start Ethernet on Arduino
// start the Ethernet connection:
if (n(mac) == 0) {
tln(“Failed to configure Ethernet using DHCP");
// no point in carrying on, so do nothing forevermore:
// try to congifure using IP address instead of DHCP:
n(mac, ip, dnServer, gateway, subnet);
}
// give the Ethernet shield a second to initialize:
delay(1000);
tln(“connecting…");
}
//String analogValue0 = String(LightLevel(), DEC);
void loop()
{
String analogPin0 = String(analogRead(A0), DEC);
// Print Update Response to Serial Monitor
if (lable())
{
char c = ();
t(c);
}
// Disconnect from ThingSpeak
if (!ected() && lastConnected)
{
tln();
tln(“…disconnected.");
tln();
();
}
// Update ThingSpeak
if(!ected() && (millis() – lastConnectionTime > updateInterval))
{
updateThingSpeak(“field1="+analogPin0);
}
lastConnected = ected();
}
為了讓上述程式可以順利運做,依下圖黃色區將讀者取得的 ThingSpeak 寫入金鑰,填入自己的『ThingSpeak 寫入金鑰』,程式方能順利執行。
第15步:
如下圖所示,可以看到本次實驗-ThingSpeak之亮度監控程序結果畫面。
第16步:
由下圖紅框區處,可以查閲Channel寫入數據。讀者可以看到,我們已經成功將簡單的亮度監控服務器的數據,送到ThinkSpeak物聯網平台,並可以查看資料。
第17步:
Import/Export Channel數據
進入網站後,先點選下圖紅框區,切換到Channel的數據。
第18步:
看到下圖紅框區,可以將ThinkSpeak上Channel的數據輸出到PC個人電腦。
第19步:
當按下上圖的『Download』圖標後,我們就可以看到該Channel的數據輸出成為CSV的數據,並由下圖所示,轉成CSV的數據在EXCEL顯示出來,透過EXCEL的任何操作,算出其統計數據或轉成圖表。