โปรเจค Nodemcu esp8266 Arduino IDE เปิดปิดไฟผ่าน Website


        ในระบบนี้จะทำให้ Nodemcu เป็น Web Server และ มี Device อื่นๆเป็น Client เข้าไปเชื่อมต่อไปยัง Nodemcu

อุปกรณ์ที่ต้องเตรียม

-Nodemcu esp8266 เวอร์ชั่นอะไรก็ได้
-สาย Jumper
-หลอดไฟ LED (ในตัวอย่างนี้พี่ใช้หลอดไฟ LED สามารถใช้ Relay มาต่อเพื่อควบคุมไฟ DC AC ได้เหมือนกัน)
-คอมพิวเตอร์ที่ลงโปรแกรม Arduino IDE และ ติดตั้งบอร์ด Nodemcu หากยังไม่ติดตั้ง คลิกติดตั้ง
-ระบบเครื่อข่าย Lan มี Wifi ด้วย

ต่อวงจรดังนี้

Code Arduino IDE

#include <ESP8266WiFi.h>

const char* ssid = "9arduino";
const char* password = "tv357911itv";

int ledPin1 = D1; // ขา D1
int ledPin2 = D2; // ขา D2
int ledPin3 = D3; // ขา D3
int ledPin4 = D4; // ขา D4

int ch1 = 0;
int ch2 = 0;
int ch3 = 0;
int ch4 = 0;

WiFiServer server(80);

void setup() {
  Serial.begin(9600);
  delay(100);

  // ประกาศขา เป็น Output
  pinMode(ledPin1, OUTPUT);  
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);
  pinMode(ledPin4, OUTPUT);

  // เริ่มต้น ให้ Logic ตำแหน่งขาเป็น LOW
  digitalWrite(ledPin1, HIGH);   
  digitalWrite(ledPin2, HIGH);
  digitalWrite(ledPin3, HIGH);
  digitalWrite(ledPin4, HIGH);

  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.print("Use this URL to connect: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");
}

void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }

  // Wait until the client sends some data
  Serial.println("new client");
  while (!client.available()) {
    delay(1);
  }

  // Read the first line of the request
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();

  // Match the request

    // รับ Link ช่อง 1 

  if (request.indexOf("/LED1=ON") != -1) {
    digitalWrite(ledPin1, LOW);
    ch1 = 1;
  }
  if (request.indexOf("/LED1=OFF") != -1) {
    digitalWrite(ledPin1, HIGH);
    ch1 = 0;
  }

  // รับ Link ช่อง 2
  if (request.indexOf("/LED2=ON") != -1) {
    digitalWrite(ledPin2, LOW);
    ch2 = 1;
  }

  if (request.indexOf("/LED2=OFF") != -1) {
    digitalWrite(ledPin2, HIGH);
    ch2 = 0;
  }

    // รับ Link ช่อง 3
  if (request.indexOf("/LED3=ON") != -1) {
    digitalWrite(ledPin3, LOW);
    ch3 = 1;
  }

  if (request.indexOf("/LED3=OFF") != -1) {
    digitalWrite(ledPin3, HIGH);
    ch3 = 0;
  }

    // รับ Link ช่อง 4
  if (request.indexOf("/LED4=ON") != -1) {
    digitalWrite(ledPin4, LOW);
    ch4 = 1;
  }

  if (request.indexOf("/LED4=OFF") != -1) {
    digitalWrite(ledPin4, HIGH);
    ch4 = 0;
  }

  // Return the response
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); // do not forget this one
  client.println("");
  client.println("");

  client.print("Led pin D1 : ");
  if (ch1 == 1) {
    client.print("On");
  } else {
    client.print("Off");
  }
  client.print("
Led pin D2 : ");
  if (ch2 == 1) {
    client.print("On");
  } else {
    client.print("Off");
  }
  client.print("
Led pin D3 : ");
  if (ch3 == 1) {
    client.print("On");
  } else {
    client.print("Off");
  }
  client.print("
Led pin D4 : ");
  if (ch4 == 1) {
    client.print("On");
  } else {
    client.print("Off");
  }

  client.println("

");

client.println("CH1 <a href=\"/LED1=ON\"\"><button> On </button></a><a href=\"/LED1=OFF\"\"><button> OFF </button></a><br>");  

client.println("CH2 <a href=\"/LED2=ON\"\"><button> On </button></a><a href=\"/LED2=OFF\"\"><button> OFF </button></a><br>"); 

client.println("CH3 <a href=\"/LED3=ON\"\"><button> On </button></a><a href=\"/LED3=OFF\"\"><button> OFF </button></a><br>");

client.println("CH4 <a href=\"/LED4=ON\"\"><button> On </button></a><a href=\"/LED4=OFF\"\"><button> OFF </button></a><br>");

  client.println("");

  delay(1);
  Serial.println("Client disonnected");
  Serial.println("");
}


หลักการทำงานของระบบ

         ในการทำงานของระบบนี้ จะทำการแปลงให้ Nodemcu เป็น Web Server และ มี Device อื่นๆ เช่น Notebook โทรศัพท์มือถือ เป็น Client ในการเข้าไปเชื่อมต่อไปยัง Nodemcu ในกรณีนี้ จะสามารถใช้ได้เพียงแค่ใน วง Lan หากต้องการออกนอกวง Lan หรือ Wan จะต้องเข้าไป Forword Port ที่ Router ชี้ IP และ Port มายัง Nodemcu และเมื่อทำการอัพโหลด Code เสร็จ ก็ให้กด ปุ่ม Serial moniter บน Arduino IDE จะแสดงข้อความตามภาพ
จากนั้น โปรแกรมจะแสดง IP ให้เราเข้าไปยัง URL ที่โปรแกรมแจ้งแสดงออกมา จากภาพคือเว็บ http://192.168.1.37/
จากนั้นก็จะสามารถเปิดปิดไฟผ่าน Website ได้ตามที่ต้องการ







แหล่งที่มา : https://goo.gl/SiaE6Y

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

ความรู้เบื้องต้นเกี่ยวกับไมโครคอนโทรลเลอร์

มินิโปรเจค ให้อาหารปลาด้วย arduino

โปรเจค งานเครื่องกระปุกออมสินนับเงินอัตโนมัติ