ใช้ ESP32 1 ตัว : Config WiFi - LCD1602 - PB10 - Relay10- Line notify-Blynk

สำหรับโพสต์นี้ แชร์กันให้ลองดูนะครับ (รู้สึกว่าตัวเองนี่ช่างขยันลง post ให้ผู้ที่สนใจ อยากจะลองกันจัง) โดยปกติแล้วผมจะใช้ esp8266 มาเป็นตัวควบคุม ซึ่งก็จะเกิดปัญหาในเรื่องของ input output ไม่เพียงพอ ตลอดจน เรื่องคามสเถึยรที่ต้องการมากขึ้นในการใช้งาน จึงต้องใช้โมดุลต่างๆมาทำงานร่วมกัน แต่ตอนนี้ผมจะใช้ esp32 ซึ่งมี input output ที่มากกว่า มารองรับเงื่อนไขและการทำงานที่เดิมใช้ esp8266 เป็นตัวควบคุมอยู่
***ลองแล้วเกิดปัญหาอะไรบ้างก็ post มาครับ จะได้รู้ว่ามัน OK มั๊ย)
โดยเงื่อนไขที่สร้างขึ้นจะมีคุณสมบัติการใช้งานดังนี้

1 สามารถ Config ค่า WiFi โดยใช้ webconfig ที่เป็น library ที่ผมทดสอบแล้วสามารถทำงานแทน WiFi Manager ได้ โดยมีข้อดีคือใช้ปุ่มรีเซ็ตแค่ปุ่มเดียวเท่านั้นในการ Config ค่า WiFi

2 ใช้จอ LCD 1602 เป็นตัวบอก

  • สถานะความแรงของสัญญาณ WiFi ทำให้รู้ว่า esp32 สามารถที่จะทำงานได้เสถียรหรือไม่
  • สถานะ On Off ของอินเทอร์เน็ต ทำให้รู้ว่า ณ ตอนนี้มีอินเทอร์เน็ตเข้ามาหรือไม่
  • สถานะการเชื่อมต่อ blynk Server ทำให้รู้ว่าสถานะการเชื่อมต่อ blynk Server มีการเชื่อมต่อได้หรือไม่
  • IP Address ที่ได้รับ ทำให้รู้ว่า esp32 สามารถเชื่อมต่อ WiFi ได้สำเร็จหรือไม่
  • Subnet mark และ Gateway
  • Ssid และ password ทำให้รู้ว่า การ Config ใช้ SSID และ Password ชื่อว่าอะไร เพื่อความสะดวกในการตรวจสอบ
  • มีการนับจำนวนครั้งที่ esp32 ได้ทำการรีเซ็ตตัวเอง โดยจุดนี้เราสามารถที่จะรู้ได้ว่าตั้งแต่ใช้งานมา esp32 มีการรีเซ็ตตัวเองกี่ครั้ง เพื่อการตรวจสอบข้อมูลย้อนกลับ โดยข้อมูลการรีเซ็ตสามารถรีเซ็ตกลับมาให้เป็น 0 ได้ใหม่ ด้วย ปุ่มที่สร้างจาก Blynk App.
  • แสดง AP CONFIG name และ AP Password กันลืม

3 ใช้เสียงจาก buzzer module เป็นสื่อที่ใช้บอกสถานะต่างๆ เช่น มีเสียงเตือนว่าเชื่อมต่ออินเทอร์เน็ตไม่ได้ หรือเชื่อมต่อ blynk Server ไม่ได้ หรือเสียงที่เป็นสัญญาณบอกในขณะที่มีการ Config ค่า SSID และ Password พร้อมทั้งมีข้อความจากจอ LCD 1602 บอกขั้นตอนการ Config ค่า

4 สามารถควบคุมอุปกรณ์รีเลย์ได้ด้วย Push button และปุ่มกดจาก Blynk Application จำนวน 10 ตัว ซึ่งปุ่มทั้ง 2 ชุดนี้จะทำงานสัมพันธ์กัน โดยใช้ ESP 32 เพียง 1 ตัวเท่านั้น

5 หาก ESP32 มีการ Reset จะเรียกค่าเดิมก่อน Reset ให้กลับมาทำงานเหมือนปกติ โดยไม่ต้องรอให้ Blynk เชื่อมต่อ Sever ได้ ผลลัพธืที่ได้คือ ช่วงหลังจาก ESP32 reset อุปกรณ์จะดับทั้งหมด แต่เพียงไม่กี่วินาที อุปกรณืกรณ์จะกลับมาทำงานใหม่ได้ปกติ

----อธิบาย ความฝันเอาไว้ก่อนครับ 5555 :sweat_smile: ยังไงจะเอามา update กันครับ ------

2 Likes

รายการอุปกรณ์ หลักๆ

Code + Library + Esp tools : https://drive.google.com/drive/folders/11OeeQIBuSQff-ywJWAhjM1ngIBPi88Gj?usp=sharing

การลบค่า EEPROM หรือ Flash Esp32 ใหม่ อยู่ใน tools แล้วนะครับ

วิธีการใช้งาน

เดี๋ยวยังไงจะลงข้อมูลเพิ่มเติมนะครับ

Update ESP32 10 Chanels ::::: 23/12/2563 17:05
ESP32_10_Chanel_8.rar (7.1 KB)

code ชุดนี้เป็นของ Esp8266 Library Iotwebconf ตัวเดียวกับ ESP32 แก้ code เล็กน้อย ครับ ข้อสำคัญต้องใช้ board esp8266 Version 2.4.2 ขึ้นไป โดยของผม ใช้ Version 2.4.2 ยังไม่ได้ลอง Version ที่สูงกว่านี้

Config WiFi - Relay1- Line notify-Blynk-ควบคุมการทำงานของพัดลมระบายอากาศ ให้กับแผงวงจร


//ใช้ esp8266 เวอร์ชัน 2.4.2 หรือใหม่กว่า

#include <IotWebConf.h>

// -- Initial name of the Thing. Used e.g. as SSID of the own Access Point.
const char thingName[] = "PUY IOT FIRST";
const char wifiInitialApPassword[] = "111111111";
#include <TridentTD_LineNotify.h>

String LineText;
String string1 = " ระบบควบคุมเริ่มทำงาน  MCU RESET ครั้งที่  ";


int blynk_Connect = 0;
int Line1_status = 0;
int Line2_status = 0;


#define Line_Token 45
#define Blynk_Token 34

#define CONFIG_VERSION "dem2"


// -- Callback method declarations.
void configSaved();
boolean formValidator();

#include <DNSServer.h>
DNSServer dnsServer;
#include <ESP8266WebServer.h>
ESP8266WebServer server(80);//Server on port 80
//WebServer server(80);

char Line_Token_1[Line_Token];
//8HBPx7WHUTjGoPWACom1i98WEHGeCr6jZIDFx9L7kry
//QerWyEZdBShylI3iTTxKz1Pk8Zo1vLy2NQa7AXFgYLM
char Blynk_Token_1[Blynk_Token];
//Y2cb7t9y4zv8Ky_DHZ5nrot2YGBGZb9g

IotWebConf iotWebConf(thingName, &dnsServer, &server, wifiInitialApPassword, CONFIG_VERSION);
IotWebConfParameter Token_Line = IotWebConfParameter("Line_token", "Line_token", Line_Token_1, Line_Token);
IotWebConfSeparator separator1 = IotWebConfSeparator();
IotWebConfParameter Token_Blynk = IotWebConfParameter("Blynk_Token", "Blynk_Token", Blynk_Token_1, Blynk_Token);


String SSID_NAME;
String PASSWORD_NAME;
String IP;
String Sub_M;
String Gate_way;

String SSID_AP;
String PASSWORD_AP;


#include <BlynkSimpleEsp8266.h>
//#include <BlynkSimpleEsp32.h>

#define BLYNK_DEBUG
#define BLYNK_PRINT Serial
int blynkIsDownCount = 0;
BlynkTimer timer;

//-------------สำหรับ Server local ที่แจกให้ เพิ่ม **** แค่ 2 บรรทัดนี้--------------
//(ถ้าเป็น Blynk Server ปกติไม่ต้องใส่)  ----------//
char server1[] = "oasiskit.com";
//int port = 8080;



#include <EEPROM.h>



int MCU_Reset = 0;
int count_MCU_Rset;
int Amount_Mcu_Reset;
int reset_MCU;


#define STATUS_PIN D0

const char* host = "www.google.co.th";
int Internet;





#include "DHT.h"
#define DHTPIN D5
#define DHTTYPE    DHT22
DHT dht(DHTPIN, DHTTYPE);

float h ;
float t ;

//int Relay_fan = D6;

int Temp = 0;
int Humid = 0;


//Temp
float tmax;
String t_max1;
float t_max2;

float tmin;
String t_min1;
float t_min2;

//Humid
float hmax;
String h_max1;
float h_max2;


float hmin;
String h_min1;
float h_min2;




WidgetLED led_1(V10);


#define RelayFan D6
















BLYNK_WRITE(V12)//reset Counter MCU Reset
{
  int pinValue = param.asInt();
  if (pinValue == 1 ) {
    Amount_Mcu_Reset = EEPROM.put(101, 0);
    EEPROM.commit();

    count_MCU_Rset = EEPROM.put(150, 0);
    EEPROM.commit();


    Blynk.virtualWrite(V11, count_MCU_Rset);

  }
  if (pinValue == 0) {

  }
}




BLYNK_WRITE(V1)

{
  t_max1 = param.asString();//รับค่าข้อความจาก Blynk เข้ามา เก็บในรูปแบบ String

  t_max2 = t_max1.toFloat();//แปลงค่าจาก String เป็น Float

  EEPROM.put(300, t_max2); //เขียนค่า
  EEPROM.commit(); //จบการเขียน

  tmax = EEPROM.get(300, t_max2);//อ่าน ค่า
  Serial.println(tmax);

  delay(100);

}



BLYNK_WRITE(V2)

{
  t_min1 = param.asString();//รับค่าข้อความจาก Blynk เข้ามา เก็บในรูปแบบ String

  t_min2 = t_min1.toFloat();//แปลงค่าจาก String เป็น Float

  EEPROM.put(310, t_min2); //เขียนค่า
  EEPROM.commit(); //จบการเขียน

  tmin = EEPROM.get(310, t_min2);//อ่าน ค่า
  Serial.println(tmin);

  delay(100);

}




BLYNK_WRITE(V3)

{
  h_max1 = param.asString();//รับค่าข้อความจาก Blynk เข้ามา เก็บในรูปแบบ String

  h_max2 = h_max1.toFloat();//แปลงค่าจาก String เป็น Float

  EEPROM.put(320, h_max2); //เขียนค่า
  EEPROM.commit(); //จบการเขียน

  hmax = EEPROM.get(320, h_max2);//อ่าน ค่า
  Serial.println(hmax);

  delay(100);

}



BLYNK_WRITE(V4)

{
  h_min1 = param.asString();//รับค่าข้อความจาก Blynk เข้ามา เก็บในรูปแบบ String

  h_min2 = h_min1.toFloat();//แปลงค่าจาก String เป็น Float

  EEPROM.put(330, h_min2); //เขียนค่า
  EEPROM.commit(); //จบการเขียน

  hmin = EEPROM.get(330, h_min2);//อ่าน ค่า
  Serial.println(hmin);

  delay(100);

}











void setup()
{

  Serial.begin(115200);
  Serial.println();
  Serial.println(" Starting up... ");

  pinMode(RelayFan , OUTPUT);
  digitalWrite(RelayFan , 0);//D6  Relay เป็น High Active 1 on  0 oFF
  EEPROM.begin(1024);


  iotWebConf.setStatusPin(STATUS_PIN);
  iotWebConf.addParameter(&Token_Line);
  iotWebConf.addParameter(&Token_Blynk);

  iotWebConf.setConfigSavedCallback(&configSaved);
  iotWebConf.setFormValidator(&formValidator);
  iotWebConf.getApTimeoutParameter()->visible = true;




  // -- Initializing the configuration.
  iotWebConf.init();

  // -- Set up required URL handlers on the web server.
  server.on("/", handleRoot);
  server.on("/config", [] { iotWebConf.handleConfig(); });
  server.onNotFound([]() {
    iotWebConf.handleNotFound();
    iotWebConf.handleCaptivePortal();
  });

  Serial.println("Ready");
  Serial.println("Finish");





  // Blynk.config(blynk_token);////เริ่มการเชื่อมต่อ Blynk Server แบบปกติ
  Blynk.config(Blynk_Token_1, server1, 8080);
  ////เริ่มการเชื่อมต่อ Blynk Server*********สำหรับ Server local ที่แจกให้ เพิ่ม, server, port  แค่นี้จบ



  timer.setInterval(30000L, reconnecting);  //Function reconnect
  timer.setInterval(500L, internet);
  dht.begin();

  timer.setInterval(2000L, checkT_H);

  tmax = EEPROM.get(300, t_max2);
  Serial.print("tmax in Void setup : ");
  Serial.println(tmax);

  tmin = EEPROM.get(310, t_min2);
  Serial.print("tmin in Void setup : ");
  Serial.println(tmin);

  hmax = EEPROM.get(320, h_max2);
  Serial.print("hmax in Void setup : ");
  Serial.println(hmax);

  hmin = EEPROM.get(330, h_min2);
  Serial.print("hmin in Void setup : ");
  Serial.println(hmin);



  //  timer.setInterval(1000L, reconnecting);

  SSID_NAME = iotWebConf.getWifiSsidParameter()->valueBuffer;


  PASSWORD_NAME = iotWebConf.getWifiPasswordParameter()->valueBuffer;

  SSID_AP = iotWebConf.getThingNameParameter()->valueBuffer;

  PASSWORD_AP = iotWebConf.getApPasswordParameter()->valueBuffer;



  LINE.setToken(Line_Token_1);




  count_MCU_Rset = EEPROM.get(150, Amount_Mcu_Reset);
  Serial.print("count_MCU_Rset =  ");
  Serial.println(count_MCU_Rset);

  reset_MCU = count_MCU_Rset + 1;
  //  Serial.print("reset_MCU =  ");
  //  Serial.println(reset_MCU);
  Amount_Mcu_Reset = EEPROM.put(101, reset_MCU);
  EEPROM.commit();
  //  Serial.print("Amount_Mcu_Reset =  ");
  //  Serial.println(Amount_Mcu_Reset);

  count_MCU_Rset = EEPROM.put(150, Amount_Mcu_Reset);
  EEPROM.commit();
  Serial.print("count_MCU_Rset =  ");
  Serial.println(count_MCU_Rset);
















}//void setup











void loop()
{



  if (Internet  == 1 && MCU_Reset == 0) {

    LineText = string1 + count_MCU_Rset;
    LINE.notify(LineText);
    delay (200);


    MCU_Reset = 1;

  }










  if (Blynk.connected())
  {
    Blynk.run();

    blynk_Connect = 1;

    Blynk.virtualWrite(V11, count_MCU_Rset);


  } else {

    blynk_Connect = 0;

  }



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

    LINE.notify("MCU FAN   เชื่อมต่อ Blynk Server ได้แล้ว");
  
    delay (200);
    Line1_status = 1;


  }

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

    Line2_status = 0;
  }




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

    LINE.notify("MCU FAN!! เชื่อมต่อ Blynk Server ไม่ได้");


    delay (200);
    Line2_status = 1;



  }

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

    Line1_status = 0;
  }


  timer.run();






  // -- doLoop should be called as frequently as possible.
  iotWebConf.doLoop();

  delay(500);




}


void internet()
{
  WiFiClient client;
  if (client.connect(host, 80))
  {
    // Serial.println("connected");
    Internet = 1;
    client.stop();
    delay(100);


  }
  else {
    //Serial.println("connection failed!");
    Internet = 0;
    client.stop();

  }
}




void reconnecting()
{
  if (!Blynk.connected())
  {
    blynkIsDownCount++;
    BLYNK_LOG("blynk server is down! %d  times", blynkIsDownCount);
    Blynk.connect(5000);
  }
}


BLYNK_CONNECTED()
{


}












/**
   Handle web requests to "/" path.
*/
void handleRoot()
{


  Serial.println(" NOW! CONFIG AP ");

  // -- Let IotWebConf test and handle captive portal requests.
  if (iotWebConf.handleCaptivePortal())
  {
    // -- Captive portal request were already served.
    return;
  }
  String s = "<!DOCTYPE html><html lang=\"en\"><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1, user-scalable=no\"/>";
  s += "<title>IotWebConf 03 Custom Parameters</title></head><body>ESP8266 FAN CTRL";
  s += "<ul>";

  s += "<li>String param value1: ";
  s += Line_Token_1;
  s += "<li>String param value2: ";
  s += Blynk_Token_1;

  s += "</ul>";
  s += "Go to <a href='config'>configure page</a> to change values.";
  s += "</body></html>\n";

  server.send(200, "text/html", s);
}







void configSaved()
{
  Serial.println("Configuration was updated.");


  Serial.println(" SAVE! CONFIG AP");

  Serial.println(" DISCON. CONFIG!");




  SSID_AP = iotWebConf.getThingNameParameter()->valueBuffer;

  PASSWORD_AP = iotWebConf.getApPasswordParameter()->valueBuffer;

}

boolean formValidator()
{
  Serial.println("Validating form.");
  boolean valid = true;

  int l = server.arg(Token_Line.getId()).length();
  if (l < 3)
  {
    Token_Line.errorMessage = "Please provide at least 3 characters for this test!";
    valid = false;
  }



  return valid;
}


void checkT_H()
{

  if (Internet == 1) {

loop:
    t = dht.readTemperature();
    h = dht.readHumidity();


    //-----------------ถ้าอ่านค่าไม่ได้ ให้  t = 0 ,h = 0 เพื่อสะดวกในการวิเคราะห์ค่า---------
    if (isnan(h) || isnan(t)) {
      //Serial.println("Failed to read from DHT sensor!");
      //delay(500);
      //display.clear();
      //display.drawString(5, 0, "Failed DHT22");
      //t = 0;
      //h = 0;
      Serial.println("***");
      delay(1000);
      goto loop ;
    }
    //---------------------------------------------------------------------
    else {
      //Serial.println("อ่านค่าได้แล้ว");
      //    Serial.print("temp : ");
      //    Serial.println(t);
      //    Serial.print("Humid :");
      //    Serial.println(h);


      Blynk.virtualWrite(V8, t);
      Blynk.virtualWrite(V9, h);


      if ( t > tmin && t <= tmax ) {

        Temp = 0;

      }  else   {

        Temp = 1;
      }

      if ( h > hmin && h <= hmax ) {

        Humid = 0;

      }  else   {

        Humid = 1;
      }


      //  Serial.print("Temp =  ");
      //  Serial.println(Temp);
      //
      //  Serial.print("Humid =  ");
      //  Serial.println(Humid);



      //ใช้หลักการทำงานแบบ 4 สถานะ


      if ( Temp == 1 && Humid == 1 ) {//temp  ปกติ    humit  ปกติ

        //digitalWrite(Relay_fan, 0);//FAN ON
        led_1.on();
        digitalWrite(RelayFan , 1);
      }


      if ( Temp == 0 && Humid == 1 ) {//temp  ผิดปกติ    humit  ปกติ

        //digitalWrite(Relay_fan, 0);//FAN ON
        led_1.on();
        digitalWrite(RelayFan , 1);
      }



      if ( Temp == 1 && Humid == 0 ) {//temp  ปกติ    humit  ผิดกติ

        //digitalWrite(Relay_fan, 0);//FAN ON
        led_1.on();
        digitalWrite(RelayFan , 1);
      }


      if ( Temp == 0 && Humid == 0 ) {//temp  ผิดปกติ    humit  ผิดกติ

        //digitalWrite(Relay_fan, 1);//FAN  OFF
        led_1.off();
        digitalWrite(RelayFan , 0);

      }



      return;//ถ้าไม่ใส่มันจะไม่ return ค่า =0,h=0

    }

  }
  iotWebConf.doLoop();
}

ผมได้อัพลองทดสอบดูครับ แต่ยังเป็นภาษาด่างดาวเหมือนกับโค๊ดเก่าเมื่อทิ้งไว้สักพักหนึ่ง ไม่ทราบว่าเกี่ยวกับอะไรครับ

กำลังสั่งอุปกรณ์จะลองทดสอบด้วยครับ

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

ถ่ายภาพมาดูหน่อยครับ

1 Like

ผมทดสอบมาหลายวันแล้ว​ครับ ​ลืมไปแล้วแต่รู้ว่ามีการรีบูตน้อยมาก มีตัวหนังสือล้ม1ครั้งยังไม่ทรสบสาเหตุ ยังไงจะทดสอบอีกรอบหนึ่งว่าผลเป็นยังไงบ้างนะครับ เริ่มวันนี้เลย

วันที่ 20/01/2563 8.20น.

  1. reset MCU ใหม่ = 0
  2. ตัวอักษรจอ LCD ปกติครับ

วันที่ 21/01/2563 8.20น.

  1. reset MCU ใหม่ = 0
  2. ตัวอักษรจอ LCD ปกติครับ

วันที่ 22/01/2563 8.20น.

  1. reset MCU ใหม่ = 0
  2. ตัวอักษรจอ LCD ปกติครับ

วันที่ 23/01/2563 8.20น.

  1. reset MCU ใหม่ = 0
  2. ตัวอักษรจอ LCD ปกติครับ

วันที่ 23/01/2563 8.20น.

  1. reset MCU ใหม่ = 0
  2. ตัวอักษรจอ LCD ปกติครับ

วันที่ 24/01/2563 8.20น.

  1. reset MCU ใหม่ = 0
  2. ตัวอักษรจอ LCD ปกติครับ

วันที่ 25/01/2563 5.00น. - 7.33น.
ได้ยินเสียงเตือน และตรวจสอบไปที่จอ LCD monitor
ผลคือ Blynk ไม่สามารถติดต่อ Bllynk ของ 128.199.173.118 (oasiskit.com)ได้
ทดสอบเปิด App blynk ก็ไม่สามารถเปิดได้ โดยฟ้องว่า Blynk ไม่สามารถติดต่อ Bllynk ของ 128.199.173.118 (oasiskit.com)ได้
ตอนนี้ใช้ได้แล้ว

  1. reset MCU ใหม่ = 0
  2. ตัวอักษรจอ LCD ปกติครับ

วันที่ 26/01/2563 8.10น.

  1. reset MCU ใหม่ = 0
  2. ตัวอักษรจอ LCD ปกติครับ

วันที่ 27/01/2563 9.00น.

  1. reset MCU ใหม่ = 0
  2. ตัวอักษรจอ LCD ปกติครับ

ตอนนี้รวมระยะเวลา 8 วัน ESP32 ยังไม่ Reset ตัวเองนะครับ

1 Like

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

Add

อีกหนึ่งประเด็น ที่อาจเป็นไปได้

ใช่ครับผมอ่านจากกระทู้นี้ล่ะครับถึงได้คำตอบ นอกจากต้องคึกษาโค๊ด(software)แล้วต้องทำความเข้าใจด้านhardwareอีกด้วยครับ งั้นคงไปไม่รอดแน่ครับ ยากทั้งคู่เลย

ลองดู Serial monitor และดูตรงที่ Usernae กับ password ก่อนครับว่า ตัวข้อความมัน 2 ข้อความนี้มันหลุดหรือปล่าว ถ้าใช่ มันก็ควานหาไปเรื่อยๆ ยังไงก็ไม่เจอครับ สาเหตุคือ Eeprom ของ library ชุดนี้ เค้าเริ่ม Address ที่ 0 ครับ มันจึงไปชนกับ Address ของเรา ดังนั้นข้อความ Usernae กับ password หรือ Token line มันจึง เพี้ยนไปเลย จึงต้องกลับไปแก้ library ของเค้า ให้เริ่มต้นที่ 512 เป็นต้นไปครับ จึงจะหาย และใน void set up ให้ epromp begin(1024); อันนี้ ถ้าโหลดไฟล์ที่ให้ไป ผมแก้ไปแล้วครับ

แต่พอลองเอาแหล่งจ่ายไฟออก แล้วจ่ายไฟเข้าใหม่เพื่อทดสอบกรณีไฟดับ
ปรากฎว่าหาไฟไวไม่เจอเลยครับขึัน wifi…ค้างยาวเลยครับ ไม่ทราบว่าเจ้าของกระทู้เป็นไหมครับ

ผมทดสอบแล้วปกติครับ

1 Like

ดูจาก ภาพแล้ว @sama มีการเพิ่ม code ไปด้วยหรือปล่าวครับ

ได้แล้วครับ ขอบคุณมากครับ สาเหตุผมใช้ library ดั้งเดิมครับ ต้องใช้ library ของที่แก้ใหม่เท่านั้นครับ ขนาดเปลี่ยนesp32ตัวใหม่ก็ยังเป็นครับ หา ssid passwordเจอครับ แต่ไม่เห็นค่าเลยไม่รู้ว่าถูก สรุปน่ามาจากการเขียนตำแหน่งเมมโมรี่ทับกันเลยดึงค่าไม่มาถูกเข้าไวไฟไม่ได้ครับ
โครงการนี้เน้นต้องใช้ library iotwebconf เจ้าของกระทู้เท่านั้นครับจึงจะชัวช์ครับ

1 Like

ใช่ครับ พอไม่ได้ผมก็ลองแก้มั่วไปหมดเลย มือใหม่หัดเล่นครับ

ผมว่า @sama มีความสามารถ ที่จะคิด วิเคราะห์ ปัญหาได้ดีแล้วครับ

เด๊๋ยวผมจะแสดงวิธีการแก้ ตำแหน่งของ EEPROM นะครับ ไม่ยาก…

1

สำหรับ IotWebConf version 2.4.2

IotWebConf.h

ที่ขึดเส้นใต้ไว้ เดิมเป็น 0 ครับ เราปลี่ยนเป็น ให้มันเริ่มต้นที่ 512 เป็นต้นไปครับ ดังนั้น Address 0 - 511 เราก็เอามาใช้ได้ครับ คิดว่า เพียงพอแล้ว เพราะของเค้า ที่เราให้เริ่มที่ 512 เป็นต้นไป มันเป็นค่า ที่เลื่อนไปได้เองเรื่อยๆ ครับ ตราบใดที่เรามีการเก็บค่า เพิ่มขึ้น ดังนั้นเราจึงคาดคะเนไม่ได้ว่ามันจะใช้ Arrdess จาก 512 แล้วไปสุดที่ตรงไหน

สำหรับ IotWebConf version 2.4.2

IotWebConf.cpp

เดิม
3

เนื่องจากข้อมูลของ Library นี้ เค้าพัฒนามาจาก Wifimanager ครับ ดังนั้น code บางส่วนจะเหมือนกัน เราจึงสามารถเพิ่มได้ดังนี้

2

1 Like

ขอบคุณครับที่ให้ความรู้ครับ จะพยายามค่อยๆศึกษาไปครับ ยังมีอีกเยอะที่ผมไม่รู้ครับ ก็จะขอความรู้ไปเรื่อยนะครับ

1 Like