กลับไปหน้ารวมไฟล์
esp01-webserver-to-control-your-arduino-uno-mega-or-nano-10b92e.md

การควบคุมและส่งข้อมูลผ่าน WiFi ด้วย Arduino และ ESP-01

ภาพแสดงการทำงานของระบบควบคุมและส่งข้อมูลผ่าน WiFi

บทนำและแนวคิดของโปรเจกต์ (The Concept)

ในโลกของ IoT (Internet of Things) การควบคุมอุปกรณ์แบบไร้สายมักมีต้นทุนสูงและมีความซับซ้อน โปรเจกต์นี้มีเป้าหมายที่จะสร้างชุดควบคุมที่ทำงานผ่านเครือข่าย WiFi โดยเน้นที่ความประหยัดและประสิทธิภาพสูงสุด ผลลัพธ์ที่ได้คือระบบที่สามารถควบคุมเอาต์พุตได้สูงสุด 10 ช่อง (On/Off) และอ่านค่า analog input จากเซ็นเซอร์ได้สูงสุด 8 ช่อง เพื่อเฝ้าระวังสภาพแวดล้อมต่างๆ ในพื้นที่แบบ real-time

หัวใจหลักของโปรเจกต์นี้คือโมดูล ESP-01 WiFi จาก Espressif Systems ซึ่งถือเป็นโมดูลเสริมสำหรับ Arduino ที่ราคาถูกที่สุดในตลาด (ประมาณ 60-70 บาท) แม้จะมีขนาดเล็ก แต่ก็มีความสามารถในการเชื่อมต่ออินเทอร์เน็ตที่แข็งแกร่ง

สำหรับการใช้งานเชิงลึก คุณสามารถอ้างอิงคู่มือการเขียนโปรแกรม (AT Instruction Set) ได้จากเว็บไซต์ของ Espressif ในชื่อ 4a-esp8266_at_instruction_set_en.pdf ซึ่งครอบคลุมคำสั่งการใช้งานโมดูลในโหมด Modem (AT Mode) ดังที่เราใช้ในโปรเจกต์นี้

บอร์ดควบคุมหลักที่เราใช้คือ Arduino UNO R3 เนื่องจากมีพอร์ตเชื่อมต่อที่ครอบคลุมและใช้งานง่ายสำหรับผู้เริ่มต้น อย่างไรก็ตาม โปรเจกต์นี้ได้รับการออกแบบมาให้มีความยืดหยุ่นเพียงพอที่จะปรับใช้กับบอร์ดตระกูล Arduino อื่นๆ เช่น Nano หรือ Mega ได้

ความท้าทายทางเทคนิค: เนื่องจาก Arduino UNO มีพอร์ต Hardware Serial เพียงพอร์ตเดียว (ซึ่งถูกใช้โดย USB สำหรับการเขียนโปรแกรมและการดีบัก) เราจึงไม่สามารถเชื่อมต่อ ESP-01 เข้ากับพอร์ตนั้นได้โดยตรง เพราะจะทำให้เกิดการชนกันของข้อมูล ดังนั้น เราจึงเลือกใช้ไลบรารี SoftwareSerial.h เพื่อจำลอง Digital pins 2 และ 3 ให้เป็น Serial Port ทางเลือกสำหรับการสื่อสารกับโมดูล WiFi

โครงสร้างฮาร์ดแวร์และการประกอบ (The Hardware)

เพื่อให้แน่ใจว่าการเชื่อมต่อระหว่าง Arduino UNO และ ESP-01 มีความแข็งแรงและถอดออกได้ง่าย ผมได้สร้าง "Bracket" หรือฐานยึดพิเศษโดยใช้ Stripboard และ Pin Headers ที่เสียบเข้ากับบอร์ด Arduino ได้โดยตรงเพื่อดึงไฟ 3.3V และ GND

ผังบอร์ดแสดงตำแหน่งของ Bracket และ Socket สำหรับการติดตั้ง ESP-01

เนื่องจากโมดูล ESP-01 มี 8 ขาเรียงกันสองแถว ผมจึงใช้ Socket สองแถวบัดกรีลงบน Stripboard โดยให้ด้านทองแดงหงายขึ้นเพื่อความสะดวกในการเชื่อมต่อสายไฟระหว่าง Socket กับขาที่จะเสียบเข้ากับบอร์ด Arduino

รายละเอียดการเชื่อมต่อใต้ Stripboard

นอกจากนี้ ผมยังใช้ลวดทองแดงหนาๆ ดัดเป็นโครงรองรับและเคลือบด้วย Epoxy Resin เพื่อช่วยเสริมความแข็งแรงของโครงสร้าง ทำให้ทนทานต่อการเสียบและถอดซ้ำๆ และป้องกันความเสียหายของขา Signal

การเชื่อมต่อวงจร (Pin Mapping):

แผนภาพการเชื่อมต่อขา Signal
  • ESP-01 Pin 1 (GND): เชื่อมต่อกับ GND ของ Arduino
  • ESP-01 Pin 5 (VCC): เชื่อมต่อกับ ไฟ 3.3V เท่านั้น (ห้ามเชื่อมต่อ 5V เด็ดขาด)
  • ESP-01 Pin 7 (CH_PD / EN): เชื่อมต่อกับ 3.3V เพื่อเปิดใช้งานชิป
  • ESP-01 Pin 8 (TX): เชื่อมต่อกับ Digital Port 2 (SoftwareSerial RX)
  • ESP-01 Pin 4 (RX): เชื่อมต่อกับ Digital Port 3 (SoftwareSerial TX)
ข้อควรระวัง: ห้ามใช้พอร์ต RX, TX (0, 1) บนบอร์ดร่วมกับ ESP-01 เพราะจะรบกวนการอัปโหลดโค้ด

ข้อควรระวังสำคัญ: โมดูล ESP-01 ทำงานที่แรงดัน 3.3V สำหรับทั้งแหล่งจ่ายไฟและสัญญาณ Logic การเชื่อมต่อโดยตรงกับ 5V อาจทำให้โมดูลเสียหายถาวร

การเชื่อมต่อ LED เข้ากับ pin 13 สำหรับทดสอบสถานะเบื้องต้น

สำหรับการทดสอบเอาต์พุต ผมใช้ LED ที่เชื่อมต่อผ่านตัวต้านทาน 1K Ohm ไปยังกราวด์ สิ่งนี้ช่วยให้เห็นภาพการทำงานเมื่อได้รับคำสั่งเปิด/ปิดผ่านเครือข่าย

การวิเคราะห์ซอฟต์แวร์และ Logic การทำงาน (The Software)

โปรแกรมนี้ออกแบบมาเพื่อเปลี่ยน ESP-01 ให้เป็น Access Point (AP) และ TCP Server โดยที่ Arduino จะส่ง AT Commands ไปยังโมดูลเพื่อตั้งค่าระบบเครือข่ายทั้งหมด

Logic การทำงานของโค้ด:
1. การเริ่มต้น (Setup): โปรแกรมจะเริ่มต้นด้วยการปิดการ Echo (`ATE0`), ตั้งค่าโหมดเป็น Access Point (`CWMODE=2`), กำหนด IP เป็น `192.168.5.1` และเปิด TCP Server บน Port 80
2. การตรวจสอบ Loop: Arduino จะตรวจสอบข้อมูลที่เข้ามาผ่าน Software Serial อย่างต่อเนื่อง หากได้รับข้อมูล ระบบจะส่งข้อมูลนั้นไปยังฟังก์ชัน `readFromWifi()` เพื่อแปลงเป็น String และทำให้เป็นตัวพิมพ์ใหญ่เพื่อการตรวจสอบที่ง่ายขึ้น
3. การแยกวิเคราะห์คำสั่ง (Command Parsing):
- HELLO: ตอบกลับด้วยสถานะการเชื่อมต่อ
- LEDON: เปิด LED บน pin 13 (Built-in LED)
- LEDOFF: ปิด Digital Outputs ทั้งหมด (pins 4-13)
- LEDONNxxxx: คำสั่งขั้นสูงที่ใช้ Bitwise Operation เพื่อควบคุมเอาต์พุต 10 ตัวพร้อมกัน โดยการส่งตัวเลข 4 หลักเพื่อแปลงเป็น Logic State สำหรับแต่ละ pin
4. การส่งข้อมูลตอบกลับ (Data Feedback): ทุกครั้งที่ออกคำสั่ง ระบบจะเรียกใช้ฟังก์ชัน `Sensor_Read()` เพื่ออ่านค่า Analog A0-A7 และส่งกลับไปยัง Client เพื่อยืนยันสถานะปัจจุบันของอุปกรณ์


// Important Code Snippets
#include <SoftwareSerial.h>
int serialRx = 2;   // Software Serial RX
int serialTx = 3;   // Software Serial TX 
SoftwareSerial portOne(serialRx, serialTx); 

void setup() {
  portOne.begin(115200); // Initialize communication with ESP-01
  delay(200);
  sendToWifi("ATE0",100);  // Disable command echo
  sendToWifi("AT+CWMODE=2",10); // Set as Access Point
  sendToWifi("AT+CIPAP_CUR=\"192.168.5.1\"",10); // Assign board IP
  sendToWifi("AT+CIPSERVER=1,80",10); // Open Server Port 80
}

วิธีใช้งานกับ TCP Client

หลังจากอัปโหลดโค้ดไปยัง Arduino สำเร็จ คุณสามารถควบคุมบอร์ดได้โดยทำตามขั้นตอนเหล่านี้:

  1. เชื่อมต่อ WiFi: บนคอมพิวเตอร์หรือสมาร์ทโฟนของคุณ ค้นหาเครือข่าย WiFi ชื่อ "ESP8266" และป้อนรหัสผ่าน "1234567890"
  2. เปิดโปรแกรม TCP Client: คุณสามารถใช้โปรแกรมเช่น Realterm (บน PC) หรือแอป TCP Client (บน Android/iOS)
  3. กำหนดค่าการเชื่อมต่อ: ระบุ IP Address เป็น 192.168.5.1 และ Port เป็น 80
  4. ส่งคำสั่งควบคุม:
การตั้งค่าในโปรแกรม Realterm บน PC

ตัวอย่างการตอบสนองของระบบ:

ข้อมูลตอบกลับจาก Arduino เมื่อได้รับคำสั่ง
  • เมื่อส่ง HELLO: บอร์ดจะตอบกลับว่า "Wifi says : Hello" พร้อมสถานะของ 8 ช่อง Analog
  • เมื่อส่ง LEDONN0001: บอร์ดจะเปิดไฟบน pin 4 และตอบกลับด้วยเลขไบนารีเพื่อยืนยันสถานะของ pins ทั้งหมด
  • Analog Reads 0-7: ข้อมูลจะถูกส่งกลับเสมอหลังจากทุกคำสั่ง โดยค่าของแต่ละ pin จะคั่นด้วยเครื่องหมายจุลภาค ทำให้โปรแกรมรับข้อมูลจัดการได้ง่าย

ข้อมูล Frontmatter ดั้งเดิม

title: "ESP01 Webserver to Control Your Arduino UNO, Mega or Nano"
description: "Using WiFi to control your Arduino UNO, Nano or Mega as a basis. Includes feedback and simple hardware."
author: "adamsstephen"
category: "Internet of Things, BT & Wireless"
tags:
  - "wifi"
  - "communication"
  - "remote control"
views: 28704
likes: 9
price: 1999
difficulty: "Easy"
components:
  - "1x ESP8266 ESP-01"
  - "1x Soldering iron (generic)"
  - "1x Stripboard"
  - "1x Arduino Mega 2560"
  - "1x Arduino Leonardo"
  - "1x Pliers"
  - "1x Arduino Due"
  - "1x Resistor 1k ohm"
  - "1x Arduino Nano R3"
  - "1x Ardunio Header strips"
  - "1x Arduino UNO"
  - "1x LED (generic)"
  - "1x Wire Cable - By the Foot"
  - "1x Reel of Solder"
tools: []
apps:
  - "1x Arduino IDE"
  - "1x TCPIP Client"
  - "1x Realterm for PC"
  - "1x TCP Console for Apple Ipad and Iphone"
downloadableFiles: []
documentationLinks: []
passwordHash: "9e7b4caf6d76a455ac1f4da8f461d73f869689f604e2245979e160aea5a5b3e5"
encryptedPayload: "U2FsdGVkX1/yzVta/wlRjAC0t8gadwADLHBax4AGuLzHPv/ONJ32KUsJ0x6/Q5ac3H6I81fU4834ivLrIbkRPjklREPrzcSseZy5oVd1CdVqApsC8k3kYVDVwHQMttuL7lHPH4rAgHhOtTBVDFut6QZGZ501qUOlU9BjT2/SvEsx5wshD6ZboWACR83sOsCOmirUuBYRGdvIXENCqwDJcA=="
seoDescription: "Control Arduino UNO, Nano, or Mega using an ESP01 Webserver via WiFi. Includes feedback systems and simple hardware setups for your projects."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/esp01-webserver-to-control-your-arduino-uno-mega-or-nano-10b92e_cover.jpg"
lang: "th"