ปลุก ESP32 จากโหมด Deep Sleep โดยใช้ Timers-MicroPython

Pluk Esp32 Cak Homd Deep Sleep Doy Chi Timers Micropython



ESP32 เป็นแพลตฟอร์ม IoT ที่ใช้ไมโครคอนโทรลเลอร์ การใช้พลังงานเป็นหนึ่งในข้อกังวลหลักในขณะที่ทำงานกับบอร์ดไมโครคอนโทรลเลอร์ ตราบใดที่เราจ่ายไฟให้กับ ESP32 ด้วยแหล่งจ่ายไฟ DC เราไม่สนใจเรื่องการใช้พลังงานมากนัก แต่ด้วยโครงการแบตเตอรี่สำรองในระยะยาว เราจำเป็นต้องเพิ่มประสิทธิภาพพลังงานโดยรวม

ในที่นี้เราจะพูดถึงวิธีที่เราสามารถตั้งค่า ESP32 ให้อยู่ในโหมดดีพสลีปในเวลาที่กำหนดเพื่อประหยัดพลังงาน ก่อนที่เราจะเรียนรู้วิธีปลุก ESP32 จากการหลับลึกโดยใช้ตัวจับเวลา มาทำความเข้าใจแนวคิดของการหลับลึกกันก่อน:

Deep Sleep ใน ESP32 คืออะไร

ESP32 อาจเป็นอุปกรณ์ที่กินไฟสูงเพราะมีโมดูล WiFi และ Bluetooth ในตัว โดยทั่วไปแล้ว ESP32 จะดึง 75mA สำหรับการดำเนินการเล็กน้อยในขณะที่สามารถไปถึง 240mA เมื่อส่งข้อมูลผ่าน WiFi อย่างไรก็ตาม เราสามารถเพิ่มประสิทธิภาพนี้ได้โดยเปิดใช้งานโหมดดีพสลีป









ในโหมดดีพสลีป อุปกรณ์ต่อพ่วงดิจิตอล ESP32, RAM และ CPU ที่ไม่ได้ใช้จะถูกปิด รายการชิ้นส่วนต่อไปนี้เท่านั้นที่ยังคงใช้งานได้:



  • ตัวควบคุม RTC
  • ตัวประมวลผลร่วม ULP
  • หน่วยความจำ RTC เร็วและช้า
  • อุปกรณ์ต่อพ่วง RTC





เมื่อเปิดใช้งานโหมดสลีปลึก CPU หลักจะปิดตัวลง อย่างไรก็ตาม ตัวประมวลผลร่วม ULP (UltraLowPower) ยังสามารถอ่านข้อมูลจากเซ็นเซอร์และปลุก CPU ได้ทุกเมื่อที่ต้องการ

แอปพลิเคชั่น ESP32 นี้มีประโยชน์เมื่อเราต้องการสร้างเอาต์พุตตามเวลาที่กำหนดหรือเมื่อเกิดการขัดจังหวะหรือเหตุการณ์ภายนอก สิ่งนี้จะช่วยประหยัดพลังงานของ ESP32 เนื่องจาก CPU จะยังคงปิดอยู่ในช่วงเวลาที่เหลือและจะเปิดขึ้นเมื่อมีการเรียกใช้เท่านั้น



พร้อมกับหน่วยความจำหลัก CPU ESP32 จะถูกแฟลชหรือลบด้วย ดังนั้นสิ่งที่เก็บไว้ในหน่วยความจำนี้จะไม่สามารถใช้งานได้อีกต่อไป มีเพียงหน่วยความจำ RTC เท่านั้นที่เก็บไว้ที่นั่น ดังนั้น ESP32 จะบันทึกข้อมูล WiFi และ Bluetooth ภายในหน่วยความจำ RTC ก่อนที่จะเข้าสู่โหมด Deep Sleep

เมื่อโหมด Deep sleep ถูกรีเซ็ตหรือลบออก ชิป ESP32 จะเริ่มการทำงานของโปรแกรมตั้งแต่เริ่มต้น

จากการหลับลึกเราสามารถปลุก ESP32 ได้โดยใช้วิธีการต่างๆ

Wake Up Sources ใน ESP32

มีแหล่งที่มาหลายแหล่งเพื่อปลุก ESP32 จากโหมดสลีปลึก:

  • จับเวลา
  • หมุดสัมผัส
  • การปลุกภายนอก ext0
  • การปลุกภายนอก ext1

ในคู่มือนี้เราจะกล่าวถึง จับเวลาปลุก ที่มาสำหรับ ESP32

วิธีใช้ Timer เพื่อปลุก ESP32 จาก Deep Sleep

ESP32 มาพร้อมกับตัวควบคุม RTC ที่มีโมดูลตัวจับเวลาในตัวที่สามารถปลุก ESP32 ได้หลังจากระยะเวลาที่กำหนดไว้ล่วงหน้า คุณสมบัตินี้มีแอพพลิเคชั่นมากมายที่เราต้องการประทับเวลาหรือต้องการดำเนินการตามคำสั่งในเวลาที่กำหนดโดยที่ยังคงใช้พลังงานอย่างเหมาะสม

เพื่อให้ ESP32 เข้าสู่โหมดสลีปลึกโดยใช้รหัส MicroPython การนอนหลับลึก() ฟังก์ชั่นจาก โมดูลเครื่อง จะถูกนำไปใช้. ต่อไปนี้เป็นไวยากรณ์ของฟังก์ชันการนอนหลับลึกใน MicroPython:

เครื่องจักร. การนอนหลับลึก ( sleep_time_ms )

ฟังก์ชั่นนี้ใช้เวลา 1 อาร์กิวเมนต์ซึ่งเป็นเวลาที่กำหนดไว้ล่วงหน้าใน มิลลิวินาที .

เพื่อให้เข้าใจถึงการใช้ตัวจับเวลา ESP32 สำหรับการปลุก เราจะนำตัวอย่างที่ไฟ LED กะพริบหลังจากทุกเวลาที่ตั้งไว้ผ่านไปและกลับสู่โหมดสลีปเมื่องานเสร็จสิ้น

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

เปิดโปรแกรมแก้ไข MicroPython และอัปโหลดโค้ดที่ระบุด้านล่างในบอร์ด ESP32 ที่นี่เราจะใช้ Thonny IDE เพื่ออัปโหลดภาพร่าง MicroPython

# รหัสที่มา Linuxhint.com

จาก เครื่องจักร นำเข้า การนอนหลับลึก

จาก เครื่องจักร นำเข้า เข็มหมุด

จาก เวลา นำเข้า นอน

นำ = เข็มหมุด ( 4 , เข็มหมุด. ออก ) #PIN 4 กำหนดไว้สำหรับเอาต์พุต LED

นำ. ค่า ( 1 ) #เปิด LED เป็นเวลา 1 วินาที

นอน ( 1 )

นำ. ค่า ( 0 ) #ปิดไฟ LED 1 วินาที

นอน ( 1 )

พิมพ์ ( 'ไปนอนได้แล้ว' )

การนอนหลับลึก ( 5,000 ) #นอน5วิ

รหัสเริ่มต้นด้วยการนำเข้าไลบรารีที่จำเป็น เช่น เรานำเข้าไลบรารี deepsleep

หลังจากนั้นวัตถุใหม่สำหรับ ESP32 พิน 4 จะถูกสร้างขึ้น พินนี้จะแสดงเอาต์พุตทุกครั้งที่ ESP32 ตื่น

นำ = เข็มหมุด ( 4 , เข็มหมุด. ออก )

คำสั่งที่ระบุด้านล่างจะกะพริบ LED โดยหน่วงเวลา 1 วินาที

นำ. ค่า ( 1 )

นอน ( 1 )

นำ. ค่า ( 0 )

นอน ( 1 )

ที่นี่เพื่อจุดประสงค์ในการสาธิต เรากะพริบไฟ LED อย่างไรก็ตาม สามารถควบคุมอุปกรณ์อื่น ๆ ได้เช่นกัน

ก่อนเข้านอนเราพิมพ์ข้อความว่า ESP32 กำลังเข้าสู่โหมดสลีป

พิมพ์ ( 'ไปนอนได้แล้ว' )

บันทึก: เรายังสามารถเพิ่มการหน่วงเวลา 5 วินาทีหรือมากกว่าได้ที่นี่ก่อนที่ ESP32 จะเข้าสู่โหมดสลีป สิ่งนี้ช่วยเราในการสร้างโครงการและเขียนสคริปต์ใหม่ ขณะอัปโหลดโค้ดใหม่ บอร์ดต้องเปิดอยู่และไม่ได้อยู่ในโหมดสลีป หากเราไม่เพิ่มการหน่วงเวลา เราจะจับ ESP32 ในโหมดตื่นและอัปโหลดสคริปต์ใหม่ได้ยาก

หลังจากเขียนสคริปต์ใหม่และเมื่อโค้ดสุดท้ายพร้อมแล้ว เราสามารถลบความล่าช้านี้ในสคริปต์เวอร์ชันสุดท้ายได้

ในที่สุด บอร์ด ESP32 จะเข้าสู่โหมดสลีปลึกเป็นเวลา 5 วินาที (5,000 มิลลิวินาที)

เครื่องจักร. การนอนหลับลึก ( 5,000 )

เมื่อเวลาผ่านไป 5 วินาที ESP32 จะตื่นขึ้นและรีสตาร์ทรหัสคล้ายกับ ใน ปุ่ม.

  ส่วนติดต่อผู้ใช้แบบกราฟิก ข้อความ คำอธิบายแอปพลิเคชันที่สร้างขึ้นโดยอัตโนมัติ

เอาต์พุต

สามารถสังเกตเอาต์พุตต่อไปนี้บนเชลล์เทอร์มินัลของ Thonny IDE ที่นี่เราจะเห็นว่าทุก ๆ 5 วินาที ESP32 จะตื่นขึ้นจากโหมดสลีปลึกและกะพริบ LED ที่ GPIO พิน 4

ไฟ LED ที่ GPIO 4 จะหมุน บน เป็นเวลา 1 วินาที

หลังจาก 1 วินาที ไฟ LED จะติด ปิด .

ตอนนี้บอร์ด ESP32 จะเข้าสู่โหมดสลีปอีกครั้งเป็นเวลา 5 วินาที และหลังจากนั้นกระบวนการทั้งหมดจะทำซ้ำ เพียงเท่านี้เราก็ควบคุมโหมด Deep Sleep ของ ESP32 ได้สำเร็จโดยใช้รหัสตัวจับเวลา

บทสรุป

ในบทช่วยสอนนี้ เราได้กำหนดค่า ESP32 ให้ตื่นจากโหมดสลีปลึกโดยใช้โปรแกรมจับเวลาที่เขียนด้วย MicroPython เราอัปโหลดโค้ดโดยใช้ ธอนนี่ ไอดีโอ . เราเพิ่งพิมพ์ข้อความเมื่อ ESP32 ตื่นขึ้นและไฟ LED กะพริบ; อย่างไรก็ตาม การใช้บทความนี้สามารถดำเนินการใดๆ ก็ได้เมื่อ ESP32 ตื่นขึ้นจากโหมดสลีปลึก