วันพุธที่ 9 มีนาคม พ.ศ. 2559

[IoT] ขาของ Node MCU V2 กับ Arduino IDE (Pinout)



ขาของ NodeMCU V2 (ESP-12E) กับ Arduino IDE

     สวัสดีครับ วันนี้จะมาพูดถึง NodeMCU V2 (ESP-12E) กันนะครับ ซึ่งเป็นที่รู้จักกันดีอยู่แล้ว
ว่าเป็น Micro-controller ที่เกิดมาเพื่องาน IoT (Internet of Things) อย่างถ่องแท้ โดยตัวบอร์ดนี้ 
จะมีโมดูล WiFi แบบ ESP8266 อยู่ด้วย ทำให้เป็นไมโครคอนโทรลเลอร์ที่มีคุณสมบัติในการเชื่อมต่อ
กับอินเทอร์เน็ต ผ่านระบบ Wi-Fi ซึ่งตัวบอร์ดนี้ ใช้ Lua ในการโปรแกรม แต่นอกจากนั้น ก็ยังสามารถ
ใช้งานร่วมกับ Arduino IDE ได้ แต่ทว่า ขาต่างๆของตัวบอร์ดนั้น เป็นแบบ GPIO เมื่อนำมาใช้
กับ Arduino จะมีหมายเลขของขาต่างๆ ไม่ตรงกับที่เห็นบนบอร์ด จากการทดลองของผม 
โดยใช้โค้ด Blink และหลอด LED เพื่อเช็คขาต่างๆ ปรากฏว่า...

                                   pin0 = pin3
                                   pin1 = หลอดไฟสีฟ้าที่กระพริบ บนโมดูล ESP8266
                                   pin2 = pin4
                                   pin3 = ไม่มีอะไร
                                   pin4 = pin2
                                   pin5 = pin1
                                   pin6 = ไม่มีอะไร
                                   pin7 = ไม่มีอะไร
                                   pin8 = ไม่มีอะไร

ดังนั้น ในการสั่งงานขาต่างๆของ NodeMCU นั้นจึงมีการสั่งที่แตกต่างออกไปจากเดิม
เช่นปกติเราจะสั่งให้ขา D5 มี Logic เป็น High (3.3v) ด้วยคำสั่งแบบนี้

                                  digitalWrite(5,HIGH);

จากคำสั่งข้างต้น การที่สั่งขา D5 ให้มี Logic เป็น High (3.3v) นั้น แทนที่จะเป็นการสั่งขา D5 จริงๆ
กลายเป็นว่าเรากำลังสั่งขา  D1 แทนซะงั้น (อ้าว = =") ที่เป็นอย่างงั้นก็เพราะว่า การที่เราสั่งเลข 5 นั้น
จะทำให้เข้าใจว่าเรากำลังสั่ง "GPIO 5" อยู่ และจากรูปข้างล่าง จะเห็นว่า ขา GPIO5 นั้น
ตรงกับ D1 อยู่ครับ ส่วน D5 จริงๆแล้ว จะเป็น GPIO14


ฉะนั้นหากจะสั่งขา D5 จริงๆแล้ว เราก็คงจะต้องใช้คำสั่ง            

                                  digitalWrite(14,HIGH);

จึงจะตรงกับขา D5 (ซึ่งเป็น GPIO14) จริงๆ เอาหละครับทีนี้ สับสนวุ่นวายกันแน่ๆ
จะสั่ง pin 5 แต่ดันต้องใส่ 14   = =" ปวดหัวตึ้บครับ 55555555555+

ด้วยเหตุนี้ ในไลบรารี่ของ NodeMCU ได้มีการกำหนด (Define) เพื่อป้องกันการสับสนของ
ขาต่างๆบน NodeMCU ไว้แล้ว (อยู่ในไฟล์ pins_arduino.h) โดยรายละเอียดนั้นเป็นดังนี้

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;
static const uint8_t D10  = 1;

ดังนั้น หากต้องการจะสั่ง ขา D5 ให้มี Logic เป็น High (3.3v) ควรจะสั่งด้วยคำสั่งดังนี้

                                  digitalWrite(D5,HIGH);

ซึ่งเมื่อสั่งแบบนี้ ไลบรารี่ จะทำการแปลความหมายของ D5 เป็น GPIO14
ที่ซึ่งตรงกับขาที่ 5 ของ NodeMCU พอดีครับ... ^_^ (แค่เติมตัว D ชีวิตก็เปลี่ยน 555+)

                             
                            เซเรฟ       19:50    2/3/2559

2 ความคิดเห็น: