ใช้ 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

PUYIOT December 23, 2020, 10:04am #3

ESP32 + 10 Chanels

PUYIOT December 18, 2020, 10:52am #4

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

allnewstep.com

บอร์ด ESP32 NodeMCU Goouuu ESP32 DEVKIT Wi-Fi and Bluetooth

โมดูล ESP32 DEVKIT ESP32 NodeMCU Wi-Fi and Bluetooth บอร์ด Goouuu ESP32 ใช้ชิปแปลง USB เป็น UART เบอร์ CP2102 จากบริษัท Silicon Labs สามารถเข้าโหมดอัพ…

allnewstep.com

ภาพ

LCD Display 1602 LCD White Text Black Screen 16x2 LCD with backlight of the…

LCD Arduino Display 1602 LCD White Text Black Screen 16x2 LCD with backlight of the LCD screenจอแสดงผล LCD ขนาด 16 ตัวอักษร 2 บรรทัด ไฟแบ็คไลท์สีดำ ตั…

PUYIOT December 23, 2020, 10:06am #5

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)

PUYIOT December 22, 2020, 7:19am #6

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();
}

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

sama (sama) January 20, 2021, 3:11am #7

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

misterok_confirm (Misterok Confirm) January 19, 2021, 3:54am #8

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

PUYIOT January 19, 2021, 8:35pm #9

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

Remy_Martin (Permpol Thanapunnamas) January 20, 2021, 3:13am #10

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

1 Like

PUYIOT January 27, 2021, 4:07am #11

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

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

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

81268

81270

81271

81269

81272

81273

วันที่ 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

sama (sama) January 20, 2021, 4:06pm #12

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

Add

esp32

esp323

Remy_Martin (Permpol Thanapunnamas) January 20, 2021, 4:19pm #13

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

sama (sama) January 20, 2021, 4:34pm #14

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

PUYIOT January 21, 2021, 10:06am #15

ลองดู 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

PUYIOT January 21, 2021, 2:09pm #16

1

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

sama (sama) January 21, 2021, 2:25pm #17

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

1 Like

sama (sama) January 21, 2021, 2:28pm #18

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

PUYIOT January 21, 2021, 3:03pm #19

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

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

1

สำหรับ IotWebConf version 2.4.2

IotWebConf.h

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

PUYIOT January 21, 2021, 3:03pm #20

สำหรับ IotWebConf version 2.4.2

IotWebConf.cpp

เดิม
3

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

2

1 Like

sama (sama) January 21, 2021, 2:57pm #21

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


แคสภาพ

https://www.google.com/search?q=ใช้+ESP32+1+ตัว+%3A+Config+WiFi+-+LCD1602+-+PB10+-+Relay10-+Line+notify-Blynk&tbm=isch&ved=2ahUKEwiN28OyreXxAhWFsksFHUU6D2IQ2-cCegQIABAA&oq=ใช้+ESP32+1+ตัว+%3A+Config+WiFi+-+LCD1602+-+PB10+-+Relay10-+Line+notify-Blynk&gs_lcp=CgNpbWcQDFD6lSFY-pUhYP2cIWgAcAB4AIABpQGIAaUBkgEDMC4xmAEAoAEBqgELZ3dzLXdpei1pbWfAAQE&sclient=img&ei=UU_wYM3uLIXlrtoPxfS8kAY&bih=927&biw=1920&hl=th