ESP8266 ESP-01 เขียนโปรแกรมได้ด้วย Arduino

ภาพรวมโครงการ

ESP8266 ESP-01 เป็นโมดูล Wi-Fi ที่เล็กและราคาถูก มีความสามารถหลายอย่างแต่คนส่วนใหญ่ไม่รู้ว่าสามารถเขียนโปรแกรมได้โดยตรงด้วย Arduino IDE นั่นคือ เราไม่จำเป็นต้องใช้ Arduino UNO เพิ่มเติม!

บทความนี้จะสอนให้คุณเขียนโปรแกรม ESP8266 ESP-01 ได้เหมือนกับการเขียนโปรแกรม Arduino ทั่วไป นอกจากนี้ยังจะสอนวิธีควบคุมขา GPIO (Input/Output) เพื่อเปิด/ปิด LED หรืออุปกรณ์อื่นๆ ผ่าน Wi-Fi

ESP8266 ESP-01 โมดูล 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 กับ USB to TTL Converter
วงจรการเชื่อมต่อ ESP8266 ESP-01 กับ USB to TTL Converter สำหรับการอัปโหลดโค้ด

ขั้นที่ 2: การติดตั้งแพลตฟอร์ม ESP8266

ขั้นตอนที่ 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 แบบง่ายๆ

เลือก ESP8266 Board ใน Arduino IDE
ขั้นตอนการเลือก 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 ทุกครั้ง
ตัวอย่างการเปิด Arduino IDE พร้อมโค้ด Blink
ตัวอย่างโค้ด Blink ที่อัปโหลดลงใน ESP8266

วงจรอ้างอิง

ต่อไปนี้เป็นวงจรการเชื่อมต่อที่ปลอดภัยและถูกต้อง สำหรับอัปโหลดโค้ดเข้า ESP8266:

วงจร Full Setup:

วงจรเต็มสำหรับอัปโหลดโค้ด
วงจรเต็มของการเชื่อมต่อ ESP8266 พร้อมตัวต้านทาน Pull-up และ Power supply
ตัวอย่าง Serial Output ที่ติดต่อ ESP8266
ตัวอย่าง 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);
}

ขั้นตอนการอัปโหลด:

  1. Copy โค้ดด้านบน
  2. เปิด Arduino IDE → File → New Sketch
  3. Paste โค้ด
  4. กด Ctrl+U (หรือ Sketch → Upload) เพื่ออัปโหลด
  5. ถ้าอัปโหลดสำเร็จ ESP8266 จะเริ่มรัน LED blink
  6. เปิด 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 Settings
การตั้งค่า Board และ Upload Speed ก่อนการอัปโหลดโค้ด
ตัวอย่าง Successful Upload Message
ข้อความเมื่ออัปโหลดโค้ดสำเร็จเข้า 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 ขึ้นเพื่อปลุก
ตัวอย่างจบสมบูรณ์ของระบบ LED Blink
ตัวอย่างจบสมบูรณ์: 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 การศึกษาจากบทความนี้จะเป็นรากฐานที่ดีสำหรับโครงการขั้นสูง

แท็ก


Blog posts

เข้าสู่ระบบ

ลืมรหัสผ่านใช่ไหม?

ยังไม่มีบัญชีใช่ไหม?
สร้างบัญชี