Arduino 記事本 05 : 網路連線-物聯網實驗

網頁筆記本-005

Arduino 記事本 05 : 網路連線-物聯網實驗

  • 硬體&連線 (ESP8266 RS232速率設定9600)



1、提供ESP8266使用的3.3V電壓(建議使用外接變壓器)
2、ESP8266-GND對接
3、ESP8266-Tx接到MEGA的RX1
4、ESP8266-Rx接到MEGA的TX1
5、ESP8266-CH-P接到3.3V電壓


  • 程式


// 無線網路基地台
#define LinkWIFI "AT+CWJAP=\"Tenda_ABCD\",\"ABCD1234\""
#define QuitWIFI "AT+CWQAP"
#define Link_TCP "AT+CIPSTART=\"TCP\",\"api.thingspeak.com\",80"

// ThingSpeak Server (物聯網實驗)
#define ThingSpeakHTTP "api.thingspeak.com"

// 設定 GET 傳送資料的格式
// GET https://api.thingspeak.com/update?api_key=KJABN12YJC34H6YF&field1=0
String GET = "GET /update?key=KJABN12YJC34H6YF";
// 全域變數 {陣列需要先預設內容}
float TS_DATA[9] = {1.1, 3.3, 5.5, 7.7, 9.9, 10.01, 15.51, 20.02, 30.03};
char cData[100];
bool bLinkTCP = false;
void setup() {
  // 設定 COM Port
  Serial.begin(9600);   // Debug Port
  Serial1.begin(9600);  // RS232通訊 - ESP8266用

  bool bStatus = false;
  int i=0;

  while(bStatus == false){
    // 測試ESP8266是否存在
    Serial.print("S : ");   // Show Sned Message
    Serial.println("AT");
    Serial1.println("AT");
    
    for(i=0; i<10; i++) {
      if(Serial1.find("OK")) {
        // 取得回傳字串 "OK"
        bStatus = true;
        break;
      }
      else {
        Serial.println(".");   // Show Sned Message
        delay(1000); 
      }
    }
  
    // 確認與ESP8266連接是否正確
    if(bStatus == false){
      Serial.println("R : Error#001");   // Show Sned Message
      delay(10000);
    }
    else{
      Serial.println("R : OK");   // Show Sned Message
    }
  }
  // 選擇型態 (此指令需重啟後才會生效!!!)
  Serial1.println("AT+CWMODE=1");

  bool bLink = false;
  while(bLink == false){
    Serial.print("S : ");   // Show Sned Message
    Serial.println(LinkWIFI);
    Serial1.println(LinkWIFI);
  
    // 確認是否連上無線網路
    for(i=0; i<10; i++){
      if(Serial1.find("OK")){
        // 取得回傳字串 "OK"
        bLink = true;
        break;
      }
      else {
        Serial.println(".");   // Show Sned Message
        delay(1000);
      }
    }

    // 確認網路是否正確連線
    if(bLink == false){
      Serial.println("R : Error#002");   // Show Sned Message
      Serial.println(QuitWIFI);
      delay(10000); // 10秒後重連
    }
    else{
      Serial.println("R : OK");   // Show Sned Message
    }
  }
}

void loop() {
  delay(2000); // 停頓2秒後上傳
  int i=0;

  Serial.print("S : ");   // Show Sned Message
  Serial.println(Link_TCP);
  Serial1.println(Link_TCP);
  if( Serial1.find( "Error" ) ){
    Serial.println("R : Error#003");   // Show Sned Message
    bLinkTCP = false;
  }
  else{
    bLinkTCP = true;
  }

  if(bLinkTCP==true){
    String strUpdataData = GET + "&field1=" + TS_DATA[0] + "&field2=" + TS_DATA[1] +"\r\n";
    Serial.print("S : ");   // Show Sned Message
    Serial.print("AT+CIPSEND=");   // Show Sned Message
    Serial.println(strUpdataData.length());   // Show Sned Message
    
    Serial1.print( "AT+CIPSEND=" );
    Serial1.println( strUpdataData.length() );
    if(Serial1.find( ">" ) ){
      Serial.print(">");   // Show Sned Message
      Serial.print(strUpdataData);   // Show Sned Message
      
      Serial1.print(strUpdataData);
    }

    if( Serial1.find("OK") ){
      Serial.println("S : OK");   // Show Sned Message
    }
    else{
      Serial.println("R : Error#004");   // Show Sned Message
    }
  }
  delay(10000);
}



  • 測試物聯網網站上傳空間申請

ThingSpeak帳號申請與開通



留言

這個網誌中的熱門文章

Arduino 記事本 07 : 發出聲音(無源蜂鳴器)控制

Arduino 記事本 06 : Read-Time Clock(RTC)模組

Arduino 記事本 04 : 使用內建提升電阻