การจัดการฝั่ง Device บอร์ดส่งข้อมูล
ขั้นตอนต่อไป เป็นการเตรียม อุปกรณ์ฝั่ง บอร์ด ไอโอที เช่น Arduino Uno, ESP8266, ESP32, Arduino Mega หรือ Controllino
เราขอยกตัวอย่างด้วย ESP8266 ครับ
ขั้นตอนแรก คือเตรียม อุปกรณ์ และ โค้ด ให้เรียบร้อย ตามรูป
โดยต่อ ขา (+) ที่ขา 3V3 ต่อขา (-) ที่ขา GND และ ขา Out ที่ขา D1
มาดูฝั่งโค้ดกันเลย โดยการเชื่อมต่อ Internet ผ่านทาง Wifi นั้นก็ปรับตั้งเองตาม WiFI ที่บ้านที่สำนักงานกันนะครับ
/* This sketch establishes a TCP connection to a "quote of the day" service. It sends a "hello" message, and then prints received data. sending to Adminsystem device 60 Board selection : Generic ESP8266 Module */ #include <ESP8266WiFi.h> //========== #include "DHTesp.h" #ifdef ESP32 #pragma message(THIS EXAMPLE IS FOR ESP8266 ONLY!) #error Select ESP8266 board. #endif //================== DHTesp dht; #ifndef STASSID #define STASSID "Arsenae_2.4G" // ตั้งตาม WiFi ของท่าน #define STAPSK "kb075699212" // ตั้งตาม WiFi ของท่าน #endif //====================== const char* ssid = STASSID; const char* password = STAPSK; const char* host = "otrixiot.com"; const uint16_t port = 80; const char*code = "ESP-8266ax01"; // กำหนดโค้ด code เป็นรหัสผ่านในการส่ง ซึ่งเป็นตัวเดียวกับที่อยู่ใน Device code ใน แพลตฟอร์ม float vHumidity = 0; float humidity=0; float vTemperature = 0; float temperature = 0; float data1=60; float data2=33; float data3=33; float data4=33; float data5=33; float data6=33; float data7=33; float data8=33; float data9=33; float data10=33; float data11=33; float data12=33; float data13=33; float data14=33; float data15=33; float data16=33; float data17=33; float data18=33; float data19=33; float data20=33; void setup_dht() { Serial.println("Status\tHumidity (%)\tTemperature (C)\t(F)\tHeatIndex (C)\t(F)"); String thisBoard= ARDUINO_BOARD; Serial.println(thisBoard); // Autodetect is not working reliable, don't use the following line // dht.setup(17); // use this instead: dht.setup(5, DHTesp::DHT22); // Connect DHT sensor to GPIO 17 } void setup() { Serial.begin(115200); setup_dht(); // We start by connecting to a WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); /* Explicitly set the ESP8266 to be a WiFi-client, otherwise, it by default, would try to act as both a client and an access-point and could cause network-issues with your other WiFi-devices on your WiFi-network. */ 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()); } void loop_dht() { delay(dht.getMinimumSamplingPeriod()); humidity = dht.getHumidity(); temperature = dht.getTemperature(); Serial.print(dht.getStatusString()); Serial.print("\t"); Serial.print(humidity, 1); Serial.print("\t\t"); Serial.print(temperature, 1); Serial.print("\t\t"); Serial.print(dht.toFahrenheit(temperature), 1); Serial.print("\t\t"); Serial.print(dht.computeHeatIndex(temperature, humidity, false), 1); Serial.print("\t\t"); Serial.println(dht.computeHeatIndex(dht.toFahrenheit(temperature), humidity, true), 1); delay(2000); } void loop() { loop_dht(); Serial.print("connecting to "); Serial.print(host); Serial.print(':'); Serial.println(port); // Use WiFiClient class to create TCP connections WiFiClient client; if (!client.connect(host, port)) { Serial.println("connection failed"); delay(5000); return; } data3=humidity; // กำหนดค่าให้กับตัวแปร data3 data4=temperature; // กำหนดค่าให้กับตัวแปร data4 // This will send a string to the server Serial.println("sending data to server"); String url = "/api/insertData?device_id=" + String(60)+"&code="+String(code)+"&data1=" +String(data1) +"&data2=" + String(data2)+"&data3=" +String(data3)+"&data4=" +String(data4)+"&data5=" +String(data5) +"&data6=" +String(data6)+"&data7=" +String(data7)+"&data8=" +String(data8)+"&data9=" +String(data9) +"&data10=" +String(data10)+"&data11=" +String(data11)+"&data12=" +String(data12)+"&data13=" +String(data13) +"&data14=" +String(data14)+"&data15=" +String(data15)+"&data16=" +String(data16)+"&data17=" +String(data17) +"&data18=" +String(data18)+"&data19=" +String(data19)+"&data20=" +String(data20); // ข้อความ device_id = "+ String(60) "&code="+String(code) โดยที่ 60 คือ device ID Serial.print("Requesting URL: "); Serial.println(url); // This will send the request to the server if (client.connected()) { client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); } // wait for data to be available unsigned long timeout = millis(); while (client.available() == 0) { if (millis() - timeout > 5000) { Serial.println(">>> Client Timeout !"); client.stop(); delay(60000); return; } } // Read all the lines of the reply from server and print them to Serial Serial.println("receiving from remote server"); // not testing 'client.connected()' since we do not need to send data here while (client.available()) { char ch = static_cast<char>(client.read()); Serial.print(ch); } // Close the connection Serial.println(); Serial.println("closing connection"); client.stop(); delay(60000); // execute once every 5 minutes, don't flood remote service }
สำหรับท่านที่อยากจะทำการส่งค่าข้อมูลอื่น เช่น data5 , data6 ก็ต้องจัดหา sensor มาเชื่อมต่อ ให้ถูกต้อง
จากนั้นทำการทดลอง complie และแก้ไขจนสามารถส่งข้อมูลได้
อย่าลืมติดตั้ง library ที่จำเป็นให้ครบถ้วนก่อนนะครับ