บทความการใช้งานเริ่มต้น ESP8266 NodeMCU และการใช้งาน Application ต่างๆ ตอนที่ 4 การใช้งาน GPIO

บทความการใช้งานเริ่มต้น ESP8266 NodeMCU และการใช้งาน Application ต่างๆ

ตอนที่ 4 การใช้งาน GPIO

01

การใช้งาน Digital Input/Output
          ในตอนที่ 4 นี้ จะกล่าวถึงการใช้งาน Digital/Input ซึ่งการใช้งาน Digital I/O ของ ESP8266 นั้น สามารถใช้งานคำสั่ง digitalWrite, digitalRead ได้เช่นเดียวกับการใช้งาน Digital I/O ของ Arduino โดยกำหนดหมายเลขของ Pin ที่ต้องการใช้งาน ดังรูป

ตัวอย่าง ไฟกระพริบ โดยอ้างอิงจากชื่อ Pin ของ ESP8266

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 ก็ได้เช่นกัน

รูปเปรียบเทียบชื่อ Pin ของ NodeMCU กับ ESP8266

รูปเปรียบเทียบชื่อ Pin ของ NodeMCUV2 กับ ESP8266

ตัวอย่าง ไฟกระพริบโดยอ้างอิงจากชื่อ Pin ของ NodeMCU

จากรูป การต่อวงจรเป็นการต่อใช้งานขา 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

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

<<ย้อนกลับไปหน้าสารบัญ