You are on page 1of 13

การพัฒนาหุ่นยนต์เพื9อ

การศึกษา

GPIO อินพุต/เอาต์พตุ

ดร.วิวฒั น์ ทวีทรัพย์
GPIO อินพุต/เอาต์พุต

• Outline
• GPIO ขาอินพุต/เอาต์พุตเอนกประสงค์
• การตั้งค่า pinMode และการสั่งงาน GPIO
• อินพุตแบบดิจิตอล (Digital Input)
• การทดลองใช้ขาอื่นๆ เพื่อเป็นอินพุต/เอาต์พุต
• Pull-up/Pull-down
• การใช้งาน INPUT_POLLUP ภายในบอร์ด
GPIO ขาอินพุต/เอาต์พุตเอนกประสงค์
GPIO ขาอินพุต/เอาต์พุตเอนกประสงค์
• สามารถโปรแกรมขา GPIO ของ NodeMCU สามารถเป็นได้ทั้ง
Input และ Output
• สามารถประกาศ map ขา GPIO ของNodeMCU ได้ดังนี้
static const uint8_t D0 = 16;
static const uint8_t D1 = 5;
static const uint8_t D2 = 4;
static const uint8_t D3 = 0;
static const uint8_t D4 = 2;
static const uint8_t D5 = 14;
static const uint8_t D6 = 12;
static const uint8_t D7 = 13;
static const uint8_t D8 = 15;
static const uint8_t D9 = 3; บอร์ดเขียนว่า RX
static const uint8_t D10 = 1; บอร์ดเขียนว่า TX
GPIO ขาอินพุต/เอาต์พุตเอนกประสงค์
• ตัวอย่างการใช้งานควบคุมเอาต์พุตที่ขาดิจิตอล digitalWrite() เราจะ
สั่งงานเปิดปิดไฟที่ขา D2 หรือก็คือ ขาที่ GPIO4

150 Ω

ขา D2
GPIO ขาอินพุต/เอาต์พุตเอนกประสงค์
• เมื่ออัพโหลดแล้ว จะเห็นไฟกระพริบทุก 1 วินาที

int led1 = 4; int led1 = D2;


void setup() { void setup() {
pinMode(led1, OUTPUT); pinMode(led1, OUTPUT);
} }
void loop() { void loop() {
digitalWrite(led1, 1); digitalWrite(led1, 1);
delay(1000); delay(1000);
digitalWrite(led1, 0); digitalWrite(led1, 0);
delay(1000); delay(1000);
} }

สามารถประกาศขา GPIO ได้ 2 แบบ


การตั้งค่าโหมดและการสั่งงาน GPIO
• การตั้งค่าว่าพินไหนเป็น Input หรือ Output สามารถกำหนดได้โดย
คำสั่ง pinMode();
int led1 = D2;
int ldr1 = D7;
void setup() {
pinMode(led1, OUTPUT); //พิน D2 หรื อ GPIO04 ทํางานเป็ น OUTPUT
pinMode(ldr1, INPUT); //พิน D7 หรื อ GPIO13 ทํางานเป็ น INPUT
}
หรือ
const int D2 = 4;
const int D7 = 13;
void setup() {
pinMode(4, OUTPUT); //พิน D2 หรื อ GPIO04 ทํางานเป็ น OUTPUT
pinMode(13, INPUT); //พิน D7 หรื อ GPIO13 ทํางานเป็ น INPUT
}
Workshop 4 Blink LED
อุปกรณ์
1. บอร์ด NodeMCU ESP8266-12e
2. หลอด LED จำนวน 1 หลอด
3. ตัวต้านทาน 100-470 Ohm จำนวน 1 ชิ้น
4. บอร์ดทดลอง (Breadboard)
5. สาย Jumper
การทำงานที่ต้องการ
1. กำหนดให้ GPIO14 หรือพิน D5 เป็นเอาต์พุต
2. กำหนดให้ส่งค่า HIGH ไปทีพ่ ิน D5 เป็นเวลา 500 มิลลิวินาที
3. กำหนดให้ส่งค่า LOW ไปทีพ่ ิน D5 เป็นเวลา 600 มิลลิวินาที
อินพุตแบบดิจิตอล (Digital Input)
ตัวอย่างการใช้งานควบคุมอินพุตที่ขาดิจิตอล digitalRead(); เราจะอ่าน
ค่าจากขา D1 ว่ามีสถานะ 0 หรือ 1 โดยการกดสวิตช์
อินพุตแบบดิจิตอล (Digital Input)
เมื่ออัพโหลดและเปิดดูที่ Serial Monitor กดปุ่มสวิตช์ จะเห็นเลข 0
หรือเลข 1 ออกมา คือค่าที่อ่านได้จากสถานะของสวิตช์

int sw = D1;
void setup() {
Serial.begin(9600);
pinMode(sw, INPUT_PULLUP);
// ขา GPIO16 หรื อ D0 ไม่มีความสามารถ INPUT_PULLUP
}
void loop() {
int val = digitalRead(sw);
Serial.println(val);
delay(100);
}
INPUT_PULLUP
INPUT_PULLUP คือจ่ายไฟ Vcc สัญญาณ 1 ให้กับ input เพื่อป้องกัน
สัญญาณรบกวน ในกรณีนี้ต่อสวิตช์เป็น input ซึ่งเมื่อเราต่อสัญญาณ 1
ลงกราวน์ จะได้สัญญาณ 0
Workshop 5 การใช้ INPUT_PULLUP
ในตัว
ต่อวงจรตามภาพ

- +
GND
D4

D1
Workshop 5 การใช้ INPUT_PULLUP
int sw = D4;
int led = D1;
void setup() {
Serial.begin(9600);
pinMode(led,OUTPUT);
pinMode(sw, INPUT_PULLUP);
}
void loop() {
int val = digitalRead(sw);
Serial.println(val);
delay(100);
if(val == 0)
{
digitalWrite(led, HIGH);
}
else
{
digitalWrite(led, LOW);
}
}

You might also like