วันอังคารที่ 28 พฤษภาคม พ.ศ. 2562

โปรเจค IoT ESP8266 NodeMCU เปิด ปิด ไฟ ผ่านเว็บ



ในช่วงไม่กี่ปีที่ผ่านมา ESP8266 เป็นดาวเด่นในโครงการ IoT หรือ ที่เกี่ยวข้อง WiFi  ซึ่ง ESP8266 NodeMCU  เป็นโมดูล WiFi ที่คุ้มค่ามาก โดยสามารถเชียนโปรแกรมเพื่อสร้างเว็บเซิร์ฟเวอร์แบบสแตนด์อโลนได้


โหมดการทำงานของ ESP8266

หนึ่งในคุณสมบัติที่ยอดเยี่ยมที่สุดของ ESP8266 คือไม่เพียง แต่เชื่อมต่อกับเครือข่าย WiFi ที่มีอยู่และทำหน้าที่เป็นเว็บเซิร์ฟเวอร์ แต่ยังสามารถตั้งค่าเครือข่ายของตัวเอง เพื่อให้อุปกรณ์อื่น ๆ สามารถเชื่อมต่อโดยตรงและเข้าถึงได้โดยเว็บเพจ สิ่งนี้เป็นไปได้เพราะ ESP8266 สามารถทำงานในโหมดต่าง ๆ ได้ 3 โหมด คือ โหมด AP โหมด STA และโหมด AP & STA โดยในแต่ละโหมดมีความแตกต่างกันดังนี้


  • โหมด AP - เป็นโหมดที่จะต้องรอให้มีอุปกรณ์มาเชื่อมต่อจึงจะสามารถรับส่งข้อมูลกันได้
  • โหมด STA - เป็นโหมดที่กำหนดให้ ESP8266 ไปเชื่อมต่อกับอุปกรณ์อื่น ๆ เช่น เร้าเตอร์ แล้วรับส่งข้อมูลระหว่างเครื่องในวงแลนได้
  • โหมด AP & STA - เป็นโหมดที่สามารถทำงานได้ทั้ง 2 อย่างภายในเวลาเดียวกัน แต่ความสเถียรจะลดลง และทำให้ใช้กำลังไฟฟ้ามากขึ้น
  • ในการใช้งานควบคุมอุปกรณ์ต่าง ๆ ที่อยู่ในระยะใกล้ และต้องย้ายสถานที่ใช้งานที่บ่อย เช่น นำไปใช้งานควบคุมหุ่นนต์ ควรจะใช้งานในโหมด AP


แบบ Station (STA) Mode


โหมด STA - เป็นโหมดที่กำหนดให้ ESP8266 ไปเชื่อมต่อกับอุปกรณ์อื่น ๆ เช่น เร้าเตอร์ แล้วรับส่งข้อมูลระหว่างเครื่องในวงแลนได้





แบบ Soft Access Point (AP) Mode


ESP8266 ที่สร้างเครือข่าย WiFi ของตัวเองและทำหน้าที่เป็นฮับ (เช่นเดียวกับเราเตอร์ WiFi) สำหรับสถานีหนึ่งสถานีหรือมากกว่านั้นเรียกว่าจุดเชื่อมต่อ (AP) ไม่เหมือนกับเราเตอร์ WiFi มันไม่มีส่วนต่อประสานกับเครือข่ายต่อสาย ดังนั้นโหมดการทำงานดังกล่าวจึงเรียกว่า Soft Access Point (soft-AP) นอกจากนี้จำนวนสถานีสูงสุดที่สามารถเชื่อมต่อได้จะถูก จำกัด ไว้ที่ 5 เท่านั้น




โหมด AP - เป็นโหมดที่จะต้องรอให้มีอุปกรณ์มาเชื่อมต่อจึงจะสามารถรับส่งข้อมูลกันได้ ในโหมด AP นั้น ESP8266 จะสร้างเครือข่าย WiFi ใหม่และตั้งค่า SSID (ชื่อเครือข่าย) และ IP ให้กับมัน ด้วย IP นี้มันสามารถส่งผ่านหน้าเว็บไปยังอุปกรณ์ที่เชื่อมต่อทั้งหมดภายในเครือข่ายของตัวเอง


ขั้นตอนการทำงาน


1. เรียนรู้การใช้งาน ESP8266 NodeMCU เบื้องต้นตามลิงค์ด้านล่าง



2. เชื่อมต่อ LED กับ ESP8266 NodeMCU


รายการอุปกรณ์ที่ใช้ (รายละเอียดคลิกตามลิงค์สินค้า)







3. โค้ดการทำงานแบบ โหมด AP


ข้อดีคือ IP นี้มันที่ส่งให้แสดงผ่านหน้าเว็บ จะเป็น IP เดิม ไม่เปลี่ยนแปลง ข้อเสียคือกำหนดจุดเชื่อมต่อในเครือข่ายไม่เกิน 5 จุด



อัพโหลดโค้ดด้านล่างนี้ไปยัง ESP8266 NodeMCU
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

/* Put your SSID & Password */
const char* ssid = "NodeMCU";  // Enter SSID here
const char* password = "12345678";  //Enter Password here

/* Put IP Address details */
IPAddress local_ip(192,168,1,1);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);

ESP8266WebServer server(80);

uint8_t LED1pin = D7;
bool LED1status = LOW;

uint8_t LED2pin = D6;
bool LED2status = LOW;

void setup() {
  Serial.begin(115200);
  pinMode(LED1pin, OUTPUT);
  pinMode(LED2pin, OUTPUT);

  WiFi.softAP(ssid, password);
  WiFi.softAPConfig(local_ip, gateway, subnet);
  delay(100);
  
  server.on("/", handle_OnConnect);
  server.on("/led1on", handle_led1on);
  server.on("/led1off", handle_led1off);
  server.on("/led2on", handle_led2on);
  server.on("/led2off", handle_led2off);
  server.onNotFound(handle_NotFound);
  
  server.begin();
  Serial.println("HTTP server started");
}
void loop() {
  server.handleClient();
  if(LED1status)
  {digitalWrite(LED1pin, HIGH);}
  else
  {digitalWrite(LED1pin, LOW);}
  
  if(LED2status)
  {digitalWrite(LED2pin, HIGH);}
  else
  {digitalWrite(LED2pin, LOW);}
}

void handle_OnConnect() {
  LED1status = LOW;
  LED2status = LOW;
  Serial.println("GPIO7 Status: OFF | GPIO6 Status: OFF");
  server.send(200, "text/html", SendHTML(LED1status,LED2status)); 
}

void handle_led1on() {
  LED1status = HIGH;
  Serial.println("GPIO7 Status: ON");
  server.send(200, "text/html", SendHTML(true,LED2status)); 
}

void handle_led1off() {
  LED1status = LOW;
  Serial.println("GPIO7 Status: OFF");
  server.send(200, "text/html", SendHTML(false,LED2status)); 
}

void handle_led2on() {
  LED2status = HIGH;
  Serial.println("GPIO6 Status: ON");
  server.send(200, "text/html", SendHTML(LED1status,true)); 
}

void handle_led2off() {
  LED2status = LOW;
  Serial.println("GPIO6 Status: OFF");
  server.send(200, "text/html", SendHTML(LED1status,false)); 
}

void handle_NotFound(){
  server.send(404, "text/plain", "Not found");
}

String SendHTML(uint8_t led1stat,uint8_t led2stat){
  String ptr = "<!DOCTYPE html> <html>\n";
  ptr +="<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  ptr +="<title>LED Control</title>\n";
  ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
  ptr +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;} h3 {color: #444444;margin-bottom: 50px;}\n";
  ptr +=".button {display: block;width: 80px;background-color: #1abc9c;border: none;color: white;padding: 13px 30px;text-decoration: none;font-size: 25px;margin: 0px auto 35px;cursor: pointer;border-radius: 4px;}\n";
  ptr +=".button-on {background-color: #1abc9c;}\n";
  ptr +=".button-on:active {background-color: #16a085;}\n";
  ptr +=".button-off {background-color: #34495e;}\n";
  ptr +=".button-off:active {background-color: #2c3e50;}\n";
  ptr +="p {font-size: 14px;color: #888;margin-bottom: 10px;}\n";
  ptr +="</style>\n";
  ptr +="</head>\n";
  ptr +="<body>\n";
  ptr +="<h1>ESP8266 Web Server</h1>\n";
  ptr +="<h3>Using Access Point(AP) Mode</h3>\n";
  
   if(led1stat)
  {ptr +="<p>LED1 Status: ON</p><a class=\"button button-off\" href=\"/led1off\">OFF</a>\n";}
  else
  {ptr +="<p>LED1 Status: OFF</p><a class=\"button button-on\" href=\"/led1on\">ON</a>\n";}

  if(led2stat)
  {ptr +="<p>LED2 Status: ON</p><a class=\"button button-off\" href=\"/led2off\">OFF</a>\n";}
  else
  {ptr +="<p>LED2 Status: OFF</p><a class=\"button button-on\" href=\"/led2on\">ON</a>\n";}

  ptr +="</body>\n";
  ptr +="</html>\n";
  return ptr;
}


เลือกชนิดของบอร์ด : ไปที่ Tools > Board : เลือกเป็น NodeMCU 0.9 (ESP-12 Module)



เลือกพอร์ตการใช้งาน : ไปที่ Tools > Port แล้วเลือกพอร์ตที่ปรากฏ ในตัวอย่างเลือกเป็น "COM12"


กดปุ่ม   เพื่ออัพโหลด หากสามารถอัพโหลดโปรแกรมลงบอร์ดได้สำเร็จ จะแสดงคำว่า Done uploading. ที่แถบด้านล่าง

เปิดหน้าต่าง Serial Monitor  โดยไปที่ Tools > Serial Monitor



มุมขวาล่าง ของ Serial Monitor เลือก 115200 baud  คือ ตั้งค่าความเร็วในการรับ-ส่งข้อมูล  คือ 115200



แตะปุ่ม RST ที่บอร์ด ESP8266 NodeMCU เพื่อเริ่มต้นการทำงานของ ESP8266  รอจนกระทั่งที่ Serial Monitor แสดงข้อความ HTTP server started




ใช้ สมาร์ทโฟน ไปที่การตั้งค่า -> Wi-Fi




เลือกเครือข่าย Wi-Fi เป็น NodeMCU




   


รหัสผ่านเครือข่าย = 12345678  -> เชื่อมต่อ

 



แสดงการเชื่อมต่อเครือข่าย Wi-Fi เป็น NodeMCU





เปิดเว็บบราวเซอร์ ที่ URL ป้อนไอพี :  192.168.1.1

แล้วทดสอบการทำงาน




ที่ Serial Monitor จะแสดงสถานะ การเปิด ปิด ไฟ ของเรา


วีดีโอผลลัพธ์ โปรเจค IoT ESP8266 NodeMCU เปิด ปิด ไฟ ผ่านเว็บ





4. โค้ดการทำงานแบบ โหมด STA

ข้อดีคือ เชื่อมต่อให้แสดงผ่านหน้าเว็บ ได้หลายๆเครื่อง เท่าที่ความสามารถของเครือข่าย  ข้อเสียคือต้องตรวจสอบ IP ที่จะให้แสดงผ่านหน้าเว็บ เพราะการเชื่อมต่อแต่ละครั้งอาจจะได้ IP ไม่เหมือนกัน


*** ก่อนอัพโหลดโค้ดต้องแก้ไข *** 



ssid = "
เครือข่าย Wi-Fi ที่ต้องการเชื่อมต่อ"

password = "
รหัสผ่านเครือข่าย"






โค้ดต้นฉบับที่ยังไม่ได้แก้ไข
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

/*Put your SSID & Password*/
const char* ssid = "YourNetworkName";  // Enter SSID here
const char* password = "YourPassword";  //Enter Password here

ESP8266WebServer server(80);

uint8_t LED1pin = D7;
bool LED1status = LOW;

uint8_t LED2pin = D6;
bool LED2status = LOW;

void setup() {
  Serial.begin(115200);
  delay(100);
  pinMode(LED1pin, OUTPUT);
  pinMode(LED2pin, OUTPUT);

  Serial.println("Connecting to ");
  Serial.println(ssid);

  //connect to your local wi-fi network
  WiFi.begin(ssid, password);

  //check wi-fi is connected to wi-fi network
  while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());

  server.on("/", handle_OnConnect);
  server.on("/led1on", handle_led1on);
  server.on("/led1off", handle_led1off);
  server.on("/led2on", handle_led2on);
  server.on("/led2off", handle_led2off);
  server.onNotFound(handle_NotFound);

  server.begin();
  Serial.println("HTTP server started");
}
void loop() {
  server.handleClient();
  if(LED1status)
  {digitalWrite(LED1pin, HIGH);}
  else
  {digitalWrite(LED1pin, LOW);}
  
  if(LED2status)
  {digitalWrite(LED2pin, HIGH);}
  else
  {digitalWrite(LED2pin, LOW);}
}

void handle_OnConnect() {
  LED1status = LOW;
  LED2status = LOW;
  Serial.println("GPIO7 Status: OFF | GPIO6 Status: OFF");
  server.send(200, "text/html", SendHTML(LED1status,LED2status)); 
}

void handle_led1on() {
  LED1status = HIGH;
  Serial.println("GPIO7 Status: ON");
  server.send(200, "text/html", SendHTML(true,LED2status)); 
}

void handle_led1off() {
  LED1status = LOW;
  Serial.println("GPIO7 Status: OFF");
  server.send(200, "text/html", SendHTML(false,LED2status)); 
}

void handle_led2on() {
  LED2status = HIGH;
  Serial.println("GPIO6 Status: ON");
  server.send(200, "text/html", SendHTML(LED1status,true)); 
}

void handle_led2off() {
  LED2status = LOW;
  Serial.println("GPIO6 Status: OFF");
  server.send(200, "text/html", SendHTML(LED1status,false)); 
}

void handle_NotFound(){
  server.send(404, "text/plain", "Not found");
}

String SendHTML(uint8_t led1stat,uint8_t led2stat){
  String ptr = "<!DOCTYPE html> <html>\n";
  ptr +="<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  ptr +="<title>LED Control</title>\n";
  ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
  ptr +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;} h3 {color: #444444;margin-bottom: 50px;}\n";
  ptr +=".button {display: block;width: 80px;background-color: #1abc9c;border: none;color: white;padding: 13px 30px;text-decoration: none;font-size: 25px;margin: 0px auto 35px;cursor: pointer;border-radius: 4px;}\n";
  ptr +=".button-on {background-color: #1abc9c;}\n";
  ptr +=".button-on:active {background-color: #16a085;}\n";
  ptr +=".button-off {background-color: #34495e;}\n";
  ptr +=".button-off:active {background-color: #2c3e50;}\n";
  ptr +="p {font-size: 14px;color: #888;margin-bottom: 10px;}\n";
  ptr +="</style>\n";
  ptr +="</head>\n";
  ptr +="<body>\n";
  ptr +="<h1>ESP8266 Web Server</h1>\n";
    ptr +="<h3>Using Station(STA) Mode</h3>\n";
  
   if(led1stat)
  {ptr +="<p>LED1 Status: ON</p><a class=\"button button-off\" href=\"/led1off\">OFF</a>\n";}
  else
  {ptr +="<p>LED1 Status: OFF</p><a class=\"button button-on\" href=\"/led1on\">ON</a>\n";}

  if(led2stat)
  {ptr +="<p>LED2 Status: ON</p><a class=\"button button-off\" href=\"/led2off\">OFF</a>\n";}
  else
  {ptr +="<p>LED2 Status: OFF</p><a class=\"button button-on\" href=\"/led2on\">ON</a>\n";}

  ptr +="</body>\n";
  ptr +="</html>\n";
  return ptr;
}



ทำการแก้ไข แล้วอัพโหลดโค้ดที่แก้ไขแล้ว ไปยัง ESP8266 NodeMCU



เปิดหน้าต่าง Serial Monitor  โดยไปที่ Tools > Serial Monitor



แตะปุ่ม RST ที่บอร์ด ESP8266 NodeMCU เพื่อเริ่มต้นการทำงานของ ESP8266 



รอจนกระทั่งที่ Serial Monitor แสดง ชื่อเครือข่าย Wi-Fi และ IP ที่นำไปใช้งาน ในตัวอย่างนี้คือ  192.168.1.41

(ก่อนทดสอบการทำงงานควรตรวจสอบ IP ทุกครั้ง เพราะแต่ละครั้งในการเชื่อมต่ออาจได้ IP ไม่เหมือนเดิม)


ใช้โทรศัพท์มือถือ (Mobile)  หรือ คอมพิวเตอร์ (PC)  เชื่อมต่อ WiFi ชื่อเดียวกัน กับการทำงานในข้อที่ 4  แล้วเปิดเว็บบราวเซอร์ ที่ URL ป้อนไอพีที่ได้ ในตัวอย่างคือ :  192.168.1.41

     


คอมพิวเตอร์ PC เครื่องอื่นๆ ที่เชื่อมต่อเครือข่ายเดียวกันก็สามารถเรียกใช้หน้าเว็บ ได้เช่นเดียวกัน



ทดสอบการทำงาน ที่ Serial Monitor จะแสดงสถานะ การเปิด ปิด ไฟ ของเรา



ผลลัพธ์การทำงานจะเหมือนกับ วีดีโอผลลัพธ์ แบบโหมด AP เช่นเดียวกัน


credit : https://lastminuteengineers.com/creating-esp8266-web-server-arduino-ide/




วันอังคารที่ 21 พฤษภาคม พ.ศ. 2562

คุณสมบัติของ ESP8266 NodeMCU และการใช้งานกับ Arduino IDE




Internet of Things (IoT) ได้รับความนิยมในโลกของเทคโนโลยี มันได้เปลี่ยนวิธีการทำงานของเรา ให้วัตถุทางกายภาพและโลกดิจิตอลเชื่อมต่อกันมากขึ้นกว่าเดิม เมื่อคำนึงถึงเรื่องนี้ Espressif Systems (บริษัท เซมิคอนดักเตอร์ในเซี่ยงไฮ้) ได้เปิดตัวไมโครคอนโทรลเลอร์ที่รองรับ WiFi ที่มีขนาดเล็ก คือ ESP8266 ในราคาที่ไม่แพง สามารถตรวจสอบและควบคุมสิ่งต่าง ๆ จากที่ใดก็ได้ในโลก - สมบูรณ์แบบสำหรับทุกโครงการของ IoT

โมดูล ESP-12E 

คณะกรรมการพัฒนาได้ออกแบบและผลิตโมดูล ESP-12E ที่มีชิป ESP8266 ที่มีไมโครโปรเซสเซอร์ Tensilica Xtensa® 32-bit LX106 RISC ซึ่งทำงานที่ความถี่ 80 ถึง 160 MHz สามารถปรับได้และรองรับ RTOS
ESP-12E Chip
  • Tensilica Xtensa® 32-bit LX106
  • 80 to 160 MHz Clock Freq.
  • 128kB internal RAM
  • 4MB external flash
  • 802.11b/g/n Wi-Fi transceiver

ESP8266 รวมตัวรับส่งสัญญาณ Wi-Fi HT40 802.11b / g / n ดังนั้นจึงไม่เพียง แต่สามารถเชื่อมต่อกับเครือข่าย WiFi และโต้ตอบกับอินเทอร์เน็ตเท่านั้น แต่ยังสามารถตั้งค่าเครือข่ายของตัวเองได้ ทำให้อุปกรณ์อื่น ๆ สามารถเชื่อมต่อโดยตรงกับมัน และสิ่งนี้ทำให้ ESP8266 NodeMCU มีความอเนกประสงค์ในการใช้งานมากยิ่งขึ้น
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับโมดูล ESP-12E โปรดดูข้อมูลด้านล่าง

ความต้องการพลังงาน

เนื่องจากช่วงแรงดันไฟฟ้าของ ESP8266 คือ 3V ถึง 3.6V บอร์ด ESP8266 จึงมาพร้อมกับตัวควบคุมแรงดันไฟฟ้า LDO เพื่อควบคุมให้แรงดันคงที่ 3.3V ซึ่งสามารถจ่ายกระแสได้สูงสุดถึง 600mA ซึ่งน่าจะเกินพอเพราะ ESP8266 กินกระแสมากที่สุดคือ 80mA ในระหว่างการส่งสัญญาณเอาท์พุทออกไป โดยพิน 3V3 นี้สามารถใช้เพื่อจ่ายพลังงานให้กับอุปกรณ์ภายนอกได้อีกด้วย
Power Requirement
  • Operating Voltage: 2.5V to 3.6V
  • On-board 3.3V 600mA regulator
  • 80mA Operating Current
  • 20 µA during Sleep Mode



การจ่ายไฟให้ ESP8266 NodeMCU สามารถใช้ผ่านช่องเสียบ Micro USB หรือหากมีแหล่งจ่ายไฟแรงดัน 5V ก็สามารถป้อนที่พิน VIN เพื่อเป็นแหล่งจ่ายไฟให้ ESP8266 และอุปกรณ์ต่อพ่วงได้โดยตรง

คำเตือน

ESP8266 ต้องการแหล่งจ่ายไฟ 3.3V และ พิน GPIO ส่งไฟออก 3.3V สำหรับการสื่อสาร ซึ่งพิน GPIO และ พิน 3.3 V นั้นไม่ทนทานต่อ 5V! ดังนั้นต้องระมัดระวังในการเชื่อมต่อด้วย


อุปกรณ์ต่อพ่วงและ I/O
ESP8266 NodeMCU มีพินทั้งหมด 17 GPIO ที่แยกออกจากส่วนหลักๆของพินทั้งสองด้านของบอร์ดพัฒนา ซึ่งพินเหล่านี้สามารถกำหนดให้กับอุปกรณ์ต่อพ่วงได้ทุกประเภทรวมไปถึง:
  • ADC channel – ช่อง ADC ขนาด 10 บิต
  • UART interface – ส่วนต่อประสาน UART ใช้ในการโหลดโค้ดแบบอนุกรม
  • PWM outputs – พิน PWM สำหรับหรี่ไฟ LED หรือควบคุมมอเตอร์
  • SPI, I2C & I2S interface – อินเตอร์เฟซ SPI และ I2C เพื่อเชื่อมต่อเซ็นเซอร์และอุปกรณ์ต่อพ่วงทุกประเภท
  • I2S interface – อินเทอร์เฟซ I2S หากต้องการเพิ่มเสียงให้กับโปรเจค

  • Multiplexed I/Os
    • 1 ADC channels
    • 2 UART interfaces
    • 4 PWM outputs
    • SPI, I2C & I2S interface


    ต้องขอบคุณคุณสมบัติพินมัลติฟังก์ชั่นพินของ ESP8266 (อุปกรณ์ต่อพ่วงหลายอันที่มัลติเพล็กซ์บนขา GPIO เดียว) นั่นคือ GPIO เดียวสามารถทำหน้าที่เป็นทั้ง PWM / UART / SPI
สวิตช์ออนบอร์ดและไฟแสดงสถานะ LED
ESP8266 NodeMCU มีสองปุ่ม ปุ่มหนึ่งที่ระบุว่าเป็น RST ที่บริเวณมุมบนซ้ายคือปุ่มรีเซ็ต ซึ่งแน่นอนว่าใช้เพื่อรีเซ็ตชิป ESP8266 FLASH และปุ่มที่มุมล่างซ้ายเป็นปุ่มอัพโหลดที่ใช้ในขณะที่ทำการอัพโหลดเฟิร์มแวร์
Switches & Indicators
  • RST – Reset the ESP8266 chip
  • FLASH – Download new programs
  • Blue LED – User Programmable

บอร์ดยังมีไฟ LED ออนบอร์ด ที่ผู้ใช้สามารถทดสอบการทำงานของโปรแกรมได้ ซึ่งเชื่อมต่อกับพิน D0 ของบอร์ด

การสื่อสารแบบอนุกรม
บอร์ดนี้มีตัวสื่อสารกับ พอร์ต USB ของคอมพิวเตอร์ เป็นชิป UART CP2102 จาก Silicon Labs ซึ่งแปลงสัญญาณ USB เป็นแบบอนุกรม เพื่อช่วยให้คอมพิวเตอร์ของสามารถอัพโหลดโปรแกรมและสื่อสารกับชิป ESP8266 ได้

Serial Communication
  • CP2102 USB-to-UART converter
  • 4.5 Mbps communication speed
  • Flow Control support

หากคุณติดตั้งไดรเวอร์รุ่นเก่าของ CP2102 ไว้ในคอมพิวเตอร์ของคุณเราขอแนะนำให้ทำการอัพเกรดทันที

การใช้งานพินต่างๆ ของ ESP8266 NodeMCU

ESP8266 NodeMCU มีทั้งหมด 30 พินที่เชื่อมต่อกับภายนอก โดยการเชื่อมต่อมีดังนี้:


เพื่อความเข้าใจง่ายเราจะสร้างกลุ่มของพินที่มีฟังก์ชั่นที่คล้ายกัน
Power Pins มีพินพลังงาน 4 พิน ได้แก่พิน VIN หนึ่งพิน และพิน 3.3V สามพิน สามารถใช้พิน VIN เพื่อจ่ายแหล่งจ่ายไฟให้กับ ESP8266 และอุปกรณ์ต่อพ่วงได้โดยตรงหากคุณมีแหล่งจ่ายไฟแรงดัน 5V ที่ได้รับการควบคุม โดยพิน 3.3V เป็นเอาท์พุทของตัวควบคุมแรงดันไฟฟ้าออนบอร์ด พินเหล่านี้สามารถใช้เพื่อจ่ายพลังงานให้กับส่วนประกอบภายนอกได้เช่นกัน
I2C Pins ใช้สำหรับเชื่อมต่อเซ็นเซอร์ I2C และอุปกรณ์ต่อพ่วงทุกประเภทในโปรเจคของคุณ รองรับทั้ง I2C Master และ I2C Slave สามารถใช้ฟังก์ชันอินเทอร์เฟซ I2C ได้โดยทางโปรแกรมและความถี่สัญญาณนาฬิกาคือ 100 kHz ที่สูงสุด ควรสังเกตว่าความถี่สัญญาณนาฬิกา I2C ควรสูงกว่าความถี่สัญญาณนาฬิกาที่ช้าที่สุดของอุปกรณ์สลาฟ
GPIO Pins ESP8266 NodeMCU มีพิน GPIO 17 พินซึ่งสามารถกำหนดให้กับฟังก์ชั่นต่าง ๆ เช่น I2C, I2S, UART, PWM, รีโมทคอนโทรล IR, ไฟ LED และปุ่มโดยทางโปรแกรม GPIO ที่เปิดใช้งานดิจิตอลแต่ละตัวสามารถกำหนดค่าเป็น pull-up หรือ pull-down ภายในหรือตั้งค่าเป็นอิมพีแดนซ์สูง เมื่อกำหนดค่าเป็นอินพุตมันยังสามารถตั้งค่าเป็น edge-trigger หรือ level-trigger เพื่อสร้างการขัดจังหวะของ CPU
ADC Channel NodeMCU ถูกฝังอยู่กับ SAR ADC ที่มีความแม่นยำ 10 บิต ทั้งสองฟังก์ชั่นสามารถใช้งานได้โดยใช้ ADC ได้แก่ การทดสอบแรงดันไฟฟ้าของพิน VDD3P3 และการทดสอบแรงดันอินพุทของขา TOUT อย่างไรก็ตามไม่สามารถใช้งานพร้อมกันได้
UART Pins ESP8266 NodeMCU มี 2 อินเตอร์เฟสของ UART ได้แก่ UART0 และ UART1 ซึ่งให้การสื่อสารแบบอะซิงโครนัส (RS232 และ RS485) และสามารถสื่อสารได้สูงสุด 4.5 Mbps สามารถใช้ UART0 (TXD0, RXD0, RST0 & CTS0) สำหรับการสื่อสาร รองรับการควบคุมของเหลว อย่างไรก็ตาม UART1 (พิน TXD1) มีเพียงสัญญาณการส่งข้อมูลดังนั้นโดยปกติจะใช้สำหรับบันทึกการพิมพ์
SPI Pins ESP8266 มีสอง SPI (SPI และ HSPI) ในโหมดทาสและมาสเตอร์ SPI เหล่านี้ยังสนับสนุนคุณสมบัติ SPI สำหรับวัตถุประสงค์ทั่วไปต่อไปนี้:
  • โหมดจับเวลา 4 โหมดสำหรับการถ่ายโอนรูปแบบ SPI
  • มากถึง 80 MHz และแบ่งนาฬิกา 80 MHz
  • สูงถึง 64 ไบต์ FIFO
SDIO Pins ESP8266 คุณสมบัติ Secure Digital Input / Output Interface (SDIO) ซึ่งใช้เชื่อมต่อการ์ด SD โดยตรง รองรับ SDIO 4-bit 25 MHz v1.1 และ 4-bit 50 MHz SDIO v2.0
PWM Pins บอร์ดนี้มี Pulse Pulse Modulation (PWM) 4 ช่องสัญญาณ เอาท์พุท PWM สามารถดำเนินการทางโปรแกรมและใช้สำหรับการขับเคลื่อนมอเตอร์ดิจิตอลและไฟ LED ช่วงความถี่ PWM สามารถปรับได้จาก 1,000 μsถึง 10,000 μs, เช่นระหว่าง 100 Hz และ 1 kHz
Control Pins ใช้ในการควบคุม ESP8266 พินเหล่านี้รวมถึง Chip Enable pin (EN), พินรีเซ็ต (RST) และ WAKE pin
  • EN pin -  ชิป ESP8266 ถูกเปิดใช้งานเมื่อดึง EN pin สูง เมื่อดึงต่ำชิปจะทำงานที่กำลังไฟน้อยที่สุด
  • RST pin – RST pin ใช้เพื่อรีเซ็ตชิป ESP8266
  • WAKE pin – ให้ ชิป ESP8266 กลับมาทำงานใหม่อีกครั้ง

ติดตั้งโปรแกรม Arduino (IDE)


ลิงค์ดาวโหลด Arduino (IDE) https://www.arduino.cc/en/Main/Software




ติดตั้ง แพลตฟอร์ม ESP8266 



ในการเริ่มต้นเราจะต้องอัปเดตผู้จัดการบอร์ดด้วย URL ที่กำหนดเอง

เปิด Arduino IDE และไปที่ File > Preferences

คัดลอก URL ด้านล่างลงใน Additional Board Manager URLs: แล้ว คลิก OK

http://arduino.esp8266.com/stable/package_esp8266com_index.json

จากนั้นไปที่ตัวจัดการบอร์ดโดยไปที่ Tools > Board: > Boards Manager...



ที่ช่องค้นหา พิมพ์ esp8266  จะพบ esp8266 by ESP8266 Community  แล้วคลิก Install



แสดงการติดตั้งสำเร็จ แล้วปิดหน้าต่างลงไป


โปรแกรมแรก ไฟกระพริบ (Blink)
เชื่อมต่อสาย Micro USB เข้ากับ ESP8266 NodeMCU


ให้ตรวจสอบการติดตั้งไดร์เวอร์ ของ NodeMCU V2 


โดย คลิกขวา Computet -> Properties




คลิกที่ Device Manager


ที่ Ports (COM & LPT) จะพบ การติดตั้งไดร์เวอร์ ของ NodeMCU V2 ในตัวอย่างเป็น "COM12"



(ถ้าไม่พบให้ทำการติดตั้งไดร์เวอร์ก่อน)

การติดตั้งโปรแกรม Arduino (IDE) และ การติดตั้งไดร์เวอร์



แล้วจึงเปิดโปรแกรม Arduino IDE


อัพโหลดโค้ด ดังนี้
void setup()
{
 pinMode(D0, OUTPUT);
}
void loop()
{
 digitalWrite(D0, HIGH);
 delay(500);
 digitalWrite(D0, LOW);
 delay(500);
}

เลือกชนิดของบอร์ด : ไปที่ Tools > Board : เลือกเป็น NodeMCU 0.9 (ESP-12 Module) 




เลือกพอร์ตการใช้งาน : ไปที่ Tools > Port แล้วเลือกพอร์ตที่ปรากฏ ในตัวอย่างเลือกเป็น "COM12"

เลือกความเร็วในการอัพโหลด : ไปที่ Tools > Upload Speed: แล้วเลือกเป็น "115200"


กดปุ่ม   เพื่ออัพโหลด


หากสามารถอัพโหลดโปรแกรมลงบอร์ดได้สำเร็จ จะแสดงคำว่า Done uploading. ที่แถบด้านล่าง




เมื่ออัพโหลดโค้ดแล้ว LED จะเริ่มกระพริบ แสดงว่าคุณสามารถใช้งาน ESP8266 โปรแกรมแรกได้แล้ว

(อาจต้องแตะปุ่ม RST เพื่อเริ่มต้นการทำงานของ ESP8266)

credit : https://lastminuteengineers.com/esp8266-nodemcu-arduino-tutorial/

โปรเจค IoT ESP8266 วัดอุณหภูมิความชื้น บันทึกลงดาต้าเบส MySQL

เป้าหมายของโปรเจคนี้คือเราต้องดูข้อมูลด้วยการเข้าถึงโดเมน ของเราเอง ไม่ว่าจะอยู่ส่วนไหนของโลก โดย ESP8266 จะสร้างไคลเอ็นต์  ที่ทำให้คำขอ...