Thingspeak
The open data platform for the Internet of Things
它是一個讓你上傳數據的平台,提供API 以及圖表
只要申請一個帳號,設定好Channel以及field就可以用了 ,
唯一的認證是API KEY,所以對Arduino 來說省事多了。
1.Arduino UNO
2.Wi-Fi shield
3.DHT11
1.先申請一個帳號,不用錢,也一用填信用卡資料。只要填入帳密和E-mail
https://thingspeak.com/users/sign_up
2.登入你的帳號
https://thingspeak.com/login
新建一個Channel
填入Channel的資料
按下Save Channel
接下來會看到主畫面,但都沒有資料
接下來我們需要APK KEY,目前我們只會用到Write API KEY
#include <SPI.h> #include <WiFi.h> #include "DHT.h" #define DHTTYPE DHT11 #define DHTPIN 2 // Local Network Settings char ssid[] = "qoo"; // your network SSID (name) char pass[] = "12345678"; // your network password int keyIndex = 0; // your network key Index number (needed only for WEP) int status = WL_IDLE_STATUS; DHT dht(DHTPIN, DHTTYPE); WiFiServer server(80); // ThingSpeak Settings char thingSpeakAddress[] = "api.thingspeak.com"; String APIKey = "BZT8MF599ZPUC48RBZT8MF599ZPUC48R"; // enter your channel's Write API Key const int updateThingSpeakInterval = 20 * 1000; // 20 second interval at which to update ThingSpeak // Variable Setup long lastConnectionTime = 0; boolean lastConnected = false; // Initialize Arduino Ethernet Client WiFiClient client; void setup() { // Start Serial for debugging on the Serial Monitor Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } dht.begin(); // check for the presence of the shield: if (WiFi.status() == WL_NO_SHIELD) { Serial.println("WiFi shield not present"); // don't continue: while (true); } // attempt to connect to Wifi network: while ( status != WL_CONNECTED) { Serial.print("Attempting to connect to SSID: "); Serial.println(ssid); // Connect to WPA/WPA2 network. Change this line if using open or WEP network: status = WiFi.begin(ssid, pass); // wait 10 seconds for connection: delay(10000); } // you're connected now, so print out the status: printWifiStatus(); } void loop() { // Wait a few seconds between measurements. delay(30000); // Reading temperature or humidity takes about 250 milliseconds! // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) float h = dht.readHumidity(); // Read temperature as Celsius (the default) float t = dht.readTemperature(); // Read temperature as Fahrenheit (isFahrenheit = true) float f = dht.readTemperature(true); // Check if any reads failed and exit early (to try again). if (isnan(h) || isnan(t) || isnan(f)) { Serial.println("Failed to read from DHT sensor!"); return; } // Compute heat index in Fahrenheit (the default) float hif = dht.computeHeatIndex(f, h); // Compute heat index in Celsius (isFahreheit = false) float hic = dht.computeHeatIndex(t, h, false); Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.print(" *C "); Serial.print(f); Serial.print(" *F\t"); Serial.print("Heat index: "); Serial.print(hic); Serial.print(" *C "); Serial.print(hif); Serial.println(" *F"); // 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("...disconnected"); Serial.println(); client.stop(); } // Update ThingSpeak if (!client.connected() && (millis() - lastConnectionTime > updateThingSpeakInterval)) { updateThingSpeak("field1=" +String(t)+"&field2="+String(h)); } lastConnected = client.connected(); } void updateThingSpeak(String tsData) { if (client.connect(thingSpeakAddress, 80)) { client.print("POST /update HTTP/1.1\n"); client.print("Host: api.thingspeak.com\n"); client.print("Connection: close\n"); client.print("X-THINGSPEAKAPIKEY: " + APIKey + "\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(); if (client.connected()) { Serial.println("Connecting to ThingSpeak..."); Serial.println(); } } } void printWifiStatus() { // print the SSID of the network you're attached to: Serial.print("SSID: "); Serial.println(WiFi.SSID()); // print your WiFi shield's IP address: IPAddress ip = WiFi.localIP(); Serial.print("IP Address: "); Serial.println(ip); // print the received signal strength: long rssi = WiFi.RSSI(); Serial.print("signal strength (RSSI):"); Serial.print(rssi); Serial.println(" dBm"); }
Serial Port輸出資訊。
Thingspeak顯示的內容
資料傳送間隔,至少20秒,Arduino畢竟運算能力不比PC,多給他一點時間,
處理網路的資料傳送。
https://www.arduino.cc/en/Tutorial/WiFi101ThingSpeakDataUploader
沒有留言:
張貼留言