ภาพรวมโครงการ
ESP8266 ESP-01 เป็นโมดูล Wi-Fi ที่เล็กและราคาถูก มีความสามารถหลายอย่างแต่คนส่วนใหญ่ไม่รู้ว่าสามารถเขียนโปรแกรมได้โดยตรงด้วย Arduino IDE นั่นคือ เราไม่จำเป็นต้องใช้ Arduino UNO เพิ่มเติม!
บทความนี้จะสอนให้คุณเขียนโปรแกรม ESP8266 ESP-01 ได้เหมือนกับการเขียนโปรแกรม Arduino ทั่วไป นอกจากนี้ยังจะสอนวิธีควบคุมขา GPIO (Input/Output) เพื่อเปิด/ปิด LED หรืออุปกรณ์อื่นๆ ผ่าน Wi-Fi
โมดูล ESP8266 ESP-01 - เล็กแต่มีประสิทธิภาพมากสำหรับ IoT
อุปกรณ์ที่ต้องเตรียม
ในการทำโครงการนี้คุณจะต้องเตรียมอุปกรณ์ดังต่อไปนี้:
ESP8266 ESP-01
โมดูล Wi-Fi หลัก ที่จะเขียนโปรแกรมโดยตรง
USB to TTL Converter (CH340/PL2303)
ใช้ในการเชื่อมต่อ ESP8266 กับคอมพิวเตอร์ เพื่ออัปโหลดโค้ด
สายไฟ USB Micro
สำหรับต่อ USB to TTL Converter เข้ากับคอมพิวเตอร์
Breadboard ขนาดเล็ก
สำหรับต่อจุดต่อต่างๆ แบบไม่ถาวร ให้ได้ระหว่างทดลอง
สายเจ้มเปอร์ (Jumper Wires)
เชื่อมต่อระหว่าง ESP8266 และ USB to TTL Converter
LED และตัวต้านทาน 220 Ohm
สำหรับการทดสอบควบคุม Output (ตัวเลือก)
ตัวต้านทาน 10K Ohm
สำหรับการตั้งค่า Pull-up บนขา Reset (RST)
คอมพิวเตอร์ + Arduino IDE
ที่มี Arduino IDE ติดตั้งแล้ว พร้อม COM Port driver
หมายเหตุ: ESP8266 ต้องการแรงดัน 3.3V เท่านั้น อย่าจ่ายแรงดัน 5V เพราะจะทำให้เสีย นำใช้ Voltage Regulator หรือ USB to TTL ที่มี 3.3V Output
เรื่องราวและความเป็นมา
ESP8266 ถูกพัฒนาโดย Espressif Systems จากประเทศจีน มาในตอนแรกมันถูกออกแบบมาเพื่อเป็นตัวเชื่อมต่อ Wi-Fi ราคาถูกเท่านั้น แต่เมื่อคนพบว่าสามารถเขียนโปรแกรมตรงเข้าไปได้ มันจึงกลายเป็นไมโครคอนโทรลเลอร์ Wi-Fi ที่ถูกที่สุดในโลก
ESP-01 คือเวอร์ชั่นที่เล็กที่สุดของ ESP8266 มีเพียง 8 ขา (GPIO pins) ทำให้มันขนาดเล็กและเหมาะสำหรับ IoT projects ที่มีพื้นที่จำกัด ราคา 60-80 บาท จึงเป็นที่นิยมของนักไมเครอร์คอนโทรลเลอร์สมัครเล่น
ในอดีต ผู้คนต้องเขียนโปรแกรม ESP8266 ด้วย Lua scripting หรือ AT Commands ซึ่งยุ่งยากมาก แต่ตอนนี้ Espressif ได้พัฒนา Arduino Core สำหรับ ESP8266 ทำให้คุณสามารถใช้ Arduino IDE ปกติได้เลย นี่คือสิ่งที่ทำให้ ESP8266 กลายเป็นตัวเลือกยอดนิยมในชุมชน Maker
ขั้นที่ 1: การตั้งค่า Arduino IDE
ขั้นตอนที่ 1 - ติดตั้ง Arduino IDE (หากยังไม่มี)
ดาวน์โหลด Arduino IDE จาก arduino.cc เลือกเวอร์ชั่นที่เหมาะกับระบบปฏิบัติการของคุณ (Windows, Mac, Linux) และติดตั้งตามปกติ
ขั้นตอนที่ 2 - เปิด Arduino IDE และไปที่ Preferences
1. ไปที่ File → Preferences (บน Mac: Arduino → Preferences)
2. ค้นหาช่อง "Additional Board Manager URLs"
ขั้นตอนที่ 3 - เพิ่ม ESP8266 Board URL
คัดลอก URL นี้ไปวาง:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
หากคุณต้องการติดตั้ง Development version ให้ใช้ URL นี้แทน:
http://arduino.esp8266.com/versions/2.7.4/package_esp8266com_index.json
หากต้องการใช้ทั้ง Arduino และ ESP8266 ให้เพิ่ม URL ทั้งสองโดยคั่นด้วยจุลภาค
เคล็ดลับ: ถ้ามีหลาย URL ให้คั่นด้วยจุลภาค (,) และอย่าลืม Click OK เพื่อบันทึก
โหมดการทำงานของ ESP8266
ก่อนเขียนโปรแกรม สิ่งสำคัญคือต้องเข้าใจว่า ESP8266 มีหลายโหมดการทำงาน เราต้องตั้งค่าให้ถูกต้องเพื่อให้สามารถอัปโหลดโค้ดได้:
| โหมด |
GPIO0 |
GPIO2 |
GPIO15 |
คำอธิบาย |
| Firmware Download |
Low (GND) |
High (3.3V) |
Low (GND) |
โหมดสำหรับอัปโหลดโค้ด - นี่คือสิ่งที่เราต้องการ |
| Run Firmware |
High (3.3V) |
High (3.3V) |
Low (GND) |
โหมดปกติ - ESP ทำงานตามโค้ดที่อัปโหลด |
| UART Download |
High (3.3V) |
Low (GND) |
N/A |
โหมดดาวน์โหลดผ่าน UART (ไม่ค่อยใช้) |
ข้อสำคัญ: GPIO15 ต้องต่อเข้า GND เสมอ และ GPIO0 ต้องต่อเข้า GND ระหว่างอัปโหลด หลังจากนั้นให้ปล่อย (ลอย) เพื่อให้ ESP ทำงานในโหมดปกติ
ขั้นตอนการตั้งค่า (ต่อ)
ขั้นตอนที่ 4 - ติดตั้ง Board Manager
1. ไปที่ Tools → Board → Board Manager
2. ค้นหา "ESP8266"
3. เลือก "esp8266 by ESP8266 Community"
4. Click "Install" แล้วรอให้ติดตั้งเสร็จ (ใช้เวลาประมาณ 2-3 นาที)
ขั้นตอนที่ 5 - ติดตั้ง CH340 Driver (หากใช้ USB to TTL บอร์ด CH340)
ถ้าคุณใช้ USB to TTL บอร์ด CH340 ต้องติดตั้ง driver ลงในคอมพิวเตอร์ ดาวน์โหลดจาก:
Windows: https://www.wch.cn/downloads/CH341SER_EXE.html
Mac: https://www.wch.cn/downloads/CH341SER_MAC.ZIP
Linux: ปกติ driver อยู่ในระบบแล้ว
ขั้นตอนที่ 6 - เลือก Board และ COM Port
1. ต่อ USB to TTL Converter เข้ากับคอมพิวเตอร์
2. ไปที่ Tools → Board → เลือก "Generic ESP8266 Module"
3. ไปที่ Tools → Port → เลือก COM port ของ USB to TTL (เช่น COM3, COM4)
4. ไปที่ Tools → Upload Speed → เลือก "115200"
ระวัง: ต้องเลือก "Generic ESP8266 Module" ไม่ใช่ "NodeMCU" หรือบอร์ดอื่น เพราะ ESP-01 มีการตั้งค่าต่างกัน
วงจรการเชื่อมต่อ ESP8266 ESP-01 กับ USB to TTL Converter สำหรับการอัปโหลดโค้ด
ขั้นตอนที่ 1 - ต่อ ESP8266 กับคอมพิวเตอร์
ต่อ USB to TTL Converter เข้ากับ ESP8266 ดังนี้:
• VCC → 3.3V (จาก USB to TTL)
• GND → GND
• TX → RX
• RX → TX
ขั้นตอนที่ 2 - ตั้งค่าขา GPIO
สำหรับการอัปโหลดโค้ด:
GPIO0 → GND (ต้องต่อขณะอัปโหลด)
GPIO2 → 3.3V
GPIO15 → GND
RST → 3.3V (ผ่านตัวต้านทาน 10K Ohm ก่อน)
ขั้นตอนที่ 3 - ตรวจสอบการเชื่อมต่อ
1. เปิด Arduino IDE
2. ไปที่ Tools → Port → ควรเห็น COM port ของ USB to TTL
3. ถ้าไม่เห็น ให้ติดตั้ง CH340 driver ใหม่
ขั้นตอนที่ 4 - สร้าง Sketch แรก
ไปที่ File → New Sketch แล้วสร้างโค้ด Blink แบบง่ายๆ
ขั้นตอนการเลือก Generic ESP8266 Module ใน Arduino IDE
ขั้นที่ 3: การควบคุม Input และ Output
ตอนนี้คุณพร้อมแล้วที่จะใช้ GPIO pins ของ ESP8266 ควบคุมอุปกรณ์ต่างๆ เช่น LED, Relay, หรือแม้แต่อ่านสถานะจากปุ่ม
ESP8266 GPIO Pin Layout:
| GPIO |
ขา ESP-01 |
ความเป็นไปได้ |
หมายเหตุ |
| GPIO0 |
Pin 3 |
Digital I/O |
สำหรับบูต (ต้องเป็น High ในการทำงานปกติ) |
| GPIO1 |
TX |
TX (Serial) |
ใช้สำหรับ Serial communication |
| GPIO2 |
Pin 8 |
Digital I/O |
Pull-up อยู่ แนะนำให้ใช้ |
| GPIO3 |
RX |
RX (Serial) |
ใช้สำหรับ Serial communication |
| GPIO15 |
Pin 1 |
Digital I/O |
ต้องเป็น Low เพื่อบูต ใช้สำหรับ SPI |
Pins ที่ปลอดภัยที่สุดคือ GPIO2 เพราะมี Pull-up resistor ในตัวแล้ว
ตัวอย่างการเปิด/ปิด LED:
// นิยาม GPIO2 เป็น output
const int ledPin = 2;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(ledPin, HIGH); // เปิด LED
delay(1000); // รอ 1 วินาที
digitalWrite(ledPin, LOW); // ปิด LED
delay(1000); // รอ 1 วินาที
}
ข้อสำคัญ: GPIO1 และ GPIO3 อย่าใช้เพราะเป็นช่อง Serial TX/RX สำหรับ Debug และอัปโหลดโค้ด
วิธี Setup WiFi บน ESP8266: สามารถเขียนโปรแกรมให้ ESP8266 เชื่อมต่อ Wi-Fi และอัปโหลด Over-the-Air (OTA) ได้ หลังจากนั้น ไม่ต้องต่อสาย USB ทุกครั้ง
ตัวอย่างโค้ด Blink ที่อัปโหลดลงใน ESP8266
วงจรอ้างอิง
ต่อไปนี้เป็นวงจรการเชื่อมต่อที่ปลอดภัยและถูกต้อง สำหรับอัปโหลดโค้ดเข้า ESP8266:
วงจร Full Setup:
วงจรเต็มของการเชื่อมต่อ ESP8266 พร้อมตัวต้านทาน Pull-up และ Power supply
ตัวอย่าง Serial Monitor แสดง Output จากการควบคุม GPIO
โค้ดตัวอย่างโปรเจ็ค
โค้ดฉบับสมบูรณ์สำหรับการควบคุม LED ผ่าน GPIO2 และแสดง Serial Output:
// ESP8266 LED Blink Control
const int ledPin = 2; // GPIO2
const int buttonPin = 0; // GPIO0 (ปุ่มทดสอบ)
void setup() {
Serial.begin(115200); // เริ่ม Serial ที่ 115200 baud
delay(100);
Serial.println("\n\nESP8266 LED Control");
Serial.println("GPIO2 = LED");
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop() {
// วิธีที่ 1: Blink LED ทุก 1 วินาที
digitalWrite(ledPin, HIGH);
Serial.println("LED ON");
delay(1000);
digitalWrite(ledPin, LOW);
Serial.println("LED OFF");
delay(1000);
}
ขั้นตอนการอัปโหลด:
- Copy โค้ดด้านบน
- เปิด Arduino IDE → File → New Sketch
- Paste โค้ด
- กด Ctrl+U (หรือ Sketch → Upload) เพื่ออัปโหลด
- ถ้าอัปโหลดสำเร็จ ESP8266 จะเริ่มรัน LED blink
- เปิด Serial Monitor (Ctrl+Shift+M) ที่ 115200 baud เพื่อดู output
ถ้าอัปโหลดไม่สำเร็จ: ตรวจสอบว่า GPIO0 ต่อเข้า GND หรือไม่ และ Board Manager ได้ติดตั้ง ESP8266 แล้วหรือไม่
โค้ด OTA Upload (Upload ผ่าน Wi-Fi):
หลังจากอัปโหลด firmware ลงใน ESP8266 เป็นครั้งแรก คุณสามารถอัปโหลดครั้งต่อๆ ไปผ่าน Wi-Fi โดยไม่ต้องต่อสาย USB:
#include <ArduinoOTA.h>
#include <WiFi.h>
const char* ssid = "Your_WiFi_SSID";
const char* password = "Your_WiFi_Password";
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
ArduinoOTA.begin();
}
void loop() {
ArduinoOTA.handle();
// โค้ดอื่นๆ ของคุณ
}
การตั้งค่า Board และ Upload Speed ก่อนการอัปโหลดโค้ด
ข้อความเมื่ออัปโหลดโค้ดสำเร็จเข้า ESP8266
เคล็ดลับขั้นสูง
1. Serial Debug Output
ใช้ Serial.print() ใน setup() เพื่อแสดง debug messages สำหรับการหาข้อผิดพลาด:
void setup() {
Serial.begin(115200);
delay(100);
Serial.println("System Started!");
}
2. EEPROM Access
ESP8266 มี EEPROM ขนาด 4MB สำหรับเก็บข้อมูล config ที่ไม่หายเมื่อปิดไฟ:
#include <EEPROM.h>
EEPROM.begin(512); // เพื่อการอ่าน/เขียน
byte value = EEPROM.read(0);
EEPROM.write(0, 255);
EEPROM.commit(); // บันทึก
3. Sleep Mode
ESP8266 สามารถเข้า Sleep mode เพื่อประหยัดไฟ:
ESP.deepSleep(10e6); // Sleep 10 วินาที (มหน่วยเป็น microseconds)
หมายเหตุ: Deep sleep จะทำให้ CPU หยุดทำงาน ต้องดึง RST pin ขึ้นเพื่อปลุก
ตัวอย่างจบสมบูรณ์: ESP8266 ที่เปิด/ปิด LED ผ่าน GPIO
สรุป
คุณได้เรียนรู้วิธีการเขียนโปรแกรม ESP8266 ESP-01 โดยใช้ Arduino IDE แล้ว สรุปสั้นๆ:
- ติดตั้ง Arduino IDE + ESP8266 Board Manager
- เชื่อมต่อ USB to TTL Converter กับ ESP-01
- ตั้งค่า GPIO pins ให้ถูกต้อง เพื่อการอัปโหลด
- เขียนโปรแกรม Arduino ปกติ Upload เข้า ESP8266
- ใช้ GPIO2 สำหรับควบคุม LED หรืออุปกรณ์อื่น
- อ่าน Serial Monitor เพื่อ Debug
ตอนนี้คุณพร้อมที่จะสร้างโครงการ IoT ที่ซับซ้อนมากขึ้น เช่น:
- ระบบควบคุมบ้านอัจฉริยะ (Smart Home)
- เซ็นเซอร์อุณหภูมิและความชื้น ที่ส่งข้อมูลไปยัง Cloud
- ระบบเตือนภัยเชื่อมต่อ Wi-Fi
- Garage Door Controller
- Weather Station ที่ติดตั้งหลายจุด
ESP8266 ถูก ทรงพลัง และง่ายต่อการใช้ทำให้มันกลายเป็นตัวเลือกยอดนิยมสำหรับผู้เริ่มต้นใน IoT การศึกษาจากบทความนี้จะเป็นรากฐานที่ดีสำหรับโครงการขั้นสูง