เก็บข้อมูล เรื่องการบันทึกค่าอุณหภูมิ ตามเวลาผ่าน SD Card+ESP8266

ต่อไป จะแก้ไขข้อที่ 1 ให้สามารถเขียนข้อมูลได้เลยเมื่อระบบเริ่มทำงานแต่ลืมเสียบ SD card เข้าไป แต่หลังจากเสียบแล้ว ก็ เริ่มทำการเขียนข้อมูลต่อได้เลย
(1. ช่วงที่ esp 8266 เริ่มทำงาน ถ้าไม่ได้ใส่ SD Card เข้าไป ตั้งแต่แรก ระบบจะไม่สามารถเขียนหรืออ่านข้อมูลจาก SD Card ได้ หลังจากใส่ SD Card เข้าไปแล้วให้กดปุ่ม Reset esp 8266 1 ครั้ง ระบบก็จะทำงานปกติ)

เอา Code ส่วนนี้ ไปแทนที่ ในส่วนของ void setup{ }

void setup()
{
  Serial.begin(115200);

  dht.begin();

#ifdef ARDUINO_ARCH_ESP8266
  Wire.begin(4, 5); // GPIO4 = D2 and GPIO5 = D1 on ESP8266
#else
  Wire.begin();
#endif

  //rtc.set(0, 17, 15, 3, 5, 3, 20);//ใช้เฉพาะตั้งเวลา ถ้าจะตั้งก็ เอา // ออก เมื่อตั้งได้ตรงแล้วก็เอา // ใส่กลับไปเหมือนเดิม
  //  RTCLib::set(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year)



  Serial.println();
  Serial.println("Initializing SD card...");
  delay(300);
  pinMode(SS, OUTPUT);//หรือขา CS จะกำหนดเป็นขาใดก็ได้ ในที่นี้กำหนดเป็นขา D4
  
insert_card://กรณีเริ่มระบบใหม่ แต่ SD card ยังไม่ได้เสียบ
if (!card.init(SPI_HALF_SPEED, chipSelect)) {
    //Serial.println("initialization failed. Things to check:");
    Serial.println("* is a card inserted?");
    //Serial.println("* is your wiring correct?");
    //Serial.println("* did you change the chipSelect pin to match your shield or module?");
    //return;
    goto insert_card;
  } else {

  if (!SD.begin(chipSelect)) {
    Serial.println("initialization failed!");// ถ้าเริ่มทำงาน ถ้าไม่เสียบ SD Card ได้ แสดงข้อความ initialization failed
    return;
    
  }


  Serial.println("initialization done."); // ถ้าเริ่มทำงาน SD Card ได้ แสดงข้อความ initialization done

  // ปักหมุดชื่อว่า createNew ไว้หากสร้างไฟล์ไม่เสร็จ จะให้กลับมาที่จุดนี้ใหม่
createNew:

  // เปิดไฟล์ ชื่อ test.txt ขึ้นมา เราจะสามารถเปิดได้ครั้งละ 1 ไฟล์เท่านั้น
  // หากต้องการใช้งานหลายไฟล์ ทำได้โดยการปิดไฟล์หนึ่งไปก่อน แล้วเปิดอีกไฟล์ขึ้นมาทำงาน
  // หากไม่มีไฟล์ที่ชื่อตามต้องการ จะเป็นการสร้างไฟล์ขึ้นมาใหม่
  myFile = SD.open("PM_check.txt", FILE_WRITE);
  // ปิดไฟล์ลงไปก่อน
  myFile.close();

  // ลองตรวจสอบดูว่ามีไฟล์อยู่หรือไม่ ถ้ามี Serial monitor บอกว่ามีไฟล์อยู่ ถ้าไม่มีให้แสดงว่าไม่มี
  // เราเพิ่งสร้างไฟล์ใหม่ขึ้นมา ปกติต้องมีไฟล์ แต่หากไม่มีก็เขียนดค้ด goto กลับไฟสร้างไฟล์ใหม่อีกครั้ง
  if (SD.exists("PM_check.txt")) {
    Serial.println("File exists.");
  } else {
    Serial.println("File doesn't exists.");
    goto createNew;
  }

  delay(3000);

  // ปักหมุดชื่อ newWrite ไว้กรณีเขียนไฟล์ไม่สำเร็จ ให้กลับมาจุดนี้ใหม่
newWrite:

  // ทำการเปิดไฟล์อีกครั้งแล้วทำการเขียนข้อความว่า testing SD Card..... ลงไปในไฟล์
  myFile = SD.open("PM_check.txt", FILE_WRITE);
  if (myFile) {
    Serial.print("Writing to PM_check.txt...");
    //myFile.println("รายงานการเก็บข้อมูล.....");
    // ปิดไฟล์แล้วแสดงผล done
    myFile.close();
    Serial.println("done.");
  } else {
    // หากเปิดไฟล์ขึ้นมาไม่สำเร็จ แสดง error แล้วกลับไปที่ newWrite เพื่อลองทำใหม่
    Serial.println("error opening file");
    goto newWrite;
  }

  delay(3000);
  }
2 Likes