โปรเจกต์ IoTerrific Data logging
การทำ Data logging อย่างง่ายด้วย Grove Sensors โดยใช้ MKR Connector Carrier และ MKR boards
การทำ Data logging อย่างง่ายด้วย Grove Sensors โดยใช้ MKR Connector Carrier และ MKR boards
Project Supporter Team
โพสต์โดย
ด้วย MKR Connector Carrier การใช้งาน Groove Sensor เพื่อรวบรวมและจัดเก็บข้อมูลจะกลายเป็นเรื่องง่ายอย่างที่ไม่เคยเป็นมาก่อน ตัว Connector Carrier มาพร้อมกับขั้วต่อที่รองรับ Grove ถึง 14 ช่อง ช่วยให้คุณเลือกใช้งาน Sensor และ Actuator ที่แตกต่างกันได้นับร้อยชนิดสำหรับโปรเจกต์ของคุณ การใช้ MKR Connector Carrier จะช่วยให้คุณเลือก Sensor ที่ตอบโจทย์ความต้องการได้อย่างง่ายดาย ยกตัวอย่างเช่น DHT Sensor เพื่อบันทึกข้อมูลอุณหภูมิและความชื้น และยังสามารถเพิ่มฟังก์ชัน IoT ได้อย่างง่ายดายโดยใช้บอร์ด MKR ที่รองรับระบบ Cloud ทำให้การจัดเก็บและแสดงผลข้อมูล (Visualize) ที่รวบรวมมานั้นทำได้สะดวกยิ่งขึ้น
โปรเจกต์นี้จะแสดงให้คุณเห็นสองวิธีในการบันทึกข้อมูล (Data Logging) จาก Sensor โดยใช้โซลูชันแบบ IoT หรือแบบ Offline
สำหรับโซลูชัน IoT คุณจะต้องใช้ บอร์ด MKR รุ่นที่รองรับ Arduino IoT Cloud ซึ่งในที่นี้เราจะใช้ MKR WiFi 1010 การใช้บอร์ด MKR ที่รองรับ Cloud ร่วมกับ MKR Connector Carrier จะช่วยให้เราสามารถจัดเก็บข้อมูลจาก Sensor ที่เชื่อมต่อเข้ากับ Arduino Cloud ได้อย่างง่ายดาย
ส่วนโซลูชันแบบ Offline จะแสดงให้คุณเห็นถึงวิธีการดึงข้อมูลจาก Sensor และบันทึกลงใน SD card โดยใช้บอร์ด MKR Zero ซึ่งมีช่องเสียบ Micro SD card ในตัว และเป็นบอร์ดที่ยอดเยี่ยมสำหรับโปรเจกต์เก็บข้อมูลต่างๆ
ขั้นแรก หากคุณกำลังใช้งานโซลูชันแบบ Offline ให้เสียบ Micro SD card ลงในช่องเสียบบนบอร์ด MKR Zero

วงจรสำหรับโซลูชัน IoT และ Offline นั้นเหมือนกัน เพียงแค่ติดตั้งบอร์ด MKR ที่คุณเลือกไว้ด้านบนของ MKR Connector Shield ดังที่แสดงที่นี่:

จากนั้นเชื่อมต่อ Sensor เข้ากับช่อง Grove D0 ของ MKR Connector Carrier

เมื่อเสียบอุปกรณ์ครบทุกอย่างแล้ว ควรจะมีลักษณะดังนี้:

โซลูชันนี้กำหนดให้คุณต้องใช้ Arduino Cloud ขั้นแรก ให้สร้างบัญชี Arduino Cloud หากคุณยังไม่มี โดยไปที่ ที่นี่
เมื่อคุณมีบัญชีแล้ว เราจำเป็นต้องสร้าง Thing ซึ่งจะใช้ในการตั้งค่าบอร์ดและจัดเก็บค่าต่างๆ และสร้าง Dashboard ซึ่งจะช่วยเราในการแสดงผลค่าเหล่านั้น
สร้าง Thing ใน หน้านี้ โดยตั้งชื่อให้เหมาะสมเพื่อให้ติดตามได้ง่าย จากนั้นที่ด้านขวามือให้กดปุ่ม "Associate Device" ตรวจสอบให้แน่ใจว่าบอร์ด Arduino ของคุณเชื่อมต่อกับคอมพิวเตอร์แล้ว และทำตามขั้นตอนที่กำหนด
เมื่อเสร็จแล้ว ให้คลิกปุ่ม "Network" ซึ่งอยู่ใต้ปุ่ม "Associate Device" เพื่อกรอกข้อมูลการเชื่อมต่อเครือข่ายของคุณ ซึ่งจะทำให้บอร์ดของคุณสามารถเชื่อมต่ออินเทอร์เน็ตได้
Note: หากคุณพบปัญหาในการเริ่มต้นใช้งาน Arduino Cloud โปรดดูบทช่วยสอนใน Arduino Docs
ตอนนี้เราต้องเพิ่ม Cloud Variable โดยคลิกที่ปุ่ม "Add" ขนาดใหญ่ที่ด้านบนของหน้าจอ ตั้งชื่อให้ Variable เช่น "Temperature" จากนั้นเลือกประเภท Variable เป็น "float" ตั้งค่าเป็น "Read Only" แล้วกด "Add Variable"

ในการแสดงผลข้อมูลที่เราจะส่งไปยัง Cloud เราจะใช้ Dashboard ให้ไปที่หน้า Dashboard ที่นี่ สร้าง Dashboard ใหม่และตั้งชื่อให้เรียบร้อย
กดปุ่ม Edit ที่มุมบนซ้ายของหน้า Dashboard แล้วเพิ่ม Widget โดย Widget ที่เราต้องการคือ "chart" คุณสามารถตั้งค่า Chart ให้มีลักษณะตามที่คุณต้องการได้ แต่ส่วนที่สำคัญคือเราต้องเชื่อมโยง (Link) เข้ากับ Variable "temperature" ที่เราสร้างไว้ในขั้นตอนก่อนหน้า คลิกปุ่ม "Link variable" ค้นหา Thing และ Variable ที่ถูกต้อง จากนั้นคลิก "Link variable" Widget นี้จะอัปเดตเมื่อได้รับค่าใหม่จากบอร์ด

กลับไปที่ Thing ที่มี Variable "temperature" คุณจะพบแท็บ "sketch" ในนี้คุณจะเห็น Sketch ที่ถูกสร้างขึ้นโดยอัตโนมัติซึ่งจะจัดการส่วนประกอบของ IoT ทั้งหมด สิ่งที่เราต้องทำเพิ่มคือส่วนที่จะส่งค่าอุณหภูมิไปยัง Cloud เท่านั้น

ด้านล่างนี้คือ Code ที่สมบูรณ์สำหรับการส่งค่าอุณหภูมิไปยัง Cloud:
#include "thingProperties.h"
#include <DHT.h>
#include <DHT_U.h>
#include <SPI.h>
DHT dht(0, DHT22);
void setup() {
// Initialize serial and wait for port to open:
Serial.begin(9600);
// This delay gives the chance to wait for a Serial Monitor without blocking if none is found
delay(1500);
dht.begin();
initProperties();
// Connect to Arduino IoT Cloud
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
/*
The following function allows you to obtain more information
related to the state of network and IoT Cloud connection and errors
the higher number the more granular information you’ll get.
The default is 0 (only errors).
Maximum is 4
*/
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
}
void loop() {
ArduinoCloud.update();
temperature = dht.readTemperature();
}
ตอนนี้เรามาดูฟังก์ชันหลักบางส่วนของ Sketch นี้:
DHT dht(0, DHT22);- เริ่มต้นการทำงานของ DHT Sensor บนขั้วต่อ D0 โดย DHT22 อาจจำเป็นต้องเปลี่ยนให้ตรงกับรุ่นของ DHT Sensor ที่คุณกำลังใช้งาน เช่น หากคุณใช้ Sensor DHT11 ให้เปลี่ยนเป็น DHT11
dht.begin();
- เริ่มการทำงานของ DHT Sensor
temperature = dht.readTemperature();- รับข้อมูลจาก DHT Sensor และส่งไปยัง Cloud Variable
กราฟบน Arduino Cloud Dashboard ควรจะมีลักษณะดังนี้:

หากคุณต้องการโซลูชันแบบ Offline เราจำเป็นต้องมี Sketch ที่จะอ่านค่าจาก D0 และสร้างไฟล์บน SD card จากนั้นจึงบันทึกการอ่านค่าลงในไฟล์นั้น
ขั้นแรก ตรวจสอบให้แน่ใจว่าเราได้ติดตั้ง Driver เรียบร้อยแล้ว หากใช้ Arduino IDE เราจำเป็นต้องติดตั้ง Core และ Library ด้วยตนเอง ติดตั้ง Core โดยไปที่ Board Manager ที่ด้านซ้ายของ IDE แล้วค้นหา Arduino SAMD boards (32-bits Arm® Cortex®-M0+) และทำการติดตั้ง
Library ที่เราต้องติดตั้งเองคือ SD และ DHT sensor library ค้นหา Library เหล่านี้ใน Library Manager ซึ่งอยู่ถัดจาก Board Manager ใน Arduino IDE
นี่คือ Code ที่สมบูรณ์:
#include <SPI.h>
#include <SD.h>
#include <DHT.h>
#include <DHT_U.h>
DHT dht(0, DHT22);
const int chipSelect = SDCARD_SS_PIN;
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.print("Initializing SD card...");
// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
// don't do anything more:
while (1);
}
Serial.println("card initialized.");
dht.begin();
}
void loop() {
// make a string for assembling the data to log:
String dataString = "";
// Saves the temperature in a variable
float temperature = dht.readTemperature();
dataString = String(temperature);
// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
File dataFile = SD.open("datalog.txt", FILE_WRITE);
// if the file is available, write to it:
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
// print to the serial port too:
Serial.println(dataString);
}
// if the file isn't open, pop up an error:
else {
Serial.println("error opening datalog.txt");
}
delay(1000);
}
ตอนนี้เรามาดูฟังก์ชันหลักบางส่วนของ Sketch นี้:
DHT dht(0, DHT22);- เริ่มต้นการทำงานของ DHT Sensor บนขั้วต่อ D0 โดย DHT22 อาจจำเป็นต้องเปลี่ยนให้ตรงกับรุ่นของ DHT Sensor ที่คุณใช้ เช่น หากคุณใช้ Sensor DHT11 ให้เปลี่ยนเป็น DHT11
dht.begin();
- เริ่มการทำงานของ DHT Sensor
SD.begin(chipSelect)
- เริ่มต้นการทำงานของ SD card ด้วย Pin ที่เลือกไว้
dataString = String(temperature);
- แปลงค่าจาก Variable อุณหภูมิให้เป็นรูปแบบ String เพื่อให้เราสามารถเขียนลงในไฟล์ข้อความได้
File dataFile = SD.open("datalog.txt", FILE_WRITE)- สร้าง Object dataFile เพื่อเข้าถึงฟังก์ชันของ Library และเปิดหรือสร้างไฟล์ชื่อ datalog.txt บน SD card พร้อมตั้งค่าเป็นโหมดเขียนข้อมูล (Write mode)
dataFile.print()- บันทึกข้อมูลลงในไฟล์ datalog.txt
dataFile.close()- ปิดไฟล์
หลังจาก Upload Code ลงบอร์ดแล้ว เราจำเป็นต้องเปิด Serial Monitor เพื่อให้โปรแกรมเริ่มต้นทำงาน เนื่องจากคำสั่ง while(!Serial) ที่ใส่ไว้ในส่วน Setup จะป้องกันไม่ให้โปรแกรมทำงานจนกว่าจะมีการเชื่อมต่อ Serial
เมื่อเราเปิด Serial Monitor จะเห็นข้อมูลจาก DHT Sensor ถูกแสดงผลออกมา ซึ่งข้อมูลนี้ควรจะมีลักษณะเหมือนกับข้อมูลที่อยู่ภายในไฟล์ .txt ที่เรากำลังบันทึกค่าลงไป

หากคุณเห็นค่าเหล่านี้และไม่มีข้อความแจ้งข้อผิดพลาด แสดงว่าการบันทึกข้อมูลลงใน SD card ดำเนินไปได้ด้วยดี หากต้องการตรวจสอบ ให้ทำตามขั้นตอนง่ายๆ ดังนี้:
datalog.txt ในคอมพิวเตอร์ ไฟล์นี้ควรแสดงค่าเดียวกันกับที่เราเห็นใน Serial Monitor

และนี่คือวิธีที่คุณสามารถบันทึกข้อมูลโดยใช้บอร์ด MKR ZERO, MKR Connector Carrier ร่วมกับ DHT Sensor, SD Library และ Micro SD card
Tip: หากคุณต้องการบันทึกข้อมูลในไฟล์ที่สามารถเปิดด้วย Excel ได้ ให้เปลี่ยนนามสกุลไฟล์จาก.txtเป็น.csvซึ่งไฟล์เหล่านี้จะสามารถเปิดใน Excel เพื่อนำข้อมูลไปสร้างกราฟหรือวิเคราะห์ในรูปแบบที่น่าสนใจต่อไปได้
ตอนนี้คุณสามารถสร้างโซลูชันการบันทึกข้อมูลที่ทำงานได้ทั้งแบบ Offline หรือเชื่อมต่อกับ Arduino Cloud ได้แล้ว โดยเลือกโซลูชันที่เหมาะสมกับรูปแบบการใช้งานของคุณที่สุด! อย่างที่คุณได้เห็นว่าการเชื่อมต่อ Sensor นั้นทำได้ง่ายมาก ดังนั้นลองนำ Sensor แบบต่างๆ มาทดลองบันทึกและติดตามข้อมูลที่หลากหลาย ด้วยขั้วต่อ Grove จะทำให้การใช้งานแบบ Plug and Play กับ Sensor ทุกประเภทกลายเป็นเรื่องง่าย!
สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้