วันศุกร์ที่ 27 พฤษภาคม พ.ศ. 2559

Week05 NodeMCU

Week05 NodeMCU

 

เป้าหมาย
ทำความเข้าใจว่า Node MCU คืออะไรและสามารถ นำ Node MCU ไปประยุกต์ใช้ในงานต่างๆได้



อุปกรณ์ที่ต้องใช้ 
1. Arduino Board รุ่นใดก็ได้    1    ea
2. NoteBook หรือ Pc 1 เครื่อง
3. Jump Wire (สายไฟ แบบมีขาและรูเสียบ)  10  ea
4. สายจ่ายไฟเลี้ยงให้กับ Board Arduino
5. สวิทซ์แบบ Pulse   1  ea
6. หลอด LED 8  ea
7. Node MCU ESP8266  1  ea






มาทำความรู้จักกับ Node MCU ESP8266 


NodeMCU คืออะไร ?
NodeMCU คือ แพลตฟอร์มหนึ่งที่ใช้ช่วยในการสร้างโปรเจค Internet of Things (IoT) ที่ประกอบไปด้วย Development Kit (ตัวบอร์ด) และ Firmware (Software บนบอร์ด) ที่เป็น open source สามารถเขียนโปรแกรมด้วยภาษา Lau ได้ ทำให้ใช้งานได้ง่ายขึ้น มาพร้อมกับโมดูล WiFi (ESP8266) ซึ่งเป็นหัวใจสำคัญในการใช้เชื่อมต่อกับอินเตอร์เน็ตนั่นเอง ตัวโมดูลESP8266นั้นมีอยู่ด้วยกันหลายรุ่นมาก ตั้งแต่เวอร์ชันแรกที่เป็น ESP-01 ไล่ไปเรื่อยๆจนปัจจุบันมีถึง ESP-12 แล้ว และที่ฝังอยู่ในNodeMCU version แรกนั้นก็เป็น ESP-12 แต่ใน version2 นั้นจะใช้เป็น ESP-12E แทน ซึ่งการใช้งานโดยรวมก็ไม่แตกต่างกันมากนัก NodeMCUนั้นมีลักษณะคล้ายกับ Arduino ตรงที่มีพอร์ต Input Output  buil inมาในตัว  สามารถเขียนโปรแกรมคอนโทรลอุปกรณ์ I/O ได้โดยไม่ต้องผ่านอุปกรณ์อื่นๆ และเมื่อไม่นานมานี้ก็มีนักพัฒนาที่สามารถทำให้ Arduino IDE ใช้งานร่วมกับ Node MCU ได้ จึงทำให้ใช้ภาษา C/C++ ในการเขียนโปรแกรมได้ ทำให้เราสามารถใช้งานมันได้หลากหลายมากยิ่งขึ้น  NodeMCUตัวนี้สามารถทำอะไรได้หลายอย่างมากโดยเฉพาะเรื่องที่เกี่ยวข้องกับ IoT ไม่ว่าจะเป็นการทำ Web Server ขนาดเล็ก การควบคุมการเปิดปิดไฟผ่านWiFi และอื่นๆอีกมากมาย ซึ่งจะสอนในบทความต่อๆไป
อ้างอิงจาก : http://www.sat2you.com/site/?p=2136



ข้อดีของบอร์ด Arduino ESP8266
- เป็นแบบ Open Source Project มี Source code ให้ได้เรียนรู้อยู่บน Github ตามลิงค์  https://github.com/esp8266/Arduino
- สามารถกด upload sketch ได้ เชื่อมต่อบอร์ด USB กับคอมพิวเตอร์ใช้งานง่าย ขนาดของบอร์ดต่อลง Protoboard ได้
- ชิบภายใน ESP 8266 มี CPU ขนาด 32 bit แตกต่างจาก Arduino ที่เป็น CPU 8 bit
- ถึงแม้ขา I/O จะไม่มากเท่าของ Arduino แต่เราสามารถเขียนโปรแกรมลงบนขา GPIO ได้ทุกขาพอๆกัน เป็นข้อดีที่เพิ่มมาจากความต้องการใช้ WIFI เชื่อมต่อเมื่อต้องการเล่น Arduino ทำให้ต้องซื้อ Module wifi เพิ่ม นั่นคือ NodeMCU (ESP8266) มีต้นทุนต่ำกว่ามาก
-มีอุปกรณ์หลายอย่างที่ใช้งานที่แรงดัน +3.3 V เป็นส่วนใหญ่ ดังนั้นเราสามารถนำ NodeMCU (ESP8266) มาใช้เชื่อมต่อได้โดยตรง
อ้างอิงจาก : http://www.ayarafun.com/2015/08/introduction-arduino-esp8266-nodemcu/




ขั้นตอนการติดตั้ง Library ของ ESP8266 ให้กับ Arduino IDE

1. ไปที่ Menu File >> Preferences
2. ใส่ URL >>ลงใน Addition Board Manager URLs:
 >> http://arduino.esp8266.com/stable/package_esp8266com_index.json <<


3. จากนั้นไปที่ Menu Tools >> Boar:”xxxxxx” >> Board Manager...


4. เลือก Type เป็น Contributed ไปที่ ESP8266 และกด Install


5. เมื่อทำการติดตั้งเสร็จเราจะต้องปิดและเปิด Arduino Ide ใหม่ แล้วเข้าไปที่ Menu Tools >> Board ...
จะมี board ESP 8266 ให้เลือกใช้ การติดตั้งเป็นอันเสร็จพิธี






มาทดสอบว่ามันสามารถใช้งานได้จริงๆแล้วกันดีกว่า
Source Code ที่ใช้ในการทดสอบ (Blink LED on Board)


int LED_X = 2; // GPIO2
int LED_Y = 16; //  GPIO16 or BUILTIN_LED
void setup() {
pinMode(LED_X, OUTPUT);
pinMode(LED_Y, OUTPUT);
}
void loop() {
digitalWrite(LED_X, LOW);
digitalWrite(LED_Y, HIGH);
delay(200);
digitalWrite(LED_X, HIGH);
digitalWrite(LED_Y, LOW);
delay(200);
}



ผลการทดสอบ






ขั้นตอนการเชื่อมต่อ Node MCU เข้ากับระบบ Network
ตัวอย่าง Source Code การแสดงหมายเลข MAC ADDRESS

#include <ESP8266WiFi.h>
uint8_t MAC_array[6];
char MAC_char[18];
void setup() {
    Serial.begin(115200);
    Serial.println();
    WiFi.macAddress(MAC_array); 
    for (int i = 0; i < sizeof(MAC_array); ++i) {
        sprintf(MAC_char, "%s%02x:", MAC_char, MAC_array[i]);
    }
    Serial.println(MAC_char);
}
void loop() {
    Serial.println(MAC_char);
    Serial.println();
    delay(5000);
}



ผลการทดสอบ





ขั้นตอนการทำให้ Node MCU ของเราสามารถเชื่อมต่อกับ AP แบบ DHCP
1. เขียนโค๊ดลง Arduino IDE และระบุ ssid กับ password ของ internet ที่เราต้องการให้เชื่อมต่อเป็น Access point

ตัวอย่าง Source Code การเชื่อมต่อกับ AP แบบ DHCP
 
#include <ESP8266WiFi.h>
const char* ssid= "Your-ssid";
const char* password = "Your-pass"; 
void setup()
{
Serial.begin(115200);
delay(10);
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"); 
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void loop() {
}






2. กดอัพโหลดโค๊ดเข้า ESP8266 แล้วกดดูผลลัพที่ รูปแว่นขยายมุมขวาบนของ โปรแกรม จะได้ผลลัพท์ดังนี้ถ้ามีการเชื่อมต่อกันกับตัว ESP8266

ผลการทดสอบ






ขั้นตอนการทำให้ Node MCU เป็น TCP Client
1. เขียนโค๊ดลง Arduino IDE

ตัวอย่าง Source Code (TCP Client)

#include <ESP8266WiFi.h>
#define SERVER_PORT 8888 //ค่า port ที่ต้องการเชื่อมต่อ
IPAddress server_ip = {192, 168, 0, 0}; //ค่า ip ของ Server (อย่าลืมแก้เป็น IP ของตัวเอง)
const char* ssid = "Your-ssid"; //ค่าของ SSID (อย่าลืมแก้เป็น ชื่อ SSID ของตัวเอง)
const char* password = "Your-pass"; //ค่าของ SSID (อย่าลืมแก้เป็น password ของตัวเอง)
WiFiServer server(SERVER_PORT);
WiFiClient client; //สร้าง object client
void setup()
{
Serial.begin(115200); //เปิดใช้ Serial
WiFi.begin(ssid, password); //เชื่อมต่อกับ AP
while (WiFi.status() != WL_CONNECTED) //รอการเชื่อมต่อ
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP()); //แสดงหมายเลข IP
Serial.println("Connect TCP Server");
while (!client.connect(server_ip, SERVER_PORT)) //เชื่อมต่อกับ Server
{
Serial.print(".");
delay(100);
}
Serial.println("Success");
ESP.wdtDisable(); //ปิด watch dog Timer
}
void loop()
{
while (client.available()) //ตรวจเช็ตว่ามี Data ส่งมาจาก Server หรือไม่
{
uint8_t data = client.read(); //อ่าน Data จาก Buffer
Serial.write(data); //แสดงผล Data ทาง Serial
}
client.println("B5601639 Phongsart Phatthaisong"); //ส่งค่าที่ได้รับกลับไปยัง Server
delay(1000);
}




2. กดอัพโหลดโค๊ดเข้า ESP8266 แล้วกดดูผลลัพที่ รูปแว่นขยายมุมขวาบนของ โปรแกรม จะได้ผลลัพท์ดังนี้ถ้ามีการเชื่อมต่อกันกับตัว ESP8266


3. ดาวน์โหลด โปรแกรม hercules จากนั้นเปิดโปรแกรมขึ้นมาเข้ามา tab TCP SERVER ใส่หมายเลขพอร์ทในการเชื่อต่อให้ตรงกับที่ใส่ในข้อ 1. แล้วกด เพื่อดูผลลัพท์ได้ที่นี่ >>คลิ๊ก<< 



ผลการทดสอบ








ขั้นตอนการทำให้ Node MCU เป็น TCP Server
1. เขียนโค๊ดลง Arduino IDE

ตัวอย่าง Source Code (TCP Server)

#include <ESP8266WiFi.h>
#define SERVER_PORT 8000 //กำหนด Port ใช้งาน
const char* ssid = "Your-ssid"; //กำหนด SSID
const char* password = "Your-pass"; //กำหนด Password
WiFiServer server(SERVER_PORT); 
void setup()
{ Serial.begin(115200); //เปิดใช้ Serial
Serial.println("");
Serial.println("");
WiFi.begin(ssid, password); //เชื่อมต่อกับ AP
while (WiFi.status() != WL_CONNECTED) //รอการเชื่อมต่อ
{ delay(500);
Serial.print(".");
}
Serial.println("WiFi connected"); //แสดงข้อความเชื่อมต่อสำเร็จ
Serial.println("IP address: ");
Serial.println(WiFi.localIP()); //แสดงหมายเลข IP
server.begin(); //เริ่มต้นทำงาน TCP Server
Serial.println("Server started"); 
ESP.wdtDisable(); //ปิด watch dog Timer
}
void loop()
{ WiFiClient client = server.available(); 
if (client) //ตรวจเช็คว่ามี Client เชื่อมต่อเข้ามาหรือไม่
{
Serial.println("new client");
while (1) //วนรอบตลอด
{ while (client.available()) 
{ uint8_t data = client.read(); //อ่าน Data จาก Buffer
Serial.write(data); //แสดงผล Data ทาง Serial
}
if (server.hasClient()) //ตรวจเช็คว่ายังมี Client เชื่อมต่ออยู่หรือไม่
{ return; //ถ้าไม่มีให้ออกจาก ลูป ไปเริ่มต้นรอรับ Client ใหม่
}}}}





2. กดอัพโหลดโค๊ดเข้า ESP8266 แล้วกดดูผลลัพที่ รูปแว่นขยายมุมขวาบนของ โปรแกรม จะได้ผลลัพท์ดังนี้ถ้ามีการเชื่อมต่อกันกับตัว ESP8266



3. เปิดโปรแกรม hercules ที่โหลด จากลิ้งในข้อ 2. ขึ้นมาจากนั้นทำการ เลือก tab TCP Client กรอก  ipaddress และ port ของ ESP8266 ลงไป จากนั้นกด Conect



4. ทดสอบส่งข้อความ จากนั้นดูผลลัพท์






ขั้นตอนการทำให้ Node MCU เป็น Web server input
1. เขียนโค๊ดลง Arduino IDE

ตัวอย่าง Source Code (Web Server input)

#include <ESP8266WiFi.h>
#define SW D2 //กำหนดรับ input จาก Switch ที่ Pin D2
#define LED D0
const char* ssid = "CPE@SUT"; //กำหนด SSID (อย่าลืมเปลี่ยนเป็นของตัวเอง)
const char* password = "computer555"; //กำหนด password (อย่าลืมเปลี่ยนเป็นของตัวเอง)
WiFiServer server(80); //กำหนดใช้งาน TCP Server ที่ Port 80
void control_led(int pin);
void open_and_send_file(WiFiClient client_in,const char* path);
void setup() {
Serial.begin(115200);
pinMode(SW, INPUT_PULLUP); //กำหนดให้ pin D2 เป็น input
pinMode(LED, OUTPUT);
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password); // เชื่อมต่อกับ AP
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
server.begin(); //เริ่มใช้งาน TCP Server
Serial.println("Server started");
Serial.println(WiFi.localIP()); //แสดง IP
}
void loop() {
WiFiClient client = server.available(); //รอรับ การเชื่อมต่อจาก Client
if (!client) { //ถ้าไม่มี Client เข้ามาให้เริ่มกับไปวน loop รอรับใหม่
return;
}
Serial.println("new client");
while (!client.available())
{
delay(1);
}
String req = client.readStringUntil('\r'); //อ่านค่าที่ได้รับจากclient จากข้อมูลแรกถึง ‘\r’
Serial.println(req);
client.flush();
// เก็บ HTML Code ลงในตัวแปร String web
String web = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n";
web += "<html>\r\n";
web += "<body>\r\n";
web += "<head>Read Switch\r\n";
web += "<style>\r\n";
web += ".circle-blue,.circle-red\r\n";
web += "{width: 100px;\r\n";
web += "height: 100px;\r\n";
web += "border-radius: 50%;}\r\n";
web += ".circle-blue\r\n";
web += "{background-color: blue}\r\n";
web += ".circle-red\r\n";
web += "{background-color: red}\r\n";
web += "</style>\r\n";
web += "</head>\r\n";
web += "<meta http-equiv=\"refresh\" content=\"1\">";
web += "<p>\r\n";
unsigned char sw_input = digitalRead(SW); //อ่านค่าจาก Switch
if (sw_input == 1)
{
  digitalWrite(LED,HIGH);
web += "<div class=\"circle-blue\"></div>\r\n"; //ถ้าเป็น 1 ให้แสดงวงกลมสีเทา
web += "<p>SW = 1</p>\r\n";
}
else
{
  digitalWrite(LED,LOW);
web += "<div class=\"circle-red\"></div>\r\n"; //ถ้าเป็น 0 ให้แสดงวงกลมสีเหลือง
web += "<p>SW = 0</p>\r\n";
}
web += "</p>\r\n";
web += "</body>\r\n";
web += "</html>\r\n";
client.print(web); //ส่ง HTML ไปยัง Client
}




2. ต่อสวิทซ์เข้ากับ board และทำการรันโค๊ด แล้วดูที่ serial monitor หากได้ผลลัพท์ดังภาพจังไปขั้นต่อไป





3. นำ ipaddress ไปใส่ที่ช่อง url ของ browser  แล้วกดค้นหา จะได้


4. และเมื่อทำการกดสวิทซ์ จะได้ผลลัพท์ดังนี้

ผลการทดสอบ : วงกลมสีน้ำเงินจะเปลี่ยนเป็นวงกลมสีแดงเมื่อมีการ กดสวิทซ์












ขั้นตอนการทำให้ Node MCU เป็น Web Server Ajax
1. เขียนโค๊ดลง Arduino IDE

ตัวอย่าง Source Code (Web Server Ajax)

#include <ESP8266WiFi.h>
#include <OneWire.h>
const char* ssid = "Dok";
const char* password = "123456789";
#define Relay1 D1
#define Relay2 D2
OneWire  ds(D4);
float celsius, fahrenheit;
WiFiServer server(5678);
void setup() {
  Serial.begin(115200);
  delay(10);
  //dht.begin();
  pinMode(Relay1, OUTPUT);
  pinMode(Relay2, OUTPUT);
  digitalWrite(Relay1, LOW);
  digitalWrite(Relay2, LOW);
  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");
  server.begin();
  Serial.println("Server started");
  Serial.println(WiFi.localIP());
}
void loop() {
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  Serial.println("new client");
  while (!client.available()) {
    delay(1);
  }
  String req = client.readStringUntil('\r');
  Serial.println(req);
  client.flush();
  if (req.indexOf("/r1off.html") != -1)
  {
    digitalWrite(Relay1, HIGH);
  }
  else if (req.indexOf("/r1on.html") != -1)
  {
    digitalWrite(Relay1, LOW);
  }
  else if (req.indexOf("/r2on.html") != -1)
  {
    digitalWrite(Relay2, LOW);
  }
  else if (req.indexOf("/r2off.html") != -1)
  {
    digitalWrite(Relay2, HIGH);
  }
  else if (req.indexOf("/Temp_.html") != -1)
  {
    float h = TempDS18B20();
    if (h < 90000.0) {
      float t = h * 1.8 + 32.0;
      client.flush();
      String humi = "<h3>Temp = ";
      humi += String(h) + " C</h3>\r\n";
      humi += "<h3>Temp = ";
      humi += String(t) + " F</h3>\r\n";
      Serial.println(h);
      Serial.println(t);
      client.print(humi);
    }

  }
  else if (req.indexOf("/") != -1)
  {
    client.flush();
    String web = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n";
    web += "<html>\r\n";
    web += "<head>\r\n";
    web += "<style>\r\n";
    web += ".button-red,.button-blue\r\n";
    web += "{color: white;\r\n";
    web += "border-radius: 9px;\r\n";
    web += "font-family:Arial;\r\n";
    web += "font-size:25px;\r\n";
    web += "padding:50px 80px;\r\n";
    web += "}\r\n";
    web += ".button-red:hover:active,.button-blue:hover:active\r\n";
    web += "{position:relative;top:3px;color: yellow;}\r\n";
    web += ".button-red {background: rgb(202, 60, 60);}\r\n";
    web += ".button-blue {background: rgb(100,116,255);}\r\n";
    web += "h1{color:black;font-family:Arial;font-size:40px;text-align:center;}\r\n";
    web += "</style>\r\n";
    web += "<script>\r\n";
    web += "var ajax = null;\r\n";
    web += "if (window.XMLHttpRequest)\r\n";
    web += "{ajax =new XMLHttpRequest();}\r\n";
    web += "else\r\n";
    web += "{ajax=new ActiveXObject(\"Microsoft.XMLHTTP\");}\r\n";
    web += "function ajaxLoad(method ,URL,displayElementId,sendData)\r\n";
    web += "{\r\n";
    web += "if(!ajax){alert(\"not support\");return;}\r\n";
    web += "ajax.open(method,URL,true);\r\n";
    web += "ajax.onreadystatechange = function()\r\n";
    web += "{\r\n";
    web += "if(ajax.readyState == 4 && ajax.status==200)\r\n";
    web += "{\r\n";
    web += "var ajax_result = ajax.responseText;\r\n";
    web += "var el = document.getElementById(displayElementId);\r\n";
    web += "el.innerHTML = ajax_result;\r\n";
    web += "}\r\n";
    web += "}\r\n";
    web += "ajax.send(sendData);\r\n";
    web += "}\r\n";
    web += "function update_temp_humi()\r\n";
    web += "{\r\n";
    web += "var rand = Math.random();\r\n";
    web += "var URL = \"/Temp_.html\";\r\n";
    web += "ajaxLoad(\"GET\",URL,\'temp_humi\',null);\r\n";
    web += "}\r\n";
    web += "</script>\r\n";
    web += "</head>";
    web += "<body>";
    web += "<h1>Demo Web Server Ajax</h1>";
    web += "<h2>Temp C and F</h2>";
    web += "<div id=\"temp_humi\">";
    web += "<h3>Temp = xx C</h3>";
    web += "<h3>Temp = xx F</h3>";
    web += "</div>";
    web += "<div><p><input class=\"button-red\" type=\"button\" value=\"Relay 1 On\" onclick=\"Relay(\'r1on\')\">";
    web += "<input class=\"button-blue\" type=\"button\" value=\"Relay 1 Off\" onclick=\"Relay(\'r1off\')\"></P>";
    web += "<p><input class=\"button-red\" type=\"button\" value=\"Relay 2 On\" onclick=\"Relay(\'r2on\')\">";
    web += "<input class=\"button-blue\" type=\"button\" value=\"Relay 2 Off\" onclick=\"Relay(\'r2off\')\"></P>";
    web += "</div>";
    web += "<script>";
    web += "function Relay(state){ajaxLoad(\"GET\",state+\'.html\',null,null);}";
    web += "setInterval(\"update_temp_humi()\",2000);";
    web += "</script>";
    web += "</body>";
    web += "</html>";
    client.print(web);
    return;
  }
}

float TempDS18B20(void)
{
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius, fahrenheit;

  if ( !ds.search(addr)) {
    //Serial.println("No more addresses.");
    //Serial.println();
    ds.reset_search();
    delay(250);
    return 99999.9;
  }

  //Serial.print("ROM =");
  for ( i = 0; i < 8; i++) {
    //Serial.write(' ');
    //Serial.print(addr[i], HEX);
  }

  if (OneWire::crc8(addr, 7) != addr[7]) {
    //Serial.println("CRC is not valid!");
    return 99999.9;
  }
  //Serial.println();

  // the first ROM byte indicates which chip
  switch (addr[0]) {
    case 0x10:
      //Serial.println("  Chip = DS18S20");  // or old DS1820
      type_s = 1;
      break;
    case 0x28:
      //Serial.println("  Chip = DS18B20");
      type_s = 0;
      break;
    case 0x22:
      ////Serial.println("  Chip = DS1822");
      type_s = 0;
      break;
    default:
      //Serial.println("Device is not a DS18x20 family device.");
      return 99999.9;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);        // start conversion, with parasite power on at the end

  delay(1000);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.

  present = ds.reset();
  ds.select(addr);
  ds.write(0xBE);         // Read Scratchpad

  //Serial.print("  Data = ");
  //Serial.print(present,HEX);
  //Serial.print(" ");
  for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data[i] = ds.read();
    //Serial.print(data[i], HEX);
    //Serial.print(" ");
  }
  //Serial.print(" CRC=");
  //Serial.print(OneWire::crc8(data, 8), HEX);
  //Serial.println();

  // convert the data to actual temperature

  unsigned int raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // count remain gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  }
  else {
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw << 3;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms
    // default is 12 bit resolution, 750 ms conversion time
  }
  return  ((float)raw / 16.0);

}



2. ทำการต่อ LED เข้ากับ ESP8266 แลัว อัพโหลดโค๊ด จากนั้นนำไอพี ของ ESP8266 ใส่ค้นหาลงใน Browser เช่นเดียวกับ Web server input ถ้าทำถูกต้องจะได้ผลลัพท์อย่างนี้

3. ทำการทดสอบกดปุ่มเปิดปิดไฟทั้งสองดวงดู

ผลการทดสอบ


0 ความคิดเห็น:

แสดงความคิดเห็น