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秒以上才能更新

}