เชื่อมต่อ Hardware และ การเขียนโปรแกรม
การต่อ Hardware
- นำ Nodemcu ต่อเข้ากับ Prototype board
- ต่อ LED1 (สีเขียว) ขั้วบวก เข้ากับ D1 และ LED1 ขั้วลบต่อกับตัวต้านทาน และ ต่อตัวต้านทานลง GND
- ต่อ LED2 (สีเหลือง) ขั้วบวก เข้ากับ D2 และ LED2 ขั้วลบต่อกับตัวต้านทาน และ ต่อตัวต้านทานลง GND
- ต่อ LED3 (สีแดง) ขั้วบวก เข้ากับ D3 และ LED3 ขั้วลบต่อกับตัวต้านทาน และ ต่อตัวต้านทานลง GND
- นำสาย USB ต่อ NodeMCU เข้าคอม จะได้ดังรูป
ตั้งค่าก่อนเขียนโปรแกรม
- ตั้งค่า Board เลือก Port และเลือก Programmer
ตัวอย่างโปรแกรม
- สามารถกดดูได้ที่ File -> Example -> antoESP8266 -> Quick start anto
- ตั้งค่า username , things , key และ Channel
- ตั้งค่า SSID , password ในการเชื่อมต่อ Internet
- กด Upload โปรแกรมเข้าสู่บอร์ด
อธิบายโปรแกรม
#include <AntoIO.h>
const char *ssid = "your access point SSID";
const char *pass = "access point password";
const char *user = "your username";
const char *token = "your token";
const char *thing = "your thing";
#include คือส่วนที่เรียก library Anto มาใช้
ใส่ ssid (ชื่อ wifi) เช่น const char *ssid = "Home";
ใส่ password เช่น const char *pass = "1234567";
ใส่ Username เช่น const char *user = "User";
ใส่ Keys เช่น const char *token = "xxx";
ใส่ Thing เช่น const char *thing = "thing";
*ในส่วนของ Username สามารถดูได้จาก https://www.anto.io/account/info ในช่องตามภาพด้านล่าง
// initialize AntoIO instance
AntoIO anto(user, token, thing);
int value = 0;
สร้าง instance Anto
สร้างตัวแปล value เพื่อเก็บค่าคำสั่ง( 0 คือ ปิด, 1 คือ เปิด ) ที่ได้จาก Anto
ใน void setup()
Serial.begin(115200);
delay(10);
Serial.println();
Serial.println();
Serial.print("Anto library version: ");
Serial.println(anto.getVersion());
Serial.print("\nTrying to connect ");
Serial.print(ssid);
Serial.println("...");
ในส่วนนี้จะ print ค่าต่างๆออกมา เช่น
Serial.println(anto.getVersion()); คือการแสดงเลขเวอร์ชัน library ของ Anto
Serial.print(ssid); คือการแสดงชื่อไวไฟที่ตั้งค่า
anto.begin(ssid, pass, messageReceived);
ในส่วนนี้คือการ setup wifi และ connect กับ Anto และประกาศฟังก์ชันการใช้งานเมื่อมีการรับค่าจาก Anto เข้ามาจะเข้าฟังก์ชัน messageReceived ในการดำเนินงานต่อไป
anto.sub("LED1");
anto.sub("LED2");
anto.sub("LED3");
anto.sub("LED1"); คือการติดตามข้อมูล Channel -> LED ( สามารถเพิ่ม/ลด channel ตรงนี้ )
pinMode(D1,OUTPUT);
pinMode(D2,OUTPUT);
pinMode(D3,OUTPUT);
กำหนด ขา ของ NodeMCU ที่ต่อกับหลอดไฟให้เป็น OUTPUT
ใน void loop()
void loop() {
anto.mqtt.loop();
}
ตั้งค่าให้ Anto ทำงานใน loop
ใน void messageReceived(String thing, String channel, String payload)
หลังจากเรา setup ไว้แล้วว่า ถ้ามีข้อความเข้ามาจาก Anto ก็ให้เข้ามาทำที่ฟังก์ชันนี้ โดยการรับเป็น
thing : ชื่อ thing ที่ส่งข้อความมา
channel : ชื่อ channel ที่ส่งข้อความมา
payload : ค่าที่ส่งมา
Serial.print("Recieved: ");
Serial.print(thing);
Serial.print("/");
Serial.print(channel);
Serial.print("-> ");
Serial.println(payload);
print ค่าต่างๆที่ Anto ส่งเข้ามา
if(channel.equals("LED1")){
value = payload.toInt();
if(value == 1){
digitalWrite(D1,HIGH);
}
else{
digitalWrite(D1,LOW);
}
}
else if(channel.equals("LED2")){
value = payload.toInt();
if(value == 1){
digitalWrite(D2,HIGH);
}
else{
digitalWrite(D2,LOW);
}
}
else if(channel.equals("LED3")){
value = payload.toInt();
if(value == 1){
digitalWrite(D3,HIGH);
}
else{
digitalWrite(D3,LOW);
}
}
ในบรรทัด if(channel.equals("LED1")) เป็นการเช็คว่าค่าที่เข้ามานั้นเป็นของ Channel ชื่อ LED1 หรือไม่
ในบรรทัด value = payload.toInt(); เป็นการกำหนด value = ค่า payload (รับค่าจาก anto ที่เป็น string) แปลงค่าเป็น int (ตัวเลข)
แล้วในบรรทัด
if(value == 1){
digitalWrite(D1,HIGH);
}
else{
digitalWrite(D2,LOW);
}
เป็นการเช็คว่า value เท่ากับ 1 ใหม ถ้าใช่ ก็ให้เปิดไฟ(D1 สีเขียว) ถ้าไม่ให้ปิดไฟ(D1 สีเขียว)
หลังจากนั้นก็จะคอนเซ็ปเหมือนเดิมเพียงแค่ว่า ถ้าเป็นจาก Channel LED2 , LED3 ก็ให้เปิด/ปิดไฟ (D2,D3 : สีเหลือง สีแดง)