จากที่ผ่านมา 7 ตอน เป็นตอนเกริ่นนำซะ 1 ส่วนอีก 6 เป็นการแนะนำใช้งานเบื้องต้น ซึ่งก็คิดว่าน่าจะแก้ไขดัดแปลงใช้งานกันได้มากมายแล้ว(อันที่จริงการใช้งานมีอีกเยอะมากครับ แต่คิดว่าน่าจะลึกไป และยุ่งยากกับอีกหลายเรื่องทั้งเรื่องฐานข้อมูล การเซ็ตค่าอื่นๆขั้นสูง ซึ่งจะได้มีบทความชุดแยกต่อไป) ตอนนี้เราจะมาพูดถึงคุณสมบัติของตัวมันอีกอย่างคือการหลับ z z z Z Z Z
จากที่เคยกล่าวไว้แล้ว(ตอนเท่าไรจำไม่ได้) ว่าการใช้งาน ESP8266 นั้นจะเน้นการใช้งานไร้สาย มีสัญญาณ WiFi ก็ใช้งานได้แบบไร้สาย แต่หากต้องใช้สายไฟลากไปจ่ายไฟให้อุปกรณ์เรา WiFi ไร้สายก็ไร้ค่าเพราะต้องมีสายไฟอยู่ดี ฉะนั้นจึงนิยมออกแบบอุปกรณ์ให้ใช้พลังงานจากแบตเตอรี่ หยิบไปวางที่ไหนก็ได้ในรัศมีของ WiFi แต่ถึงกระนั้นหากต้องเปลี่ยนแบตทุกวัน ชาร์จแบตทุกวัน ก็คงวุ่นวายกันทุกเช้าเย็น และบางครั้งก็ไม่ได้ใช้งานตลอดเวลา จะทำงานก็แค่แป๊ปเดียวเช่นส่งค่าข้อมูลอากาศซึ่งใช้เวลาไม่ถึง 1 วินาที เวลาที่เหลือก็เปิดกินไฟไว้เฉยๆ เราจึงใช้คุณสมบัติของ ESP8266 ให้กินไฟน้อยลง แบตหมดช้าลง ลดการใช้พลังงาน ลดโลกร้อน นั่นคือการ "หลับ" หรือ Sleep Mode นั่นเอง
Sleep Mode ของ ESP8266
การหลับของ ESP8266 นั้น มีอยู่ด้วยกัน 3 โหมด ซึ่งแต่ละระดับจะมีการปิดการทำงานภายในแตกต่างกันไป ทำให้แต่ละโหมดก็จะใช้พลังงานต่างกันออกไปด้วย ซึ่งหากดูตาม Datasheet ของ ESP8266 พอจะสรุปได้ว่า ใน Active Mode (ทุกส่วนทำงานหมด) จะกินกระแสไฟฟ้าที่ 50mA ถึง 56mA ในขณะที่รอรับสัญญาณ WiFi และจะกินกระแสไฟ 120mA ถึง 170mA ขึ้นอยู่กับว่าเราจะใช้ WiFi โหมดใด(b, g หรือ n) แต่หากใช้การหลับมาช่วยจะเป็นดังนี้
Modem Sleep ตามชื่อของโหมด คือหลับเฉพาะโมเด็ม ในโหมดนี้จะปิดเฉพาะการเชื่อมต่อ WiFi นั่นคือ WiFi จะไม่ทำงาน แต่ในส่วนของ CPU, System Clock และ RTC ยังคงทำงานอยู่ ในโหมดนี้จะกินกระแสอยู่ที่ราวๆ 15mA
Light Sleep เหมือนเป็นการหลับชิลๆ ในโหมดนี้ จะปิด WiFi และ System Clock ในส่วนของ CPU นั้นจะ idling คือไม่ได้ทำงานแต่ก็ไม่ได้ปิดไป และในส่วนของ RTC ยังคงทำงานตามปกติ โหมดนี้จะกินกระแสอยู่ที่ราวๆ 0.9mA
Deep Sleep โหมดนี้เป็นตัวท็อปในการหลับครับ สามารถประหยัดพลังงานได้มากที่สุด โดยตัว ESP8266 จะทำการปิดทุกอย่าง ทั้ง WiFi, System Clock และ CPU คงเปิดการทำงานเฉพาะส่วนของ RTC เท่านั้น (เอาไว้จับเวลาว่าเราจะให้มันหลับนานเท่าไรไงครับ หากปิด RTC มันก็ไม่รู้เวลา เหมือนเราไม่มีนาฬิกาปลุกให้มัน ทีนี้ก็จะหลับยาวไปเลย) โหมดนี้จะกินกระแสอยู่ที่ราวๆ 20uA (0.02mA) พูดเรื่องเทคนิคมาซะยืดยาว มาพูดง่ายๆให้เห็นชัดๆ หากเราใช้ถ่าน CR2032 ที่มีความจุ 235mAh 1 ก้อน และให้ Standby เท่านั้น จะคำนวณเวลาที่จะสามารถใช้งานได้ดังนี้
(1) หากใช้ Active Mode จะใช้งานได้ประมาณ 3 ชั่วโมงครึ่ง
(2) หากใช้โหมด Modem Sleep จะใช้งานได้ประมาณ 11 ชั่วโมง
(3) โหมด Light Sleep จะใช้งานได้ประมาณ 182 ชั่วโมง คือราว 7 วันกว่าๆ
(4) และหากใช้ Deep Sleep จะอยู่ได้ถึง 8225 ชั่วโมง คือราวๆ 340 วัน เกือบๆปีกันเลยทีเดียว
คำสั่งสำหรับใช้งาน Sleep Mode Modem Sleep ในโหมดนี้จะเป็นการปิดโมเด็ม WiFi เมื่อไม่ใช้งาน การใช้งานโหมดนี้ไม่จำเป็นต้องทำอะไรครับ เนื่องจากเป็นค่าเริ่มต้นของมันอยู่แล้ว เมื่อไม่มีการรับส่งข้อมูลผ่าน WiFi และโมเด็มเข้าสู่สถานะ idle เมื่อถึงเวลาตามที่มันกำหนด ตัว ESP8266 จะทำการเข้าสู่ Modem Sleep ด้วยตัวมันเองโดยอัตโนมัติ นอกจากนี้ยังมีวิธีการทำ Force Modem Sleep คือการบังคับให้ปิดโมเด็มไป โดยการใช้คำสั่ง WiFi.forceSleepBegin(); เพื่อปิดโมเด็ม(เริ่มการหลับ) และคำสั่ง WiFi.forceSleepWake(); เพื่อเปิดโมเด็ม(ปลุกขึ้นมา) Light Sleep เราสามารถสั่งให้ทำงานโหมดนี้ได้โดยอัตโนมัติโดยการใส่โค้ด wifi_set_sleep_type(LIGHT_SLEEP_T); ไว้ใน setup() เพียงเท่านี้ เมื่อโค้ดใน loop() มีคำสั่ง delay ตัว ESP8266 ก็จะเข้าสู่ Light Sleep ในช่วงเวลาที่ delay โดยทันที Deep Sleep ในโหมดนี้จะไม่เหมือนสองโหมดที่ผ่านมา คือตัว ESP8266 จะไม่สามารถเข้าสู่ Deep Sleep ได้เองโดยอัตโนมัติ เราต้องเขียนให้มันหลับลงไปโดยใช้คำสั่ง ESP.deepSleep(15e6); โดยตัวเลขในวงเล็บนั้นคือเวลาในหน่วยไมโครวินาที (us) ตัวอย่างที่ใส่นี้คือ 15x10^6 = 15000000 ไมโครวินาที หรือ 15 วินาทีนั่นเอง (จำง่ายๆคือ ใส่เลขวินาที ตามด้วย e6) ทั้งนี้การใช้โหมด Deep Sleep จะต้องต่อขา D0 เข้ากับขา RST ด้วย ไม่เช่นนั้นมันจะไม่ยอมตื่นนะครับ(แต่ตอนอัพโหลดโค้ดเข้าบอร์ดให้ถอดการเชื่อมต่อนี้ออกก่อน)
ทั้งนี้ในแต่ละโหมดเมื่อหลับไปแล้วก็จะต้องใช้เวลาในการตื่นขึ้นมา(เหมือนคนแหละครับ ตื่นใหม่ๆก็จะสลึมสลืออยู่แป๊บนึง) ในช่วงนี้ก็จะต้องใช้เวลาประมาณ 0.3 ถึง 1 วินาทีแตกต่างกันไป ในบทความนี้ไม่มีตัวอย่างนะครับ เป็นแค่การอธิบาย ซึ่งตัวโค้ดนั้นก็ไม่ได้มีอะไรซับซ้อน เป็นโค้ดตายตัวอยู่แล้วก็อปปี้ไปใส่ในโปรแกรมของแต่ละคนได้เลย อีกทั้งการปลุกให้ตัว ESP8266 ตื่นขึ้นมาก็ยังมีอีกหลายวิธี แต่คิดว่าในเบื้องต้นการใช้งานเท่านี้ก็เพียงพอสำหรับผู้เริ่มต้นตามคอนเซ็ปของบทความชุดนี้คือมือใหม่หัดใช้งาน และเนื้อหาที่ผ่านมาทั้งหมดนี้ก็คิดว่าเพียงพอต่อการใช้งานเบื้องต้นกันแล้ว บทความต่อไปจะเข้าสู่บทแทรก(ที่ไม่ได้มาแทรกแต่อย่างใด แต่มาต่อท้ายสุดแทน) อธิบายเรื่องที่เกี่ยวข้องกับการใช้ ESP8266 แบบคร่าวๆกันครับคลิกที่นี่เพื่ออ่านบทความถัดไป