nodemcu_json
เรามาทำความรู้จักเกี่ยวกับ Json กันก่อน
Json หรือมีอีกชื่อหนึ่งเรียกว่า JavaScript Object Notation คือ รูปแบบของข้อมูลที่ใช้สำหรับแลกเปลี่ยน ข้อมูลที่มีขนาดเล็ก เป็นคำ หรือตัวแปรที่สามารถทำความเข้าใจได้ง่าย และถูกสร้างและอ่านได้ง่ายภายใต้ภาษา JavaScript (Java Script Programming Language)
โครงสร้างของ Json นั้นใช้ลักษณะภาษาของ JavaScript แต่ไม่ถูกมองว่าเป็นภาษาโปรแกรม กลับถูกมองว่าเป็นภาษาในการแลกเปลี่ยนข้อมูลมากกว่า ตัวอย่างของ Json โครงสร้างดังนี้
[
{"firstname":"name11","lastname":"name12"}
{"firstname1":"name21","lastname1":"name22"}
]
ปัจจุบัน มีการนำ json ไปใช้งานทางด้าน App การสื่อสารแบบต่างๆ การดึงค่าต่างๆ เช่น api พยากรณ์อากาศ ราคาทองคำ ราคาน้ำมัน มี api เยอะแยะมากมากให้เราสามารถนำมาใช้งาน ดึงมาใช้ หรือมาแสดงได้ครับ
สามารถศึกษาข้อมูลเพิมเติมได้ที่ http://www.json.org/
เมื่อเข้าใจ เกี่ยวกับ Json แล้วคราวนี้เรามาเริ่มต้นเขียน Code เพื่อดึงค่า Json มาใช้งานกัน
ก่อนอื่นเริ่มสร้าง Json ด้วย PHP จาก Code
$arr = [
[
"ch1" => "1",
"ch2" => "2",
"ch3" => "3",
"ch4" => "4"
]
];
echo json_encode($arr);
?>
เว็บที่ได้ หน้าตาก็จะเป็นแบบนี้
สามารถดูตัวอย่างได้ที่เว็บ : http://9arduino.nisit.net/api/json.php
ถัดมาก็มาถึง ในส่วนของ Nodemcu esp8266
#include
const char* ssid = "Use Wifi";
const char* password = "Pass Wifi";
const char* host = "9arduino.nisit.net"; //Doamin ที่ต้องการดึงค่ามาใช้
int ch1,ch2,ch3,ch4 = 0;
void setup() {
Serial.begin(9600);
pinMode(D4, OUTPUT);
delay(10);
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
int value = 0;
void loop() {
delay(2000);
++value;
Serial.print("connecting to ");
Serial.println(host);
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
}
String url = "/api/json.php"; //ดึงค่าจากไฟล์ http://9arduino.nisit.net/api/json.php
Serial.print("Requesting URL: ");
Serial.println(url);
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 5000) {
Serial.println(">>> Client Timeout !");
client.stop();
return;
}
}
// ในส่วนของการดึง Json โดยการดึง ตัวแปรที่ชื่อว่าตัวแปรมาใช้งาน
// ยกตัวอย่าง ตัวแปร ch1 ค่าที่ได้จะเป็น 1 แสดงออกมา เราสามารถนำ ตัว แปร ch1 ไปใช้งานต่างๆได้เช่นการแสดงข้อความออกจอ LCD เปิดปิดไฟตามกำหนด
if(client.find("")){
client.find("ch1"); //
ch1 = client.parseFloat();
client.find("ch2");
ch2 = client.parseFloat();
client.find("ch3");
ch3 = client.parseFloat();
client.find("ch4");
ch4 = client.parseFloat();
}
Serial.print("Output = ");
Serial.println(ch1);
Serial.print("Output = ");
Serial.println(ch2);
Serial.print("Output = ");
Serial.println(ch3);
Serial.print("Output = ");
Serial.println(ch4);
Serial.print("Output = ");
Serial.println();
Serial.println("closing connection");
}
ก็จะได้ข้อความดังภาพ