เปลี่ยน Wi-Fi แล้วต้องแฟลชบอร์ดใหม่ทุกครั้งไหม

เปลี่ยน Wi-Fi แล้วต้องแฟลชบอร์ดใหม่ทุกครั้งไหม - Image 1
28/06/2025•Admin Team•
ESP32Wi-FiIoTTutorial

ตอนทดลองบนโต๊ะ การใส่ชื่อ Wi-Fi กับรหัสผ่านไว้ในโค้ดแล้วแฟลชครั้งเดียวมักสะดวก เพราะเครือข่ายไม่ค่อยเปลี่ยน และเครื่องมือแฟลชก็อยู่ใกล้ๆ แต่พอย้ายอุปกรณ์ไปอีกห้อง หรือส่งให้คนอื่นเอาไปใช้ คนทางนั้นอาจไม่มีสายและเครื่องมือชุดเดิม การต้องกลับมาแฟลชทุกครั้งที่เปลี่ยนเครือข่ายจึงเริ่มไม่เข้ากับวิธีใช้งานจริง

จุดที่ควรแยกให้ชัดตั้งแต่ต้นคือเฟิร์มแวร์กับค่าตั้งเครือข่ายไม่จำเป็นต้องอยู่ในก้อนเดียวกันเสมอไป โปรแกรมที่ควบคุมการอ่านเซนเซอร์กับการจำว่าบ้านนี้ใช้ Wi-Fi ชื่ออะไร เป็นคนละชั้นของงาน และถ้าแยกได้แต่แรกรอบที่ย้ายที่ใช้งานจะเบากว่า

ทำไมการฝังค่าในโค้ดถึงเริ่มติดตอนย้ายที่

ถ้าค่า Wi-Fi อยู่ในซอร์ส ทุกครั้งที่เปลี่ยนเครือข่ายก็ต้องแก้โค้ด บิ้ว และแฟลชใหม่ งานที่ดูเล็กบนโต๊ะกลายเป็นขั้นตอนที่ต้องมีคอมพิวเตอร์และสายอยู่ด้วยทุกครั้ง นอกจากนั้น การเก็บรหัสผ่านไว้ใน repo หรือแจกไบนารีชุดเดียวกันไปหลายที่ ก็ทำให้ค่าที่ควรเป็นของแต่ละสถานที่ปนกับโปรแกรมที่ใช้ร่วมกัน

ตัวอย่างสถานะตั้งค่า Wi-Fi ใหม่แยกจากตัว firmware

พอคิดแบบนี้ คำถามจึงไม่ใช่แค่ว่าจะใส่ SSID ตรงไหนในไฟล์ แต่เป็นว่าเมื่ออุปกรณ์เชื่อมต่อไม่ได้ จะมีทางให้คนใช้งานตั้งค่าใหม่โดยไม่ต้องเปิดโปรเจกต์ขึ้นมาหรือไม่ ถ้าคำตอบคือต้องเอาเครื่องกลับมาแฟลชทุกครั้ง แปลว่ารอบทดลองบนโต๊ะกับรอบใช้งานจริงยังใช้สมมติฐานคนละแบบอยู่

อีกอาการที่เจอได้คืออุปกรณ์ทำงานได้ดีที่โต๊ะ แต่พอย้ายไปที่อื่นแล้วเงียบหาย ทั้งที่เฟิร์มแวร์ชุดเดียวกัน ถ้าไล่จากสมมติฐานว่าโค้ดพัง อาจเสียเวลาพักใหญ่ ทั้งที่จริงๆ ค่าเครือข่ายชุดเดิมใช้ต่อไม่ได้แล้ว และการไม่มีทางตั้งค่าใหม่ทำให้ดูเหมือนเครื่องค้างนอกระบบ

แยกค่าเครือข่ายออก แล้วเลือกวิธีตั้งค่าใหม่ให้เข้ากับบอร์ด

แนวทางทั่วไปคือเก็บค่าเครือข่ายไว้ในหน่วยความจำที่ไม่ถูกลบทุกครั้งที่อัปเดตเฟิร์มแวร์ แล้วมีโหมดตั้งค่าเมื่อยังเชื่อมต่อไม่ได้ เช่น เปิดเป็น access point ชั่วคราวให้ใส่ชื่อเครือข่ายใหม่ หรือใช้ช่องทางที่ framework ของบอร์ดนั้นรองรับอยู่แล้ว การเลือกรูปแบบ provisioning จึงควรดูจากสิ่งที่ชิปและไลบรารีทำได้จริง ไม่ใช่จากชื่อฟีเจอร์บนหน้าสเปกอย่างเดียว

เอกสารฝั่ง Espressif เรื่อง Wi-Fi provisioning เป็นตัวอย่างของแนวคิดนี้ คือแยกขั้นตอนให้เครื่องเข้าสู่โหมดตั้งค่า รับค่าเครือข่าย แล้วค่อยกลับไปเชื่อมต่อตามปกติ ไม่ได้บังคับว่าทุกโปรเจกต์ต้องใช้วิธีเดียวกันทุกประการ แต่ชี้ให้เห็นว่าการตั้งค่าเครือข่ายควรถูกออกแบบเป็นส่วนหนึ่งของระบบ ไม่ใช่เรื่องที่แก้ทีหลังด้วยการแฟลชซ้ำ

สิ่งที่ควรคิดคู่กันคือประสบการณ์ตอนตั้งค่าครั้งแรกกับตอนค่าเก่าใช้ไม่ได้แล้ว ถ้ามีแค่ตอนแฟลชครั้งแรกโดยไม่มีทางแก้เมื่อเครือข่ายเปลี่ยน ปัญหาจะกลับมาเหมือนเดิมเมื่อย้ายที่ ส่วนถ้ามีโหมดตั้งค่าแต่ไม่มีทางกลับเข้าโหมดนั้นเมื่อลืมรหัสหรือเครือข่ายหาย อุปกรณ์ก็ยังค้างอยู่นอกสายได้

ดังนั้นตอนออกแบบ ไม่ใช่แค่ถามว่าจะเก็บ SSID ไว้ที่ไหน แต่ควรถามด้วยว่าคนใช้จะรู้ได้อย่างไรว่าเครื่องเข้าโหมดตั้งค่าแล้ว จะออกจากโหมดนั้นเมื่อไหร่ และถ้าตั้งผิดจะลองใหม่ได้อย่างไร โดยไม่ต้องพึ่งสายแฟลชทุกครั้ง

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

สิ่งที่ยังทำบนโต๊ะได้โดยไม่ขัดกับแผนระยะยาว

ช่วงทดลองแรกๆ ยังใส่ค่าเครือข่ายแบบตรงๆ ได้ถ้าช่วยให้ไล่เซนเซอร์และโค้ดหลักได้เร็ว แต่ควรรู้ตั้งแต่วันนั้นว่านี่เป็นทางลัดชั่วคราว และวางจุดที่ย้ายค่าเหล่านี้ออกจากซอร์สไว้ในแผน ไม่ใช่รอจนส่งเครื่องไปหลายที่แล้วค่อยมาถอดรหัสผ่านออกจากโปรเจกต์

ถ้าแยกชั้นไว้ในหัวแล้ว ตอนเปลี่ยนจากโต๊ะไปที่ใช้งานจริง จะเหลืองานหลักแค่เลือกวิธี provisioning ที่บอร์ดรองรับ และลองรอบเชื่อมต่อไม่ได้ให้ครบ ไม่ใช่เริ่มคิดใหม่ทั้งก้อนว่าจะจัดการ Wi-Fi อย่างไรหลังทุกอย่างถูกผูกกับค่าในโค้ดไปแล้ว

ตรวจรอบเชื่อมต่อไม่ได้ให้ครบก่อนปล่อยออกจากโต๊ะ

ก่อนย้ายอุปกรณ์ออกจากโต๊ะทดลอง ลองจำลองสถานการณ์ที่เครือข่ายใช้ต่อไม่ได้ เช่น เปลี่ยนรหัสผ่านชั่วคราว หรือปิด SSID ที่เครื่องจำไว้ แล้วดูว่ามีทางเข้าโหมดตั้งค่าใหม่จริงหรือไม่ และหลังใส่ค่าใหม่แล้วเครื่องกลับไปทำงานหลักได้เองหรือต้องรีเซ็ตแปลกๆ

ถ้ารอบนี้ยังทำไม่ได้บนโต๊ะ โอกาสที่ต้องอุ้มเครื่องกลับมาแฟลชตอนอยู่ที่อื่นจะสูงขึ้นทันที การทดสอบแบบนี้ไม่ได้ต้องการผลวัดสวย แต่ต้องการรู้ว่าชั้นค่าเครือข่ายกับชั้นเฟิร์มแวร์แยกกันพอใช้ได้แล้วหรือยัง

นอกจากนี้ ถ้าจะอัปเดตเฟิร์มแวร์ทีหลัง ควรตรวจด้วยว่าค่าเครือข่ายที่เคยตั้งไว้ยังอยู่หรือถูกเขียนทับ การอัปเดตโปรแกรมแล้วทำคนใช้ตั้ง Wi-Fi ใหม่ทุกครั้ง จะกลายเป็นภาระซ้ำแบบเดียวกับการแฟลชเพื่อเปลี่ยนเครือข่าย แม้จะไม่ได้แก้โค้ดด้วยมือก็ตาม

แยกค่าต่อสถานที่ออกจากไบนารีชุดเดียวกัน

ถ้าจะทำอุปกรณ์หลายเครื่องจากเฟิร์มแวร์ชุดเดียวกัน การฝัง SSID ไว้ในโค้ดจะยิ่งติดเร็วขึ้น เพราะแต่ละที่อาจใช้เครือข่ายคนละชื่อ การแยกค่าเครือข่ายออกจึงไม่ใช่แค่เรื่องความสะดวกตอนย้ายเครื่องหนึ่งเครื่อง แต่เป็นเงื่อนไขให้แจกโปรแกรมชุดเดียวแล้วยังตั้งค่าเฉพาะที่ใช้งานได้

แนวคิดเดียวกันนี้ยังช่วยตอนเก็บโปรเจกต์ใน version control เพราะรหัสผ่านเครือข่ายไม่ควรถูกส่งต่อพร้อมซอร์สทุกครั้งที่แชร์โค้ด การมีที่เก็บค่าแยกและมีโหมดตั้งค่า จึงรองรับทั้งการใช้งานจริงและการดูแลโปรเจกต์ระยะยาวได้ดีกว่าการแก้ไฟล์แล้วแฟลชซ้ำ

สรุปในทางปฏิบัติคือ ทำให้การเปลี่ยนเครือข่ายเป็นงานตั้งค่า ไม่ใช่งานแฟลช และตรวจให้ได้บนก่อนย้ายออกจากโต๊ะ

สรุป

การเปลี่ยน Wi-Fi ไม่จำเป็นต้องแฟลชบอร์ดใหม่ทุกครั้ง ถ้าแยกค่าเครือข่ายออกจากเฟิร์มแวร์และเตรียมวิธีตั้งค่าใหม่เมื่อเชื่อมต่อไม่ได้ การเลือก provisioning ที่บอร์ดกับ framework รองรับ จึงตอบปัญหาย้ายที่ใช้งานได้ตรงกว่าการฝัง SSID ในโค้ดเพื่อความเร็วตอนทดลองบนโต๊ะเพียงอย่างเดียว

Command Eng Logo
CMD yourNgineers
เลขประจำตัวผู้เสียภาษี0805564000814
บทความ
ติดต่อบริษัท คอมมานด์ เอ็นจ์ จำกัด
81/36 เพอร์เฟค พาร์คบางนาตำบลบางเสาธง อำเภอบางเสาธงจังหวัดสมุทรปราการ 10570
team@commandeng.in.th+66 89 393 5191
Facebook Page | Command EngLine | Command Eng Official
© Copyright 2022-2026 Command Eng Co., Ltd.v1.0.4 · 0d556ab · 2026-11-03 15:23