บทความนี้เป็นการเข้าไปดูรายละเอียดของไฟล์ ESP.h ของ esp8266 Arduino เพื่อศึกษาหน้าที่ฟังก์ชันต่าง ๆ ซึ่งมีประโยชน์มากต่อการเขียนโปรแกรมเพื่อควบคุมการทำงานของไมโครคอนโทรลเลอร์ตัวนี้ เช่น การทราบจำนวนหน่วยความจำที่เหลืออยู่ หรือขนาดหน่วยความจำใหญ่ที่สุดที่สามรถจองได้ ซึ่งใช้ในการกรณีที่ต้องการเขียนโปรแกรมที่ใช้หน่วยความจำแบบพลวัติ (Dynamic) เพื่อเก็บรายชื่อ AP ที่พบทั้งหมด เป็นต้น โดยการผู้เขียนโปรแกรมสามารถใช้คลาสนี้ได้โดยตรงจากวัตถุ ESP

ค่าคงที่

รายการค่าคงที่ที่กำหนดไว้ใน ESP.h ประกอบด้วย x กลุ่ม และแต่ละกลุ่มประกอบด้วยรายการค่าคงที่ต่าง ๆ ดังต่อไปนี้

  • WDTO_t เป็นค่าคงที่ใช้สำหรับกำหนดช่วงเวลาสำหรับ WDT (Watch-dog-Timer) ได้แก่
    • WDTO_0MS
    • WDTO_15MS
    • WDTO_30MS
    • WDTO_60MS
    • WDTO_120MS
    • WDTO_250MS
    • WDTO_500MS
    • WDTO_1S
    • WDTO_2S
    • WDTO_4S
    • WDTO_8S
  • RGMode เป็นค่าคงที่เก็บประเภทโหมดของ RF ได้แก่
    • RF_DEFAULT
    • RF_CAL
    • RF_NO_CAL
    • RF_DISABLED
  • ADCMode เป็นค่าคงที่โหมดของ ADC ได้แก่
    • ADC_TOUT
    • ADC_TOUT_3V3
    • ADC_VCC
    • ADC_VDD
  • FlashMode_t เป็นค่าประเภทโหมดของหน่วยความจำแฟลช ได้แก่
    • FM_QIO
    • FM_QOUT
    • FM_DIO
    • FM_DOUT
    • FM_UNKNOWN

คำสั่งเกี่ยวกับ WDT

WDT หรือ Watch Dog Timer เป็นนาฬิกาของไมโครคอนโทรลเลอร์ที่ใช้สำหรับรีเซ็นตนเองในกรณีที่ซอฟต์แวร์ที่กำลังทำงานนั้นไม่ส่งสัญาณตอบสนองกลับมาที่ระบบโดยการเรียกใช้ฟังก์ชัน ESP.wdtFeed() ทั้งนี้เพื่อป้องกันไม่ให้ระบบเกิดสถานะว่างโดยไม่สามารถทำอะไรได้ เช่น อาการแฮ็ง เป็นต้น รายการคำสั่งในกลุ่มนี้ได้แก่

  • ESP.wdtEnable( ค่าเวลาสำหรับกำหนดให้ซอฟต์แวร์ต้องตอบสนองกลับมา )
  • ESP.wdtDisable()
  • ESP.wdtFeed()

คำสั่งโหมดประหยัดพลังงาน

การสั่งให้ไมโครคอนโทรเลอร์เข้าสู่โหมดประหยัดพลังงานประกอบไปด้วย 3 คำสั่งดังนี้

  • ESP.deepSleep(uint64_t time_us, RFMode mode = RF_DEFAULT)
  • ESP.deepSleepInstant(uint64_t time_us, RFMode mode = RF_DEFAULT)
  • uint64_t ESP.deepSleepMax()

คำสั่งรีเซ็ตระบบ

กรณีที่ต้องการรีเซ็ตระบบหรือรีบูตระบบให้ใช้งานคำสั่งสำหรับงานดังกล่าวดังนี้

  • ESP.reset()
  • ESP.reboot()
  • ESP.rebootIntoUartDownloadMode()
  • String ESP.getResetReason()
  • String ESP.getResetInfo()
  • struct rst_info * ESP.getResetInfoPtr()

RTC

คำสั่งสำหรับอ่านและเขียนข้อมูลในส่วนของหน่วยความจำสำหรับผู้ใช้จากโมดูล RTC มีดังนี้

  • bool ESP.rtcUserMemoryRead(uint32_t offset, uint32_t *data, size_t size)
  • bool ESP.rtcUserMemoryWrite(uint32_t offset, uint32_t *data, size_t size);

ข้อมูลของชิพ

คำสั่งสำหรับอ่านข้อมูลของชิพ ESP8266 เพื่อทราบถึงขนาดความจุของแฟลช/หน่วยความจำแรม หรือหมายเลขรุ่นต่าง ๆ เป็นต้น ได้แก่คำสั่งต่อไปนี้

  • uint16_t ESP.getVcc()
  • uint32_t ESP.getChipId()
  • uint32_t ESP.getFreeHeap()
  • uint16_t ESP.getMaxFreeBlockSize()
  • uint8_t ESP.getHeapFragmentation() รายงานผลเป็นหน่วยร้อยละ (%)
  • ESP.getHeapStats(uint32_t* free = nullptr, uint16_t* max = nullptr, uint8_t* frag = nullptr)
  • uint32_t ESP.getFreeContStack()
  • ESP.resetFreeContStack()
  • const char * ESP.getSdkVersion()
  • String ESP.getCoreVersion()
  • String ESP.getFullVersion()
  • uint8_t ESP.getBootVersion()
  • uint8_t ESP.getBootMode()
  • uint8_t ESP.getCpuFreqMHz()
  • uint8_t *ESP.random(uint8_t *resultArray, const size_t outputSizeBytes)
  • uint32_t ESP.random()
  • uint32_t ESP.getCycleCount()
  • ESP.setDramHeap() เลือกใช้ฮีพจาก DRAM
  • ESP.setIramHeap() เลือกใช้ฮีพจาก IRAM
  • ESP.setExternalHeap() เลือกใช้ฮีพจากหน่วยความจำภายนอก
  • ESP.resetHeap() กลับไปใช้ฮีพจากหน่วยความจำเริ่มต้น

คำสั่งเกี่ยวกับหน่วยความจำแฟลช

รายการคำสั่งที่เกี่ยวข้องกับหน่วยความจำแฟลชของไมโครคอนโทรลเลอร์มีดังนี้

  • uint32_t ESP.getFlashChipId()
  • uint8_t ESP.getFlashChipVendorId()
  • uint32_t ESP.getFlashChipRealSize()
  • uint32_t ESP.getFlashChipSize()
  • uint32_t ESP.getFlashChipSpeed()
  • FlashMode_t ESP.getFlashChipMode()
  • uint32_t ESP.getFlashChipSizeByChipId()
  • uint32_t ESP.magicFlashChipSize(uint8_t byte)
  • uint32_t ESP.magicFlashChipSize(uint8_t byte)
  • FlashMode_t ESP.magicFlashChipMode(uint8_t byte)
  • bool ESP.checkFlashConfig(bool needsEquals = false)
  • bool ESP.checkFlashCRC()
  • bool ESP.flashEraseSector(uint32_t sector)
  • bool ESP.flashWrite(uint32_t address, const uint32_t *data, size_t size)
  • bool ESP.flashWrite(uint32_t address, const uint8_t *data, size_t size)
  • bool ESP.flashRead(uint32_t address, uint32_t *data, size_t size
  • bool ESP.flashRead(uint32_t address, uint8_t *data, size_t size)
  • bool ESP.eraseConfig()

คำสั่งเกี่ยวกับโปรแกรม

รายการคำสั่งที่เกี่ยวข้องกับโปรแกรมหรือ Sketch มีดังนี้

  • uint32_t ESP.getSketchSize()
  • String ESP.getSketchMD5()
  • uint32_t ESP.getFreeSketchSpace()
  • bool ESP.updateSketch(Stream& in, uint32_t size, bool restartOnFail = false, bool restartOnSuccess = true)

ตัวอย่างการใช้งาน เช่น

  Serial.print("ESP.getBootMode(); ");
  Serial.println(ESP.getBootMode());

  Serial.print("ESP.getResetReason(); ");
  Serial.println(ESP.getResetReason());
  Serial.print("ESP.getResetInfo(); ");
  Serial.println(ESP.getResetInfo());

  Serial.print("ESP.getMaxFreeBlockSize(); ");
  Serial.println(ESP.getMaxFreeBlockSize());
  Serial.print("ESP.getHeapFragmentation(); ");
  Serial.print(ESP.getHeapFragmentation());
  Serial.println("%");
  Serial.print("ESP.getFreeHeap(): ");
  Serial.println(ESP.getFreeHeap());
  Serial.print("ESP.getSdkVersion(); ");
  Serial.println(ESP.getSdkVersion());
  Serial.print("ESP.getBootVersion(); ");
  Serial.println(ESP.getBootVersion());
  Serial.print("ESP.getChipId(); ");
  Serial.println(ESP.getChipId());
  Serial.print("ESP.getFlashChipSize(); ");
  Serial.println(ESP.getFlashChipSize());
  Serial.print("ESP.getFlashChipRealSize(); ");
  Serial.println(ESP.getFlashChipRealSize());
  Serial.print("ESP.getFlashChipSizeByChipId(); ");
  Serial.println(ESP.getFlashChipSizeByChipId());
  Serial.print("ESP.getFlashChipId(); ");
  Serial.println(ESP.getFlashChipId());

สรุป

ทั้งหมดนี้เป็นรายการคำสั่งต่าง ๆ ภายในคลาส ESP ซึ่งเป็นคลาสหลักของไมโครคอนโทรลเลอร์ esp8266 หวังว่าคงเป็นประโยชน์ในการศึกษาเพิ่มเติมต่อไป สุดท้ายขอให้สนุกกับการเขียนโปรแกรมครับ

ท่านใดต้องการพูดคุยสามารถคอมเมนท์ไว้ได้เลยครับ

แหล่งอ้างอิง

  1. esp8266 / Arduino : ESP.h

(C) 2021, โดย อ.ดนัย เจษฎาฐิติกุล/อ.จารุต บุศราทิจ

ปรับปรุงเมื่อ 2021-08-10, 2021-11-11