วันศุกร์ที่ 26 กุมภาพันธ์ พ.ศ. 2559

NodeMCU / WittyNode ESP8266 กับ Ultrasonic Sensor HC-SR04 's WebServer

คุณสมบัติ
- เป็น Sensor Node เน้นราคาประหยัด
ด้วยอุปกรณ์เพียง WittyNode ESP8266 และ Ultrasonic Sensor HC-SR04
ราคารวมเพียง 300-400บาท

- สามารอ่านระยะห่างได้ถึง 3 เมตร  Ultrasonic Sensor HC-SR04 (ประมาณ70บาท)
เอาไปอ่านระยะห่างของวัตถุ หรือ ระยะน้ำในถังได้ (ความแม่นยำใช้งานจริง  +/-   1-2 cm)

- สามารถทำเป็น Sensor Node Cloud ออกไปได้เรื่อยๆ
ผ่านทางสัญญาณ WiFi ได้ด้วยชิป ESP-12F ที่สัญญาณดีขึ้น 30% จาก ESP-12E

- ทำเป็น HTTP Web Server เพื่อทำให้ Computer, Notebook หรือ มือถือสามารถติดต่อเข้ามา
จากที่ไหนๆก็ได้ เพื่ออ่านค่า Sensor เมื่ออยู่ภายในเครื่อข่าย WiFi/LAN เดียวกันก็ได้


การต่อสาย

เนื่องจาก Ultrasonic Sensor HC-SR04 นั้นต้องใช้ไฟเลี้ยง +5VDC
ในขณะที่ WittyNode ESP8266 นั้นทำงานบนไฟ 3.3VDC

ดังนั้น เราจึงต้องต่อ Vcc ของ WittyNode ESP8266 Cloud ซึ่งจะมีค่าไฟ +5VDC
(ตามแหล่งจ่ายไฟจาก microUSB) ไปยัง Vcc ของ sensor
โดยการต่อสาย เพื่อไม่ให้สายระโยงระยาง เราจะต่อสายตามภาพดังนี้












































การ Sketch โปรแกรม ด้วย ArduinoIDE

กำหนด WittyNode ESP8266 สำหรับ ArduinoIDE ให้ติดตั้งเหมือน NodeMCU 1.0
โดยให้เลือก board ด้วย NodeMCU 1.0

































จากนั้น ให้ sketch file นี้ ลงสู่ WittyNode ESP82666 ตามโคดดังนี้

------------------------------------------------------------------------------------
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

const char* ssid = ".............";        //กำหนดเครื่อข่าย WiFi ของคุณ
const char* password = "..........";  //กำหนด password ของเครือข่าย WiFi

ESP8266WebServer server(80);


#define TRIGGER_PIN       D7    // GPIO13
#define ECHO_PIN          D6   // GPIO12
#define GND_PIN           D5   // GPIO14

// เพื่อความแม่นยำของ Ultrasonic
// จะคำนวนระยะให้ 10 รอบ แล้วตัดค่าที่มากสุด น้อยสุดออกไปแล้วเฉลี่ย8 ค่า
long ultrasonic_distance(){
  long duration[10], distance[10];
  long dist_min, dist_max, dist_sum=0;

  for(int i=0; i<10; i++){
    distance[i]=600;
    while(distance[i]>300){
      digitalWrite(TRIGGER_PIN, LOW);  // Added this line
      delayMicroseconds(2); // Added this line
      digitalWrite(TRIGGER_PIN, HIGH);
      delayMicroseconds(10); // Added this line
      digitalWrite(TRIGGER_PIN, LOW);
      duration[i] = pulseIn(ECHO_PIN, HIGH);
      distance[i] = (duration[i]/2) / 29.1;
      delayMicroseconds(10); // Added this line
    }
 
    if(i==0){
      dist_min= distance[i];
      dist_max= distance[i];
    }else{
      dist_min = (distance[i]<dist_min)? distance[i] : dist_min;
      dist_max = (distance[i]>dist_max)? distance[i] : dist_max;
    }
    dist_sum += distance[i];
  }

  return (dist_sum-dist_min-dist_max)/8;
}


void handleRoot() {
  long distance= ultrasonic_distance();                                     // รับค่าระยะที่อ่านได้จาก Ultrasonic Sensor
  server.send(200, "text/html", "<H1>"+(String)distance+" cm</H1>");       // แสดงผลคืนให้แก่ Web Client ที่ติดต่อเข้ามา
  Serial.println(distance);
}

void setup() {
  Serial.begin (115200);
  pinMode(TRIGGER_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(GND_PIN, OUTPUT); digitalWrite(GND_PIN,LOW);

  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  server.on("/", handleRoot);
  server.begin();
  Serial.println("HTTP server started");
}


void loop() {
  server.handleClient();
}



------------------------------------------------------------------------------------

จากนั้น กดปุ่ม Ctrl+Shift + M เพื่อเปิดหน้าต่าง Serial Monitor ดูค่าต่างๆตามที่ได้โปรแกรม
WittyNode จะทำการติดต่อเข้าไปเครือข่าย WiFi ตามที่กำหนด
และแสดงค่า IP ของ WittyNode ที่หลังจาก connect เข้าสู่เครือข่าย WiFiแล้ว
(ในทีนี้คือ เครือข่ายชื่อ ZenCAT )

เราจะใช้ค่า IP ของ WittyNode นี้ในการเปิด Web Browser ต่อไป





ตัวอย่างค่า IP ของ WittyNode หลังต่อเข้าเครือข่าย WiFi แล้ว ในที่นี้คือ 192.168.43.53

หลังจากนั้นก็เข้า Web Browser อะไรก็ได้เช่น Chrome
จาก Computer หรือ Notebook หรือ มือถือ ฯลฯ
ที่อยู่ภายในเครือข่าย WiFi เดียวกันนี้ ( ในที่นี้คือ ZenCAT)

โดยเมื่อใส่ค่า IP ที่ได้มาในช่อง url
จะทำให้  Web Browser จะติดต่อไปยัง WittyNode เพื่อขอให้อ่านค่า Ultrasonic Sensor ให้แสดงผลค่าคืนกลับมา

ตัวอย่างผลที่เรียกจาก Web Browser เมื่อติดต่อไปยัง WittyNode เพื่อขออ่านค่า Ultrasonic Sensor
(หมายเหตุ ตัวอย่างนี้ จะแสดงแบบง่ายๆ ต้อง reflesh หน้า Web Browser เอาเพื่อเรียกอ่านแต่ละครั้ง)




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

  1. ใชh ESP8266-01 สีดำ ได้มั้ยครับ ขอบคุณครับ

    ตอบลบ
  2. ไม่ระบุชื่อ23 พฤษภาคม 2560 เวลา 03:47

    แล้วถ้าจะให้มันขึ้นค่าเป็นแบบออโต้โดยที่เราไม่ต้องกดรีเฟรชตลอดเวลาที่ดูค่า นี่เราต้องใช้โค้ดอะไรหรอคะ

    ตอบลบ