กลับไปหน้ารวมไฟล์
control-your-raspberry-pi-gpios-from-arduino-cloud-using-node-red-fc5464.md

โปรเจคนี้จะสอนวิธีควบคุม GPIO ของ Raspberry Pi ผ่านแดชบอร์ดที่สร้างด้วย Arduino Cloud โดยใช้แอปพลิเคชันที่เขียนใน Node-RED เอาไปเป็นตัวอย่างสร้างแอปของตัวเองที่ต้องเข้าถึง GPIO ของ RPI แล้วสุดท้ายก็ควบคุมผ่านแดชบอร์ดได้เลยจ้า

ตั้งค่าอุปกรณ์

ในโปรเจคนี้พี่ใช้ Raspberry Pi 5 ต่อกับ LED กับปุ่มกดบนเบรดบอร์ด ตามแผนภาพนี้เลย

แผนภาพการตั้งค่า GPIO ของ Raspberry Pi

หมายเหตุ: โปรเจคนี้ควรทำงานได้กับ Raspberry Pi ทุกเวอร์ชัน และจริงๆ แล้วกับเครื่อง Linux อื่นๆ ที่รองรับ libgpiod ด้วย ถ้าใช้แล้วไม่เวิร์คกับบอร์ดของน้อง รีบคอมเมนต์มาแจ้งพี่ด่วน!

วิธีสร้างโปรเจคของตัวเอง

ขั้นตอนการใช้งานโปรเจคนี้ตรงไปตรงมาเลย:

  1. สร้าง Device กับ Thing ใน Arduino Cloud แล้วขอ Arduino Cloud API Key มา
  2. ติดตั้ง Node-RED และโหนดที่จำเป็น
  3. พัฒนาแอปพลิเคชันใน Node-RED
  4. สร้างแดชบอร์ดใน Arduino Cloud
  5. ทดสอบทุกอย่างให้เรียบร้อย

1. สร้าง Device และ Thing ใน Arduino Cloud

หมายเหตุ: ก่อนเริ่ม ตรวจสอบให้แน่ใจว่ามีบัญชี Arduino Cloud แล้วนะ

สร้าง Device

ไปที่ส่วน [Devices] ของ Arduino IoT Cloud แล้วคลิกที่ + DEVICE

เลือก "Any Device" แล้วทำตามขั้นตอนในวิซาร์ด

หมายเหตุ: บันทึก Device ID กับ Secret Key ไว้ให้ดี เพราะต้องใช้ในโค้ด Python

สร้าง Thing

ในหน้าของ Device ที่เพิ่งสร้าง ไปที่ส่วน Associated Thing คลิก "Create Thing" แล้วตั้งชื่อใหม่ให้มัน

หมายเหตุ: จะสร้าง Thing จากรายการ Things ก่อนแล้วค่อยมาเชื่อมต่อกับ Device ทีหลังก็ได้

สร้างตัวแปร

เพิ่มตัวแปรโดยคลิกปุ่ม ADD พอเสร็จแล้ว รายการตัวแปรควรเป็นแบบนี้

Arduino Cloud: ตัวแปรของ Thing

ขอ Arduino Cloud API key

ขั้นตอนขอ Arduino Cloud API key ง่ายมาก:

  1. ไปที่ [https://cloud.arduino.cc/home/api-keys]
  2. คลิก CREATE API KEY และ ตั้งชื่อให้มัน
  3. จด Client ID กับ Client Secret ไว้ หรือดาวน์โหลดไฟล์ PDF เก็บไว้ เราจะใช้ข้อมูลนี้ในโหนด Node-RED ต่อไป

2. ติดตั้ง Node-RED และโหนดที่จำเป็น

วิธีติดตั้ง Node-RED

มีหลายวิธีที่จะติดตั้ง Node-RED ใน Raspberry Pi หรือเครื่องอื่น ส่วนใหญ่ใช้ได้ทั้ง: docker, snap, apt, หรือการติดตั้ง node.js แบบ native

จุดที่ต้องระวังคือ เราต้องการให้อินสแตนซ์ Node-RED ของเราสามารถเข้าถึง GPIO และระบบของ host ได้ ซึ่งทำได้กับทุกวิธีติดตั้ง แต่สำหรับหลายวิธีมันค่อนข้างยากและมีปัญหาต้องแก้เยอะ ดังนั้นวิธีที่ง่ายและแนะนำสำหรับโปรเจคนี้คือการติดตั้งแบบ native โดยใช้ NPM

ทำตามนี้เลย:

  1. ติดตั้ง Node-RED

ติดตั้ง Node-RED ด้วยคำสั่งนี้

sudo npm install -g --unsafe-perm node-red
  1. จัดการเซอร์วิส

มีเครื่องมือหลายตัวที่ใช้จัดการเซอร์วิสได้ แต่พี่แนะนำให้ใช้ pm2 เพื่อจัดการและทำให้มันเริ่มทำงานตอนบูตเครื่อง

ติดตั้ง pm2

sudo npm install -g pm2

แก้ไขไฟล์ pm2.json และตั้งค่า path เต็มไปยังโฟลเดอร์ gpio-basic ของน้อง

{
	 "apps": [
	   {
	     "name": "node-red",
	     "script": "<FULL_PATH_TO_YOUR FOLDER>/pm2-node-red-start.sh"
	   }
	 ]
}

เรียกใช้เซอร์วิส บันทึก และตั้งค่าให้ pm2 เริ่มทำงานตอนบูต:

sudo pm2 start pm2.json
sudo pm2 save
sudo env PATH=$PATH:/usr/bin $(which pm2) startup systemd

เซอร์วิสจะถูกเรียกใช้โดยอัตโนมัติตอนบูตเครื่อง

น้องสามารถสั่งให้บริการเริ่มหรือหยุดทำงานด้วยคำสั่ง sudo pm2 start node-red หรือ sudo pm2 stop node-red ได้ด้วยตัวเองเลย

เปิดใช้งาน Node-RED

เปิดเบราว์เซอร์ขึ้นมา แล้วเข้าไปที่ URL นี้: http://<IP_ADDRESS>:1880 โดยเปลี่ยน <IP_ADDRESS> เป็น IP Address ของ Raspberry Pi ของน้อง

หน้าต่าง Node-RED ก็จะเปิดขึ้นมา ถ้าตั้งค่าทุกอย่างถูกต้อง น้องควรจะเห็นโฟลว์แบบนี้

Node-RED flow

หมายเหตุ: ถ้าไม่เห็นโฟลว์ มีแต่หน้าจอว่างเปล่า น้องอาจต้องตรวจสอบการตั้งค่าใหม่ (อาจจะโฟลเดอร์ตั้งไม่ถูก) หรือไม่ก็อิมพอร์ตไฟล์ flow.json โดยการวางโค้ดลงไปตรงๆ เลยผ่าน เมนู-->Import ก็ได้

ติดตั้งโหนดที่จำเป็น

ครั้งแรกที่เปิด น้องอาจจะเห็นข้อความแจ้งว่ามีโหนดบางตัวหายไป นั่นเพราะแอปพลิเคชันนี้ต้องการโหนดต่อไปนี้:

  1. node-red-contrib-libgpiod: โหนดสำหรับควบคุม GPIO
  2. @arduino/node-red-contrib-arduino-iot-cloud: โหนดสำหรับสื่อสารกับ Arduino Cloud
  3. node-red-contrib-cpu: พี่ใช้โหนดนี้เพื่อสร้างค่าจำนวนเต็มส่งขึ้น Cloud ในตัวอย่างนี้พี่ส่งค่าโหลดของ CPU

วิธีการติดตั้งโหนดง่ายมาก แค่คลิกที่ เมนู-->Manage Palette ในเมนูหลัก

จากนั้นไปที่แท็บ Install ค้นหาโมดูลที่บอกไว้ด้านบน แล้วติดตั้งมันซะ

3. พัฒนาแอปพลิเคชัน Node-RED ของน้อง

ถ้าทุกอย่างทำงานถูกต้อง น้องควรจะเห็นภาพเหมือนด้านบน

ถึงเวลาตั้งค่าโหนดกันแล้ว

ตั้งค่าโหนด Arduino Cloud

มาเริ่มกันที่โหนด Arduino Cloud ก่อน สำหรับแต่ละโหนด น้องต้องทำตามนี้:

  1. เลือก Connection

หมายเหตุ: ครั้งแรก น้องจะต้องตั้งค่า Connection และใส่ API secrets Client ID กับ Client Secret ลงไป

  1. เลือก Thing จากเมนูแบบเลื่อนลง
  2. เลือก Property (ตัวแปร) จากเมนูแบบเลื่อนลง
  3. ติ๊กถูกที่ช่อง Send as device
  4. เลือก Device จากเมนูแบบเลื่อนลง
Configure the Arduino Cloud node
Configure de Arduino Cloud connection

ตั้งค่าโหนด GPIO

มาเริ่มกันที่โหนด GPIO IN ก่อน ดับเบิลคลิกที่โหนดแล้วตั้งค่า:

  1. Device --> ตั้งค่าเป็น gpiochipX ของน้อง (ในตัวอย่างคือ gpiochip4)
  2. Type: Digital pin
  3. Pin --> ตั้งค่าเป็นหมายเลขพินที่ใช้
Digital IN configuration

ต่อไป ตั้งค่าโหนด GPIO OUT ดับเบิลคลิกที่โหนดแล้วตั้งค่า:

  1. Device --> ตั้งค่าเป็น gpiochipX ของน้อง (ในตัวอย่างคือ gpiochip4)
  2. Type: Digital (0/1)
  3. Pin --> ตั้งค่าเป็นหมายเลขพินที่ใช้
Digital OUT configuration

Deploy

กดปุ่ม Deploy ที่มุมขวาบนเพื่อเผยแพร่โฟลว์ จัดไปวัยรุ่น!

4. สร้างแดชบอร์ด Arduino Cloud

แดชบอร์ดที่เรากำลังจะสร้างกันเนี่ย มันจะออกมาเป็นแบบนี้แหละ

GPIO Basic Dashboard

มี 2 วิธีให้เลือกสร้างแดชบอร์ดนะ:

  1. สร้างเองมือ จัดไปวัยรุ่น! ลอกแบบจากภาพด้านบนตามคู่มือการสร้างแดชบอร์ดได้เลย
    1. วิดเจ็ต LED ต้องลิงก์กับตัวแปร led นะ
    2. วิดเจ็ต Value ต้องลิงก์กับตัวแปร test_value
    3. วิดเจ็ต Button ต้องลิงก์กับตัวแปร button
  2. โคลนของสำเร็จรูป จากบทความนี้เลย ตามคู่มือในภาคผนวกของโปรเจกต์นี้ได้

5. ทดสอบระบบทั้งหมด

ถ้าทำถูกต้องทุกขั้นตอน น้องควรจะเห็นสิ่งต่อไปนี้:

  1. ทุกครั้งที่น้องกดปุ่มจริงๆ บนบอร์ด วิดเจ็ตปุ่มในแดชบอร์ดก็จะอัปเดตตาม
  2. ทุกครั้งที่น้องเปลี่ยนสถานะ LED ในแดชบอร์ด ไฟ LED จริงๆ บนบอร์ดก็จะติดหรือดับตาม
  3. ค่าของ test_value จะแสดงค่า CPU load ของ Raspberry Pi ที่อัปเดตทุก 5 วินาที และน้องจะเห็นกราฟมันวิ่งในแดชบอร์ด

จัดไป! สนุกกับการควบคุมขา GPIO จากคลาวด์ได้เลย

System Interoperability: Arduino Cloud ไปหา RasPi

Arduino IoT Cloud ออกแบบมาเพื่อจัดการกับ ESP32 และบอร์ดตระกูล MKR โดยตรง แต่ Raspberry Pi มันเป็นระบบ Linux-based คนละเรื่องกันเลย โปรเจกต์ Arduino Cloud Node-RED Bridge นี้จะสอนเรื่อง "สถาปัตยกรรมโบรกเกอร์" แบบขั้นสูง แทนที่จะบังคับให้สองระบบนี้มาสู้กัน เราสร้างชั้นแปลภาษาขึ้นมาโดยใช้ Node-RED ทำให้แดชบอร์ดกราฟิกสวยๆ บน Arduino Cloud สามารถสั่งงานขา GPIO จริงๆ ของไมโครคอมพิวเตอร์ Linux ได้ทันที

The Node-RED Canvas Architecture

เราไม่ต้องเขียน C++ หรือ Python เพื่อแก้ปัญหานี้นะ เราจะใช้ Visual Flow-Based Programming แทน

  1. Raspberry Pi บูตระบบ Linux ขึ้นมา แล้วเราติดตั้ง Node-RED (ซอฟต์แวร์เซิร์ฟเวอร์ทรงพลังที่พัฒนาโดย IBM)
  2. เราเปิดแคนวาสของ Node-RED ในเบราว์เซอร์ มันจะดูเหมือนแผนภูมิการไหล (flowchart) ขนาดใหญ่
  3. เราติดตั้งปลั๊กอินเฉพาะทาง node-red-contrib-arduino-iot-cloud
  4. โฟลว์การแปลภาษา:
    • ลากบล็อก Arduino Property มาวางบนแคนวาส แล้วตั้งค่า Authentication ด้วย Arduino Cloud API key ของเรา มันจะคอยฟังสถานะจากปุ่มในแดชบอร์ดคลาวด์ของเรา (เช่น "เปิดปั๊ม")
    • ลากบล็อกมาตรฐาน Raspberry Pi GPIO Out มาวางบนแคนวาส แล้วแมปมันให้ตรงกับ Physical Pin 12 บน Pi
    • ลากเส้นเชื่อมระหว่างบล็อกทั้งสองเข้าไว้ด้วยกัน! ง่ายมั้ยล่า

Bypassing the Microcontroller

โปรเจกต์นี้แสดงให้เห็นถึงการทำ Abstraction ของฮาร์ดแวร์ในระดับสุดยอด

  • เรากำจัดความจำเป็นในการใช้บอร์ด Arduino จริงๆ ไปได้เลย!
  • พอน้องแตะปุ่มในแอป Arduino IoT Cloud ขณะนั่งจิบกาแฟอยู่ที่โตเกียว...
  • คำสั่งนั้นจะวิ่งไปยังเซิร์ฟเวอร์ Azure ของ Arduino ซอฟต์แวร์ Node-RED ที่กำลังทำงานอยู่ในบ้านน้องที่ลอนดอนจะดักจับ Webhook จาก API ทันที Node-RED จะแปลคำสั่งผ่านโฟลว์ที่เราสร้างไว้ แล้วสั่งงานคำสั่ง Python ระดับล่างภายในโปรเซสเซอร์ของ Raspberry Pi โดยตรง เพื่อดัน Pin 12 ขึ้นไปที่ 3.3V, กระตุ้นรีเลย์ให้เปิดเครื่องชงกาแฟ! สุดยอดไปเลยมั้ย

ตั้งตั้วโครงสร้างพื้นฐานบนคลาวด์ (Cloud Infrastructure Setup)

  • Raspberry Pi (รุ่น 3 หรือ 4) ที่รันระบบปฏิบัติการ Raspberry Pi OS อยู่
  • แพ็กเกจเซิร์ฟเวอร์ Node-RED ติดตั้งไว้บน Pi ตัวนี้แล้ว
  • บัญชี Arduino IoT Cloud พร้อมกับ API credentials ที่สร้างไว้แล้ว
  • โมดูลรีเลย์ (Relay Modules) หรือ LED ต่อเข้ากับขา GPIO ของ Pi เพื่อใช้แสดงผลเอาต์พุต (จัดไปวัยรุ่น!)

สู้งานนะน้อง! ห้ามช็อตนะตัวนี้

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

apps:
  - "1x Arduino IoT Cloud"
author: "dbeamonte_arduino"
category: "Internet of Things, BT & Wireless"
components:
  - "1x Push Button"
  - "1x Diode Led Red 5mm"
  - "1x Breadboard 100x160"
  - "1x Raspberry Pi (Any Model)"
description: "This project shows how to interact with the Raspberry Pi GPIOs from a dashboard created using Arduino Cloud with an application programmed in Node-RED. It can serve as an example to create your own applications that require access to RPI GPIOs and that can be ultimately controlled using a dashboard."
difficulty: "Intermediate"
documentationLinks: []
downloadableFiles:
  - "https://github.com/dbduino-prjs/rpi-arduino-cloud/tree/master/node-red/gpio-basic"
encryptedPayload: "U2FsdGVkX18WO4JWKZ6lJpJ1q4QUH8bVteqDg6fXKunG59jqPzv1RO32KCCeYBcyDuo+S29fMzxvfOYnShCxmhQOj/7JK2PkoBTOsberlW0="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/control-your-raspberry-pi-gpios-from-arduino-cloud-using-node-red-fc5464_cover.png"
lang: "en"
likes: 0
passwordHash: "595e5908dc4becf987377717e28842264b82d5b3f0c639121b463fc8eb79c3ca"
price: 79
seoDescription: "Control Raspberry Pi GPIOs from an Arduino Cloud Dashboard using Node-RED. Ideal for IoT projects and remote Raspberry Pi management."
tags:
  - "Internet Of Things"
  - "Remote Control"
  - "Monitoring"
  - "Data Collection"
title: "ควมคุม GPIO บน Raspberry Pi จาก Arduino Cloud ด้วย Node-RED งานง่ายแต่หล่อ!"
tools: []
videoLinks: []
views: 1332