Blynk Ultrasonic Sensor and LCD Display - mrolarik/simple-iot GitHub Wiki
- ในตัวอย่างนี้จะแสดงวิธีการต่อ
Ultrasonic Sensor
เข้ากับ NodeMCU และสั่งการควบคุมผ่าน Blynk หรือ Blynk Server - การต่อ
Ultrasonic Sensor
สามารถดูได้จากลิงก์ NodeMCU - Ultrasonic Sensor - Web Server ที่มา https://www.hackster.io/mpho_mphego/automated-standup-desk-640adf
โดย
* VCC --> ไปที่ VU บน NodeMCU
* Trig --> ไปที่ D5 หรือ GPIO 14
* Echo --> ไปที่ D6 หรือ GPIO 12
* GND --> ไปที่ GND/G
- จากตัวอย่างจะมี Widget ชื่อ LCD ปรากฎใน Application Blynk โดยจะมีข้อความแสดงระยะที่วัดได้จาก Ultrasonic Sensor มีค่าเป็นเซ็นติเมตร (cm.)
- วิธีการสร้าง Application Blynk ตั้งแต่เริ่มต้นสามารถอ่านได้จากลิงก์ Blynk-LED
- จากตัวอย่างให้เพิ่ม Widget LCD และทำการกำหนดค่า
PIN
ให้เป็นแบบ Virtual และกำหนดให้มีค่าเป็นV1
ดังนี้
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#define TRIGGER_PIN D5 // GPIO14
#define ECHO_PIN D6 // GPIO12
#define LED1 D0
#define LED2 D1
char auth[] = "<blynk token>";
const char* ssid = "<ssid>";
const char* password = "<password>";
const char* server = "<server ip address>";
const int port = 8080;
WidgetLCD lcd(V1);
// เพื่อความแม่นยำของ 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 setup(){
Serial.begin(115200);
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
Blynk.begin(auth, ssid, password, server, port);
lcd.clear(); //Use it to clear the LCD Widget
lcd.print(0, 0, "Distance in cm"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
// Please use timed events when LCD printintg in void loop to avoid sending too many commands
// It will cause a FLOOD Error, and connection will be dropped
}
void loop(){
lcd.clear();
lcd.print(0, 0,"Distance in cm"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
delay(1500);
long distance = ultrasonic_distance();
Serial.print(distance);
Serial.println("cm");
lcd.print(0, 1, distance);
Blynk.run();
delay(3500);
}
ส่วนของโปรแกรมดัดแปลงมาจากลิงก์
- หากใช้ Local Blynk Server ที่ติดตั้งขึ้นมาใช้งานเอง ให้กำหนดค่าในการติดต่อ Local Blynk Server ดังนี้
char auth[] = "<blynk token>";
const char* ssid = "<ssid>";
const char* password = "<password>";
const char* server = "<server ip address>";
const int port = 8080;
Blynk.begin(auth, ssid, password, server, port);
- หากเชื่อมต่อกับ Blynk Server ทั่วไป ให้กำหนดค่า ดังนี้
char auth[] = "<blynk token>";
const char* ssid = "<ssid>";
const char* password = "<password>";
Blynk.begin(auth, ssid, password);
- จากตัวอย่างข้างต้น ได้เพิ่มหลอด LED เข้าไปจำนวน 2 หลอด โดยใช้ pin หมายเลข D0 และ D1 โดยกำหนด ดังนี้
#define LED1 D0
#define LED2 D1
- ทำการ setup ค่าของ LED ทั้ง 2 ดังนี้
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);