MicroPython ESP32 – 02 : พื้นฐาน PWM อินพุต/เอาต์พุต
บทความนี้กล่าวถึงขั้นตอนการเขียนโปรแกรม โค้ดภาษา ไมโครไพธอน – MicroPython ให้กับไมโครคอนโทรลเลอร์ ESP32 ด้วย Thonny IDE โดยโค้ดนี้จะสาธิตการใช้คำสั่งเพื่อใช้งาน PWM พื้นฐาน รวมทั้ง อินพุต/เอาต์พุต และ การใช้ Push Button
โดยมีขั้นตอนการทำงานดังนี้
1 : อุปกรณ์ที่ใช้
- 1. TTGO T8 V1.7 ESP32 Development Board 4MB PSRAM TF Card
- 2. Micro USB Cable Wire 1m for NodeMCU
- 3. หลอดไฟ LED 5mm สีแดง
- 4. รีซิสเตอร์ 220 OHM 1/4W 5%
- 5. รีซิสเตอร์ 10K Ohm 1/4W 5%
- 6. Push Button Switch สวิตช์กดติดปล่อยดับ 2 ขา
- 7. Jumper (M2M) cable 20cm Male to Male
- 8. Breadboard 700 Points SYB-120 จำนวน 2 ชิ้น
2 : ทดลองใช้งาน โปรแกรมแรก Blink
โปรแกรมแรกของ การใช้งานไมโครคอนโทรลเลอร์มักจะเป็น Blink ไฟกะพริบ ซึ่งเป็นหนึ่งในโปรแกรมที่ง่ายที่สุดเท่าที่จะเป็นไปได้ในการเขียนภาษาโปรแกรมต่างๆ โดยทำตามขั้นตอนลิงค์ด้านล่าง
3 : หรี่ไฟ (PWM) ด้วย MicroPython
เชื่อมต่ออุปกรณ์ ตามรูปด้านล่าง
เปิดโปรแกรม Thonny IDE ในกรณีที่ถ้าปิดโปรแกรมแล้วเปิดใหม่ แล้วโปรแกรมติดต่อบอร์ด ESP32 ไม่ได้ ขึ้น Error ที่ Shell ตามรูปด้านล่าง ให้กด Ctrl+C ( Ctrl พร้อม C) บนแป้นพิมพ์ (Keyboard)
แก้ไขไฟล์ main.py ที่อยู่ที่คอมพิวเตอร์เรา This computer -> Python-code
โค้ดนี้สาธิตการใช้คำสั่งเพื่อใช้งาน สร้างสัญญาณ PWM ด้วยบอร์ด ESP32 โดยใช้เฟิร์มแวร์ MicroPython ตัวอย่างเช่นเราจะหรี่ความสว่างของ LED โดยการเปลี่ยนรอบการทำงานตลอดเวลา ตามโค้ดด้านล่างนี้
from machine import Pin, PWM
from time import sleep
frequency = 5000
led = PWM(Pin(27), frequency)
while True:
for duty_cycle in range(0, 1024):
led.duty(duty_cycle)
sleep(0.005)
โค้ดทำงานอย่างไร
นำเข้าคลาส Pin จากโมดูล machine และในการสร้างขา PWM ให้นำเข้าคลาส PWM เพิ่มเติมจากคลาส Pin จากโมดูล machine
from machine import Pin, PWM
จากนั้นสร้างวัตถุ PWM ที่ชื่อว่า led กำหนดพินเป็น GPIO 27 และรับค่าจาก frequency
led = PWM(Pin(27), frequency)
ในการสร้างวัตถุ PWM คุณจะต้องผ่านพารามิเตอร์พินที่เชื่อมต่อกับ Frequency และ Duty cycle
Frequency: ความถี่สามารถเป็นค่าระหว่าง 0 ถึง 78125 เราจึงสามารถใช้ความถี่ 5000 Hz เพื่อควบคุมความสว่างของ LED
Duty cycle: รอบการทำงานสามารถเป็นค่าระหว่าง 0 ถึง 1,023 ซึ่ง 1023 สอดคล้องกับรอบการทำงาน 100% (ความสว่างสูงสุด) และ 0 สอดคล้องกับรอบการทำงาน 0% (LED ที่ไฟไม่ติด)
ไปที่ File -> Save
เพื่อป้องกันการ Error ก่อน อัพโหลดไฟล์ ให้หยุดการทำงาน ของบอร์ด ESP32 โดยไปที่ Run -> Stop/Restart backed
ถ้าโปรแกรมติดต่อบอร์ด ESP32 ไม่ได้ ให้กด Ctrl+C ( Ctrl พร้อม C) บนแป้นพิมพ์ (Keyboard)
คลิกขวาที่ไฟล์ main.py -> Upload to / เพื่ออัพโหลดไฟล์โค้ดนี้ไปยังบอร์ด ESP32
โปรแกรม ถามว่า จะให้เขียนทับไฟล์เดิมที่มีอยู่หรือไม่ เลือก OK
กดที่ปุ่ม RTS 1 ครั้ง เพื่อเริ่มการทำงาน ของ ESP32
ถึงขั้นตอนนี้ถ้าไม่มีอะไรผิดพลาด สังเกต LED จะค่อยๆสว่างขึ้น จนสว่างที่สุดแล้วกลับไปเริ่มต้นใหม่ แสดงว่าโปรแกรม หรี่ไฟ (PWM) ด้วย MicroPython ของคุณสำเร็จแล้ว
4 : เช็คสถานะปุ่มกด (Push Button) สวิทซ์ กดติดกดดับ
โค้ดนี้สาธิตการคอยอ่านและตรวจสอบค่าลอจิก-อินพุตจากปุ่มกด (Push button) ที่ต่อเพิ่มเข้าที่ขา GPIO32 เมื่อมีการกดแล้วปล่อยปุ่มหนึ่งครั้ง จะทำให้สถานะลอจิก-เอาต์พุตเปลี่ยนหนึ่งครั้ง โดยเลือกใช้ขา GPIO27 เป็นเอาต์พุต
เชื่อมต่ออุปกรณ์ ตามรูปด้านล่าง
เขียนโค้ดและอัพโหลดโค้ดดังนี้
from machine import Pin
from time import sleep
btn = Pin(32, Pin.IN,Pin.PULL_UP)
led = Pin(27, Pin.OUT)
led.value( 0 )
while True:
if btn.value() == 0:
led.value( not led.value() )
while btn.value() == 0:
sleep(0.1)
sleep(0.1)
กดที่ปุ่ม RTS 1 ครั้ง เพื่อเริ่มการทำงาน ของ ESP32 แล้วจึงทดสอบ
โดยเมื่อมีการกดแล้วปล่อยปุ่มหนึ่งครั้ง LED จะติด
และเมื่อมีการกดแล้วปล่อยปุ่มอีกหนึ่งครั้ง LED จะดับ แสดงว่าโปรแกรมเช็คสถานะปุ่มกด (Push Button) สวิทซ์ กดติดกดดับสำเร็จแล้ว
5 : เช็คสถานะปุ่มกด (Push Button) สวิทซ์ กดติดปล่อยดับ
โค้ดนี้สาธิตการคอยอ่านและตรวจสอบค่าลอจิก-อินพุตจากปุ่มกด (Push button) ที่ขา GPIO32 เมื่อมีการกดสวิทซ์แล้วค้างไว้ จะทำให้ LED ติด และเมื่อปล่อยสวิทซ์ LED จะดับ โดยเลือกใช้ขา GPIO27 เป็นเอาต์พุต
เชื่อมต่ออุปกรณ์ ตามรูปด้านล่าง
เขียนโค้ดและอัพโหลดโค้ดดังนี้
from machine import Pin
from time import sleep
led = Pin(27, Pin.OUT)
button = Pin(32, Pin.IN)
while True:
led.value(button.value())
sleep(0.1)
กดที่ปุ่ม RTS 1 ครั้ง เพื่อเริ่มการทำงาน ของ ESP32 แล้วจึงทดสอบ
เมื่อมีการกดสวิทซ์ค้างไว้ LED จะติด
และเมื่อมีการปล่อยปุ่มสวิทซ์ LED จะดับ แสดงว่าโปรแกรม เช็คสถานะปุ่มกด (Push Button) สวิทซ์ กดติดกดดับ สำเร็จแล้ว