ทำยังไงให้ตัว serial monitor ใน Arduino รับค่าได้ครับ

คือผมต้องการให้ตัว esp8266-01 module มันรับค่าเป็น ipd response จาก thingspeak อะครับ แต่ผมลองเขียนโค้ดอะไรต่างๆไปมันก็ไม่รับค่าอะไรมาเลย

ตัวอย่างโค้ด

#include <SoftwareSerial.h>
#include <string.h>
#include <stdlib.h>
#define esp8266 Serial1
#define SSID "test"    // put here the name of your wifi network
#define PASS "lolman123"    
#define IP "184.106.153.149"
int counter = 120;
String keep;
String valuetosend;
String GET = "GET /update?key=FYPW04TOYR3FX2QH&";    // put here your thingspeak key
String GET1 = "field1=";
const byte numChars = 32;
char receivedChars[numChars];
boolean newData = false;
String readGET1 = "GET https://api.thingspeak.com/channels/864152/fields/1/last";
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  esp8266.begin(115200);
  esp8266.println("AT");
  delay(5000);
  if(esp8266.find("OK")){
    connectWiFi();
    Serial.println("WIFI CONNECTED");
  }
  pinMode(7, INPUT_PULLUP);
  pinMode(8, INPUT_PULLUP);
}
void loop() {
  // put your main code here, to run repeatedly:
  int readBtn = digitalRead(7);
  int readSend = digitalRead(8); 
  
  if (readBtn == 0)
  {
    ReadLastEntryThingSpeak();
  }
  if (readSend == 0)
  {
    WriteThingSpeak();
  }
}
boolean connectWiFi(){
  esp8266.println("AT+CWMODE=3");
  delay(2000);
  String cmd="AT+CWJAP=\"";
  cmd+=SSID;
  cmd+="\",\"";
  cmd+=PASS;
  cmd+="\"";
  esp8266.println(cmd);
  delay(5000);
  if(esp8266.find("OK")){
    Serial.println("OK");
    return true;
  }else{
    Serial.println("KO");
    return false;
  }
}
void updateFunction(String valuetosend){
  String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += IP;
  cmd += "\",80";
  esp8266.println(cmd);
  delay(2000);
  if(esp8266.find("Error")){
    Serial.print("Error1");
    return;
  }
  cmd = GET + GET1;
  cmd += valuetosend;
  cmd += "\r\n";
  Serial.print(cmd);
  esp8266.print("AT+CIPSEND=");
  esp8266.println(cmd.length());
  if(esp8266.find(">")){
    esp8266.print(cmd);
  }else{
    esp8266.println("AT+CIPCLOSE");
  }
}
void ReadLastEntryThingSpeak()
{
  String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += IP;
  cmd += "\",80";
  esp8266.println(cmd);
  delay(2000);
  if(esp8266.find("Error")){
    Serial.print("Error1");
    return;
  }
  cmd = readGET1;
  cmd += "\r\n";
  Serial.print(cmd);
  esp8266.print("AT+CIPSEND="); 
  esp8266.println(cmd.length());
  if(esp8266.find(">")){
    esp8266.print(cmd);
  }else{
    esp8266.println("AT+CIPCLOSE");
  }
  delay(5000);
  if (esp8266.find("+IPD,")) {
    Serial.println("IPD Response Work!!"); //ตรงนี้แหละครับ
    recvWithStartEndMarkers();
    Serial.println(receivedChars);
  }  
}
void WriteThingSpeak ()
{
    String valuetosend = String(counter);
    updateFunction(valuetosend);
}
void recvWithStartEndMarkers() {
    static boolean recvInProgress = false;
    static byte ndx = 0;
    char startMarker = '+';
    char endMarker = 'D';
    char rc;
 
    while (esp8266.available() > 0 && newData == false) {
        rc = esp8266.read();
        if (recvInProgress == true) {
            if (rc != endMarker) {
                receivedChars[ndx] = rc;
                ndx++;
                if (ndx >= numChars) {
                    ndx = numChars - 1;
                }
            }
            else {
                receivedChars[ndx] = '\0'; // terminate the string
                recvInProgress = false;
                ndx = 0;
                newData = true;
            }
        }
        else if (rc == startMarker) {
            recvInProgress = true;
        }
    }
}

ตอนมันทำการ response กลับมาในรูปแบบของ ipd จาก serial ของ esp8266 มันจะมีลักษณะแบบนี้ครับ
+IPD,3:120CLOSED

คือผมต้องการแค่ค่าที่อยู่ระหว่างกลางเท่านั้นเองครับ คือ 120 มาเก็บไว้ในตัวแปรสักตัวแปร
แต่ผลที่ผมได้คือ Received data = แล้วก็โล่ง แทนที่มันจะขึ้นเป็นค่า 120 อะครับ
รบกวนช่วยผมหน่อยนะครับ แทบไม่ได้นอนมา 3 วันเลยจริงๆ55+
แก้ไขข้อความเมื่อ
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่