สำหรับเพื่อนๆ ที่เขียนโปรแกรม กับเจ้า Nodemcu esp8266 ด้วย Arduino IDE มักจะเจอปัญหากับ wdt reset ส่วนตัวผมก็เจอปัญหานี้ประจำ วันนี้จะมีวิธีการสังเกต Code มาฝาก กันครับ ว่า wdt reset เกิดขึ้นเพราะอะไร
จากข้อความนี้
ets Jan 8 013,rst cause:2 boot mode:(1,6)
wdt reset
ให้สักเกตที่คำว่า cause:2 จดตัวเลขนี้ไว้ครับ มาดูคำอธิบายกัน ครับว่าคืออะไร
Cause:0 | Undefined |
Cause:1 | Power reboot |
Cause:2 | External reset wake up Deepsleep |
Cause:4 | Hardware Wdt reset |
ปัญหาพวกนี้บางคนอาจจะเคยเจอแน่นอนครับ บอกเลยว่่าปวดหัวสุดๆ
ส่วนตัวมักจะ ชอบเจอ Cause:2 ครับ มักจะเกิดจาก การตั้ง Delay นานเกินไป หรือเร็วเกินไป บางทีลืมใส่ Delay ในชุดที่สำคัญครับ วิธีการแก้ปัญหาของผม (อันนี้ส่วนตัวผิดถูกขออภัยด้วยน่ะครับ)
ขั้นแรก พยายามแบ่ง ส่วน Process ไว้ เป็นส่วนๆ โดยการ Debug ส่วนตัวจะทำแบบโง่ๆเลยครับโดยการ serial.print ไว้ตาม Process ของโปรแกรม if while for เพื่อหาจุดที่เกิดปัญหา ว่าเกิดจากจุดไหน ไล่สาเหตุก่อน เมื่อจับจุดได้แล้ว สังเกตุดู แล้วหาทางแก้ดูครับ จากเหตุการที่บ่อยๆ มีดังนี้ครับ
กรณีที่ 1 หากเกิดจาก จุดที่ delay เป็นระยะเวลานานๆ ให้ ทำการแก้โดย ยกตัวอย่างเช่น
Delay(6000);
เราอาจจะแก้ โดยการใช้ คำสั่ง For เข้าไปแทน
for (int i=0; i <= 600; i++){
delay(10);
}
กรณีที่ 2 อาจจะ delay เร็วเกินไป จาก Code เช่น ตัวอย่างการกดปุ่มแช่ โดยการใช้ while โปรแกรมจะ while ใน Loop นี้จนกว่าจะกดปล่อย ถึงจะหลุด Loop ยกตัวอย่างเช่น
while (digitalRead(buttonPin) == LOW)
ในส่วนของคำสั่งนี้ ความคิดส่วนตัวน่ะครับ อาจจะทำให้ Nodemcu loop เร็วเกินไป จน Ram หมด ทำให้ wdt reset เราอาจจะแก้ โดยการใส่ Delay ให้มันหน่อย เพื่อลดความเร็วใน Loop นี้ครับ
while (digitalRead(buttonPin) == LOW) {delay(10);}
จาก Code นี้หากใช้ร่วมกับ Arduino มักจะไม่ค่อยเจอปัญหา แต่พอมาใช้ กับ nodemcu esp8266 จะเจอปัญหานี้ประจำครับ
หลักจากประสบการณ์ที่เคยเจอ ย้ำน่ะครับว่าเป็นความคิดเห็นส่วนตัว จากตัวเอง อาจจะไม่ถูกต้อง 100 เปอร์เซ็นก็ขออภัยด้วย ครับ
วันนี้ก็พอแค่นี้ก่อน เดี่ยวเจอปัญหา อะไรแปลกๆ จะเอามาเล่าให้เพื่อนๆฟังกันอีกใน ep หน้าน่ะครับ
หน้าที่เข้าชม | 4,510,768 ครั้ง |
ผู้ชมทั้งหมด | 2,466,540 ครั้ง |
ร้านค้าอัพเดท | 5 ก.ย. 2568 |