KB-IDE [EP4]: ทดลองใช้งาน GPIO ของบอร์ด ESP32 ด้วย KB-IDE

Apinun Boontong
Chiang Mai Maker Club
4 min readJun 20, 2019

How to use ESP32 gpio with KB-IDE

ก่อนที่จะเริ่มใช้งานบอร์ดต่าง ๆ เราควรที่จะทราบขาใช้งานของ ESP32 ที่เราจะใช้เสียก่อน ในที่นี้ผมจะเลือกเป็น บอร์ด TTGO T1 ซึ่งขาใช้งานมีดังต่อไปนี้

รูปภาพที่ 1 PIN OUT

จากภาพที่ 1 จะเห็นได้ว่า GPIO จะแสดงด้วยสีชมพู ดังนั้นไม่ว่าจะให้เป็น ดิจิตอลอินพุต หรือ ดิจิตอลเอาต์พุต จะทำได้หมด ซึ่งการเรียกใช้งานในโปรแกรม สามารถกำหนดขาตามชื่อของ GPIO ได้เลย
#หมายเหตุ ขาใช้งานที่เป็นอินพุตได้เท่านั้น คือ GPIO35, 36 และ 39

การทดลองที่ 1: LED Blink

หลังจากที่เราได้ทำการติดตั้งโปรแกรม KB-IDE มาแล้ว
เราก็จะมาเขียนโปรแกรม ไฟกระพริบกัน ก่อนอื่นต้องต่อวงจรตามรูปเลยครับ

รูปภาพที่ 2 วงจรควบคุมการติดดับของหลอด LED

เขียนโปรแกรมตามรูปภาพที่ 3 (สังเกตุขาใช้งาน สามารถกำหนดเป็นตัวเลข 22 ตรงตามขาใช้งานได้เลย ไม่ต้องเขียน GPIO22) จากภาพที่ 2 วงจรควบคุมการติดดับของหลอด LED จะเห็นว่าเราต่อ LED ที่ ขา 22 ดังนั้นเราต้องเขียนโปรแกรมควบคุมการติดดับที่ขา 22 ด้วย ตามภาพที่ 3

รูปภาพที่ 3 โค้ดโปรแกรม
รูปภาพที่ 4 โค้ดโปรแกรมแบบเขียน

จากภาพที่ 4 เมื่อปรับโหมดเป็น Programmer Level จะแสดงโค้ดแปลงมาจากบล็อก ซึ่งผู้พัฒนา สามารถศึกษาโค้ดเพิ่มเติมได้

อธิบายการทำงานของโปรแกรมการทดลองที่ 1
void setup()
จากบล็อก Setup เป็นการตั้งค่า หรือกำหนดค่าเริ่มต้นให้กับโปรแกรม เช่น กำหนดขาใช้งาน กำหนดการเชื่อมต่อผ่าน serial, กำหนดการเชื่อมต่อเซ็นเซอร์ต่าง ๆ

void setup()
{

}

void loop() จากบล็อก Loop จะเป็นการทำงานแบบวนรอบ ภายในปีกกาเปิด ปิด โดยโปรแกรมจะทำงานวนรอบอยู่ในลูปนี้

void loop()
{

}

set pin เป็นการกำหนดขาใช้งานว่าเป็นเอาต์พุต อินพุต หรือ อินพุต พูลอัพ

pinMode(22,OUTPUT);

ส่วนการกำหนดขาใช้งานจะอยู่ตรงจุดที่กรอบสีแดง สามารถเปลี่ยนการทำงานของขาใช้งานความต้องการ

สีแดงคือขา GPIO ที่ใช้
สีน้ำเงินคือกำหนด OUTPUT, INPUT, INPUT_PULLUP

digitalWrite คำสั่งนี้ป็นคำสั่งการกำหนด ลอจิก ให้ออกไปยัง ขาที่กำหนดโดยจะกำหนดเป็นลอจิก “ 0 ” , “ 1 ” แทนด้วย 0 โวลต์ และ 5 โวลต์ ตามลำดับ

digitalWrite(22, 1);

โดยการกำหนด ตรงกรอบสีน้ำเงิน เป็นการกำหนด GPIO ที่ต้องการ ส่วนตรงกรอบสีแดงเป็นการกำหนด ลอจิก “0”, “1”

สีน้ำเงิน เป็นการกำหนด GPIO ที่ต้องการ ตรงเส้นใต้สีแดงเป็นการกำหนดลอจิก “0”, “1”

delay คำสั่งนี้เป็น การกำหนดให้หยุดการทำงานชั่วขณะ มีหน่วยเป็นมิลลิวินาที (Millisecond) จากตัวอย่างในบล็อกแทนค่าด้วย 100 คือหยุด100 มิลิวินาที

delay(100);

การทดลองที่ 2: การรับค่าอินพุตดิจิตอล

  1. แบบ Polling เป็นการเขียนโปรแกรมแบบวนตรวจสอบลอจิกที่ขาพอร์ต

2. แบบ Interrupt เป็นการเขียนโปรแกรมที่เปิดให้ยอมรับการรับสัญญาณการขัดจังหวะจากภายนอกได้

มาดูวิธี การต่อวงจรสวิตช์

จะสังเกตได้ว่า การใช้ INPUT นั้นจะต้องต่อ ตัวต้านทางภายนอกช่วยด้วย มีให้ใช้แบบ pullup หรือ แบบ pulldown เลือกกันได้เลย

ส่วนถ้าใช้ INPUT_PULLUP เราก็ไม่ต่อต่อตัวต้านทานแบบ pullup หรือ แบบ pulldown เลย ตัว MCU จะไปดึงแบบ pullup ใน MCU มาต่อให้ อัตโนมัติ

ดังนั้นมันก็ขึ้นอยู่กับการเรียกใช้งานแบบ INPUT ก็จะเหมาะกับงานจริงจังแต่ถ้าฝึกเขียนก็ต้อง INPUT_PULLUP น่าจะไหวตามต้องการเลยครับ

pinMode(BTPIN,INPUT);

pinMode(BTPIN,INPUT_PULLUP);

จากรูปภาพข้างบน BTPIN คือ GPIO ที่เราต้องการที่จะกำหนด

มาดูการเขียนโปรแกรมอ่านค่าจาก GPIO โดยการรับค่าอินพุต

ข้างบนแบบใช้ Block ข้างล่างแบบเขียนโปรแกรม

Number BTPIN;

void setup()
{
Serial.begin(115200);
BTPIN = 33;
pinMode(BTPIN,INPUT);}
void loop()
{
Serial.println(digitalRead(BTPIN));
delay(500);

}

ถ้าอับโหลดโปรแกรมได้ก็จะได้แบบนี้ เวลาเรากดปุ่มกราฟจะเป็น 0 เวลาปล่อย 1

การทดลองที่ 3: การใช้งาน PWM (Pulse Width Modulation)

PWM เป็นการควบคุมเวลาเปิดและปิดด้วยความถี่ ที่ใวกว่าตาเราจะมองเห็น

cc. www.praphas.com

ค่า PWM จะกำหนดตั้งแต่ 0–255 จะเป็น 0%-100% และมี แค่ 15 ช่องเท่านั้น
การต่อวงจรก็ใช้ GPIO 22 เลยตามรูปครับ

หลังจากต่อเสร็จก็มาดูโค้ดกันครับ

แบบ Block

แบบโค้ด

void setup()
{
ledcSetup(0, 5000, 8);
ledcAttachPin(22, 0);

ledcWrite(0, 127);

}
void loop()
{


}

การทดลองที่ 4: การใช้งาน ADC

ADC เป็นการแปลงค่า อนาลอกเป็นค่าดิจิตอล โดยการแปลงค่าก็จะมาค่าความละเอียดด้วยส่วนของ ESP32 นั้นจะเป็น 12BIT มีค่าตั้งแต่ 0–4095 ค่าเลยทีเดียว
ส่วน GPIO ที่ใช้งานได้ ไปดูรูปภาพที่ 1 เลยครับ จะเขียนว่า ADC เช่น ADC14 อยู่ที่ GPIO13

ต่อวงจรตามรูปต่อไปนี้

หลังจากต่อเสร็จก็มาดูโค้ดกันครับ

แบบ Block

แบบ Code

void setup()
{


Serial.begin(115200);

}
void loop()
{
Serial.println(analogRead(13));
delay(500);

}

การทดลองที่ 5: การใช้งาน DAC

DAC เป็นการแปลงค่า ดิจิตอลเป็นค่าอนาลอก โดยการแปลงค่าก็จะมาค่าความละเอียดด้วยส่วนของ ESP32 นั้นจะเป็น 8BIT มีค่าตั้งแต่ 0–255 ค่าเลยส่วน GPIO ที่ใช้งานได้ มีอยู่ 2 ขา คือ GPIO25 และ GPIO26 เท่านั้นก็มาดูโค้ดกันครับ

แบบ Block

แบบโค้ด

void setup()
{


dacWrite(26,128);

}
void loop()
{


}

เอา โวลต์มิเตอร์ วัดที่ GPIO26 จะมีแรงดันออกมา 1.626V ถือว่าถูกต้องครับ
สำหรับบทความนี้ก็มีประมาณนี้ครับบทความต่อไปก็จะมาลงลึกอีกหน่อยนะครับ

--

--