Lab 2
HTML -> NodeMCU
ในการทดลองนี้จะให้เบราว์เซอร์สื่อสารกับ Microgear บน NodeMCU ผ่าน REST API
1.ใช้ไฟล์ SetLampStatus.html จาก Lab 1 แก้ไข URL สำหรับ PUT ให้อยู่ในรูปแบบ
https://api.netpie.io/microgear/appid/alias?retain&auth=KEY:SECRET
โดย alias คือชื่อที่เราตั้งให้กับ NodeMCU Microgear ให้ใช้ตามที่เราเคยตั้งให้ Node MCU ในLab4.2ในไฟล์ pieled.ino ใช้ alias ว่า pieled
2.เนื่องจากเราจะใช้ไฟล์ pieled.ino จาก LabIoT Switch แต่เราตั้งเงื่อนไขไว้ให้ NodeMCU รอรับข้อความ 1 หรือ 0 จึงต้องแก้ฟังก์ชั่น PressButtonOn และ PressButtonOff ในไฟล์ SetLampStatus.html ให้ส่งค่า 1 และ 0 แทน ON และ OFF ตามลำดับ
SetLampStatus.html
<html>
<body>
<script>
var APPID= “YOURAPPID.”; //enter your appid
var KEY =“YOURKEY”; //enter your key
var SECRET =“YOURSECRET”; //enter your secret
var ALIAS = “pieled”; //same alias you set on NodeCMU
function PressButtonOn(){
var url = 'https://api.netpie.io/microgear/'+APPID+ALIAS+'?retain&auth=' +KEY+':'+SECRET;
var xmlHttp = new XMLHttpRequest();
xmlHttp.open('PUT',url,true);
xmlHttp.send('1');
window.alert(url);//for debugging purpose
}
function PressButtonOff(){
var url = 'https://api.netpie.io/microgear/'+APPID+ALIAS+'?retain&auth=' +KEY+':'+SECRET;
var xmlHttp = new XMLHttpRequest();
xmlHttp.open('PUT',url,true);
xmlHttp.send('0');
window.alert(url); //for debugging purpose
}
</script>
<center>
<button onclick= “PressButtonOn()” id = “ButtonOn”>ON</button>
<button onclick= “PressButtonOff()” id = “ButtonOff”>OFF</button>
</center>
</body>
</html>
3.อัพโหลดโค้ด pieled.ino (เหมือน Lab IoT Switch)ลงใน NodeMCU
pieled.ino
#include <ESP8266WiFi.h>
#include <MicroGear.h>
const char* ssid = "SSID"; //change this to your SSID
const char* password = "PASSWORD"; //change this to your PASSWORD
#define APPID "APPID" //change this to your APPID
#define KEY "KEY" //change this to your KEY
#define SECRET "SECRET" //change this to your SECRET
#define ALIAS "pieled"
WiFiClient client;
int timer = 0;
MicroGear microgear(client);
void onMsghandler(char *topic, uint8_t* msg, unsigned int msglen) { //
Serial.print("Incoming message -->");
msg[msglen] = '\0';
Serial.println((char *)msg);
if(*(char *)msg == '1'){
digitalWrite(LED_BUILTIN, LOW); // LED on
microgear.chat("switch","1");
}else{
digitalWrite(LED_BUILTIN, HIGH); // LED off
microgear.chat("switch","0");
}
}
void onConnected(char *attribute, uint8_t* msg, unsigned int msglen) {
Serial.println("Connected to NETPIE...");
microgear.setName(ALIAS);
}
void setup() {
microgear.on(MESSAGE,onMsghandler);
microgear.on(CONNECTED,onConnected);
Serial.begin(115200);
Serial.println("Starting...");
pinMode(LED_BUILTIN, OUTPUT);
if (WiFi.begin(ssid, password)) {
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
}
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
microgear.init(KEY,SECRET,ALIAS);
microgear.connect(APPID);
}
void loop() {
if (microgear.connected()) {
Serial.println("...");
microgear.loop();
timer = 0;
}
else {
Serial.println("connection lost, reconnect...");
if (timer >= 5000) {
microgear.connect(APPID);
timer = 0;
}
else timer += 100;
}
delay(100);
}
4.สังเกตผลที่ได้เมื่อกดปุ่ม ON OFF ที่เว็บเบราว์เซอร์ จะสามารถควบคุมไฟที่บอร์ด NodeMCU เช่นเดียวกับการใช้ Microgear บน HTML5