เริ่มต้นเนื้อหา
โค้ดนี้สามารถช่วยในการจัดการการตั้งค่าเครือข่าย Wi-Fi ของอุปกรณ์ได้ง่ายขึ้น โดยไม่ต้องทำการตั้งค่าเครือข่ายทุกครั้งที่เปลี่ยนเครือข่ายหรือเมื่อรีเซ็ตอุปกรณ์ผ่านแพลตฟอร์มพัฒนา
การตั้งค่าเครือข่าย WiFi ผ่าน AP นั้นไม่ซับซ้อนสำหรับผู้ที่มีพื้นฐานด้านเครือข่ายและการใช้งาน Arduino IDE แต่หากคุณยังไม่มีความรู้พื้นฐานในด้านนี้ หัวข้อนี้อาจมีความท้าทายและต้องการการเรียนรู้เพิ่มเติมก่อนเริ่มต้นใช้งาน
ขั้นตอนการปฏิบัติ
AP Setup for STA Connection
การตั้งค่า Access Point (AP) เพื่อเชื่อมต่อกับ Station (STA) เป็นกระบวนการที่ช่วยให้ผู้ใช้สามารถเชื่อมต่ออุปกรณ์ IoT กับเครือข่าย Wi-Fi ได้ง่ายขึ้น โดยใช้อุปกรณ์ในโหมด AP เพื่อให้ผู้ใช้เชื่อมต่อเข้าไปตั้งค่า Wi-Fi จากนั้นอุปกรณ์จะเชื่อมต่อกับเครือข่าย Wi-Fi ในโหมด STA เมื่อได้รับข้อมูลจากผู้ใช้
ข้อดีของการตั้งค่า Wi-Fi แบบ Headless
- ความสะดวก: ไม่จำเป็นต้องมีหน้าจอแสดงผลหรือการเชื่อมต่อแบบมีสาย
- ความรวดเร็ว: กระบวนการตั้งค่ามักจะรวดเร็วกว่า
- เหมาะสำหรับอุปกรณ์ IoT: เหมาะสำหรับอุปกรณ์ที่ไม่มีหน้าจอ เช่น เซ็นเซอร์หรืออุปกรณ์สมาร์ทโฮม
เหมาะสมกับ IoT และ Cloud-based MQTT
- การเชื่อมต่อที่สะดวก: อุปกรณ์สามารถเชื่อมต่อกับเครือข่าย Wi-Fi ใหม่นอกสถานที่ได้โดยง่าย ซึ่งเป็นสิ่งสำคัญในระบบ Cloud-based ที่ต้องเชื่อมต่อกับ Cloud หรือ MQTT Broker จากทุกที่ที่มีการเชื่อมต่ออินเทอร์เน็ต.
- การตั้งค่าใหม่ง่าย: เมื่อเปลี่ยนเครือข่าย Wi-Fi ผู้ใช้สามารถกรอกข้อมูล SSID และรหัสผ่านใหม่ผ่านเว็บอินเตอร์เฟซได้เลย ไม่ต้องใช้วิธีการอื่น ๆ หรือการต่อคอมพิวเตอร์เข้ากับอุปกรณ์.
- การจัดการผ่านคลาวด์: ระบบ Cloud-based MQTT จะมีข้อได้เปรียบในการจัดการข้อมูลจากหลาย ๆ อุปกรณ์ IoT ได้อย่างมีประสิทธิภาพ และโค้ดนี้สามารถใช้งานร่วมกับ MQTT เพื่อส่งข้อมูลไปยังคลาวด์ได้โดยไม่ยุ่งยากในการตั้งค่าเครือข่ายในแต่ละอุปกรณ์.
ฮาร์ดแวร์ที่จำเป็น
-
ESP32-C3 Board
- ESP32-C3 Super Mini
-
ปุ่มกด Push Button
- ใช้สำหรับ Reset WiFi Settings
- ตัวอย่างโค้ด เชื่อมต่อกับพิน 10
- ตัวต้านทาน Resistor
- R 10KΩ
- ใช้สำหรับการ PullDown
-
PC หรือ Smartphone
- สำหรับ Headless Setup เชื่อมต่อกับ AP ของ ESP32-C3 เพื่อกำหนดค่า WiFi
ปุ่มกดแบบ Pull-Down สำหรับการล้างค่าการตั้งค่า WiFi
ปุ่มรีเซ็ต ใช้งานโดย ค้างไว้ 3 วินาที เพื่อเคลียร์ค่าการตั้งค่า WiFi และรีสตาร์ทอุปกรณ์
การต่อปุ่มกดแบบ Pull-Down
- ปุ่มกด (SW) ต่อระหว่าง GPIO10 กับ 3.3V
- ตัวต้านทาน 10KΩ (Pull-Down Resistor) ต่อระหว่าง GPIO10 กับ GND
หลักการทำงาน:
- เมื่อไม่ได้กดปุ่ม: GPIO10 จะถูกดึงลง GND ผ่านตัวต้านทาน 10KΩ → อ่านค่าเป็น LOW (0)
- เมื่อกดปุ่ม: GPIO10 จะเชื่อมกับ 3.3V → อ่านค่าเป็น HIGH (1)
ทดสอบปุ่ม ว่าใช้ได้ดีไหม
const int buttonPin = 10;
const int led = 8;
int buttonState = 0;
void setup() {
Serial.begin(9600);
pinMode(led, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
digitalWrite(led, HIGH);
Serial.println("on");
} else {
digitalWrite(led, LOW);
Serial.println("off");
}
}
( หัวข้อนี้ใช้งานได้ทันทีบน MicroLearner : ปุ่ม Ⓒ )
ไลบรารีที่ใช้ในการตั้งค่า Wi-Fi
WiFi.h
สำหรับการเชื่อมต่อกับ Wi-Fi
WebServer.h
สำหรับการให้บริการเว็บเพจ
DNSServer.h
สำหรับการตั้งค่า DNS
Preferences.h
สำหรับการจัดการข้อมูล Wi-Fi ที่เก็บไว้ในอุปกรณ์.
โครงสร้างของโค้ด
- การตั้งค่าโหมด AP (Access Point):
- เมื่ออุปกรณ์เริ่มทำงานในโหมด AP จะทำการสร้างเครือข่าย Wi-Fi ที่ชื่อว่า “ESP32_Config” และตั้งรหัสผ่านเป็น “12345678” โดยสามารถเชื่อมต่ออุปกรณ์อื่น ๆ เข้ามายังเครือข่ายนี้ได้.
- เมื่อมีการเชื่อมต่อจากผู้ใช้, อุปกรณ์จะให้บริการหน้าเว็บที่สามารถกรอกข้อมูล SSID และรหัสผ่านของ Wi-Fi ที่ต้องการเชื่อมต่อ.
- การจัดการข้อมูล Wi-Fi:
- เมื่อผู้ใช้กรอกข้อมูล SSID และรหัสผ่านในฟอร์มบนหน้าเว็บและกด “Save” ข้อมูลจะถูกบันทึกลงใน
Preferences
ซึ่งเก็บข้อมูลในหน่วยความจำของ ESP32. - อุปกรณ์จะทำการรีสตาร์ทและพยายามเชื่อมต่อกับ Wi-Fi ที่ผู้ใช้กรอกไว้.
- เมื่อผู้ใช้กรอกข้อมูล SSID และรหัสผ่านในฟอร์มบนหน้าเว็บและกด “Save” ข้อมูลจะถูกบันทึกลงใน
- การเชื่อมต่อกับ Wi-Fi:
- เมื่อรีสตาร์ท อุปกรณ์จะเชื่อมต่อกับ Wi-Fi โดยใช้ข้อมูลที่บันทึกไว้ใน
Preferences
. หากการเชื่อมต่อสำเร็จจะเข้าสู่โหมด STA แต่ถ้าล้มเหลว จะกลับไปทำงานในโหมด AP เพื่อให้ผู้ใช้กรอกข้อมูลใหม่.
- เมื่อรีสตาร์ท อุปกรณ์จะเชื่อมต่อกับ Wi-Fi โดยใช้ข้อมูลที่บันทึกไว้ใน
- การรีเซ็ตข้อมูล Wi-Fi:
- มีการใช้ปุ่มรีเซ็ต (GPIO10) เพื่อให้ผู้ใช้สามารถล้างข้อมูล Wi-Fi ที่บันทึกไว้ในหน่วยความจำได้โดยการกดปุ่มค้างไว้ 3 วินาที.
ส่วนของการตั้งค่าโหมด AP
void setupAPMode() {
WiFi.mode(WIFI_AP); // ตั้งโหมดเป็น AP
WiFi.softAP(apSSID, apPassword); // สร้าง AP ด้วย SSID และรหัสผ่าน
dnsServer.start(DNS_PORT, "*", WiFi.softAPIP()); // เปิด DNS Server เพื่อให้การเชื่อมต่อทั้งหมดชี้ไปที่ IP ของ AP
server.on("/", HTTP_GET, []() { // กำหนดเส้นทางของเว็บ
server.send(200, "text/html", htmlPage); // ส่งหน้า HTML สำหรับตั้งค่า Wi-Fi
});
server.on("/save", HTTP_POST, []() { // รับข้อมูล SSID และ password
String ssid = server.arg("ssid");
String password = server.arg("password");
preferences.begin("wifi", false); // เริ่มต้นการใช้งาน Preferences
preferences.putString("ssid", ssid); // เก็บ SSID
preferences.putString("password", password); // เก็บรหัสผ่าน
preferences.end();
server.send(200, "text/html", "<h1>Settings Saved. Restarting...</h1>");
delay(1000);
ESP.restart(); // รีสตาร์ทอุปกรณ์
});
server.begin(); // เริ่มต้นเซิร์ฟเวอร์
}
ส่วนของการเชื่อมต่อกับ Wi-Fi (STA)
void connectToWiFi() {
preferences.begin("wifi", true); // อ่านข้อมูล Wi-Fi ที่บันทึกไว้
String ssid = preferences.getString("ssid", "");
String password = preferences.getString("password", "");
preferences.end();
if (ssid != "") {
WiFi.begin(ssid.c_str(), password.c_str()); // เชื่อมต่อกับ Wi-Fi
Serial.print("Connecting to WiFi");
for (int i = 0; i < 20; i++) {
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\nConnected!");
return;
}
Serial.print(".");
delay(500);
}
Serial.println("\nFailed to connect.");
}
setupAPMode(); // หากเชื่อมต่อไม่สำเร็จให้กลับไปโหมด AP
}
โค้ดเต็ม มาทดสอบใช้กัน
การทำงานของโค้ด
- เมื่ออุปกรณ์เริ่มต้น, หากไม่มีข้อมูล Wi-Fi บันทึกไว้, อุปกรณ์จะทำงานในโหมด AP เชื่อมต่อและเข้าถึงผ่านเบราว์เซอร์ที่
192.168.4.1
(ESP32 จะกำหนด IP เริ่มต้นเป็น 192.168.4.1 โดยอัตโนมัติ) จะพบหน้าเว็บให้กรอก SSID และรหัสผ่าน ของเครือข่าย WiFi ใหม่ที่ต้องการเชื่อมต่อ
- เมื่อกรอกข้อมูลแล้วและกด “Save”, ข้อมูลจะถูกบันทึกไว้ใน
Preferences
และอุปกรณ์จะรีสตาร์ท. - หลังการรีสตาร์ท, อุปกรณ์จะพยายามเชื่อมต่อกับ Wi-Fi ที่ผู้ใช้กรอกไว้. หากเชื่อมต่อสำเร็จ, อุปกรณ์จะทำงานในโหมด STA และเชื่อมต่อกับเครือข่าย Wi-Fi.
- หากต้องการล้างข้อมูล Wi-Fi, สามารถกดปุ่มรีเซ็ตค้างไว้ 3 วินาทีเพื่อรีเซ็ตข้อมูล.
สรุป
โค้ดนี้จะช่วยให้การตั้งค่าและการเชื่อมต่อกับเครือข่าย Wi-Fi สำหรับอุปกรณ์ IoT ที่ใช้งานในระบบ Cloud-based MQTT เป็นไปอย่างง่ายดายและยืดหยุ่นในการเปลี่ยนแปลงเครือข่าย Wi-Fi.
เพิ่มประสิทธิภาพ และการเรียนรู้ที่ง่ายยิ่งขึ้น
เรียนรู้การตั้งค่าเครือข่าย WiFi ง่ายๆ ผ่าน AP บน MicroLearner [ArduinoIDE]
อธิบายโค้ด
แหล่งอ้างอิง
กดติดตามเพื่อไม่พลาดทุกบทความดีๆ! 💡
ถ้าคุณชอบเนื้อหานี้ อย่าลืมกดติดตามเป็นกำลังใจ ❤️
รับอัพเดตเนื้อหาใหม่ๆ และไอเดียเจ๋งๆ ได้ที่นี่ทันที!
Disclaimer: ข้อมูลนี้จัดทำขึ้นเพื่อเป็นแนวทางในการศึกษาและทำความเข้าใจเท่านั้น ไม่ควรถือเป็นคำแนะนำทางวิชาการหรือทางการค้า