กลับไปหน้ารวมไฟล์
your-environmental-data-on-arduino-iot-cloud-03d82a.md

การสร้างระบบตรวจวัดสภาพแวดล้อมอัจฉริยะด้วย Arduino MKR WiFi 1010 และ ENV Shield

ในยุคของ Internet of Things (IoT) การรวบรวมข้อมูลจากสภาพแวดล้อมรอบตัวเราเพื่อนำมาวิเคราะห์และแสดงผลแบบเรียลไทม์ถือเป็นทักษะพื้นฐานที่สำคัญ โปรเจกต์นี้จะพาคุณไปเรียนรู้วิธีการอ่านค่าจากเซนเซอร์ประสิทธิภาพสูงบน MKR ENV Shield และนำข้อมูลเหล่านั้นไปแสดงผลอย่างมืออาชีพผ่าน Dashboard บน Arduino Cloud ซึ่งจะช่วยให้คุณสามารถตรวจสอบสภาวะต่างๆ ได้จากทุกที่ทั่วโลก

อุปกรณ์ที่จำเป็นสำหรับโปรเจกต์

หัวใจสำคัญของโปรเจกต์นี้คือการเลือกใช้ฮาร์ดแวร์ในตระกูล MKR ซึ่งถูกออกแบบมาเพื่อการใช้งานในระดับอุตสาหกรรมและงานต้นแบบที่ต้องการความเสถียรสูง:

  1. Arduino MKR WiFi 1010: บอร์ดไมโครคอนโทรลเลอร์หลักที่ขับเคลื่อนด้วยชิป SAMD21 (32-bit Arm® Cortex®-M0+) และมีโมดูล NINA-W10 จาก u-blox สำหรับการเชื่อมต่อ WiFi และ Bluetooth นอกจากนี้ยังมีชิป ECC508 สำหรับการรักษาความปลอดภัยของข้อมูล (Crypto chip) ซึ่งจำเป็นอย่างยิ่งในการเชื่อมต่อกับระบบคลาวด์
  2. MKR ENV Shield: โล่เสริม (Shield) ที่รวบรวมเซนเซอร์วัดสภาพแวดล้อมไว้อย่างครบถ้วน ประกอบด้วยเซนเซอร์วัดอุณหภูมิและความชื้น (HTS221), ความกดอากาศ (LPS22HB), ความเข้มแสง (TEMT6000) และค่ารังสี UV (VEML6075) ซึ่งทั้งหมดสื่อสารผ่านโปรโตคอล I2C
  3. Battery Pack: ชุดแบตเตอรี่สำหรับการใช้งานแบบ Standalone ช่วยให้บอร์ดสามารถทำงานได้โดยไม่ต้องเสียบสาย USB ตลอดเวลา
  4. บัญชี Arduino IoT Cloud: แพลตฟอร์มสำหรับจัดการข้อมูลและสร้าง Dashboard

การประกอบฮาร์ดแวร์ทำได้ง่ายดายเนื่องจากถูกออกแบบมาให้เป็น Modular เพียงแค่นำ MKR WiFi 1010 และ MKR ENV Shield มาเสียบต่อกัน

MKR WiFi 1010 with MKR ENV Shield and a battery

ในการติดตั้ง ให้จัดตำแหน่งขาพินของ MKR WiFi 1010 ให้ตรงกับช่องเสียบของ ENV Shield โดยสังเกตจากป้ายกำกับชื่อพินบนบอร์ดเพื่อให้แน่ใจว่าการเชื่อมต่อถูกต้องและไม่เกิดการลัดวงจร

Carefully plug the MKR ENV Shield in the MKR WiFi 1010 connector

สำหรับการจ่ายไฟ แบตเตอรี่ Li-Po หรือชุดแบตเตอรี่เสริมควรเสียบเข้ากับช่องต่อแบตเตอรี่เฉพาะบนบอร์ด MKR WiFi 1010 ซึ่งมีวงจรชาร์จแบตเตอรี่ในตัวเพิ่มความสะดวกในการใช้งาน

Battery connection


โครงสร้างและการทำงานของซอฟต์แวร์

ซอฟต์แวร์ของโปรเจกต์นี้แบ่งออกเป็นสองส่วนหลัก คือโครงสร้างพื้นฐานที่สร้างโดย Arduino IoT Cloud APIs เพื่อจัดการเรื่องการสื่อสาร และการใช้ไลบรารี Arduino_MKRENV เพื่อดึงค่าดิบจากเซนเซอร์

  • Cloud Thing & Properties: เราจะกำหนด "Properties" จำนวน 6 ค่าใน Arduino IoT Cloud เพื่อทำหน้าที่เป็นตัวแปรกลางที่จะซิงค์ข้อมูลระหว่างบอร์ดและหน้าจอ Dashboard โดยอัตโนมัติผ่านโปรโตคอลความปลอดภัยสูง
  • The Sketch: โค้ดที่สร้างขึ้นจะรวมเอาการจัดการเครือข่าย WiFi และการเข้าถึงเซนเซอร์ไว้ด้วยกัน โดยมีไฟล์สำคัญคือ thingProperties.h ซึ่งเก็บข้อมูลการตั้งค่า SSID, Password และการแมปตัวแปร Cloud

การวิเคราะห์โค้ด (Code Analysis)

ในส่วนแรกของโปรแกรม เราทำการนำเข้าไลบรารีที่จำเป็น:

  • thingProperties.h: ทำหน้าที่จัดการการเชื่อมต่อเครือข่ายและการแลกเปลี่ยนข้อมูลกับ Cloud โดยจะใช้ชิปนิรภัยบนบอร์ด MKR ในการทำ Authentication
  • Arduino_MKRENV.h: ไลบรารีระดับสูงที่ช่วยให้เราไม่ต้องเขียนคำสั่ง I2C เอง แต่สามารถเรียกใช้ฟังก์ชันอ่านค่าได้ทันที
#include "thingProperties.h"
#include <Arduino_MKRENV.h>

ในฟังก์ชัน setup() เราจะเริ่มการทำงานของ Serial สำหรับตรวจสอบสถานะ จากนั้นเรียก initProperties() เพื่อตั้งค่าตัวแปร Cloud และเริ่มต้นการเชื่อมต่อด้วย ArduinoCloud.begin() สิ่งที่สำคัญที่สุดในขั้นตอนนี้คือการตรวจสอบว่า ENV Shield พร้อมทำงานหรือไม่ด้วยคำสั่ง ENV.begin() หากล้มเหลวโปรแกรมจะหยุดทำงานเพื่อป้องกันการส่งค่าที่ผิดพลาด

void setup() {
  Serial.begin(9600);
  delay(1500); 

  initProperties();
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();

  if (!ENV.begin()) {
    Serial.println("Failed to initialize MKR ENV shield!");
    while(1);
  }
}

ภายใน loop() หัวใจหลักคือฟังก์ชัน ArduinoCloud.update() ซึ่งจะคอยจัดการการรับส่งข้อมูล (Background tasks) และรักษาสถานะการเชื่อมต่อ ส่วนการอ่านค่าเซนเซอร์จะถูกทำซ้ำทุกๆ 1 วินาที โดยค่าที่อ่านได้จะถูกจัดเก็บลงในตัวแปรที่เป็น Property ของ Cloud ทำให้ค่าบน Dashboard อัปเดตทันที

void loop() {
  ArduinoCloud.update();
  
  // อ่านค่าจากเซนเซอร์แต่ละตัวและอัปเดตตัวแปร Cloud
  humidity = int(ENV.readHumidity());
  lux = int(ENV.readIlluminance());
  pressure = int(ENV.readPressure());
  temperature = int(ENV.readTemperature());
  uva = int(ENV.readUVA());
  uvb = int(ENV.readUVB());
  uvi = int(ENV.readUVIndex());
  
  delay(1000);
}

การตั้งค่าและเตรียมหน้าจอ Dashboard

หลังจากประกอบฮาร์ดแวร์แล้ว ให้เชื่อมต่อ MKR WiFi 1010 เข้ากับคอมพิวเตอร์ และทำตามขั้นตอนในหน้า "Getting Started" ของ Arduino Cloud คุณจำเป็นต้องสร้าง Properties ให้ตรงตามตารางด้านล่างนี้ (ระวังเรื่องตัวอักษรพิมพ์เล็ก-ใหญ่ เนื่องจากมีความสำคัญต่อการอ้างอิงชื่อตัวแปร)

Property configurations

ในขั้นตอนการเพิ่ม Widget เพื่อแสดงผล คุณจะต้องกรอกข้อมูลรายละเอียดของ Property แต่ละตัวผ่านฟอร์ม เช่น ประเภทข้อมูล (Integer, Float) และสิทธิ์การเข้าถึง (Read Only หรือ Read/Write)

Add widget form

เมื่อตั้งค่าครบทุกตัวแปร คุณจะได้รายการ Properties ที่พร้อมสำหรับการเชื่อมต่อกับ Dashboard ดังนี้:

List of widgets

โค้ดฉบับสมบูรณ์ (Full Sketch)

เมื่อตั้งค่า Properties เสร็จแล้ว ให้คลิกที่ปุ่ม Edit Code เพื่อเข้าสู่ Web Editor จากนั้นให้นำโค้ดด้านล่างนี้ไปวางแทนที่เนื้อหาเดิมในแท็บหลัก:

/* 
  Sketch generated by the Arduino IoT Cloud Thing "env_shield"
*/
#include "thingProperties.h"
#include <Arduino_MKRENV.h>

void setup() {
  // เริ่มต้น Serial Monitor
  Serial.begin(9600);
  delay(1500); 

  // กำหนดคุณสมบัติที่ตั้งค่าไว้ใน Cloud
  initProperties();

  // เริ่มการเชื่อมต่อกับ Arduino IoT Cloud
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);

  /*
     ตั้งค่าระดับความละเอียดของข้อความ Debug (0-4)
     ยิ่งเลขมาก ยิ่งแสดงรายละเอียดการเชื่อมต่อและข้อผิดพลาดชัดเจนขึ้น
  */
  setDebugMessageLevel(4);
  ArduinoCloud.printDebugInfo();

  // ตรวจสอบการเริ่มต้นทำงานของ ENV Shield
  if (!ENV.begin()) {
    Serial.println("Failed to initialize MKR ENV shield!");
    while(1);
  }
}

void loop() {
  // จัดการการซิงค์ข้อมูลกับ Cloud
  ArduinoCloud.update();
  
  // อ่านค่าจากเซนเซอร์บน ENV Shield และแปลงเป็นเลขจำนวนเต็ม
  humidity = int(ENV.readHumidity());
  lux = int(ENV.readIlluminance());
  pressure = int(ENV.readPressure());
  temperature = int(ENV.readTemperature());
  uva = int(ENV.readUVA());
  uvb = int(ENV.readUVB());
  uvi = int(ENV.readUVIndex());
  
  delay(1000); // รอ 1 วินาทีก่อนการอ่านครั้งถัดไป
}

// ฟังก์ชัน Callback เหล่านี้จะทำงานเมื่อมีการเปลี่ยนแปลงค่าจากหน้า Dashboard
void onHumidityChange() { }
void onLuxChange() { }
void onPressureChange() { }
void onTemperatureChange() { }
void onUvaChange() { }
void onUvbChange() { }
void onUviChange() { }

หลังจากอัปโหลดโค้ดลงบอร์ด เมื่อสถานะการเชื่อมต่อเสร็จสมบูรณ์ บอร์ด MKR WiFi 1010 จะเริ่มอ่านข้อมูลจาก ENV Shield และซิงค์ขึ้นสู่ระบบคลาวด์ทันที คุณจะเห็นความเคลื่อนไหวของข้อมูลผ่าน Dashboard ที่ออกแบบไว้ ซึ่งจะให้ภาพรวมของสภาวะแวดล้อมที่แม่นยำและสวยงาม

Dashboard view

หวังว่าคุณจะสนุกกับการสร้างระบบตรวจวัดสภาพแวดล้อมของคุณเอง ไม่ว่าจะนำไปใช้ในบ้าน สวนอัจฉริยะ หรือแม้แต่ในสำนักงาน ด้วยพลังของ Arduino MKR Series และ IoT Cloud การเข้าถึงข้อมูลสภาพแวดล้อมที่ซับซ้อนก็กลายเป็นเรื่องง่ายเพียงปลายนิ้วสัมผัส

ข้อมูล Frontmatter ดั้งเดิม

title: "Your Environmental Data on Arduino IoT Cloud"
description: "Group all the information collected by a MKR WiFi 1010 + MKR ENV Shield in a single, web-based dashboard."
author: "umbertobaldi95"
category: "Internet of Things, BT & Wireless"
tags:
  - "environmental sensing"
  - "iot"
  - "internet of things"
views: 66241
likes: 77
price: 699
difficulty: "Intermediate"
components:
  - "1x Arduino MKR ENV Shield"
  - "1x Arduino MKR WiFi 1010"
tools: []
apps:
  - "1x Arduino IoT Cloud"
downloadableFiles:
  - "https://create.arduino.cc/editor/Arduino_Genuino/4484930d-b0d1-4b4e-9e28-d138121346ba/preview"
documentationLinks: []
passwordHash: "92c2e32d41f9524dd4d8af92e30d40dd96a2c81258461e03a86118a1da860a4d"
encryptedPayload: "U2FsdGVkX1+RMWUYSMOCOU5n6udSUqtzVYSPhErukPqQimWqHV4NhUfC0nY9ee3EtrnrRBvyCs775jbbaDZ16Kux79WAjcK0pN39uEi20bA="
seoDescription: "Monitor Environmental Data with MKR WiFi 1010 and MKR ENV Shield on a single Arduino IoT Cloud web-based dashboard."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/your-environmental-data-on-arduino-iot-cloud-03d82a_cover.jpg"
lang: "en"