如果我们能够用创客神器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)
/*https://github.com/iobridge/ThingSpeak-Arduino-Examples/blob/master/Ethernet/Arduino_to_ThingSpeak.ino 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 (https://thingspeak.com/docs) 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 – https://thingspeak.com/users/new
* 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 (http://www.nothans.com)
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 (client.connect(server, 80))
{
Serial.println(“Connected to ThingSpeak…");
Serial.println();
client.print(“POST /update HTTP/1.1\n");
client.print(“Host: api.thingspeak.com\n");
client.print(“Connection: close\n");
client.print(“X-THINGSPEAKAPIKEY: “+writeAPIKey+"\n");
client.print(“Content-Type: application/x-www-form-urlencoded\n");
client.print(“Content-Length: “);
client.print(tsData.length());
client.print(“\n\n");
client.print(tsData);
lastConnectionTime = millis();
resetCounter = 0;
}
else
{
Serial.println(“Connection Failed.");
Serial.println();
resetCounter++;
if (resetCounter >=5 ) {resetEthernetShield();}
lastConnectionTime = millis();
}
}
void resetEthernetShield()
{
Serial.println(“Resetting Ethernet Shield.");
Serial.println();
client.stop();
delay(1000);
Ethernet.begin(mac, ip, gateway, subnet);
delay(1000);
}
void setup()
{
// Start Serial for debugging on the Serial Monitor
Serial.begin(9600);
lightMeter.begin();
// Start Ethernet on Arduino
// start the Ethernet connection:
if (Ethernet.begin(mac) == 0) {
Serial.println(“Failed to configure Ethernet using DHCP");
// no point in carrying on, so do nothing forevermore:
// try to congifure using IP address instead of DHCP:
Ethernet.begin(mac, ip, dnServer, gateway, subnet);
}
// give the Ethernet shield a second to initialize:
delay(1000);
Serial.println(“connecting…");
}
//String analogValue0 = String(lightMeter.readLightLevel(), DEC);
void loop()
{
String analogPin0 = String(analogRead(A0), DEC);
// Print Update Response to Serial Monitor
if (client.available())
{
char c = client.read();
Serial.print(c);
}
// Disconnect from ThingSpeak
if (!client.connected() && lastConnected)
{
Serial.println();
Serial.println(“…disconnected.");
Serial.println();
client.stop();
}
// Update ThingSpeak
if(!client.connected() && (millis() – lastConnectionTime > updateInterval))
{
updateThingSpeak(“field1="+analogPin0);
}
lastConnected = client.connected();
}
為了讓上述程式可以順利運做,依下圖黃色區將讀者取得的 ThingSpeak 寫入金鑰,填入自己的『ThingSpeak 寫入金鑰』,程式方能順利執行。第15步:
如下图所示,可以看到本次实验-ThingSpeak之亮度监控程序结果画面。
第16步:
由下图红框区处,可以查阅Channel写入数据。读者可以看到,我们已经成功将简单的亮度监控服务器的数据,送到ThinkSpeak物联网平台,并可以查看资料。
第17步:
Import/Export Channel数据
进入网站后,先点选下图红框区,切换到Channel的数据。第18步:
看到下图红框区,可以将ThinkSpeak上Channel的数据输出到PC个人电脑。
第19步:
当按下上图的『Download』图标后,我们就可以看到该Channel的数据输出成为CSV的数据,并由下图所示,转成CSV的数据在EXCEL显示出来,透过EXCEL的任何操作,算出其统计数据或转成图表。