Lesson 19 : ก้าวเข้าสู่ IOT – ตอนที่ 9 IFTTT และ Google Sheet

ส่งข้อมูลจาก NodeMCU V3 ไปบันทึกที่ Google Sheet

ระดับความยาก :  

สิ่งที่จะได้จากบทเรียนนี้

อุปกรณ์

ลำดับชิ้นส่วนจำนวน
1ESP8266 (NodeMCUV3)1 ชิ้น
2Light sensor 1 ชิ้น

เริ่ม Coding กันเลย!!!
1. สมัครใช้งานก่อนที่เว็บไซต์ https://ifttt.com/

2. เมื่อสมัครใช้งานแล้วระบบจะ login ให้อัตโนมัติ ให้คลิกที่ My Applets และคลิกที่ New Applet เพื่อเริ่มต้นใช้งาน

3. ระบบจะแสดงหน้าจอดังภาพนี้ ให้คลิกที่อักษรสีฟ้าที่เขียนว่า this เพื่อกำหนดเหตุการณ์(Trigger) ที่จะเป็นจุดกำเนินของการแจ้งเตือน

4. สำหรับกรณีนี้เราจะให้ Trigger จาก Arduino และส่งข้อมูลไปที่ Line Notify ดังนั้นให้เรา Search คำว่า Webhooks เป็น Applet ตัวหนึ่งที่ IFTTT เตรียมไว้ให้ Developer ใช้

5. เมื่อเลือกที่ Webhooks แล้วให้คลิกที่ Connect

6. ระบบจะ Connect ไปที่ Server และแสดง Applet ให้เราเลือก ซึ่งปัจจุบันจะมีตัวเดียวคือ “Receive a web request” ให้คลิกเลือกได้เลย

7. กำหนด Event Name เป็น button_Pressed จากนั้นกดปุ่ม Create Tigger

8. ระบบจะย้อนมาที่หน้าหลักเพื่อให้เราสร้าง Action ให้คลิกเลือก that

9. ให้ค้นหาด้วยคำว่า Google และเลือกเข้าไปใน Google Drive

10. ระบบจะเปิดหน้าต่างให้เลือก Action ว่าเราจะทำอะไรให้เราเลือก “Add row to spreadsheet”

11. ระบบจะเปิดหน้าต่างให้กำหนดค่าต่าง ๆ ที่จะบันทึกลงใน Google Sheet เบื้องต้นเรากำหนดแค่ Spreadsheet name กับ Path ก็พอครับ (เมื่อใช้งานได้แล้วเราค่อยมาปรับเพิ่มตามที่เราต้องการครับ) จากนั้นกด Create Action

12. ระบบจะเปิดหน้าต่างให้เรายืนยันการสร้าง Applet ให้เรากดปุ่ม Finish

13. ทดสอบ Applet ที่เราสร้างด้วยการค้นหา Webhook และคลิกเข้าไปได้เลยครับ

14. ระบบจะเปิดหน้าต่างหลักของ Webhook ให้คลิกที่ปุ่ม Documentation

15. ระบบจะเปิดหน้าต่างสำหรับทดสอบ Applet ให้ระบุข้อมูลต่าง ๆ และกด Test It (ช่อง Value ใส่ค่าที่ท่านต้องการได้เลยครับ)

19. ระบบจะแสดงข้อความว่าได้ส่งข้อมูลเรียบร้อยแล้ว

20. ที่ Google Sheet จะมีข้อความที่เราทดสอบ มาแสดงครับ

21. เมื่อถึงขั้นตอนนี้ระบบ Trigger ผ่าน IFTTT เราพร้อมแล้วครับ สามารถส่งข้อมูลจาก NodeMCUv3 มาได้เลยครับ

22. ต่อวงจรดังภาพนี้ครับ
*Code นี้ผมต่อ Relay ด้วย สามารถประยุกต์การทำงานให้เป็นการ Detect แสงแล้วให้เปิดไฟได้ครับ

23. Download Code นี้และนำไปใช้ได้เลยครับ

/**
@desc Class นี้ใช้สำหรับเรียนรู้การทำงานเบื้องต้นของ Arduino, ESP8266
รวมทั้งการใช้งาน IOT เพื่อส่งค่าให้ Google Sheet ผ่าน IFTTT
@author Prayoon V.,
Email : themakerthailand@hotmail.com
Facebook : @MrMakerThailand
.
*/#include
#include
//#include

const char* ssid = “AccessPoinName”;
const char* password = “password”;

const char* mqttServer = “192.168.1.102”;
const int mqttPort = 1883;

WiFiClient espClient;
PubSubClient client(espClient);
//Pin ที่ต่อไฟ LED
const int led = D4;

//Pin ที่ต่อ Light Sensor
const int light = 0;

//configulation for IFTTT
const char* host = “maker.ifttt.com”;
const char *privateKey = “yourkey”;
const char *event = “gotData”;
String value1, value2, value3;
String postData = “”;
String MachineID=”A01″;

void setup() {
Serial.begin(115200);
pinMode(led, OUTPUT);
//pinMode(light, INPUT);

//ESP.restart();

//สั่งให้ไฟดับก่อน
digitalWrite(led, LOW);

//เชื่อมต่อ wifi
WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println(“Connecting to WiFi..”);
}

Serial.println(“Connected to the WiFi network”);

//connect ไปที่ mqtt broker
client.setServer(mqttServer, mqttPort);

//กำหนด function เมื่อมีการส่งข้อมูลมาจาก MQTT
client.setCallback(callback);

while (!client.connected()) { //วนลูปจนกว่าจะต่อสำเร็จ
Serial.println(“Connecting to MQTT…”);

if (client.connect(“ESP8266Client” )) { //Connect to MQTT และกำหนดชื่อในการติดต่อ

Serial.println(“connected”);

} else {

Serial.print(“failed with state “);
Serial.print(client.state());
delay(2000);

}
}

//รอรับค่าที่โดนส่งกลับมาจาก MQTT Broker
client.subscribe(“esp/lightSwitch”);

}

//เมื่อมีข้อมูลกลับมาจาก MQTT จะโดนส่งกลับมาที่ Method นี้
void callback(char* topic, byte* payload, unsigned int length) {

Serial.print(“Message arrived in topic: “);
Serial.println(topic);

Serial.print(“Message:”);
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);

//หาก message ที่ส่งกลับมามีค่าเป็น 0 ที่ array index ที่ 10 จะสั่งให้ไฟดับ เช่น {‘hello’:’0′}
//หาก message ที่ส่งกลับมาเป็น 1 จะสั่งให้ไฟติด เช่น {‘hello’:’1′}
//ตรงนี้แล้วแต่เราจะกำหนดครับ แต่ผมอยากทำให้ง่าย ๆ ก่อนเลยใช้วิธีการ fix ค่าไว้ครับ
if (i == 10) {
if ((char)payload[i] == ‘0’) { //turn off light
digitalWrite(led, LOW);
} else {
digitalWrite(led, HIGH);
}
}
}

Serial.println();
Serial.println(“———————–“);

}

void loop() {
client.loop();

delay(5000);
//read the input on analog
int sensorValue = analogRead(A0);

sendMessageToIFTTT(sensorValue);
sendLightSensorToMQTT(sensorValue);
}

void sendLightSensorToMQTT(int sensorValue){
char tempstring[20];
dtostrf(sensorValue,3,1,tempstring);

client.publish(“esp/light”, tempstring);
}

//ส่งข้อมูล Alert ไปที่ IFTTT
void sendMessageToIFTTT(int sensorValue) {

// Use WiFiClient class to create TCP connections
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println(“connection failed”);
return;
}

// We now create a URI for the request
String url = “/trigger/”;
url += event;
url += “/with/key/”;
url += privateKey;

value1 = MachineID;
value2 = String(sensorValue);
value3 = “-“;

genJSonObject();

Serial.print(“Requesting URL: “);
Serial.println(url);
Serial.println(postData);

// This will send the request to the server
client.print(String(“GET “) + url + ” HTTP/1.1\r\n” +
“Host: ” + host + “\r\n”);

client.println(“Content-Type: application/json”);
client.print(“Content-Length: “);
client.println(postData.length());
client.println();
client.println(postData);
client.println(“Connection: close\r\n\r\n”);

// Read all the lines of the reply from server and print them to Serial,
// the connection will close when the server has sent all the data.
while (client.connected())
{
if (client.available())
{
String line = client.readStringUntil(‘\r’);
Serial.print(line);
} else {
// No data yet, wait a bit
delay(50);
};
}

// All done
Serial.println();
Serial.println(“closing connection”);

client.stop();
}

/**
ต่อค่า Value1-3 เป็น Json Object
*/
void genJSonObject()
{
postData = “{“;

postData.concat(“\”value1\”:\””);
postData.concat(value1);

postData.concat(“\”,”);
postData.concat(“\”value2\”:\””);
postData.concat(value2);

postData.concat(“\”,”);
postData.concat(“\”value3\”:\””);
postData.concat(value3);

postData.concat(“\”}”);
}

24. เมื่อ Run Code แล้วข้อมูลค่าแสงก็จะถูกส่งไปที่ Google Sheet ดัง Video นี้ครับ

Share ผลงาน
เมื่อน้อง ๆ ทำสำเร็จแล้วอย่าลืมแชร์ให้เพื่อนๆ ดูได้ที่ Facebook MrMakerThailand
และหากน้อง ๆ ทำไม่ได้ ให้ติดต่อมาได้ตลอดเวลาที่ Inbox นะครับ