WiFi Manager สามารถบันทึก ชุด SSID และ Password จากการตั้งค่า ของเราก่อนหน้านี้หรือไม่

สมาชิกหลายท่านอาจจะสงสัยว่าทั้งๆที่ผมใช้ WiFi Manager อยู่ตลอดทำไมจึงมีคำถามในลักษณะนี้อยู่
เหตุผลเพราะว่า เมื่อนำ esp8266 เข้าไปติดตั้งที่หน้างานก็พบ มันว่าสามารถใช้งานได้ประมาณ 2 วันแล้วก็หลุด ซึ่งการหลุดนี้ ไม่มีมอนิเตอร์ที่สามารถจะรู้ได้ว่าที่หลุดเป็นเพราะ WiFi จาก access point ที่ไม่จ่ายหมายเลข IP ออกมา หรือว่าเป็นเพราะเหตุผลประการที่ 2 หรือว่าเป็นเพราะ blynk ไม่สามารถเชื่อมต่อ blynk Server ได้ ด้วยเหตุผล 3 ประการนี้ ผมจึงทดสอบด้วยการใช้ Serial Monitor เป็นตัวจับค่า

วัตถุประสงค์เพื่อต้องการพิสูจน์ ปัญหา 3 ประการนี้ เท่านั้นนะครับ

จากข้อมูลที่ศึกษามาก่อนหน้านี้และพยายามที่จะหาข้อมูลเพื่อที่จะมาย้ำว่า WiFi Manager สามารถที่จะจดจำค่า SSID และ password ที่เราตั้งก่อนหน้านี้ได้ และพยายามที่จะเชื่อมต่อ ค่าที่เราตั้งเอาไว้อยู่ตลอดเวลาอยู่แล้ว

แหล่งที่มา:

"WiFiManager เป็นไลบรารีที่ยอดเยี่ยมที่จะเพิ่มลงในโปรเจ็กต์ ESP8266 ของคุณเนื่องจากการใช้ไลบรารีนี้คุณไม่จำเป็นต้องฮาร์ดโค้ดข้อมูลรับรองเครือข่ายของคุณอีกต่อไป (SSID และรหัสผ่าน) ESP ของคุณจะเข้าร่วมเครือข่ายที่รู้จักโดยอัตโนมัติหรือตั้งค่าจุดเชื่อมต่อที่คุณสามารถใช้เพื่อกำหนดค่าข้อมูลรับรองเครือข่าย นี่คือวิธีการทำงานของกระบวนการนี้:

  • เมื่อ ESP8266 บู๊ตเครื่องจะถูกตั้งค่าในโหมด Station และพยายามเชื่อมต่อกับ Access Point ที่บันทึกไว้ก่อนหน้านี้ (ชุด SSID และรหัสผ่านที่รู้จัก)
  • หากกระบวนการนี้ล้มเหลวจะตั้งค่า ESP เป็นโหมดจุดเข้าใช้งาน
  • ใช้อุปกรณ์ที่เปิดใช้งาน Wi-Fi กับเบราว์เซอร์เชื่อมต่อกับ Access Point ที่สร้างขึ้นใหม่ (ชื่อเริ่มต้น AutoConnectAP)
  • หลังจากสร้างการเชื่อมต่อกับ AutoConnectAP แล้วคุณสามารถไปที่ที่อยู่ IP เริ่มต้น 192.168.4.1 เพื่อเปิดหน้าเว็บที่ให้คุณกำหนดค่า SSID และรหัสผ่านของคุณ
  • เมื่อตั้งค่า SSID และรหัสผ่านใหม่แล้ว ESP จะรีบูตและพยายามเชื่อมต่อ
  • หากสร้างการเชื่อมต่อกระบวนการจะเสร็จสมบูรณ์ มิฉะนั้นจะถูกตั้งค่าเป็น Access Point"

จากเหตุประการที่ 1

ในส่วนของข้อความนี้ “หากกระบวนการนี้ล้มเหลวจะตั้งค่า ESP เป็นโหมดจุดเข้าใช้งาน” ผมใช้ปุ่มกดเป็นตัวตั้งค่า ssid และ password ใหม่ โดยที่ไม่ต้องการให้ระบบกลับไปสู่จุดเริ่มต้นเองโดยอัตโนมัติ ซึ่งในเหตุการณ์นี้จะทำให้ระบบหยุดทำงานแน่นอนเพื่อรอให้เราไปตั้งค่า SSID และ password ใหม่ โดยมีโอก่สเชื่อมต่อ ssid และ password ได้มากกว่า ถ้า WiFi จาก access point ที่จ่ายหมายเลข IP ได้เป็นปกติ

ดังนั้นเหตุผลประการที่ 1 “WiFi จาก access point ที่ไม่จ่ายหมายเลข IP ออกมา?”

การตรวจสอบและแก้ไข
ผมจะทำการ Monitor ผ่านทาง Serial Port และสร้างเงื่อนไขว่าถ้า WiFi จาก access point ที่ไม่จ่ายหมายเลข IP ออกมา หมายเลข IP ที่ esp8266 ได้รับ จะเป็น 0.0 0.0 และบังคับให้ esp8266 รีเซ็ตตัวเองเพื่อเริ่มต้นใหม่ภายในระยะเวลาที่กำหนด ในที่นี้ผมกำหนดให้ 20 วินาทีระบบจะรีเซ็ตใหม่ ดังนั้นในกรณีที่เกิดปัญหานี้จริง ผมสามารถที่จะตรวจสอบด้วยสายตาจากแอลอีดีที่แสดงผลออกมาจาก esp8266 ได้ส่วนหนึ่ง อีกส่วนหนึ่งคือใช้ notebook เสียบสาย Micro USB เข้ากับ esp8266 เปิดโปรแกรม arduino ide ที่เขียนโค้ดชุดนี้ขึ้นมาและกดไปที่ Serial Monitor แล้วก็จะเห็นว่าระบบมีการรีเซ็ตซ้ำซึ่งจุดนี้เองจะเป็นจุดที่บ่งบอกให้เราเห็นว่า WiFi จาก access point ที่ไม่จ่ายหมายเลข IP ออกมา จริงๆ

IP = WiFi.localIP().toString();
  Serial.println();
  Serial.println(IP);


  if (IP == "0.0.0.0") {

    Serial.println();
    Serial.println(": เชื่อมต่อ WiFi ไม่ได้  ระบบจะ Reset  ภายใน 20 วินาที)");
    delay(20000);
    ESP.reset();

  }

  if (IP != "0.0.0.0") {
    Serial.println();
    Serial.println(": เชื่อมต่อ WiFi สำเร็จ!)");

  }
  delay(500);
 

แต่ถ้า esp8266 ได้รับหมายเลข IP จาก WiFi จาก access point จริงระบบก็จะทำงานปกติ

เหตุประการที่ 2 “blynk ไม่สามารถเชื่อมต่อ blynk Server ได้”
การตรวจสอบ
เมื่อระบบทำงานปกติ โดย esp8266 ได้รับ IP Address จาก WiFi ของ access point จริง และมีอินเทอร์เน็ตมา ระบบจะส่ง Line เข้ามาว่าขณะนี้ระบบกำลังเริ่มต้นทำงาน นั่นหมายถึง อินเทอร์เน็ตมาแน่นอน ไม่เช่นนั้นจะไม่สามารถส่ง LINE เข้ามาได้ และวิเคราะห์ต่อไปได้ว่า ถ้าอินเทอร์เน็ตมาแสดงว่า esp8266 ได้รับ IP Address จาก WiFi ของ access point จริง

  //------------- Blynk Connect ---------------//
  if (Blynk.connected())
  {
    Blynk.run();
    digitalWrite(D0, LOW);
    blynk_Connect = 1;


  } else {
    digitalWrite(D0, LOW);
    delay(100);
    digitalWrite(D0, HIGH);
    delay(300);
    blynk_Connect = 0;

    Serial.println(WiFi.localIP());
    delay(100);

  }


  //แจ้งเตือน กรณี Blynk เชื่อมต่อ OK  1 ครั้ง
  if (blynk_Connect == 1 && Line1_status == 0) {

    LINE.notify("ชุดทดสอบ  เชื่อมต่อ Blynk Server ได้แล้ว");
    //LINE.notify("ศาลา2 เชื่อมต่อ Blynk Server ได้แล้ว");
    delay (200);
    Line1_status = 1;


  }

  else if (blynk_Connect == 1  && Line1_status == 1) {
    delay(10);

    Line2_status = 0;
  }




  //แจ้งเตือน กรณี Blynk หลุด  1 ครั้ง  กรณี Internet มา
  if (blynk_Connect == 0 && Line2_status == 0) {

    LINE.notify("ชุดทดสอบ!!!  เชื่อมต่อ Blynk Server ไม่ได้");
    //LINE.notify("ศาลา2!!!  เชื่อมต่อ Blynk Server ไม่ได้");

    delay (200);
    Line2_status = 1;


  }

  else if (blynk_Connect == 0  && Line2_status == 1) {
    delay(10);

    Line1_status = 0;
  }


เหตุประการที่ 3 “อินเทอร์เน็ตไม่มา”
วิธีการตรวจสอบ
จากเหตุประการที่ 2 ผมได้ใช้คำสั่งให้ส่ง LINE ในขณะที่ esp8266 เริ่มสตาร์ทระบบและเชื่อมต่อ blynk server
ซึ่งเป็นการตรวจสอบได้ระดับหนึ่งว่าอินเทอร์เน็ตมาหรือไม่มาจากการส่งไลน์เข้ามา ถ้าส่ง LINE ได้แสดงว่าอินเตอร์เน็ตมาแน่นอน
และโดยส่วนใหญ่ที่พบในการทำงานนี้คือ Internet ไม่มาและ blynk ก็จะหลุดการเชื่อมต่อ เมื่ออินเทอร์เน็ตมา blynk ก็จะสามารถเชื่อมต่อได้และส่งไลน์กลับมา และการตรวจสอบอีกประการหนึ่งที่ผมมีแนวคิดเอาไว้ ณ ตอนนี้ ที่หน้างานมี esp8266 อยู่ 2 ชุดที่ทำงานอยู่ ที่อยู่ ณ จุดเดียวกัน โดยชุดที่ 1 blynk ไม่สามารถทำงานได้ แต่ชุดที่ 2 ทำงานได้ปกติ จึงสงสัยว่า ทำไมชุดแรกมีปัญหาแต่ชุดที่ 2 ไม่มีปัญหา ทั้งๆที่เริ่มต้นทำงานพร้อมกัน

การวิเคราะห์ความแตกต่าง ทั้ง 2 ระบบ
โดยสรุปคือ Esp8266 ทั้ง 2 ชุดมีความแตกต่างกันคือชุดที่ 1 เชื่อมต่อกับ arduino Mega โดยมีการรับส่งข้อมูลระหว่างกัน แต่ชุดที่ 2 ไม่ได้มีภาระอะไรมากเป็นแค่ตัวควบคุมพัดลม ให้ทำงานตามอุณหภูมิและความชื้นที่ตั้งค่าเอาไว้เท่านั้น จึงอนุมานได้ว่าชุดที่ 1 มีภาระในการทำงานมากกว่าชุดที่ 2 จึงทำให้ระบบ เกิดขัดข้องได้ง่าย

ดังนั้นเพื่อเป็นการพิสูจน์ว่า esp8266 ชุดที่ 1 มีปัญหาที่เกิดจากสาเหตุอะไร เราจะทำค่าซีเรียล Monitor ดักเอาไว้ และเมื่อนำโน้ตบุ๊กและสาย Micro USB มาเสียบเข้าที่ esp8266 ชุดที่ 1 ก็จะได้ทราบว่าเกิดอะไรขึ้น แต่ถ้าเราอยู่ไกลจากระบบ เราจะตรวจสอบการทำงานของมันได้อย่างไร ว่ามันเกิดอะไรขึ้น ดังนั้นผมจึงมีแนวคิดที่จะ นำค่าที่มีปัญหาจาก esp8266 ชุดที่ 1 ให้ส่งไปยัง esp8266 ชุดที่ 2 (ซึ่งจะใช้ในกรณีที่มี esp8266 ชุดที่ 1 มีปัญหาแต่ esp8266 ชุดที่ 2 ยังสามารถทำงานได้อยู่) และเมื่อ esp8266 ชุดที่ 2 รับค่ามาก็อาจจะให้แจ้ง Line กลับมาว่าเกิดอะไรขึ้นกับ esp8266 ชุดที่ 1

ส่วนสมาชิกท่านใด มีข้อมูลเพิ่มเติมก็ขอคำแนะนำด้วยครับ…

2 Likes

เนื้อหาแน่นมากครับพี่ ตามอ่านไม่ทันเลย อิอิ