Lab12-3

WIFI  上傳 ThingSpeak 的基本程式碼

[相關資料]

ThingSpeak網站:https://thingspeak.com/

wifi上傳ThingSpeak的基本程式碼,請注意有3個地方要"自己增加或減少要上傳的數據項目":

#include <SoftwareSerial.h>

SoftwareSerial esp8266(4,5);

String apiKey = "";     // ""內輸入ThingSpeak的Write API Key

String ssid = "";       // ""內輸入wifi基地台的名稱

String password = "";   // ""內輸入wifi基地台的密碼

boolean DEBUG = true;


void showResponse(int waitTime){

    long t=millis();

    char c;

    while (t+waitTime>millis()){

      if (esp8266.available()){

        c=esp8266.read();

        if (DEBUG) Serial.print(c);

      }

    }        

}


boolean thingSpeakWrite(float value1, float value2){   //自己增加或減少要上傳的數據項目

  String cmd = "AT+CIPSTART=\"TCP\",\"";

  cmd += "184.106.153.149";

  cmd += "\",80";

  esp8266.println(cmd);

  if (DEBUG) Serial.println(cmd);

  if(esp8266.find("Error")){

    if (DEBUG) Serial.println("AT+CIPSTART error");

    return false;

  }

  String getStr = "GET /update?api_key=";

  getStr += apiKey;

  getStr +="&field1=";

  getStr += String(value1);

  getStr +="&field2=";

  getStr += String(value2);

  // getStr +="&field3=";                             //自己增加或減少要上傳的數據項目

  // getStr += String(value3);

  // ...

  getStr += "\r\n\r\n";

  cmd = "AT+CIPSEND=";

  cmd += String(getStr.length());

  esp8266.println(cmd);

  if (DEBUG)  Serial.println(cmd);

  delay(100);

  esp8266.print(getStr);

  if (DEBUG)  Serial.print(getStr);

  else{

    esp8266.println("AT+CIPCLOSE");

    if (DEBUG)   Serial.println("AT+CIPCLOSE");

    return false;

    }

  return true;

}



void setup() {                

  Serial.begin(9600);


  //wifi的設定要排在前面

  esp8266.begin(115200);

  esp8266.write("AT+UART_DEF=9600,8,1,0,0\r\n");

  delay(1500);

  esp8266.begin(9600);

  Serial.println("ESP8266...OK");

  esp8266.println("AT+CWMODE=1");   // set esp8266 as client

  showResponse(10000);  

  esp8266.println("AT+CWJAP=\""+ssid+"\",\""+password+"\"");

  showResponse(10000);  //顯示並等待wifi完成連線


  //其他零件的設定排在後面

  


}



void loop() {

   float a=0;

   float b=0;


   delay(1000);                            // 傳送資料前,最好等待一秒處理再上傳

   thingSpeakWrite(a,b);                   // a.b....... 自己增加或減少要上傳的數據項目

 

   delay(20000);    // thingspeak需要15秒以上才能更新

}