Esp8266 4 ตัวติดต่อกันผ่าน Widget Bridge Blynk

เก็บข้อมูลนะครับ วัตถุประสงค์คือ

    1. เก็บข้อมูลภายนอกจากสถานที่ต่างๆ เข้ามา เช่น Temp, Humid
  • 2.ข้อมูลที่เก็บเข้ามา จะแสดงออกทาง จอ LCD หรือ Panel Board Center เพื่อการเฝ้าดู ค่าต่างที่สำคัญ
  • 3.สามารถกดปุ่ม ควบคุมไปยัง Esp8266 ที่อยู่ในแต่ละสถานที่ได้ (กำลังทำ…ได้ไปบางส่วนแล้ว)
  • 4.เมื่อแต่ละสถานที่มีปัญหา ควรจะ มีไฟแสดง หรือ + เสียง Alarm เข้าไปเพื่อเตือนผู้ดูและระบบด้วย(ยังไม่ได้ทำ)
    1. Diagram ยังไม่ได้เชียน

ESP8266 No.1


//-------------------------------------------------------------------------------------------------------------------------//

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#include <FS.h>
#include <DNSServer.h>
#include <ArduinoJson.h>
#include <ESP8266HTTPClient.h>
//----------------------------------------------------------

//----------------------------------------------------------
//Blynk------------
#include <BlynkSimpleEsp8266.h>
#define BLYNK_DEBUG
#define BLYNK_PRINT Serial
int blynkIsDownCount = 0;

char blynk_token1[34] = "xIYLjnGv11NaIH3AndH9jD6NPJq_7Pit";


char blynk_token2[34] = "tD8ycdc4b95k0vBT-fs3iQyZjR86TWVN";
char blynk_token3[34] = "d1oD5jdMSXmujDw1xLng7f8bxOvdwkag";
char blynk_token4[34] = "q-vcHFgpYufA7jdylMvbijtmr-uuyTPO";
//-----เกียวกับ Bridge
WidgetBridge bridge2(V92);
WidgetBridge bridge3(V93);
WidgetBridge bridge4(V94);

//----------------------------------------------------------
BlynkTimer timer;

//***********สำหรับ Server local ที่แจกให้ เพิ่ม **** แค่ 2 บรรทัดนี้
char server[] = "oasiskit.com";
int port = 8080;



//------------------------------------------------------------------------------------------------------------------------//
#define D0 16 // ใช้ไฟ LED สีฟ้า ของบอร์ด MCU ESP8266 ให้มีสัญญาณไฟกระพริบ ตาม Code ที่เขียน 
#define D4 2 // ใช้เป็นปุ่มกด เพื่อเข้า AP Config ได้ตามความต้องการของผู้ใช้
//------------------------------------------------------------------------------------------------------------------------//

bool shouldSaveConfig1 = false;
void saveConfigCallback1 () {
  shouldSaveConfig1 = true;
  Serial.println("Should save  All Data config");
}
//-----------------------------------------------------------------------------------------------------------------------//

String IP;

#include <DHT.h>
#define DHTTYPE1 DHT22
#define DHTPIN1  D3
DHT dht1(DHTPIN1, DHTTYPE1);

float t1 ;
float h1 ;


#define DHTTYPE2 DHT22
#define DHTPIN2  D5
DHT dht2(DHTPIN2, DHTTYPE2);

float t2 ;
float h2 ;




int count_th = 0;



//--------Blynk Control---------
BLYNK_WRITE(V1)
{
  int pinValue = param.asInt();
  if (pinValue == 1 ) {
    bridge2.digitalWrite(2, LOW);
    bridge3.digitalWrite(2, LOW);
    bridge4.digitalWrite(2, LOW);
  }
  if (pinValue == 0) {
    bridge2.digitalWrite(2, HIGH);
    bridge3.digitalWrite(2, HIGH);
    bridge4.digitalWrite(2, HIGH);
  }
}


//------------------------------------------------------//


//------------------------------------------------------------------------------------------------------------------------//
//*********************************************       void setup        **************************************************//
//------------------------------------------------------------------------------------------------------------------------//

void setup() {

  //-------IO NODE MCU Esp8266-------//
  pinMode(D0, OUTPUT);      //กำหนดโหมดใช้งานให้กับขา D0 เป็นขา สัญญาณไฟ ในสภาวะต่างๆ
  pinMode(D4, INPUT_PULLUP);//กำหนดโหมดใช้งานให้กับขา D3 เป็นขา กดปุ่ม ค้าง เพื่อตั้งค่า AP config

  Serial.begin(115200);
  dht1.begin();
  dht2.begin();


  //-----------------------------------------------------------------------------------------------------------------------//
  //read configuration from FS json
  Serial.println("mounting  FS...");



  if (SPIFFS.begin()) {

    //---------------------------------------------------------------------------------//

    Serial.println("mounted Data file system");


    if (SPIFFS.exists("/config1.json")) {
      //file exists, reading and loading
      Serial.println("reading Data config file");
      File configFile1 = SPIFFS.open("/config1.json", "r");

      if (configFile1) {
        Serial.println("opened Data config file");
        size_t size = configFile1.size();
        // Allocate a buffer to store contents of the file.
        std::unique_ptr<char[]> buf1(new char[size]);

        configFile1.readBytes(buf1.get(), size);
        DynamicJsonBuffer jsonBuffer;
        JsonObject& json = jsonBuffer.parseObject(buf1.get());
        json.printTo(Serial);
        if (json.success()) {
          Serial.println("\nparsed  json");

          strcpy(blynk_token1, json["blynk_token1"]);


        } else {
          Serial.println("failed to load Data file json config");
        }
      }
    }
    //---------------------------------------------------------------------------------//



  } else {
    Serial.println("failed to mount FS");

  }
  //end read


  delay(1000);




  //-----------------------------------------------------------------------------------------------------------------------//

  WiFiManagerParameter custom_text0("<p> </p>");
  WiFiManagerParameter custom_textA("<label>A: Blynk Token 1</label>");
  WiFiManagerParameter custom_blynk_token1("blynk_token1", "blynk_token1", blynk_token1, 34);


  //WiFiManager
  //Local intialization. Once its business is done, there is no need to keep it around
  WiFiManager wifiManager;

  //set config save notify callback
  wifiManager.setSaveConfigCallback(saveConfigCallback1);

  wifiManager.addParameter(&custom_text0);
  wifiManager.addParameter(&custom_textA);
  wifiManager.addParameter(&custom_blynk_token1);


  delay(1000);

  for (int i = 5; i > -1; i--) {  // นับเวลาถอยหลัง 5 วินาทีก่อนกดปุ่ม AP Config

    digitalWrite(D0, LOW);
    delay(500);
    digitalWrite(D0, HIGH);
    delay(500);
    Serial.print (String(i) + " ");





  }

  if (digitalRead(D4) == LOW) {
    digitalWrite(D0, LOW);
    Serial.println("Button Pressed");



    wifiManager.resetSettings();//ให้ล้างค่า SSID และ Password ที่เคยบันทึกไว้


    // wifiManager.autoConnect(); ใช้สร้างชื่อแอคเซสพอยต์อันโนมัติจาก ESP + ChipID

    if (!wifiManager.autoConnect("PIOT_NO.1")) {
      Serial.println("failed to connect and hit timeout");
      delay(3000);


      //reset and try again, or maybe put it to deep sleep
      ESP.reset();
      delay(5000);
    }

  }




  Serial.println(": WiFi Connected.......OK!)");

  strcpy(blynk_token1, custom_blynk_token1.getValue());
  delay(1000);

  if (shouldSaveConfig1) {
    //Serial.println("saving config");//แสดงข้อความใน Serial Monitor

    //------------------------------------------------------------------

    DynamicJsonBuffer jsonBuffer;
    JsonObject& json = jsonBuffer.createObject();

    //------------------------------------------------------------------
    Serial.println("saving blynk_token1_ config");
    json["blynk_token1"] = blynk_token1;
    File configFile1 = SPIFFS.open("/config1.json", "w");

    //------------------------------------------------------------------


    if (!configFile1) {
      Serial.println("failed to open  config file for writing");

    }
    json.printTo(Serial);

    json.printTo(configFile1);
    configFile1.close();

    //-------------------------------------
  }
  delay(1000);
  //-----------------------------------------------------------------


  //-----------------------------------------------------------------------------------------------------------------------//
  Serial.println("-----------------------------------");
  Serial.println();
  Serial.print("local ip   : ");
  delay(100);
  Serial.println(WiFi.localIP());
  delay(100);
  Serial.print("gateway    :");
  delay(100);
  Serial.println(WiFi.gatewayIP());
  Serial.print("subnetMask :");
  delay(100);
  Serial.println(WiFi.subnetMask());
  Serial.print("SSID       :");
  delay(100);
  Serial.println(WiFi.SSID());
  Serial.print("Password   :");
  delay(100);
  Serial.println(WiFi.psk());
  //-----------------------------------------------------------------------------------------------------------------------//
  //Print เพื่อเชคว่าค่าที่บันทึกไว้ยังอยู่หรือไม่
  Serial.println("-----------------------------------");
  Serial.println("เชคว่าค่าที่บันทึกไว้ยังอยู่หรือไม่");
  Serial.println();


  IP = WiFi.localIP().toString();
  Serial.print("IP to String = ");
  Serial.println(IP);


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


  timer.setInterval(30000L, reconnecting);




  //-----------------------------------------------------------------------------------------------------------------------//





}

//------------------------------------------------------------------------------------------------------------------------//
//*********************************************   จบ  void setup        **************************************************//
//------------------------------------------------------------------------------------------------------------------------//









//------------------------------------------------------------------------------------------------------------------------//
//*********************************************       void Loop        ***************************************************//
//------------------------------------------------------------------------------------------------------------------------//


void loop() {

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

    bridge2.setAuthToken(blynk_token2);
    bridge3.setAuthToken(blynk_token3);
    bridge4.setAuthToken(blynk_token4);

    //Serial.println("loop Blynk run");
  } else {
    digitalWrite(D0, LOW);
    delay(50);
    digitalWrite(D0, HIGH);
    delay(50);

    //Serial.println("loop Blynk connecting");
  }
  timer.run();//ให้เวลาของ Blynk ทำงาน

  delay(50);

  count_th++;

  if ( count_th == 15)

  {
    checkth1();
  }

  if ( count_th == 20)

  {
    checkth2();
  }

  if ( count_th == 21)

  {
    count_th = 0;
  }

}



//--------------------------------------------------------------------------------------------------------

void checkth1() {

  t1 = dht1.readTemperature();
  h1 = dht1.readHumidity();

  Blynk.virtualWrite(V9, t1);
  Blynk.virtualWrite(V10, h1);

  bridge4.virtualWrite(V9, t1);
  bridge4.virtualWrite(V10, h1);




  delay(20);

}


//--------------------------------------------------------------------------------------------------------

void checkth2() {

  t2 = dht2.readTemperature();
  h2 = dht2.readHumidity();

  Blynk.virtualWrite(V11, t2);
  Blynk.virtualWrite(V12, h2);

  bridge4.virtualWrite(V11, t2);
  bridge4.virtualWrite(V12, h2);


  delay(20);

}


//--------------------------------------------------------------------------------------------------------


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

ESP8266 No.2


//-------------------------------------------------------------------------------------------------------------------------//

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#include <FS.h>
#include <DNSServer.h>
#include <ArduinoJson.h>
#include <ESP8266HTTPClient.h>
//----------------------------------------------------------

//----------------------------------------------------------
//Blynk------------
#include <BlynkSimpleEsp8266.h>
#define BLYNK_DEBUG
#define BLYNK_PRINT Serial
int blynkIsDownCount = 0;
char blynk_token[34] = "tD8ycdc4b95k0vBT-fs3iQyZjR86TWVN";
BlynkTimer timer;

//***********สำหรับ Server local ที่แจกให้ เพิ่ม **** แค่ 2 บรรทัดนี้
char server[] = "oasiskit.com";
int port = 8080;



//------------------------------------------------------------------------------------------------------------------------//
#define D0 16 // ใช้ไฟ LED สีฟ้า ของบอร์ด MCU ESP8266 ให้มีสัญญาณไฟกระพริบ ตาม Code ที่เขียน 
#define D4 2 // ใช้เป็นปุ่มกด เพื่อเข้า AP Config ได้ตามความต้องการของผู้ใช้
//------------------------------------------------------------------------------------------------------------------------//

bool shouldSaveConfig1 = false;
void saveConfigCallback1 () {
  shouldSaveConfig1 = true;
  Serial.println("Should save  All Data config");
}
//-----------------------------------------------------------------------------------------------------------------------//

String IP;

//--------Blynk Control---------
BLYNK_WRITE(V1)
{
  int pinValue = param.asInt();
  if (pinValue == 1 ) {

  }
  if (pinValue == 0) {

  }
}


//------------------------------------------------------//


//------------------------------------------------------------------------------------------------------------------------//
//*********************************************       void setup        **************************************************//
//------------------------------------------------------------------------------------------------------------------------//

void setup() {

  //-------IO NODE MCU Esp8266-------//
  pinMode(D0, OUTPUT);      //กำหนดโหมดใช้งานให้กับขา D0 เป็นขา สัญญาณไฟ ในสภาวะต่างๆ
  pinMode(D4, INPUT_PULLUP);//กำหนดโหมดใช้งานให้กับขา D3 เป็นขา กดปุ่ม ค้าง เพื่อตั้งค่า AP config

  Serial.begin(115200);




  //-----------------------------------------------------------------------------------------------------------------------//
  //read configuration from FS json
  Serial.println("mounting  FS...");



  if (SPIFFS.begin()) {

    //---------------------------------------------------------------------------------//

    Serial.println("mounted Data file system");


    if (SPIFFS.exists("/config1.json")) {
      //file exists, reading and loading
      Serial.println("reading Data config file");
      File configFile1 = SPIFFS.open("/config1.json", "r");

      if (configFile1) {
        Serial.println("opened Data config file");
        size_t size = configFile1.size();
        // Allocate a buffer to store contents of the file.
        std::unique_ptr<char[]> buf1(new char[size]);

        configFile1.readBytes(buf1.get(), size);
        DynamicJsonBuffer jsonBuffer;
        JsonObject& json = jsonBuffer.parseObject(buf1.get());
        json.printTo(Serial);
        if (json.success()) {
          Serial.println("\nparsed  json");

          strcpy(blynk_token, json["blynk_token"]);


        } else {
          Serial.println("failed to load Data file json config");
        }
      }
    }
    //---------------------------------------------------------------------------------//



  } else {
    Serial.println("failed to mount FS");

  }
  //end read


  delay(1000);




  //-----------------------------------------------------------------------------------------------------------------------//

  WiFiManagerParameter custom_text0("<p> </p>");
  WiFiManagerParameter custom_textA("<label>A: Blynk Token</label>");
  WiFiManagerParameter custom_blynk_token("blynk_token", "blynk_token", blynk_token, 34);


  //WiFiManager
  //Local intialization. Once its business is done, there is no need to keep it around
  WiFiManager wifiManager;

  //set config save notify callback
  wifiManager.setSaveConfigCallback(saveConfigCallback1);

  wifiManager.addParameter(&custom_text0);
  wifiManager.addParameter(&custom_textA);
  wifiManager.addParameter(&custom_blynk_token);


  delay(1000);

  for (int i = 5; i > -1; i--) {  // นับเวลาถอยหลัง 5 วินาทีก่อนกดปุ่ม AP Config

    digitalWrite(D0, LOW);
    delay(500);
    digitalWrite(D0, HIGH);
    delay(500);
    Serial.print (String(i) + " ");





  }

  if (digitalRead(D4) == LOW) {
    digitalWrite(D0, LOW);
    Serial.println("Button Pressed");



    wifiManager.resetSettings();//ให้ล้างค่า SSID และ Password ที่เคยบันทึกไว้


    // wifiManager.autoConnect(); ใช้สร้างชื่อแอคเซสพอยต์อันโนมัติจาก ESP + ChipID

    if (!wifiManager.autoConnect("PIOT_NO.2")) {
      Serial.println("failed to connect and hit timeout");
      delay(3000);


      //reset and try again, or maybe put it to deep sleep
      ESP.reset();
      delay(5000);
    }

  }




  Serial.println(": WiFi Connected.......OK!)");

  strcpy(blynk_token, custom_blynk_token.getValue());
  delay(1000);

  if (shouldSaveConfig1) {
    //Serial.println("saving config");//แสดงข้อความใน Serial Monitor

    //------------------------------------------------------------------

    DynamicJsonBuffer jsonBuffer;
    JsonObject& json = jsonBuffer.createObject();

    //------------------------------------------------------------------
    Serial.println("saving blynk_token_ config");
    json["blynk_token"] = blynk_token;
    File configFile1 = SPIFFS.open("/config1.json", "w");

    //------------------------------------------------------------------


    if (!configFile1) {
      Serial.println("failed to open  config file for writing");

    }
    json.printTo(Serial);

    json.printTo(configFile1);
    configFile1.close();

    //-------------------------------------
  }
  delay(1000);
  //-----------------------------------------------------------------


  //-----------------------------------------------------------------------------------------------------------------------//
  Serial.println("-----------------------------------");
  Serial.println();
  Serial.print("local ip   : ");
  delay(100);
  Serial.println(WiFi.localIP());
  delay(100);
  Serial.print("gateway    :");
  delay(100);
  Serial.println(WiFi.gatewayIP());
  Serial.print("subnetMask :");
  delay(100);
  Serial.println(WiFi.subnetMask());
  Serial.print("SSID       :");
  delay(100);
  Serial.println(WiFi.SSID());
  Serial.print("Password   :");
  delay(100);
  Serial.println(WiFi.psk());
  //-----------------------------------------------------------------------------------------------------------------------//
  //Print เพื่อเชคว่าค่าที่บันทึกไว้ยังอยู่หรือไม่
  Serial.println("-----------------------------------");
  Serial.println("เชคว่าค่าที่บันทึกไว้ยังอยู่หรือไม่");
  Serial.println();


  IP = WiFi.localIP().toString();
  Serial.print("IP to String = ");
  Serial.println(IP);


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


  timer.setInterval(30000L, reconnecting);




  //-----------------------------------------------------------------------------------------------------------------------//





}

//------------------------------------------------------------------------------------------------------------------------//
//*********************************************   จบ  void setup        **************************************************//
//------------------------------------------------------------------------------------------------------------------------//









//------------------------------------------------------------------------------------------------------------------------//
//*********************************************       void Loop        ***************************************************//
//------------------------------------------------------------------------------------------------------------------------//


void loop(void) {
 
  //------------- Blynk Connect ---------------//
  if (Blynk.connected())
  {
    Blynk.run();
    digitalWrite(D0, LOW);
    //Serial.println("loop Blynk run");
  } else {
    digitalWrite(D0, LOW);
    delay(50);
    digitalWrite(D0, HIGH);
    delay(50);

    //Serial.println("loop Blynk connecting");
  }
  timer.run();//ให้เวลาของ Blynk ทำงาน

  delay(50);


}//Loop




//--------------------------------------------------------------------------------------------------------

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

ESP8266 No.3


//-------------------------------------------------------------------------------------------------------------------------//

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#include <FS.h>
#include <DNSServer.h>
#include <ArduinoJson.h>
#include <ESP8266HTTPClient.h>
//----------------------------------------------------------

//----------------------------------------------------------
//Blynk------------
#include <BlynkSimpleEsp8266.h>
#define BLYNK_DEBUG
#define BLYNK_PRINT Serial
int blynkIsDownCount = 0;
char blynk_token[34] = "d1oD5jdMSXmujDw1xLng7f8bxOvdwkag";
BlynkTimer timer;

//***********สำหรับ Server local ที่แจกให้ เพิ่ม **** แค่ 2 บรรทัดนี้
char server[] = "oasiskit.com";
int port = 8080;



//------------------------------------------------------------------------------------------------------------------------//
#define D0 16 // ใช้ไฟ LED สีฟ้า ของบอร์ด MCU ESP8266 ให้มีสัญญาณไฟกระพริบ ตาม Code ที่เขียน 
#define D4 2 // ใช้เป็นปุ่มกด เพื่อเข้า AP Config ได้ตามความต้องการของผู้ใช้
//------------------------------------------------------------------------------------------------------------------------//

bool shouldSaveConfig1 = false;
void saveConfigCallback1 () {
  shouldSaveConfig1 = true;
  Serial.println("Should save  All Data config");
}
//-----------------------------------------------------------------------------------------------------------------------//

String IP;

//--------Blynk Control---------
BLYNK_WRITE(V1)
{
  int pinValue = param.asInt();
  if (pinValue == 1 ) {

  }
  if (pinValue == 0) {

  }
}


//------------------------------------------------------//


//------------------------------------------------------------------------------------------------------------------------//
//*********************************************       void setup        **************************************************//
//------------------------------------------------------------------------------------------------------------------------//

void setup() {

  //-------IO NODE MCU Esp8266-------//
  pinMode(D0, OUTPUT);      //กำหนดโหมดใช้งานให้กับขา D0 เป็นขา สัญญาณไฟ ในสภาวะต่างๆ
  pinMode(D4, INPUT_PULLUP);//กำหนดโหมดใช้งานให้กับขา D3 เป็นขา กดปุ่ม ค้าง เพื่อตั้งค่า AP config

  Serial.begin(115200);




  //-----------------------------------------------------------------------------------------------------------------------//
  //read configuration from FS json
  Serial.println("mounting  FS...");



  if (SPIFFS.begin()) {

    //---------------------------------------------------------------------------------//

    Serial.println("mounted Data file system");


    if (SPIFFS.exists("/config1.json")) {
      //file exists, reading and loading
      Serial.println("reading Data config file");
      File configFile1 = SPIFFS.open("/config1.json", "r");

      if (configFile1) {
        Serial.println("opened Data config file");
        size_t size = configFile1.size();
        // Allocate a buffer to store contents of the file.
        std::unique_ptr<char[]> buf1(new char[size]);

        configFile1.readBytes(buf1.get(), size);
        DynamicJsonBuffer jsonBuffer;
        JsonObject& json = jsonBuffer.parseObject(buf1.get());
        json.printTo(Serial);
        if (json.success()) {
          Serial.println("\nparsed  json");

          strcpy(blynk_token, json["blynk_token"]);


        } else {
          Serial.println("failed to load Data file json config");
        }
      }
    }
    //---------------------------------------------------------------------------------//



  } else {
    Serial.println("failed to mount FS");

  }
  //end read


  delay(1000);




  //-----------------------------------------------------------------------------------------------------------------------//

  WiFiManagerParameter custom_text0("<p> </p>");
  WiFiManagerParameter custom_textA("<label>A: Blynk Token</label>");
  WiFiManagerParameter custom_blynk_token("blynk_token", "blynk_token", blynk_token, 34);


  //WiFiManager
  //Local intialization. Once its business is done, there is no need to keep it around
  WiFiManager wifiManager;

  //set config save notify callback
  wifiManager.setSaveConfigCallback(saveConfigCallback1);

  wifiManager.addParameter(&custom_text0);
  wifiManager.addParameter(&custom_textA);
  wifiManager.addParameter(&custom_blynk_token);


  delay(1000);

  for (int i = 5; i > -1; i--) {  // นับเวลาถอยหลัง 5 วินาทีก่อนกดปุ่ม AP Config

    digitalWrite(D0, LOW);
    delay(500);
    digitalWrite(D0, HIGH);
    delay(500);
    Serial.print (String(i) + " ");





  }

  if (digitalRead(D4) == LOW) {
    digitalWrite(D0, LOW);
    Serial.println("Button Pressed");



    wifiManager.resetSettings();//ให้ล้างค่า SSID และ Password ที่เคยบันทึกไว้


    // wifiManager.autoConnect(); ใช้สร้างชื่อแอคเซสพอยต์อันโนมัติจาก ESP + ChipID

    if (!wifiManager.autoConnect("PIOT_NO.3")) {
      Serial.println("failed to connect and hit timeout");
      delay(3000);


      //reset and try again, or maybe put it to deep sleep
      ESP.reset();
      delay(5000);
    }

  }




  Serial.println(": WiFi Connected.......OK!)");

  strcpy(blynk_token, custom_blynk_token.getValue());
  delay(1000);

  if (shouldSaveConfig1) {
    //Serial.println("saving config");//แสดงข้อความใน Serial Monitor

    //------------------------------------------------------------------

    DynamicJsonBuffer jsonBuffer;
    JsonObject& json = jsonBuffer.createObject();

    //------------------------------------------------------------------
    Serial.println("saving blynk_token_ config");
    json["blynk_token"] = blynk_token;
    File configFile1 = SPIFFS.open("/config1.json", "w");

    //------------------------------------------------------------------


    if (!configFile1) {
      Serial.println("failed to open  config file for writing");

    }
    json.printTo(Serial);

    json.printTo(configFile1);
    configFile1.close();

    //-------------------------------------
  }
  delay(1000);
  //-----------------------------------------------------------------


  //-----------------------------------------------------------------------------------------------------------------------//
  Serial.println("-----------------------------------");
  Serial.println();
  Serial.print("local ip   : ");
  delay(100);
  Serial.println(WiFi.localIP());
  delay(100);
  Serial.print("gateway    :");
  delay(100);
  Serial.println(WiFi.gatewayIP());
  Serial.print("subnetMask :");
  delay(100);
  Serial.println(WiFi.subnetMask());
  Serial.print("SSID       :");
  delay(100);
  Serial.println(WiFi.SSID());
  Serial.print("Password   :");
  delay(100);
  Serial.println(WiFi.psk());
  //-----------------------------------------------------------------------------------------------------------------------//
  //Print เพื่อเชคว่าค่าที่บันทึกไว้ยังอยู่หรือไม่
  Serial.println("-----------------------------------");
  Serial.println("เชคว่าค่าที่บันทึกไว้ยังอยู่หรือไม่");
  Serial.println();


  IP = WiFi.localIP().toString();
  Serial.print("IP to String = ");
  Serial.println(IP);


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


  timer.setInterval(30000L, reconnecting);




  //-----------------------------------------------------------------------------------------------------------------------//





}

//------------------------------------------------------------------------------------------------------------------------//
//*********************************************   จบ  void setup        **************************************************//
//------------------------------------------------------------------------------------------------------------------------//









//------------------------------------------------------------------------------------------------------------------------//
//*********************************************       void Loop        ***************************************************//
//------------------------------------------------------------------------------------------------------------------------//


void loop(void) {
 
  //------------- Blynk Connect ---------------//
  if (Blynk.connected())
  {
    Blynk.run();
    digitalWrite(D0, LOW);
    //Serial.println("loop Blynk run");
  } else {
    digitalWrite(D0, LOW);
    delay(50);
    digitalWrite(D0, HIGH);
    delay(50);

    //Serial.println("loop Blynk connecting");
  }
  timer.run();//ให้เวลาของ Blynk ทำงาน

  delay(50);


}//Loop




//--------------------------------------------------------------------------------------------------------

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

ESP8266 No.4


//-------------------------------------------------------------------------------------------------------------------------//

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#include <FS.h>
#include <DNSServer.h>
#include <ArduinoJson.h>
#include <ESP8266HTTPClient.h>
//----------------------------------------------------------

//----------------------------------------------------------
//Blynk------------
#include <BlynkSimpleEsp8266.h>
#define BLYNK_DEBUG
#define BLYNK_PRINT Serial
int blynkIsDownCount = 0;

char blynk_token4[34] = "q-vcHFgpYufA7jdylMvbijtmr-uuyTPO";

char blynk_token1[34] = "xIYLjnGv11NaIH3AndH9jD6NPJq_7Pit";
char blynk_token2[34] = "tD8ycdc4b95k0vBT-fs3iQyZjR86TWVN";
char blynk_token3[34] = "d1oD5jdMSXmujDw1xLng7f8bxOvdwkag";
//-----เกียวกับ Bridge
WidgetBridge bridge1(V91);
WidgetBridge bridge2(V92);
WidgetBridge bridge3(V93);

//----------------------------------------------------------
BlynkTimer timer;

//***********สำหรับ Server local ที่แจกให้ เพิ่ม **** แค่ 2 บรรทัดนี้
char server[] = "oasiskit.com";
int port = 8080;



//------------------------------------------------------------------------------------------------------------------------//
#define D0 16 // ใช้ไฟ LED สีฟ้า ของบอร์ด MCU ESP8266 ให้มีสัญญาณไฟกระพริบ ตาม Code ที่เขียน 
#define D4 2 // ใช้เป็นปุ่มกด เพื่อเข้า AP Config ได้ตามความต้องการของผู้ใช้

// -------  โหลดไลบารี่ของจอ LCD มาใช้งาน โดยแบบนี้จะสามารถ Create Characterได้  --------------------------------------------------//

#include <LCD.h>                          // บรรทัดที่ 1 และ 2 สามารถสลับบรรทัดกันได้
#include <Wire.h>                         // บรรทัดที่ 1 และ 2 สามารถสลับบรรทัดกันได้
#include <LiquidCrystal_I2C.h>            //บรรทัดนี้ต้องอยู่ในบรรทัดที่ 3 เท่านั้น ถ้าไปอยู่บรรทัดที่ 1 และ 2 จะคอมไพล์ไม่ผ่าน
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //// ตั้งค่า Address ของอุปกรณ์จอ LCD ที่มีการเชื่อมต่อแบบ I2C



//------------------------------------------------------------------------------------------------------------------------//

bool shouldSaveConfig1 = false;
void saveConfigCallback1 () {
  shouldSaveConfig1 = true;
  Serial.println("Should save  All Data config");
}
//-----------------------------------------------------------------------------------------------------------------------//

String IP;


String Temp_11;
float Temp_12;
String Humid_11;
float Humid_12;


String Temp_21;
float Temp_22;
String Humid_21;
float Humid_22;



//--------Blynk Control---------
BLYNK_WRITE(V1)
{
  int pinValue = param.asInt();
  if (pinValue == 1 ) {
    bridge1.digitalWrite(2, LOW);
    bridge2.digitalWrite(2, LOW);
    bridge3.digitalWrite(2, LOW);
  }
  if (pinValue == 0) {
    bridge1.digitalWrite(2, HIGH);
    bridge2.digitalWrite(2, HIGH);
    bridge3.digitalWrite(2, HIGH);
  }
}


//------------------------------------------------------//


BLYNK_WRITE(V9)

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

  // lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("T1:");
  lcd.setCursor(3, 0);
  lcd.print(Temp_12);
 
}

BLYNK_WRITE(V10)

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

  // lcd.clear();
  lcd.setCursor(0, 1);
  lcd.print("H1:");
  lcd.setCursor(3, 1);
  lcd.print(Humid_12);
 
}



BLYNK_WRITE(V11)

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

  // lcd.clear();
  lcd.setCursor(0, 2);
  lcd.print("T2:");
  lcd.setCursor(3, 2);
  lcd.print(Temp_22);
 
}

BLYNK_WRITE(V12)

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

  // lcd.clear();
  lcd.setCursor(0, 3);
  lcd.print("H2:");
  lcd.setCursor(3, 3);
  lcd.print(Humid_22);
 
}


//------------------------------------------------------------------------------------------------------------------------//
//*********************************************       void setup        **************************************************//
//------------------------------------------------------------------------------------------------------------------------//

void setup() {

  //-------IO NODE MCU Esp8266-------//
  pinMode(D0, OUTPUT);      //กำหนดโหมดใช้งานให้กับขา D0 เป็นขา สัญญาณไฟ ในสภาวะต่างๆ
  pinMode(D4, INPUT_PULLUP);//กำหนดโหมดใช้งานให้กับขา D3 เป็นขา กดปุ่ม ค้าง เพื่อตั้งค่า AP config

  Serial.begin(115200);

  lcd.begin(20, 4);
  lcd.clear();


  //-----------------------------------------------------------------------------------------------------------------------//
  //read configuration from FS json
  Serial.println("mounting  FS...");



  if (SPIFFS.begin()) {

    //---------------------------------------------------------------------------------//

    Serial.println("mounted Data file system");


    if (SPIFFS.exists("/config1.json")) {
      //file exists, reading and loading
      Serial.println("reading Data config file");
      File configFile1 = SPIFFS.open("/config1.json", "r");

      if (configFile1) {
        Serial.println("opened Data config file");
        size_t size = configFile1.size();
        // Allocate a buffer to store contents of the file.
        std::unique_ptr<char[]> buf1(new char[size]);

        configFile1.readBytes(buf1.get(), size);
        DynamicJsonBuffer jsonBuffer;
        JsonObject& json = jsonBuffer.parseObject(buf1.get());
        json.printTo(Serial);
        if (json.success()) {
          Serial.println("\nparsed  json");

          strcpy(blynk_token4, json["blynk_token4"]);


        } else {
          Serial.println("failed to load Data file json config");
        }
      }
    }
    //---------------------------------------------------------------------------------//



  } else {
    Serial.println("failed to mount FS");

  }
  //end read


  delay(1000);




  //-----------------------------------------------------------------------------------------------------------------------//

  WiFiManagerParameter custom_text0("<p> </p>");
  WiFiManagerParameter custom_textA("<label>A: Blynk Token 4</label>");
  WiFiManagerParameter custom_blynk_token4("blynk_token4", "blynk_token4", blynk_token4, 34);


  //WiFiManager
  //Local intialization. Once its business is done, there is no need to keep it around
  WiFiManager wifiManager;

  //set config save notify callback
  wifiManager.setSaveConfigCallback(saveConfigCallback1);

  wifiManager.addParameter(&custom_text0);
  wifiManager.addParameter(&custom_textA);
  wifiManager.addParameter(&custom_blynk_token4);


  delay(1000);

  for (int i = 5; i > -1; i--) {  // นับเวลาถอยหลัง 5 วินาทีก่อนกดปุ่ม AP Config

    digitalWrite(D0, LOW);
    delay(500);
    digitalWrite(D0, HIGH);
    delay(500);
    Serial.print (String(i) + " ");





  }

  if (digitalRead(D4) == LOW) {
    digitalWrite(D0, LOW);
    Serial.println("Button Pressed");



    wifiManager.resetSettings();//ให้ล้างค่า SSID และ Password ที่เคยบันทึกไว้


    // wifiManager.autoConnect(); ใช้สร้างชื่อแอคเซสพอยต์อันโนมัติจาก ESP + ChipID

    if (!wifiManager.autoConnect("PIOT_NO.4")) {
      Serial.println("failed to connect and hit timeout");
      delay(3000);


      //reset and try again, or maybe put it to deep sleep
      ESP.reset();
      delay(5000);
    }

  }




  Serial.println(": WiFi Connected.......OK!)");

  strcpy(blynk_token4, custom_blynk_token4.getValue());
  delay(1000);

  if (shouldSaveConfig1) {
    //Serial.println("saving config");//แสดงข้อความใน Serial Monitor

    //------------------------------------------------------------------

    DynamicJsonBuffer jsonBuffer;
    JsonObject& json = jsonBuffer.createObject();

    //------------------------------------------------------------------
    Serial.println("saving blynk_token4_ config");
    json["blynk_token4"] = blynk_token4;
    File configFile1 = SPIFFS.open("/config1.json", "w");

    //------------------------------------------------------------------


    if (!configFile1) {
      Serial.println("failed to open  config file for writing");

    }
    json.printTo(Serial);

    json.printTo(configFile1);
    configFile1.close();

    //-------------------------------------
  }
  delay(1000);
  //-----------------------------------------------------------------


  //-----------------------------------------------------------------------------------------------------------------------//
  Serial.println("-----------------------------------");
  Serial.println();
  Serial.print("local ip   : ");
  delay(100);
  Serial.println(WiFi.localIP());
  delay(100);
  Serial.print("gateway    :");
  delay(100);
  Serial.println(WiFi.gatewayIP());
  Serial.print("subnetMask :");
  delay(100);
  Serial.println(WiFi.subnetMask());
  Serial.print("SSID       :");
  delay(100);
  Serial.println(WiFi.SSID());
  Serial.print("Password   :");
  delay(100);
  Serial.println(WiFi.psk());
  //-----------------------------------------------------------------------------------------------------------------------//
  //Print เพื่อเชคว่าค่าที่บันทึกไว้ยังอยู่หรือไม่
  Serial.println("-----------------------------------");
  Serial.println("เชคว่าค่าที่บันทึกไว้ยังอยู่หรือไม่");
  Serial.println();


  IP = WiFi.localIP().toString();
  Serial.print("IP to String = ");
  Serial.println(IP);


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


  timer.setInterval(30000L, reconnecting);




  //-----------------------------------------------------------------------------------------------------------------------//





}

//------------------------------------------------------------------------------------------------------------------------//
//*********************************************   จบ  void setup        **************************************************//
//------------------------------------------------------------------------------------------------------------------------//









//------------------------------------------------------------------------------------------------------------------------//
//*********************************************       void Loop        ***************************************************//
//------------------------------------------------------------------------------------------------------------------------//


void loop(void) {





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

    bridge1.setAuthToken(blynk_token1);
    bridge2.setAuthToken(blynk_token2);
    bridge3.setAuthToken(blynk_token3);


    //Serial.println("loop Blynk run");
  } else {
    digitalWrite(D0, LOW);
    delay(50);
    digitalWrite(D0, HIGH);
    delay(50);

    //Serial.println("loop Blynk connecting");
  }
  timer.run();//ให้เวลาของ Blynk ทำงาน

  delay(50);


}//Loop




//--------------------------------------------------------------------------------------------------------

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

สำหรับแนวคิดนี้ จะแสดงรายละเอียดตาม Diagram ที่ให้ไว้

จาก Diagram อธิบายได้ดังนี้

  1. Esp8266
    • Number 1 ติดตั้งบริเวณพื้นที่ A
    • Number 2 ติดตั้งบริเวณพื้นที่ B
    • Number 3 ติดตั้งบริเวณพื้นที่ C
    • Number 1 ,2 และ 3 เป็นตัวรับค่าข้อมูลจาก Sensor(ที่ติดตั้งเอาไว้ในแต่ละตัว) และส่งข้อมูลไปยัง Esp8266 Number 4 ผ่าน Widget Bridge ของ App Blynk รูปภาพ1
    • Number 4 ติดตั้งบริเวณพื้นที่ D เป็นตัวรับข้อมูลจาก Esp8266 Number 1 ,2 และ 3 ผ่าน Widget Bridge ของ App Blynk รูปภาพ1 และส่งข้อมูลไปยัง Program computer ที่เขียนรองรับข้อมูล จาก Esp8266 Number 4 มาแสดงค่าออกทางจอ ผ่านการสื่อสารแบบ Serial (เขียนด้วย VB2015)

ทั้งนี้แต่ละพื้นที่จะมี WiFi Internet เข้ามา และให้ esp8266 ที่ติดตั้งบริเวณนั้น ได้ทำการเชื่อมต่ออินเทอร์เน็ต โดยผ่านชุด WiFi Manager สำหรับการตั้งค่า ssid และ password

***สำหรับ vb 2015 ถ้ามองให้ดี ก็จะเหมือนกับหน้าต่าง Serial Monitor ของ arduino ide เพียงแต่เพิ่มกราฟฟิก และค่าสำคัญต่างๆเข้าไปเท่านั้นเอง

ส่วนค่าต่างๆ ที่ ESP8266 1,2 และ 3 รับเข้ามา ผมจะสมมุติ โดยการ ใช้ Code การสุ่ม ตัว 0-261 และส่ง ข้อมูลตัวเลขเหล่านี้ ไปยัง ESP8266 ตัวที่ 4


ของจริงจะไม่เร็วขนาดนี้นะครับ

1 Like

ต่อไปจะเป็น Code : update 14:16 16/17/2563
Esp8266 ตัวที่ 1

 //-------------------------------------------------------------------------------------------------------------------------//

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#include <FS.h>
#include <DNSServer.h>
#include <ArduinoJson.h>
#include <ESP8266HTTPClient.h>
//----------------------------------------------------------

//----------------------------------------------------------
//Blynk------------
#include <BlynkSimpleEsp8266.h>
#define BLYNK_DEBUG
#define BLYNK_PRINT Serial
int blynkIsDownCount = 0;

char blynk_token1[34] = "xIYLjnGv11NaIH3AndH9jD6NPJq_7Pit";


char blynk_token2[34] = "tD8ycdc4b95k0vBT-fs3iQyZjR86TWVN";
char blynk_token3[34] = "d1oD5jdMSXmujDw1xLng7f8bxOvdwkag";
char blynk_token4[34] = "q-vcHFgpYufA7jdylMvbijtmr-uuyTPO";
//-----เกียวกับ Bridge
WidgetBridge bridge2(V92);
WidgetBridge bridge3(V93);
WidgetBridge bridge4(V94);

//----------------------------------------------------------
BlynkTimer timer;

//***********สำหรับ Server local ที่แจกให้ เพิ่ม **** แค่ 2 บรรทัดนี้
char server[] = "oasiskit.com";
int port = 8080;



//------------------------------------------------------------------------------------------------------------------------//
#define D0 16 // ใช้ไฟ LED สีฟ้า ของบอร์ด MCU ESP8266 ให้มีสัญญาณไฟกระพริบ ตาม Code ที่เขียน 
#define D4 2 // ใช้เป็นปุ่มกด เพื่อเข้า AP Config ได้ตามความต้องการของผู้ใช้
//------------------------------------------------------------------------------------------------------------------------//

bool shouldSaveConfig1 = false;
void saveConfigCallback1 () {
  shouldSaveConfig1 = true;
  Serial.println("Should save  All Data config");
}
//-----------------------------------------------------------------------------------------------------------------------//

String IP;

//#include <DHT.h>
//#define DHTTYPE1 DHT22
//#define DHTPIN1  D3
//DHT dht1(DHTPIN1, DHTTYPE1);
//
//float t1 ;
//float h1 ;
//
//
//int count_th = 0;

long PhaseA;
long PhaseB;
long PhaseC;

//--------Blynk Control---------
BLYNK_WRITE(V1)
{
  int pinValue = param.asInt();
  if (pinValue == 1 ) {
    bridge2.digitalWrite(2, LOW);
    bridge3.digitalWrite(2, LOW);
    bridge4.digitalWrite(2, LOW);
  }
  if (pinValue == 0) {
    bridge2.digitalWrite(2, HIGH);
    bridge3.digitalWrite(2, HIGH);
    bridge4.digitalWrite(2, HIGH);
  }
}


//------------------------------------------------------//


//------------------------------------------------------------------------------------------------------------------------//
//*********************************************       void setup        **************************************************//
//------------------------------------------------------------------------------------------------------------------------//

void setup() {

  //-------IO NODE MCU Esp8266-------//
  pinMode(D0, OUTPUT);      //กำหนดโหมดใช้งานให้กับขา D0 เป็นขา สัญญาณไฟ ในสภาวะต่างๆ
  pinMode(D4, INPUT_PULLUP);//กำหนดโหมดใช้งานให้กับขา D3 เป็นขา กดปุ่ม ค้าง เพื่อตั้งค่า AP config

  Serial.begin(115200);
//  dht1.begin();



  //-----------------------------------------------------------------------------------------------------------------------//
  //read configuration from FS json
  Serial.println("mounting  FS...");



  if (SPIFFS.begin()) {

    //---------------------------------------------------------------------------------//

    Serial.println("mounted Data file system");


    if (SPIFFS.exists("/config1.json")) {
      //file exists, reading and loading
      Serial.println("reading Data config file");
      File configFile1 = SPIFFS.open("/config1.json", "r");

      if (configFile1) {
        Serial.println("opened Data config file");
        size_t size = configFile1.size();
        // Allocate a buffer to store contents of the file.
        std::unique_ptr<char[]> buf1(new char[size]);

        configFile1.readBytes(buf1.get(), size);
        DynamicJsonBuffer jsonBuffer;
        JsonObject& json = jsonBuffer.parseObject(buf1.get());
        json.printTo(Serial);
        if (json.success()) {
          Serial.println("\nparsed  json");

          strcpy(blynk_token1, json["blynk_token1"]);


        } else {
          Serial.println("failed to load Data file json config");
        }
      }
    }
    //---------------------------------------------------------------------------------//



  } else {
    Serial.println("failed to mount FS");

  }
  //end read


  delay(1000);




  //-----------------------------------------------------------------------------------------------------------------------//

  WiFiManagerParameter custom_text0("<p> </p>");
  WiFiManagerParameter custom_textA("<label>A: Blynk Token 1</label>");
  WiFiManagerParameter custom_blynk_token1("blynk_token1", "blynk_token1", blynk_token1, 34);


  //WiFiManager
  //Local intialization. Once its business is done, there is no need to keep it around
  WiFiManager wifiManager;

  //set config save notify callback
  wifiManager.setSaveConfigCallback(saveConfigCallback1);

  wifiManager.addParameter(&custom_text0);
  wifiManager.addParameter(&custom_textA);
  wifiManager.addParameter(&custom_blynk_token1);


  delay(1000);

  for (int i = 5; i > -1; i--) {  // นับเวลาถอยหลัง 5 วินาทีก่อนกดปุ่ม AP Config

    digitalWrite(D0, LOW);
    delay(500);
    digitalWrite(D0, HIGH);
    delay(500);
    Serial.print (String(i) + " ");





  }

  if (digitalRead(D4) == LOW) {
    digitalWrite(D0, LOW);
    Serial.println("Button Pressed");



    wifiManager.resetSettings();//ให้ล้างค่า SSID และ Password ที่เคยบันทึกไว้


    // wifiManager.autoConnect(); ใช้สร้างชื่อแอคเซสพอยต์อันโนมัติจาก ESP + ChipID

    if (!wifiManager.autoConnect("PIOT_NO.1")) {
      Serial.println("failed to connect and hit timeout");
      delay(3000);


      //reset and try again, or maybe put it to deep sleep
      ESP.reset();
      delay(5000);
    }

  }




  Serial.println(": WiFi Connected.......OK!)");

  strcpy(blynk_token1, custom_blynk_token1.getValue());
  delay(1000);

  if (shouldSaveConfig1) {
    //Serial.println("saving config");//แสดงข้อความใน Serial Monitor

    //------------------------------------------------------------------

    DynamicJsonBuffer jsonBuffer;
    JsonObject& json = jsonBuffer.createObject();

    //------------------------------------------------------------------
    Serial.println("saving blynk_token1_ config");
    json["blynk_token1"] = blynk_token1;
    File configFile1 = SPIFFS.open("/config1.json", "w");

    //------------------------------------------------------------------


    if (!configFile1) {
      Serial.println("failed to open  config file for writing");

    }
    json.printTo(Serial);

    json.printTo(configFile1);
    configFile1.close();

    //-------------------------------------
  }
  delay(1000);
  //-----------------------------------------------------------------


  //-----------------------------------------------------------------------------------------------------------------------//
  Serial.println("-----------------------------------");
  Serial.println();
  Serial.print("local ip   : ");
  delay(100);
  Serial.println(WiFi.localIP());
  delay(100);
  Serial.print("gateway    :");
  delay(100);
  Serial.println(WiFi.gatewayIP());
  Serial.print("subnetMask :");
  delay(100);
  Serial.println(WiFi.subnetMask());
  Serial.print("SSID       :");
  delay(100);
  Serial.println(WiFi.SSID());
  Serial.print("Password   :");
  delay(100);
  Serial.println(WiFi.psk());
  //-----------------------------------------------------------------------------------------------------------------------//
  //Print เพื่อเชคว่าค่าที่บันทึกไว้ยังอยู่หรือไม่
  Serial.println("-----------------------------------");
  Serial.println("เชคว่าค่าที่บันทึกไว้ยังอยู่หรือไม่");
  Serial.println();


  IP = WiFi.localIP().toString();
  Serial.print("IP to String = ");
  Serial.println(IP);


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


  timer.setInterval(30000L, reconnecting);




  //-----------------------------------------------------------------------------------------------------------------------//





}

//------------------------------------------------------------------------------------------------------------------------//
//*********************************************   จบ  void setup        **************************************************//
//------------------------------------------------------------------------------------------------------------------------//









//------------------------------------------------------------------------------------------------------------------------//
//*********************************************       void Loop        ***************************************************//
//------------------------------------------------------------------------------------------------------------------------//


void loop() {

  PhaseA = random(261);//สมมุติให้เป็นแรงดัน PhaseA
  Blynk.virtualWrite(V9, PhaseA);
  bridge4.virtualWrite(V9, PhaseA);
  PhaseB = random(261);//สมมุติให้เป็นแรงดัน PhaseB
  Blynk.virtualWrite(V10, PhaseB);
  bridge4.virtualWrite(V10, PhaseB);
  PhaseC = random(261);//สมมุติให้เป็นแรงดัน PhaseC
  Blynk.virtualWrite(V11, PhaseC);
  bridge4.virtualWrite(V11, PhaseC);




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

    bridge2.setAuthToken(blynk_token2);
    bridge3.setAuthToken(blynk_token3);
    bridge4.setAuthToken(blynk_token4);

    //Serial.println("loop Blynk run");
  } else {
    digitalWrite(D0, LOW);
    delay(50);
    digitalWrite(D0, HIGH);
    delay(50);

    //Serial.println("loop Blynk connecting");
  }
  timer.run();//ให้เวลาของ Blynk ทำงาน

  delay(1000);

//  count_th++;
//
//  if ( count_th == 15)
//
//  {
//    checkth1();
//  }
//
//
//  if ( count_th == 16)
//
//  {
//    count_th = 0;
//  }

}//void loop



//--------------------------------------------------------------------------------------------------------

//void checkth1() {
//
//  t1 = dht1.readTemperature();
//  h1 = dht1.readHumidity();
//
//  Blynk.virtualWrite(V9, t1);
//  Blynk.virtualWrite(V10, h1);
//
//  bridge4.virtualWrite(V9, t1);
//  bridge4.virtualWrite(V10, h1);
//
//
//  delay(20);
//
//}

//--------------------------------------------------------------------------------------------------------


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

Esp8266 ตัวที่ 2


//-------------------------------------------------------------------------------------------------------------------------//

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#include <FS.h>
#include <DNSServer.h>
#include <ArduinoJson.h>
#include <ESP8266HTTPClient.h>
//----------------------------------------------------------

//----------------------------------------------------------
//Blynk------------
#include <BlynkSimpleEsp8266.h>
#define BLYNK_DEBUG
#define BLYNK_PRINT Serial
int blynkIsDownCount = 0;
char blynk_token2[34] = "tD8ycdc4b95k0vBT-fs3iQyZjR86TWVN";

char blynk_token1[34] = "xIYLjnGv11NaIH3AndH9jD6NPJq_7Pit";
char blynk_token3[34] = "d1oD5jdMSXmujDw1xLng7f8bxOvdwkag";
char blynk_token4[34] = "q-vcHFgpYufA7jdylMvbijtmr-uuyTPO";

//-----เกียวกับ Bridge
WidgetBridge bridge1(V91);
WidgetBridge bridge3(V93);
WidgetBridge bridge4(V94);

//----------------------------------------------------------
BlynkTimer timer;

//***********สำหรับ Server local ที่แจกให้ เพิ่ม **** แค่ 2 บรรทัดนี้
char server[] = "oasiskit.com";
int port = 8080;



//------------------------------------------------------------------------------------------------------------------------//
#define D0 16 // ใช้ไฟ LED สีฟ้า ของบอร์ด MCU ESP8266 ให้มีสัญญาณไฟกระพริบ ตาม Code ที่เขียน 
#define D4 2 // ใช้เป็นปุ่มกด เพื่อเข้า AP Config ได้ตามความต้องการของผู้ใช้
//------------------------------------------------------------------------------------------------------------------------//

bool shouldSaveConfig1 = false;
void saveConfigCallback1 () {
  shouldSaveConfig1 = true;
  Serial.println("Should save  All Data config");
}
//-----------------------------------------------------------------------------------------------------------------------//

String IP;

//สุ่มตัวเลขแล้วส่งค่า
long PhaseA;
long PhaseB;
long PhaseC;


//--------Blynk Control---------
BLYNK_WRITE(V1)
{
  int pinValue = param.asInt();
  if (pinValue == 1 ) {
    bridge1.digitalWrite(2, LOW);
    bridge3.digitalWrite(2, LOW);
    bridge4.digitalWrite(2, LOW);
  }
  if (pinValue == 0) {
    bridge1.digitalWrite(2, HIGH);
    bridge3.digitalWrite(2, HIGH);
    bridge4.digitalWrite(2, HIGH);
  }
}


//------------------------------------------------------//


//------------------------------------------------------------------------------------------------------------------------//
//*********************************************       void setup        **************************************************//
//------------------------------------------------------------------------------------------------------------------------//

void setup() {

  //-------IO NODE MCU Esp8266-------//
  pinMode(D0, OUTPUT);      //กำหนดโหมดใช้งานให้กับขา D0 เป็นขา สัญญาณไฟ ในสภาวะต่างๆ
  pinMode(D4, INPUT_PULLUP);//กำหนดโหมดใช้งานให้กับขา D3 เป็นขา กดปุ่ม ค้าง เพื่อตั้งค่า AP config

  Serial.begin(115200);




  //-----------------------------------------------------------------------------------------------------------------------//
  //read configuration from FS json
  Serial.println("mounting  FS...");



  if (SPIFFS.begin()) {

    //---------------------------------------------------------------------------------//

    Serial.println("mounted Data file system");


    if (SPIFFS.exists("/config1.json")) {
      //file exists, reading and loading
      Serial.println("reading Data config file");
      File configFile1 = SPIFFS.open("/config1.json", "r");

      if (configFile1) {
        Serial.println("opened Data config file");
        size_t size = configFile1.size();
        // Allocate a buffer to store contents of the file.
        std::unique_ptr<char[]> buf1(new char[size]);

        configFile1.readBytes(buf1.get(), size);
        DynamicJsonBuffer jsonBuffer;
        JsonObject& json = jsonBuffer.parseObject(buf1.get());
        json.printTo(Serial);
        if (json.success()) {
          Serial.println("\nparsed  json");

          strcpy(blynk_token2, json["blynk_token2"]);


        } else {
          Serial.println("failed to load Data file json config");
        }
      }
    }
    //---------------------------------------------------------------------------------//



  } else {
    Serial.println("failed to mount FS");

  }
  //end read


  delay(1000);




  //-----------------------------------------------------------------------------------------------------------------------//

  WiFiManagerParameter custom_text0("<p> </p>");
  WiFiManagerParameter custom_textA("<label>A: Blynk Token2</label>");
  WiFiManagerParameter custom_blynk_token2("blynk_token2", "blynk_token2", blynk_token2, 34);


  //WiFiManager
  //Local intialization. Once its business is done, there is no need to keep it around
  WiFiManager wifiManager;

  //set config save notify callback
  wifiManager.setSaveConfigCallback(saveConfigCallback1);

  wifiManager.addParameter(&custom_text0);
  wifiManager.addParameter(&custom_textA);
  wifiManager.addParameter(&custom_blynk_token2);


  delay(1000);

  for (int i = 5; i > -1; i--) {  // นับเวลาถอยหลัง 5 วินาทีก่อนกดปุ่ม AP Config

    digitalWrite(D0, LOW);
    delay(500);
    digitalWrite(D0, HIGH);
    delay(500);
    Serial.print (String(i) + " ");





  }

  if (digitalRead(D4) == LOW) {
    digitalWrite(D0, LOW);
    Serial.println("Button Pressed");



    wifiManager.resetSettings();//ให้ล้างค่า SSID และ Password ที่เคยบันทึกไว้


    // wifiManager.autoConnect(); ใช้สร้างชื่อแอคเซสพอยต์อันโนมัติจาก ESP + ChipID

    if (!wifiManager.autoConnect("PIOT_NO.2")) {
      Serial.println("failed to connect and hit timeout");
      delay(3000);


      //reset and try again, or maybe put it to deep sleep
      ESP.reset();
      delay(5000);
    }

  }




  Serial.println(": WiFi Connected.......OK!)");

  strcpy(blynk_token2, custom_blynk_token2.getValue());
  delay(1000);

  if (shouldSaveConfig1) {
    //Serial.println("saving config");//แสดงข้อความใน Serial Monitor

    //------------------------------------------------------------------

    DynamicJsonBuffer jsonBuffer;
    JsonObject& json = jsonBuffer.createObject();

    //------------------------------------------------------------------
    Serial.println("saving blynk_token2_ config");
    json["blynk_token2"] = blynk_token2;
    File configFile1 = SPIFFS.open("/config1.json", "w");

    //------------------------------------------------------------------


    if (!configFile1) {
      Serial.println("failed to open  config file for writing");

    }
    json.printTo(Serial);

    json.printTo(configFile1);
    configFile1.close();

    //-------------------------------------
  }
  delay(1000);
  //-----------------------------------------------------------------


  //-----------------------------------------------------------------------------------------------------------------------//
  Serial.println("-----------------------------------");
  Serial.println();
  Serial.print("local ip   : ");
  delay(100);
  Serial.println(WiFi.localIP());
  delay(100);
  Serial.print("gateway    :");
  delay(100);
  Serial.println(WiFi.gatewayIP());
  Serial.print("subnetMask :");
  delay(100);
  Serial.println(WiFi.subnetMask());
  Serial.print("SSID       :");
  delay(100);
  Serial.println(WiFi.SSID());
  Serial.print("Password   :");
  delay(100);
  Serial.println(WiFi.psk());
  //-----------------------------------------------------------------------------------------------------------------------//
  //Print เพื่อเชคว่าค่าที่บันทึกไว้ยังอยู่หรือไม่
  Serial.println("-----------------------------------");
  Serial.println("เชคว่าค่าที่บันทึกไว้ยังอยู่หรือไม่");
  Serial.println();


  IP = WiFi.localIP().toString();
  Serial.print("IP to String = ");
  Serial.println(IP);


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


  timer.setInterval(30000L, reconnecting);




  //-----------------------------------------------------------------------------------------------------------------------//





}

//------------------------------------------------------------------------------------------------------------------------//
//*********************************************   จบ  void setup        **************************************************//
//------------------------------------------------------------------------------------------------------------------------//









//------------------------------------------------------------------------------------------------------------------------//
//*********************************************       void Loop        ***************************************************//
//------------------------------------------------------------------------------------------------------------------------//


void loop(void) {

  PhaseA = random(261);//สมมุติให้เป็นแรงดัน PhaseA
  Blynk.virtualWrite(V12, PhaseA);
  bridge4.virtualWrite(V12, PhaseA);
  PhaseB = random(261);//สมมุติให้เป็นแรงดัน PhaseB
  Blynk.virtualWrite(V13, PhaseB);
  bridge4.virtualWrite(V13, PhaseB);
  PhaseC = random(261);//สมมุติให้เป็นแรงดัน PhaseC
  Blynk.virtualWrite(V14, PhaseC);
  bridge4.virtualWrite(V14, PhaseC);

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

    bridge1.setAuthToken(blynk_token1);
    bridge3.setAuthToken(blynk_token3);
    bridge4.setAuthToken(blynk_token4);

  } else {
    digitalWrite(D0, LOW);
    delay(50);
    digitalWrite(D0, HIGH);
    delay(50);

    //Serial.println("loop Blynk connecting");
  }
  timer.run();//ให้เวลาของ Blynk ทำงาน

   delay (1000);
   
}//Loop




//--------------------------------------------------------------------------------------------------------

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

Esp8266 ตัวที่ 3


//-------------------------------------------------------------------------------------------------------------------------//

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#include <FS.h>
#include <DNSServer.h>
#include <ArduinoJson.h>
#include <ESP8266HTTPClient.h>
//----------------------------------------------------------

//----------------------------------------------------------
//Blynk------------
#include <BlynkSimpleEsp8266.h>
#define BLYNK_DEBUG
#define BLYNK_PRINT Serial
int blynkIsDownCount = 0;
char blynk_token3[34] = "d1oD5jdMSXmujDw1xLng7f8bxOvdwkag";

char blynk_token1[34] = "xIYLjnGv11NaIH3AndH9jD6NPJq_7Pit";
char blynk_token2[34] = "tD8ycdc4b95k0vBT-fs3iQyZjR86TWVN";
char blynk_token4[34] = "q-vcHFgpYufA7jdylMvbijtmr-uuyTPO";
//-----เกียวกับ Bridge
WidgetBridge bridge1(V91);
WidgetBridge bridge2(V92);
WidgetBridge bridge4(V94);

//----------------------------------------------------------
BlynkTimer timer;

//***********สำหรับ Server local ที่แจกให้ เพิ่ม **** แค่ 2 บรรทัดนี้
char server[] = "oasiskit.com";
int port = 8080;



//------------------------------------------------------------------------------------------------------------------------//
#define D0 16 // ใช้ไฟ LED สีฟ้า ของบอร์ด MCU ESP8266 ให้มีสัญญาณไฟกระพริบ ตาม Code ที่เขียน 
#define D4 2 // ใช้เป็นปุ่มกด เพื่อเข้า AP Config ได้ตามความต้องการของผู้ใช้
//------------------------------------------------------------------------------------------------------------------------//

bool shouldSaveConfig1 = false;
void saveConfigCallback1 () {
  shouldSaveConfig1 = true;
  Serial.println("Should save  All Data config");
}
//-----------------------------------------------------------------------------------------------------------------------//

String IP;

//#include <DHT.h>
//#define DHTTYPE2 DHT22
//#define DHTPIN2  D3
//DHT dht2(DHTPIN2, DHTTYPE2);
//
//float t2 ;
//float h2 ;
//
//
//int count_th = 0;

long PhaseA;
long PhaseB;
long PhaseC;

//--------Blynk Control---------
BLYNK_WRITE(V1)
{
  int pinValue = param.asInt();
  if (pinValue == 1 ) {
    bridge1.digitalWrite(2, LOW);
    bridge2.digitalWrite(2, LOW);
    bridge4.digitalWrite(2, LOW);
  }
  if (pinValue == 0) {
    bridge1.digitalWrite(2, HIGH);
    bridge2.digitalWrite(2, HIGH);
    bridge4.digitalWrite(2, HIGH);
  }
}


//------------------------------------------------------//


//------------------------------------------------------------------------------------------------------------------------//
//*********************************************       void setup        **************************************************//
//------------------------------------------------------------------------------------------------------------------------//

void setup() {

  //-------IO NODE MCU Esp8266-------//
  pinMode(D0, OUTPUT);      //กำหนดโหมดใช้งานให้กับขา D0 เป็นขา สัญญาณไฟ ในสภาวะต่างๆ
  pinMode(D4, INPUT_PULLUP);//กำหนดโหมดใช้งานให้กับขา D3 เป็นขา กดปุ่ม ค้าง เพื่อตั้งค่า AP config

  Serial.begin(115200);
  //  dht2.begin();



  //-----------------------------------------------------------------------------------------------------------------------//
  //read configuration from FS json
  Serial.println("mounting  FS...");



  if (SPIFFS.begin()) {

    //---------------------------------------------------------------------------------//

    Serial.println("mounted Data file system");


    if (SPIFFS.exists("/config1.json")) {
      //file exists, reading and loading
      Serial.println("reading Data config file");
      File configFile1 = SPIFFS.open("/config1.json", "r");

      if (configFile1) {
        Serial.println("opened Data config file");
        size_t size = configFile1.size();
        // Allocate a buffer to store contents of the file.
        std::unique_ptr<char[]> buf1(new char[size]);

        configFile1.readBytes(buf1.get(), size);
        DynamicJsonBuffer jsonBuffer;
        JsonObject& json = jsonBuffer.parseObject(buf1.get());
        json.printTo(Serial);
        if (json.success()) {
          Serial.println("\nparsed  json");

          strcpy(blynk_token3, json["blynk_token3"]);


        } else {
          Serial.println("failed to load Data file json config");
        }
      }
    }
    //---------------------------------------------------------------------------------//



  } else {
    Serial.println("failed to mount FS");

  }
  //end read


  delay(1000);




  //-----------------------------------------------------------------------------------------------------------------------//

  WiFiManagerParameter custom_text0("<p> </p>");
  WiFiManagerParameter custom_textA("<label>A: Blynk Token3</label>");
  WiFiManagerParameter custom_blynk_token3("blynk_token3", "blynk_token3", blynk_token3, 34);


  //WiFiManager
  //Local intialization. Once its business is done, there is no need to keep it around
  WiFiManager wifiManager;

  //set config save notify callback
  wifiManager.setSaveConfigCallback(saveConfigCallback1);

  wifiManager.addParameter(&custom_text0);
  wifiManager.addParameter(&custom_textA);
  wifiManager.addParameter(&custom_blynk_token3);


  delay(1000);

  for (int i = 5; i > -1; i--) {  // นับเวลาถอยหลัง 5 วินาทีก่อนกดปุ่ม AP Config

    digitalWrite(D0, LOW);
    delay(500);
    digitalWrite(D0, HIGH);
    delay(500);
    Serial.print (String(i) + " ");





  }

  if (digitalRead(D4) == LOW) {
    digitalWrite(D0, LOW);
    Serial.println("Button Pressed");



    wifiManager.resetSettings();//ให้ล้างค่า SSID และ Password ที่เคยบันทึกไว้


    // wifiManager.autoConnect(); ใช้สร้างชื่อแอคเซสพอยต์อันโนมัติจาก ESP + ChipID

    if (!wifiManager.autoConnect("PIOT_NO.3")) {
      Serial.println("failed to connect and hit timeout");
      delay(3000);


      //reset and try again, or maybe put it to deep sleep
      ESP.reset();
      delay(5000);
    }

  }




  Serial.println(": WiFi Connected.......OK!)");

  strcpy(blynk_token3, custom_blynk_token3.getValue());
  delay(1000);

  if (shouldSaveConfig1) {
    //Serial.println("saving config");//แสดงข้อความใน Serial Monitor

    //------------------------------------------------------------------

    DynamicJsonBuffer jsonBuffer;
    JsonObject& json = jsonBuffer.createObject();

    //------------------------------------------------------------------
    Serial.println("saving blynk_token3_ config");
    json["blynk_token3"] = blynk_token3;
    File configFile1 = SPIFFS.open("/config1.json", "w");

    //------------------------------------------------------------------


    if (!configFile1) {
      Serial.println("failed to open  config file for writing");

    }
    json.printTo(Serial);

    json.printTo(configFile1);
    configFile1.close();

    //-------------------------------------
  }
  delay(1000);
  //-----------------------------------------------------------------


  //-----------------------------------------------------------------------------------------------------------------------//
  Serial.println("-----------------------------------");
  Serial.println();
  Serial.print("local ip   : ");
  delay(100);
  Serial.println(WiFi.localIP());
  delay(100);
  Serial.print("gateway    :");
  delay(100);
  Serial.println(WiFi.gatewayIP());
  Serial.print("subnetMask :");
  delay(100);
  Serial.println(WiFi.subnetMask());
  Serial.print("SSID       :");
  delay(100);
  Serial.println(WiFi.SSID());
  Serial.print("Password   :");
  delay(100);
  Serial.println(WiFi.psk());
  //-----------------------------------------------------------------------------------------------------------------------//
  //Print เพื่อเชคว่าค่าที่บันทึกไว้ยังอยู่หรือไม่
  Serial.println("-----------------------------------");
  Serial.println("เชคว่าค่าที่บันทึกไว้ยังอยู่หรือไม่");
  Serial.println();


  IP = WiFi.localIP().toString();
  Serial.print("IP to String = ");
  Serial.println(IP);


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


  timer.setInterval(30000L, reconnecting);




  //-----------------------------------------------------------------------------------------------------------------------//





}

//------------------------------------------------------------------------------------------------------------------------//
//*********************************************   จบ  void setup        **************************************************//
//------------------------------------------------------------------------------------------------------------------------//









//------------------------------------------------------------------------------------------------------------------------//
//*********************************************       void Loop        ***************************************************//
//------------------------------------------------------------------------------------------------------------------------//


void loop(void) {

  PhaseA = random(261);//สมมุติให้เป็นแรงดัน PhaseA
  Blynk.virtualWrite(V15, PhaseA);
  bridge4.virtualWrite(V15, PhaseA);
  PhaseB = random(261);//สมมุติให้เป็นแรงดัน PhaseB
  Blynk.virtualWrite(V16, PhaseB);
  bridge4.virtualWrite(V16, PhaseB);
  PhaseC = random(261);//สมมุติให้เป็นแรงดัน PhaseC
  Blynk.virtualWrite(V17, PhaseC);
  bridge4.virtualWrite(V17, PhaseC);




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

    bridge1.setAuthToken(blynk_token1);
    bridge2.setAuthToken(blynk_token2);
    bridge4.setAuthToken(blynk_token4);

  } else {
    digitalWrite(D0, LOW);
    delay(50);
    digitalWrite(D0, HIGH);
    delay(50);

    //Serial.println("loop Blynk connecting");
  }
  timer.run();//ให้เวลาของ Blynk ทำงาน

  delay(1000);

  //  count_th++;
  //
  //
  //  if ( count_th == 20)
  //
  //  {
  //    checkth2();
  //  }
  //
  //  if ( count_th == 21)
  //
  //  {
  //    count_th = 0;
  //  }

}//void loop


//--------------------------------------------------------------------------------------------------------

//void checkth2() {
//
//  t2 = dht2.readTemperature();
//  h2 = dht2.readHumidity();
//
//  Blynk.virtualWrite(V11, t2);
//  Blynk.virtualWrite(V12, h2);
//
//  bridge4.virtualWrite(V11, t2);
//  bridge4.virtualWrite(V12, h2);
//
//
//  delay(20);
//
//}



//--------------------------------------------------------------------------------------------------------

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

Esp8266 ตัวที่ 4 ตัวนี้ต่อ LCD 2004 I2C 1 ตัว เพื่อแสดงค่า ที่รับมาจากตัวที่ 1 ,2 และ 3 ด้วย (ถ้าไม่ใช้ก็ตัดออก)


//-------------------------------------------------------------------------------------------------------------------------//

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#include <FS.h>
#include <DNSServer.h>
#include <ArduinoJson.h>
#include <ESP8266HTTPClient.h>
//----------------------------------------------------------

//----------------------------------------------------------
//Blynk------------
#include <BlynkSimpleEsp8266.h>
#define BLYNK_DEBUG
#define BLYNK_PRINT Serial
int blynkIsDownCount = 0;

char blynk_token4[34] = "q-vcHFgpYufA7jdylMvbijtmr-uuyTPO";

char blynk_token1[34] = "xIYLjnGv11NaIH3AndH9jD6NPJq_7Pit";
char blynk_token2[34] = "tD8ycdc4b95k0vBT-fs3iQyZjR86TWVN";
char blynk_token3[34] = "d1oD5jdMSXmujDw1xLng7f8bxOvdwkag";
//-----เกียวกับ Bridge
WidgetBridge bridge1(V91);
WidgetBridge bridge2(V92);
WidgetBridge bridge3(V93);

//----------------------------------------------------------
BlynkTimer timer;

//***********สำหรับ Server local ที่แจกให้ เพิ่ม **** แค่ 2 บรรทัดนี้
char server[] = "oasiskit.com";
int port = 8080;



//------------------------------------------------------------------------------------------------------------------------//
#define D0 16 // ใช้ไฟ LED สีฟ้า ของบอร์ด MCU ESP8266 ให้มีสัญญาณไฟกระพริบ ตาม Code ที่เขียน 
#define D4 2 // ใช้เป็นปุ่มกด เพื่อเข้า AP Config ได้ตามความต้องการของผู้ใช้

// -------  โหลดไลบารี่ของจอ LCD มาใช้งาน โดยแบบนี้จะสามารถ Create Characterได้  --------------------------------------------------//

#include <LCD.h>                          // บรรทัดที่ 1 และ 2 สามารถสลับบรรทัดกันได้
#include <Wire.h>                         // บรรทัดที่ 1 และ 2 สามารถสลับบรรทัดกันได้
#include <LiquidCrystal_I2C.h>            //บรรทัดนี้ต้องอยู่ในบรรทัดที่ 3 เท่านั้น ถ้าไปอยู่บรรทัดที่ 1 และ 2 จะคอมไพล์ไม่ผ่าน
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //// ตั้งค่า Address ของอุปกรณ์จอ LCD ที่มีการเชื่อมต่อแบบ I2C



//------------------------------------------------------------------------------------------------------------------------//

bool shouldSaveConfig1 = false;
void saveConfigCallback1 () {
  shouldSaveConfig1 = true;
  Serial.println("Should save  All Data config");
}
//-----------------------------------------------------------------------------------------------------------------------//

String IP;

//จุดวัดที่1
String Point1_phaseA1;
float Point1_phaseA;

String Point1_phaseB1;
float Point1_phaseB;

String Point1_phaseC1;
float Point1_phaseC;


//จุดวัดที่2
String Point2_phaseA2;
float Point2_phaseA;

String Point2_phaseB2;
float Point2_phaseB;

String Point2_phaseC2;
float Point2_phaseC;


//จุดวัดที่3
String Point3_phaseA3;
float Point3_phaseA;

String Point3_phaseB3;
float Point3_phaseB;

String Point3_phaseC3;
float Point3_phaseC;








String TextForSms ;





//ทดสอบ การควบคุม ให้ D4 (GPIO02)ของ esp8266 ตัวที่ 1 2 3 ทำงาน
//--------Blynk Control---------
BLYNK_WRITE(V1)
{
  int pinValue = param.asInt();
  if (pinValue == 1 ) {
    bridge1.digitalWrite(2, LOW);
    bridge2.digitalWrite(2, LOW);
    bridge3.digitalWrite(2, LOW);
  }
  if (pinValue == 0) {
    bridge1.digitalWrite(2, HIGH);
    bridge2.digitalWrite(2, HIGH);
    bridge3.digitalWrite(2, HIGH);
  }
}


//------------------------------------------------------//

//จุดวัดที่ 1
BLYNK_WRITE(V9)

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


  lcd.setCursor(0, 0);
  lcd.print(Point1_phaseA, 0);
  lcd.print((char)0x20);//Character ว่าง ไม่มีสี
}

BLYNK_WRITE(V10)
{
  Point1_phaseB1 = param.asString();//รับค่าข้อความจาก Blynk เข้ามา เก็บในรูปแบบ String
  Point1_phaseB = Point1_phaseB1.toFloat();//แปลงค่าจาก String เป็น Float


  lcd.setCursor(0, 1);
  lcd.print(Point1_phaseB, 0);
  lcd.print((char)0x20);//Character ว่าง ไม่มีสี
}

BLYNK_WRITE(V11)

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


  lcd.setCursor(0, 2);
  lcd.print(Point1_phaseC, 0);
  lcd.print((char)0x20);//Character ว่าง ไม่มีสี

}

//จุดวัดที่ 2
BLYNK_WRITE(V12)

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


  lcd.setCursor(4, 0);
  lcd.print(Point2_phaseA, 0);
  lcd.print((char)0x20);//Character ว่าง ไม่มีสี

}

BLYNK_WRITE(V13)

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


  lcd.setCursor(4, 1);
  lcd.print(Point2_phaseB, 0);
  lcd.print((char)0x20);//Character ว่าง ไม่มีสี

}

BLYNK_WRITE(V14)

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


  lcd.setCursor(4, 2);
  lcd.print(Point2_phaseC, 0);
  lcd.print((char)0x20);//Character ว่าง ไม่มีสี

}



//จุดวัดที่ 3
BLYNK_WRITE(V15)

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


  lcd.setCursor(8, 0);
  lcd.print(Point3_phaseA, 0);
  lcd.print((char)0x20);//Character ว่าง ไม่มีสี

}

BLYNK_WRITE(V16)

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


  lcd.setCursor(8, 1);
  lcd.print(Point3_phaseB, 0);
  lcd.print((char)0x20);//Character ว่าง ไม่มีสี

}

BLYNK_WRITE(V17)

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

  lcd.setCursor(8, 2);
  lcd.print(Point3_phaseC, 0);
  lcd.print((char)0x20);//Character ว่าง ไม่มีสี

}

















//------------------------------------------------------------------------------------------------------------------------//
//*********************************************       void setup        **************************************************//
//------------------------------------------------------------------------------------------------------------------------//

void setup() {

  //-------IO NODE MCU Esp8266-------//
  pinMode(D0, OUTPUT);      //กำหนดโหมดใช้งานให้กับขา D0 เป็นขา สัญญาณไฟ ในสภาวะต่างๆ
  pinMode(D4, INPUT_PULLUP);//กำหนดโหมดใช้งานให้กับขา D3 เป็นขา กดปุ่ม ค้าง เพื่อตั้งค่า AP config

  Serial.begin(9600);

  lcd.begin(20, 4);
  lcd.clear();


  //-----------------------------------------------------------------------------------------------------------------------//
  //read configuration from FS json
  Serial.println("mounting  FS...");



  if (SPIFFS.begin()) {

    //---------------------------------------------------------------------------------//

    Serial.println("mounted Data file system");


    if (SPIFFS.exists("/config1.json")) {
      //file exists, reading and loading
      Serial.println("reading Data config file");
      File configFile1 = SPIFFS.open("/config1.json", "r");

      if (configFile1) {
        Serial.println("opened Data config file");
        size_t size = configFile1.size();
        // Allocate a buffer to store contents of the file.
        std::unique_ptr<char[]> buf1(new char[size]);

        configFile1.readBytes(buf1.get(), size);
        DynamicJsonBuffer jsonBuffer;
        JsonObject& json = jsonBuffer.parseObject(buf1.get());
        json.printTo(Serial);
        if (json.success()) {
          Serial.println("\nparsed  json");

          strcpy(blynk_token4, json["blynk_token4"]);


        } else {
          Serial.println("failed to load Data file json config");
        }
      }
    }
    //---------------------------------------------------------------------------------//



  } else {
    Serial.println("failed to mount FS");

  }
  //end read


  delay(1000);




  //-----------------------------------------------------------------------------------------------------------------------//

  WiFiManagerParameter custom_text0("<p> </p>");
  WiFiManagerParameter custom_textA("<label>A: Blynk Token 4</label>");
  WiFiManagerParameter custom_blynk_token4("blynk_token4", "blynk_token4", blynk_token4, 34);


  //WiFiManager
  //Local intialization. Once its business is done, there is no need to keep it around
  WiFiManager wifiManager;

  //set config save notify callback
  wifiManager.setSaveConfigCallback(saveConfigCallback1);

  wifiManager.addParameter(&custom_text0);
  wifiManager.addParameter(&custom_textA);
  wifiManager.addParameter(&custom_blynk_token4);


  delay(1000);

  for (int i = 5; i > -1; i--) {  // นับเวลาถอยหลัง 5 วินาทีก่อนกดปุ่ม AP Config

    digitalWrite(D0, LOW);
    delay(500);
    digitalWrite(D0, HIGH);
    delay(500);
    Serial.print (String(i) + " ");





  }

  if (digitalRead(D4) == LOW) {
    digitalWrite(D0, LOW);
    Serial.println("Button Pressed");



    wifiManager.resetSettings();//ให้ล้างค่า SSID และ Password ที่เคยบันทึกไว้


    // wifiManager.autoConnect(); ใช้สร้างชื่อแอคเซสพอยต์อันโนมัติจาก ESP + ChipID

    if (!wifiManager.autoConnect("PIOT_NO.4")) {
      Serial.println("failed to connect and hit timeout");
      delay(3000);


      //reset and try again, or maybe put it to deep sleep
      ESP.reset();
      delay(5000);
    }

  }




  Serial.println(": WiFi Connected.......OK!)");

  strcpy(blynk_token4, custom_blynk_token4.getValue());
  delay(1000);

  if (shouldSaveConfig1) {
    //Serial.println("saving config");//แสดงข้อความใน Serial Monitor

    //------------------------------------------------------------------

    DynamicJsonBuffer jsonBuffer;
    JsonObject& json = jsonBuffer.createObject();

    //------------------------------------------------------------------
    Serial.println("saving blynk_token4_ config");
    json["blynk_token4"] = blynk_token4;
    File configFile1 = SPIFFS.open("/config1.json", "w");

    //------------------------------------------------------------------


    if (!configFile1) {
      Serial.println("failed to open  config file for writing");

    }
    json.printTo(Serial);

    json.printTo(configFile1);
    configFile1.close();

    //-------------------------------------
  }
  delay(1000);
  //-----------------------------------------------------------------


  //-----------------------------------------------------------------------------------------------------------------------//
  Serial.println("-----------------------------------");
  Serial.println();
  Serial.print("local ip   : ");
  delay(100);
  Serial.println(WiFi.localIP());
  delay(100);
  Serial.print("gateway    :");
  delay(100);
  Serial.println(WiFi.gatewayIP());
  Serial.print("subnetMask :");
  delay(100);
  Serial.println(WiFi.subnetMask());
  Serial.print("SSID       :");
  delay(100);
  Serial.println(WiFi.SSID());
  Serial.print("Password   :");
  delay(100);
  Serial.println(WiFi.psk());
  //-----------------------------------------------------------------------------------------------------------------------//
  //Print เพื่อเชคว่าค่าที่บันทึกไว้ยังอยู่หรือไม่
  Serial.println("-----------------------------------");
  Serial.println("เชคว่าค่าที่บันทึกไว้ยังอยู่หรือไม่");
  Serial.println();


  IP = WiFi.localIP().toString();
  Serial.print("IP to String = ");
  Serial.println(IP);


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


  timer.setInterval(30000L, reconnecting);




  //-----------------------------------------------------------------------------------------------------------------------//





}

//------------------------------------------------------------------------------------------------------------------------//
//*********************************************   จบ  void setup        **************************************************//
//------------------------------------------------------------------------------------------------------------------------//









//------------------------------------------------------------------------------------------------------------------------//
//*********************************************       void Loop        ***************************************************//
//------------------------------------------------------------------------------------------------------------------------//


void loop() {

  // call the returned value from GetFromSerial() function
  //  switch (GetFromSerial())
  //  {
  //    case '1':
  //      Serial.println(Point1_phaseA);
  //      break;
  //    case '2':
  //      Serial.println(Point1_phaseB);
  //      break;
  //    case '3':
  //      Serial.println(Point1_phaseC);
  //      break;
  //    case '4':
  //      Serial.println(Point2_phaseA);
  //      break;

  //  }

  TextForSms =  TextForSms + Point1_phaseA + "," + Point1_phaseB + ","  + Point1_phaseC + ","
                + Point2_phaseA + "," + Point2_phaseB + "," + Point2_phaseC + ","
                + Point3_phaseA + "," + Point3_phaseB + "," + Point3_phaseC + "," ;
  Serial.println(TextForSms);
  TextForSms = "";

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

    bridge1.setAuthToken(blynk_token1);
    bridge2.setAuthToken(blynk_token2);
    bridge3.setAuthToken(blynk_token3);


    //Serial.println("loop Blynk run");
  } else {
    digitalWrite(D0, LOW);
    delay(50);
    digitalWrite(D0, HIGH);
    delay(50);

    //Serial.println("loop Blynk connecting");
  }
  timer.run();//ให้เวลาของ Blynk ทำงาน

  delay(2000);


}//Loop

// read the serial port
//int GetFromSerial()
//{
//  while (Serial.available() <= 0) {
//  }
//  return Serial.read();
//}


//--------------------------------------------------------------------------------------------------------

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

Download No.1- no.4ชุดที่3OK.rar (13.2 KB)

CODE VB 2015


Imports System
Imports System.ComponentModel
Imports System.IO
Imports System.IO.Ports

Public Class Form1
    Dim comPORT As String

    Dim value1 As Decimal
    Dim value2 As Decimal
    Dim value3 As Decimal
    Dim value4 As Decimal
    Dim value5 As Decimal
    Dim value6 As Decimal
    Dim value7 As Decimal
    Dim value8 As Decimal
    Dim value9 As Decimal





    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load




        'การ์ตูนชี้จุดที่มีปัญหา
        PictureBox2.Visible = False
        PictureBox34.Visible = False
        PictureBox35.Visible = False

        PictureBox36.Visible = False
        PictureBox37.Visible = False
        PictureBox38.Visible = False

        PictureBox39.Visible = False
        PictureBox40.Visible = False
        PictureBox41.Visible = False


        'แสดง ไฟสถานะ การเชื่อมต่อกับ esp8266 ผ่าน  comport
        PictureBox12.Visible = False
        PictureBox13.Visible = True


        'แสดง ไฟสถานะ Phase A1
        PictureBox23.Visible = True
        PictureBox20.Visible = False
        PictureBox17.Visible = False

        'แสดง ไฟสถานะ Phase B1
        PictureBox22.Visible = True
        PictureBox19.Visible = False
        PictureBox16.Visible = False

        'แสดง ไฟสถานะ Phase C1
        PictureBox21.Visible = True
        PictureBox18.Visible = False
        PictureBox15.Visible = False


        '-----------------------------------------------

        'แสดง ไฟสถานะ Phase A2
        PictureBox3.Visible = True
        PictureBox6.Visible = False
        PictureBox9.Visible = False

        'แสดง ไฟสถานะ Phase B2
        PictureBox4.Visible = True
        PictureBox7.Visible = False
        PictureBox10.Visible = False

        'แสดง ไฟสถานะ Phase C2
        PictureBox5.Visible = True
        PictureBox8.Visible = False
        PictureBox11.Visible = False


        '-----------------------------------------------

        'แสดง ไฟสถานะ Phase A3
        PictureBox32.Visible = True
        PictureBox29.Visible = False
        PictureBox26.Visible = False

        'แสดง ไฟสถานะ Phase B3
        PictureBox31.Visible = True
        PictureBox28.Visible = False
        PictureBox25.Visible = False

        'แสดง ไฟสถานะ Phase C3
        PictureBox30.Visible = True
        PictureBox27.Visible = False
        PictureBox24.Visible = False


        '-----------------------------------------------

        Timer1.Enabled = False
        comPORT = ""
        For Each sp As String In My.Computer.Ports.SerialPortNames
            comPort_ComboBox.Items.Add(sp)
        Next


    End Sub


    Private Sub comPort_ComboBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles comPort_ComboBox.SelectedIndexChanged

        If (comPort_ComboBox.SelectedItem <> "") Then
            comPORT = comPort_ComboBox.SelectedItem
        End If

    End Sub


    Private Sub connect_BTN_Click(sender As Object, e As EventArgs) Handles connect_BTN.Click

        If (connect_BTN.Text = "Connect") Then
            If (comPORT <> "") Then
                SerialPort1.Close()
                SerialPort1.PortName = comPORT
                SerialPort1.BaudRate = 9600
                SerialPort1.DataBits = 8
                SerialPort1.Parity = Parity.None
                SerialPort1.StopBits = StopBits.One
                SerialPort1.Handshake = Handshake.None
                SerialPort1.Encoding = System.Text.Encoding.Default
                SerialPort1.ReadTimeout = 10000

                SerialPort1.Open()
                connect_BTN.Text = "Dis-connect"
                Timer1.Enabled = True
                PictureBox12.Visible = True
                PictureBox13.Visible = False
                'Timer_LBL.Text = "Timer: ON"
            Else
                MsgBox("Select a COM port first")
            End If
        Else 'ถ้ากดปุ่ม disconnec
            SerialPort1.Close()
            connect_BTN.Text = "Connect"
            Timer1.Enabled = False


            'การ์ตูนชี้จุดที่มีปัญหา
            PictureBox2.Visible = False

            'แสดง ไฟสถานะ การเชื่อมต่อกับ esp8266 ผ่าน  comport
            PictureBox12.Visible = False
            PictureBox13.Visible = True
            'Timer_LBL.Text = "Timer: OFF"


            'แสดง ไฟสถานะ Phase A1
            PictureBox23.Visible = True
            PictureBox20.Visible = False
            PictureBox17.Visible = False

            'แสดง ไฟสถานะ Phase B1
            PictureBox22.Visible = True
            PictureBox19.Visible = False
            PictureBox16.Visible = False

            'แสดง ไฟสถานะ Phase C1
            PictureBox21.Visible = True
            PictureBox18.Visible = False
            PictureBox15.Visible = False


            '-----------------------------------------------

            'แสดง ไฟสถานะ Phase A2
            PictureBox3.Visible = True
            PictureBox6.Visible = False
            PictureBox9.Visible = False

            'แสดง ไฟสถานะ Phase B2
            PictureBox4.Visible = True
            PictureBox7.Visible = False
            PictureBox10.Visible = False

            'แสดง ไฟสถานะ Phase C2
            PictureBox5.Visible = True
            PictureBox8.Visible = False
            PictureBox11.Visible = False


            '-----------------------------------------------

            'แสดง ไฟสถานะ Phase A3
            PictureBox32.Visible = True
            PictureBox29.Visible = False
            PictureBox26.Visible = False

            'แสดง ไฟสถานะ Phase B3
            PictureBox31.Visible = True
            PictureBox28.Visible = False
            PictureBox25.Visible = False

            'แสดง ไฟสถานะ Phase C3
            PictureBox30.Visible = True
            PictureBox27.Visible = False
            PictureBox24.Visible = False


            '-----------------------------------------------
        End If


    End Sub


    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick


        Dim s As String
        's แสดง "," ใน Textbox 11 ตัว คือ 9 หลัก + อีก 1 โดย 1 คือใช้ตัดค่า เพราะ เรากำหนดให้มีการส่งมา 2 ครั้ง
        'EX ถ้าตัวเลขมี 15 หลัก  "," จะมี 16 ตัว แสดงใน TextBox1.Text
        s = TextBox1.Text + "," + "," + "," + "," + "," + "," + "," + "," + "," + ","

        Dim somestring() As String  'สร้างตัวแปร somestring เพื่อแยก String ด้วย เครื่องหมาย ","
        ' Split string based on comma
        somestring = s.Split(New Char() {","c}) 'ชุดคำสั่งในการแยก




        'แสดง ข้อความใน textbox ที่กำหนด 

        '-----------------------------------------------
        'Phase A1
        'นำข้อมูลตำแหน่งที่ 0 มาแสดงใน TextBox2.Text
        TextBox2.Text = somestring(0)
        Try
            value1 = Convert.ToDecimal(TextBox2.Text)

        Catch ex As Exception
            'TextBox1.Text = ""
        End Try

        If value1 >= TextBox12.Text And value1 <= TextBox11.Text Then
            PictureBox23.Visible = False
            PictureBox20.Visible = True
            PictureBox17.Visible = False

            'ให้การ์ตูนหายไป
            PictureBox2.Visible = False
        End If

        If value1 < TextBox12.Text And value1 >= TextBox13.Text Then
            PictureBox23.Visible = False
            PictureBox20.Visible = False
            PictureBox17.Visible = True

            'ให้การ์ตูนชี้ที่ตแหน่งนี้
            PictureBox2.Visible = True
            PictureBox2.Location = New Point(217, 35)
            My.Computer.Audio.Play("C:\PFAS Monitor\vdropwav.wav")


        End If

        If value1 <= TextBox13.Text Then
            PictureBox23.Visible = True
            PictureBox20.Visible = False
            PictureBox17.Visible = False

            'ให้การ์ตูนชี้ที่ตแหน่งนี้
            PictureBox2.Visible = True
            PictureBox2.Location = New Point(217, 35)
            My.Computer.Audio.Play("C:\PFAS Monitor\readfail.wav")

        End If


        'Phase B1
        TextBox3.Text = somestring(1)
        Try
            value2 = Convert.ToDecimal(TextBox3.Text)

        Catch ex As Exception
            'TextBox1.Text = ""
        End Try

        If value2 >= TextBox12.Text And value2 <= TextBox11.Text Then
            PictureBox22.Visible = False
            PictureBox19.Visible = True
            PictureBox16.Visible = False

            'ให้การ์ตูนหายไป
            PictureBox34.Visible = False
        End If

        If value2 < TextBox12.Text And value2 >= TextBox13.Text Then
            PictureBox22.Visible = False
            PictureBox19.Visible = False
            PictureBox16.Visible = True

            'ให้การ์ตูนชี้ที่ตแหน่งนี้
            PictureBox34.Visible = True
            PictureBox34.Location = New Point(217, 75)

            My.Computer.Audio.Play("C:\PFAS Monitor\vdropwav.wav")
        End If

        If value2 <= TextBox13.Text Then
            PictureBox22.Visible = True
            PictureBox19.Visible = False
            PictureBox16.Visible = False

            'ให้การ์ตูนชี้ที่ตแหน่งนี้
            PictureBox34.Visible = True
            PictureBox34.Location = New Point(217, 75)
            My.Computer.Audio.Play("C:\PFAS Monitor\readfail.wav")
        End If


        'Phase C1
        TextBox4.Text = somestring(2)
        Try
            value3 = Convert.ToDecimal(TextBox4.Text)

        Catch ex As Exception
            'TextBox1.Text = ""
        End Try

        If value3 >= TextBox12.Text And value3 <= TextBox11.Text Then
            PictureBox21.Visible = False
            PictureBox18.Visible = True
            PictureBox15.Visible = False

            'ให้การ์ตูนหายไป
            PictureBox35.Visible = False
        End If

        If value3 < TextBox12.Text And value3 >= TextBox13.Text Then
            PictureBox21.Visible = False
            PictureBox18.Visible = False
            PictureBox15.Visible = True

            'ให้การ์ตูนชี้ที่ตแหน่งนี้
            PictureBox35.Visible = True
            PictureBox35.Location = New Point(217, 115)
            My.Computer.Audio.Play("C:\PFAS Monitor\vdropwav.wav")


        End If

        If value3 <= TextBox13.Text Then
            PictureBox21.Visible = True
            PictureBox18.Visible = False
            PictureBox15.Visible = False

            'ให้การ์ตูนชี้ที่ตแหน่งนี้
            PictureBox35.Visible = True
            PictureBox35.Location = New Point(217, 115)
            My.Computer.Audio.Play("C:\PFAS Monitor\readfail.wav")
        End If

        '-----------------------------------------------

        'Phase A2
        TextBox5.Text = somestring(3)
        Try
            value4 = Convert.ToDecimal(TextBox5.Text)

        Catch ex As Exception
            'TextBox1.Text = ""
        End Try


        If value4 >= TextBox12.Text And value4 <= TextBox11.Text Then
            PictureBox3.Visible = False
            PictureBox6.Visible = True
            PictureBox9.Visible = False

            'ให้การ์ตูนหายไป
            PictureBox36.Visible = False
        End If

        If value4 < TextBox12.Text And value4 >= TextBox13.Text Then
            PictureBox3.Visible = False
            PictureBox6.Visible = False
            PictureBox9.Visible = True

            'ให้การ์ตูนชี้ที่ตแหน่งนี้
            PictureBox36.Visible = True
            PictureBox36.Location = New Point(250, 395)
            My.Computer.Audio.Play("C:\PFAS Monitor\vdropwav.wav")
        End If

        If value4 <= TextBox13.Text Then
            PictureBox3.Visible = True
            PictureBox6.Visible = False
            PictureBox9.Visible = False

            'ให้การ์ตูนชี้ที่ตแหน่งนี้
            PictureBox36.Visible = True
            PictureBox36.Location = New Point(250, 395)
            My.Computer.Audio.Play("C:\PFAS Monitor\readfail.wav")
        End If



        'Phase B2
        TextBox6.Text = somestring(4)
        Try
            value5 = Convert.ToDecimal(TextBox6.Text)

        Catch ex As Exception
            'TextBox1.Text = ""
        End Try

        If value5 >= TextBox12.Text And value5 <= TextBox11.Text Then
            PictureBox4.Visible = False
            PictureBox7.Visible = True
            PictureBox10.Visible = False

            'ให้การ์ตูนหายไป
            PictureBox37.Visible = False
        End If

        If value5 < TextBox12.Text And value5 >= TextBox13.Text Then
            PictureBox4.Visible = False
            PictureBox7.Visible = False
            PictureBox10.Visible = True

            'ให้การ์ตูนชี้ที่ตแหน่งนี้
            PictureBox37.Visible = True
            PictureBox37.Location = New Point(250, 435)
            My.Computer.Audio.Play("C:\PFAS Monitor\vdropwav.wav")
        End If

        If value5 <= TextBox13.Text Then
            PictureBox4.Visible = True
            PictureBox7.Visible = False
            PictureBox10.Visible = False

            'ให้การ์ตูนชี้ที่ตแหน่งนี้
            PictureBox37.Visible = True
            PictureBox37.Location = New Point(250, 435)
            My.Computer.Audio.Play("C:\PFAS Monitor\readfail.wav")
        End If

        'Phase C2
        TextBox7.Text = somestring(5)
        Try
            value6 = Convert.ToDecimal(TextBox7.Text)

        Catch ex As Exception
            'TextBox1.Text = ""
        End Try


        If value6 >= TextBox12.Text And value6 <= TextBox11.Text Then
            PictureBox5.Visible = False
            PictureBox8.Visible = True
            PictureBox11.Visible = False

            'ให้การ์ตูนหายไป
            PictureBox38.Visible = False
        End If

        If value6 < TextBox12.Text And value6 >= TextBox13.Text Then
            PictureBox5.Visible = False
            PictureBox8.Visible = False
            PictureBox11.Visible = True

            'ให้การ์ตูนชี้ที่ตแหน่งนี้
            PictureBox38.Visible = True
            PictureBox38.Location = New Point(250, 474)
            My.Computer.Audio.Play("C:\PFAS Monitor\vdropwav.wav")

        End If

        If value6 <= TextBox13.Text Then
            PictureBox5.Visible = True
            PictureBox8.Visible = False
            PictureBox11.Visible = False

            'ให้การ์ตูนชี้ที่ตแหน่งนี้
            PictureBox38.Visible = True
            PictureBox38.Location = New Point(250, 474)
            My.Computer.Audio.Play("C:\PFAS Monitor\readfail.wav")
        End If

        '-----------------------------------------------

        'Phase A3
        TextBox10.Text = somestring(6)
        Try
            value7 = Convert.ToDecimal(TextBox10.Text)

        Catch ex As Exception
            'TextBox1.Text = ""
        End Try

        If value7 >= TextBox12.Text And value7 <= TextBox11.Text Then
            PictureBox32.Visible = False
            PictureBox29.Visible = True
            PictureBox26.Visible = False

            'ให้การ์ตูนหายไป
            PictureBox39.Visible = False
        End If

        If value7 < TextBox12.Text And value7 >= TextBox13.Text Then
            PictureBox32.Visible = False
            PictureBox29.Visible = False
            PictureBox26.Visible = True

            'ให้การ์ตูนชี้ที่ตแหน่งนี้
            PictureBox39.Visible = True
            PictureBox39.Location = New Point(812, 248)
            My.Computer.Audio.Play("C:\PFAS Monitor\vdropwav.wav")
        End If

        If value7 <= TextBox13.Text Then
            PictureBox32.Visible = True
            PictureBox29.Visible = False
            PictureBox26.Visible = False

            'ให้การ์ตูนชี้ที่ตแหน่งนี้
            PictureBox39.Visible = True
            PictureBox39.Location = New Point(812, 248)
            My.Computer.Audio.Play("C:\PFAS Monitor\readfail.wav")
        End If







        'Phase B3
        TextBox9.Text = somestring(7)
        Try
            value8 = Convert.ToDecimal(TextBox9.Text)

        Catch ex As Exception
            'TextBox1.Text = ""
        End Try


        If value8 >= TextBox12.Text And value8 <= TextBox11.Text Then
            PictureBox31.Visible = False
            PictureBox28.Visible = True
            PictureBox25.Visible = False

            'ให้การ์ตูนหายไป
            PictureBox40.Visible = False
        End If

        If value8 < TextBox12.Text And value8 >= TextBox13.Text Then
            PictureBox31.Visible = False
            PictureBox28.Visible = False
            PictureBox25.Visible = True

            'ให้การ์ตูนชี้ที่ตแหน่งนี้
            PictureBox40.Visible = True
            PictureBox40.Location = New Point(812, 288)
            My.Computer.Audio.Play("C:\PFAS Monitor\vdropwav.wav")
        End If

        If value8 <= TextBox13.Text Then
            PictureBox31.Visible = True
            PictureBox28.Visible = False
            PictureBox25.Visible = False

            'ให้การ์ตูนชี้ที่ตแหน่งนี้
            PictureBox40.Visible = True
            PictureBox40.Location = New Point(812, 288)
            My.Computer.Audio.Play("C:\PFAS Monitor\readfail.wav")
        End If





        'Phase C3
        TextBox8.Text = somestring(8)
        Try
            value9 = Convert.ToDecimal(TextBox8.Text)

        Catch ex As Exception
            'TextBox1.Text = ""
        End Try



        If value9 >= TextBox12.Text And value9 <= TextBox11.Text Then
            PictureBox30.Visible = False
            PictureBox27.Visible = True
            PictureBox24.Visible = False

            'ให้การ์ตูนหายไป
            PictureBox41.Visible = False
        End If

        If value9 < TextBox12.Text And value9 >= TextBox13.Text Then
            PictureBox30.Visible = False
            PictureBox27.Visible = False
            PictureBox24.Visible = True

            'ให้การ์ตูนชี้ที่ตแหน่งนี้
            PictureBox41.Visible = True
            PictureBox41.Location = New Point(812, 327)
            My.Computer.Audio.Play("C:\PFAS Monitor\vdropwav.wav")
        End If

        If value9 <= TextBox13.Text Then
            PictureBox30.Visible = True
            PictureBox27.Visible = False
            PictureBox24.Visible = False

            'ให้การ์ตูนชี้ที่ตแหน่งนี้
            PictureBox41.Visible = True
            PictureBox41.Location = New Point(812, 327)
            My.Computer.Audio.Play("C:\PFAS Monitor\readfail.wav")
        End If


        '-----------------------------------------------





        TextBox1.Text = ""



    End Sub
    Private Sub DataReceived(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived


        Try

            Dim mydata As String = ""
            mydata = SerialPort1.ReadExisting()

            If TextBox1.InvokeRequired Then
                TextBox1.Invoke(DirectCast(Sub() TextBox1.Text &= mydata, MethodInvoker))
            Else
                TextBox1.Text &= mydata
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        My.Settings.Reset()
    End Sub



    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        My.Settings.Save()
    End Sub
End Class

Download : https://drive.google.com/file/d/1jpQp2KsUlVIP9YNNFPPqd-lA1b3vcCWF/view?usp=sharing
ตัวผมจะไว้เก็บเป็นข้อมูลนะครับ

  • สร้างไฟล์ .WAV ไว้ 2 ไฟล์ ตำแหน่ง C:\PFAS Monitor\ชื่อไฟล์ .WAV1

ค่าตัวแปรในโปรเจค SmartMonitor (ชื่อโปรเจค VB2015 ที่ผมสร้างขึ้น)

Download ค่าตัวแปรในโปรเจคSmartMonitor.rar (8.8 KB)

2 Likes