บทความการใช้งานเริ่มต้น ESP8266 NodeMCU และการใช้งาน Application ต่างๆ
ตอนที่ 4 การใช้งาน GPIO
![01](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/126_01.jpg)
การใช้งาน Digital Input/Output
ในตอนที่ 4 นี้ จะกล่าวถึงการใช้งาน Digital/Input ซึ่งการใช้งาน Digital I/O ของ ESP8266 นั้น สามารถใช้งานคำสั่ง digitalWrite, digitalRead ได้เช่นเดียวกับการใช้งาน Digital I/O ของ Arduino โดยกำหนดหมายเลขของ Pin ที่ต้องการใช้งาน ดังรูป
![](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/126_39.png)
ตัวอย่าง ไฟกระพริบ โดยอ้างอิงจากชื่อ Pin ของ ESP8266
![](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/126_40.png)
void setup() { pinMode(5,OUTPUT); } void loop() { digitalWrite(5,LOW); delay(500); digitalWrite(5,HIGH); delay(500); }
การใช้งาน Digital I/O บนบอร์ด NodeMCU
จะสังเกตได้ว่า บนบอร์ด NodeMCU นั้น ได้สกรีนชื่อของ Pin ต่างๆเอาไว้แล้ว โดยเป็นการกำหนดชื่อ Pin ใหม่ซึ่งไม่ตรงกับชื่อ Pin ของ ESP8266 ทำให้การใช้งานบน Arduino IDE ผู้เขียนสามารถอ้างชื่อตามชื่อ Pin ของ ESP8266 หรือกำหนดชื่อ Pin โดยอ้างตามชื่อ Pin บนบอร์ด NodeMCU ก็ได้เช่นกัน
![](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/126_41.png)
รูปเปรียบเทียบชื่อ Pin ของ NodeMCU กับ ESP8266
![](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/126_42.png)
รูปเปรียบเทียบชื่อ Pin ของ NodeMCUV2 กับ ESP8266
ตัวอย่าง ไฟกระพริบโดยอ้างอิงจากชื่อ Pin ของ NodeMCU
![](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/126_43.png)
จากรูป การต่อวงจรเป็นการต่อใช้งานขา D1 ของบอร์ด NodeMCU V2 หากตรวจสอบดูจากรูป เปรียบเทียบชื่อ Pin ของ NodeMCU V2 กับ ESP8266 จะเห็นว่าขา D1 ของ NodeMCU คือขา GPIO5 ของ ESP8266 นั่นเอง หากนำเอา Code ในการทดลองแรกมาใช้งาน ก็จะสามารถสั่งงานให้ไฟกระพริบได้เช่นกัน แต่การใช้งานอาจไม่สะดวกนักเพราะต้องมาเปรียบเทียบขาทุกครั้งที่ต่อใช้งาน การใช้งานโดยอ้างอิงจากขาที่ NodeMCU เป็นผู้กำหนดจึงใช้งานได้สะดวกกว่า
void setup() { pinMode(D1,OUTPUT); } void loop() { digitalWrite(D1,LOW); delay(500); digitalWrite(D1,HIGH); delay(500); }
ตัวอย่างการใช้งาน analogWrite (Dim LED)
– ต่อจงจรเช่นเดียวกับตัวอย่างไฟกระพริบ
int val; void setup() { pinMode(D1,OUTPUT); } void loop() { for(val=0;val<1000;val+=50) { analogWrite(D1,val); delay(100); } for(val=1000;val>1;val-=50) { analogWrite(D1,val); delay(100); } }
ตัวอย่างการใช้งาน Digital Input
![](https://blog.thaieasyelec.com/wp-content/uploads/2020/08/126_44.png)
void setup() { pinMode(D1,OUTPUT); pinMode(D2,INPUT); } void loop() { if(!digitalRead(D2)) digitalWrite(D1,HIGH); else digitalWrite(D1,LOW); }
ผลการ Run Program
หลอด LED ที่ต่ออยู่ที่ขา D1(GPIO5) จะติดเมื่อกด Switch ที่ต่ออยู่ที่ ขา D2(GPIO4)
ตัวอย่างการใช้งาน External Interrupt
– ต่อวงจรเช่นเดียวกับ การทดลองตัวอย่างการใช้งาน Digital Input
int led = D1; volatile int state = LOW; void setup() { pinMode(led, OUTPUT); attachInterrupt(D2, blink, CHANGE); } void loop() { digitalWrite(led, state); } void blink() { state = !state; }
– สามารถใช้งาน interrupt type ได้ทั้ง CHANGE, RISING, FALLING
– สามารถใช้งาน Interrupt ได้ทุกขา ยกเว้น ขา D0 หรือ GPIO16
ผลการทดลอง
Led สามารถติด/ดับ การจากการเปลี่ยนค่าในตัวแปร state โดยค่าตัวแปร state ถูกเปลี่ยนค่าเมื่อมีการเกิด Interrupt จากการกด Switch ที่ต่ออยู่กับขา D2