การสร้างแอปพลิเคชันเพื่อรับค่าและแสดงผลด้วย Blynk

 

ในบทนี้ จะเป็นการประยุกต์ใช้งาน NodeMCU ร่วมกับ Blynk App เพิ่มเติมจากบทที่แล้ว โดยจะแบ่งเป็น 3 ตอน คือ การสร้างแอปพลิเคชันบน Blynk App เพื่อแสดงค่าระยะทาง การสร้างแอปพลิเคชันบน Blynk App เพื่อแสดงค่าความสว่าง และ การสร้างแอปพลิเคชันบน Blynk App เพื่อควบคุมรีเลย์จากความสว่าง โดยการทดลองที่แสดงในบทนี้ มีวัตถุประสงค์เพื่อให้ผู้เรียนสามารถเชื่อมต่อ NodeMCU กับแอพพลิเคชัน Blynk และรับค่าต่าง ๆ จากเซนเซอร์ได้ และผู้เรียนสามารถเขียนโปรแกรมประยุกต์ใช้งานควบคุมร่วมกันระหว่าง NodeMCU และแอปพลิเคชัน Blynk App ได้

 

อุปกรณ์ที่ใช้ในการทดลอง

1.     เครี่องคอมพิวเตอร์ที่มีระบบปฏิบัติการ Windows (ตั้งแต่ Windows 7 ขึ้นไป)
พร้อมติดตั้งโปรแกรม
Arduino IDE 1.8.8 IoT                            1 เครื่อง

2.     NodeMCU v.3                                                             1 บอร์ด

3.     NodeMCU Base Ver 1.0                                                 1 บอร์ด

4.     บอร์ดโมดูลอัลตราโซนิกส์ HC-SR04                                        1 บอร์ด

5.     บอร์ดโมดูลโมดูลวัดแสงแบบแอนะล็อกด้วย LDR                         1 บอร์ด

6.     บอร์ดรีเลย์ชนิด 4 ช่อง                                                      1 บอร์ด

7.     อะแดปเตอร์ 9 V                                                            1 ตัว

8.     สาย USB                                                                    1 เส้น

9.     สายต่อวงจร (สายจัมพ์ เมีย-เมีย)                                           6 เส้น

 

 

การสร้างแอปพลิเคชันบน Blynk App เพื่อแสดงค่าระยะทาง

1. ต่อวงจรตามรูปที่ 13.1 โดยให้ต่อขา D0 และ D1 ของ NodeMCU เข้ากับขา TRIG และ ECHO ของบอร์ดโมดูลอัลตราโซนิกส์ HC-SR04 ตามลำดับ

 

1

 

รูปที่ 13.1 การเชื่อมต่อเพื่อใช้งานโมดูลอัลตราโซนิกส์

 

2. เขียนโค้ดโปรแกรมดังแสดงข้างล่าง (โดยอาจจะต้องแก้ไข auth, ssid และ pass)

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

 

25

26

27

28

29

30

31

32

33

// Control NodeMCU ESP8266 by Blynk

// Read and display value from ultrasonic sensor

 

// Comment this out to disable prints

#define BLYNK_PRINT Serial

 

#include <ESP8266WiFi.h>

#include <BlynkSimpleEsp8266.h>

#include <Ultrasonic.h>

 

// ultrasonic(Trigger PIN, Echo PIN)

Ultrasonic ultrasonic(D0,D1);

 

char auth[] = "9c687abf4897467992e46e7249af7209";

char ssid[] = "XXXXXXX";

char pass[] = "XXXXXXX";

 

void setup() {

    Serial.begin(9600);

    Blynk.begin(auth, ssid, pass);

}

 

void sendUltra() {

    unsigned long ultra_value = ultrasonic.Ranging(CM);

    Blynk.virtualWrite(V0, ultra_value);

}

 

void loop() {

    Blynk.run();

    delay(100);

    sendUltra();

}

 

 

3. อัปโหลดโปรแกรมลงใน NodeMCU เพื่อให้ฮาร์ดแวร์รอรับคำสั่งเชื่อมต่อ

 

4. เปิด Blynk App โดยอาจสร้างโปรเจคใหม่ (ขอ Token ใหม่) หรือลบอุปกรณ์ในโปรเจคเดิมก็ได้ จากนั้นจึงสร้างตัวแสดงค่า (Value Display) 1 ตัว แล้วขยายขนาด (ดังรูปที่ 13.2) โดยกำหนด INPUT PIN เป็นปุ่มเสมือน V0 ดังรูปที่ 13.2

 

5. รันโปรแกรมเพื่อทดสอบการรับค่าเข้าจากโมดูลอัลตราโซนิกส์ และทดลองเปลี่ยนระยะห่างเพื่อตรวจสอบความถูกต้องของการอ่านค่าและการส่งข้อมูล

 

1

 

รูปที่ 13.2 ขั้นตอนการสร้างและกำหนดคุณสมบัติของ Value Display
เพื่อแสดงค่าจากโมดูลอัลตราโซนิกส์

 

 

 

การสร้างแอปพลิเคชันบน Blynk App เพื่อแสดงค่าความสว่าง

1. ต่อวงจรตามรูปที่ 13.3 โดยให้ต่อขา A0 ของ NodeMCU ต่อเข้ากับขา A0 ของบอร์ดโมดูลวัดค่าความสว่างแสงแบบแอนะล็อก

 

1

 

รูปที่ 13.3 การเชื่อมต่อเพื่อใช้งานโมดูลวัดแสงแบบแอนะล็อก

 

2. เขียนโค้ดโปรแกรมดังแสดงข้างล่าง (โดยอาจจะต้องแก้ไข auth, ssid และ pass)

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

// Control NodeMCU ESP8266 by Blynk

// Read value from LDR

 

// Comment this out to disable prints

#define BLYNK_PRINT Serial

 

#include <ESP8266WiFi.h>

#include <BlynkSimpleEsp8266.h>

 

char auth[] = "9c687abf4897467992e46e7249af7209";

char ssid[] = "XXXXXXX";

char pass[] = "XXXXXXX";

 

int LDR_Sensor = A0;

 

float Cal_illuminance() {

    float illu_LDR;

    float volt_LDR;

    int data_LDR;

    data_LDR = analogRead(LDR_Sensor);

    volt_LDR = (3.3/1024)*data_LDR;

    illu_LDR = (42.0 * pow(volt_LDR, -3.15));

    return illu_LDR;

}

 

void setup() {

    Serial.begin(9600);

    Blynk.begin(auth, ssid, pass);

}

 

void loop() {

    float illu_LDR;

    illu_LDR = Cal_illuminance();

    Blynk.virtualWrite(V0, String(illu_LDR));

    Blynk.run();

    delay(100);

}

 

 

3. อัปโหลดโปรแกรมลงใน NodeMCU เพื่อให้ฮาร์ดแวร์รอรับคำสั่งเชื่อมต่อ

 

4. เปิด Blynk App โดยอาจสร้างโปรเจคใหม่ (ขอ Token ใหม่) หรือลบอุปกรณ์ในโปรเจคเดิมก็ได้ จากนั้นจึงสร้างตัวแสดงค่า (Value Display) 1 ตัว โดยกำหนด INPUT PIN เป็นปุ่มเสมือน V0 ดังรูปที่ 13.2 (เหมือนกับกับการทดลองตอนที่ 1)

 

5. รันโปรแกรมเพื่อทดสอบการรับค่าเข้าจากโมดูลวัดความสว่างแสง โดยสังเกตว่า ค่าที่แสดงเป็นค่าทศนิยมในหน่วยลักซ์ที่คำนวณจากโค้ดที่เขียนในฟังก์ชัน Cal_illuminance (ดูบทที่ 9 สำหรับการเทียบวัดค่าความสว่างแสง)

 

 

การสร้างแอปพลิเคชันบน Blynk App เพื่อควบคุมรีเลย์จากความสว่าง

ในการทดลองตอนนี้ เราจะสมมติว่า เราต้องการสร้าง Blynk App ที่ทำหน้าที่เปิด-ปิดไฟอัตโนมัติเมื่อมีความสว่างน้อยเกินไป โดยกำหนดให้ค่าความสว่างต้องมากกว่า 100 ลักซ์ นั่นคือ หากแสงที่ตรวจวัดได้มีค่าความสว่างน้อยกว่า 100 ลักซ์แล้ว รีเลย์จะควบคุมให้เปิดโคมไฟ (ดูรูปที่ 13.4) ขั้นตอนการทดลองสร้าง เริ่มจากการกำหนดแผนผังการทำงานของโปรแกรมเสียก่อน แผนผังอาจเขียนได้ดังแสดงในรูปที่ 13.5

 

1

 

รูปที่ 13.4 แนวคิดการออกแบบระบบควบคุมอัตโนมัติในการทดลองตอนที่ 3

1

 

รูปที่ 13.5 แผนผังการทำงานของโปรแกรมที่แสดงในตอนที่ 3

 

ขั้นตอนการสร้าง/การทดลองตามแผนผังที่ออกแบบไว้ มีดังนี้

1. ต่อวงจรดังรูปที่ 13.6 โดยต่อรีเลย์เข้ากับขา D1 ของ NodeMCU เพียงขาเดียว และจ่ายไฟเลี้ยงให้กับทั้งบอร์ดโมดูลวัดความสว่างและบอร์ดรีเลย์

 

1

 

รูปที่ 13.6 การเชื่อมต่อเพื่อใช้สร้างระบบควบคุมการทำงานโคมไฟด้วยแสง

 

2. เขียนโค้ดโปรแกรมดังแสดงข้างล่าง (อย่าลืมแก้ไข auth, ssid และ pass)

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

// Control NodeMCU ESP8266 by Blynk

// Read value from LDR and control a relay

 

// Comment this out to disable prints

#define BLYNK_PRINT Serial

 

#include <ESP8266WiFi.h>

#include <BlynkSimpleEsp8266.h>

 

char auth[] = "9c687abf4897467992e46e7249af7209";

char ssid[] = "XXXXXXX";

char pass[] = "XXXXXXX";

 

#define OFF HIGH

#define ON LOW

 

int Relay1 = D1;

int LDR_Sensor = A0;

 

float Cal_illuminance() {

    float illu_LDR;

    float volt_LDR;

    int data_LDR;

    data_LDR = analogRead(LDR_Sensor);

    volt_LDR = (3.3/1024)*data_LDR;

    illu_LDR = (42.0 * pow(volt_LDR, -3.15));

    return illu_LDR;

}

 

void setup() {

    Serial.begin(9600);    // for debugging

    Blynk.begin(auth, ssid, pass);

    pinMode(Relay1, OUTPUT);

    digitalWrite(Relay1, OFF);

}

 

void loop() {

    int state1;  // State of virtual button V1

    float illu_LDR;

    illu_LDR = Cal_illuminance();

    // Serial.println(String(illu_LDR));

    Blynk.virtualWrite(V0, String(illu_LDR));

    if (illu_LDR < 100.0) {

        digitalWrite(Relay1, ON);

        delay(1000);

    } else {

        digitalWrite(Relay1, OFF);

        delay(1000);       

    }

    Blynk.run();

    delay(100);

}

 

3. อัปโหลดโปรแกรมลงใน NodeMCU เพื่อให้ฮาร์ดแวร์รอรับคำสั่งเชื่อมต่อ

 

4. เปิด Blynk App โดยอาจสร้างโปรเจคใหม่ (ขอ Token ใหม่) หรือลบอุปกรณ์ในโปรเจคเดิมก็ได้ จากนั้นจึงสร้างตัวแสดงค่า (Value Display) 1 ตัว โดยกำหนด INPUT PIN เป็นปุ่มเสมือน V0 ดังรูปที่ 13.2 (เหมือนกับการทดลองตอนที่ 1)

 

5. รันโปรแกรมเพื่อทดสอบการรับค่าเข้าจากโมดูลวัดความสว่างแสง โดยสังเกตว่า เมื่อค่าความสว่างมีค่าน้อยกว่า 100 ลักซ์แล้ว รีเลย์ 1 จะทำงาน (นำกระแส)