:::

7. Thingspeak程式

 

/*
OpenJumper WebServer Example
[url] http://www.openjumper.com/ethernet/ [/url]
 
顯示室內照度+開關燈控制
通過手機、平板、計算機等設備訪問
Arduino Server,就看到當前室內光線照度
在A0引腳連接光敏模塊,用於採集室內光線;在2號引腳連接LED模塊。
 
奈何col 2014.12.25
ng344 2018.05.09
*/
 
#include <SPI.h>
#include <Ethernet.h>
#include "DHT.h"

#define DHTPIN 2     // what digital pin we're connected to
#define DHTTYPE DHT21   // DHT 22  (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte gateway[] = { 203, 68, 102, 254 };                   // internet access via router
byte subnet[] = { 255, 255, 255, 0 };                  // 24bit Subnet Mask
byte dns1[] = {163,26,1,1};
IPAddress ip(203,68,102,217);
EthernetServer server(80);
EthernetClient client;

// ThingSpeak Settings
char thingSpeakAddress[] = "api.thingspeak.com";
String APIKey = "YCIX1HI3P48BGM6X"; // enter your channel's Write API Key
const int updateTSInterval = 20 * 1000; // 20 second interval at which to update ThingSpeak

// ifttt
char iftttAddress[] = "maker.ifttt.com";
String tttKey = "dZIsDaOk8yzMG8vaATmoRx";
const int updateiftttInterval = 30 * 1000; // 20 second interval at which to update ifttt

// Variable Setup
long tslastCT = 0;
long tttlastConnectionTime = 0;
 
void setup() {
  Serial.begin(9600);
  //初始化Ethernet通信
  Ethernet.begin(mac, ip, dns1, gateway, subnet);
  server.begin();
  dht.begin();
  Serial.print( "Server is at " );
  Serial.println(Ethernet.localIP());
}
 
void loop() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  // 監聽連入的客戶端
  client = server.available();
  if (client) {
    Serial.println( "new client" );
 //   boolean currentLineIsBlank = false ;
    while (client.connected()) {
      if (client.available()) {
          SendHTML(h,t);
          break ;
      }
    }
    delay(1);
    client.stop();
    Serial.println( "client disonnected" );
  }

  // Update ThingSpeak
  if ((millis() - tslastCT) > updateTSInterval) {
    Serial.println( "Update ThingSpeak" );
    updateThingSpeak("GET /update?api_key="+APIKey+"&field1="+String(t)+"&field2="+String(h));
  }
/* 
  // Update ifttt
    if ((millis() - tttlastConnectionTime > updateiftttInterval)) {
    Serial.println( "Update ifttt" );
    updateifttt("GET /trigger/sensortnic/with/key/"+tttKey+"?value1="+String(t)+"&value2="+String(h)+"  HTTP/1.1\r\n");
  }
*/
}
 
// 用於輸出HTML文本的函數
void SendHTML(float h, float t)
{
  client.println( "HTTP/1.1 200 OK" );
  client.println( "Content-Type: text/html" );
  client.println( "Connection: close" );
  client.println();
  //client.println( "<!DOCTYPE HTML>" );
  //client.println( "<html><head><meta charset=\"UTF-8\"><title>Arduino Web Server</title>" );
  //client.println( "</head><body>" ); 

  client.println("<prtg>");
  client.println("<result><channel>Humidity</channel>");
  client.print("<float>1</float><unit>%</unit><DecimalMode>2</DecimalMode><value>");
  client.print(h);
  client.println("</value></result>");
  client.println("<result><channel>Temperature</channel>");
  client.print("<float>1</float><unit>degree</unit><DecimalMode>2</DecimalMode><value>");
  client.print(t);
  client.println("</value></result>");
  client.println("</prtg>");

  //client.println( "</body></html>" );
}

void updateThingSpeak(String tsData) {
  if ( !client.connect("api.thingspeak.com", 80)) {
        Serial.println( "connection failed" );
        return;
  } else {
    client.print(tsData);
    Serial.println(tsData);
    client.print("Host: api.thingspeak.com\r\n");
    client.print("Connection: close\r\n\r\n");
    client.stop();
    tslastCT = millis();
  }
}

void updateifttt(String tttData) {
  if ( !client.connect("maker.ifttt.com", 80)) {
        Serial.println( "connection failed" );
        return;
  } else {
    Serial.println(tttData);
    client.print(tttData + " HTTP/1.1\r\n" +
               "Host: maker.ifttt.com\r\n" + 
               "Connection: close\r\n\r\n");
    delay(100);
    client.stop();
    tttlastConnectionTime = millis();
  }
}

 


搜尋