การใช้งาน Node-RED บน Raspberry Pi

Node-RED

Node-RED คืออะไร ?

     Node-RED เป็นเครื่องมือสำหรับนักพัฒนาโปรแกรมในการเชื่อมต่ออุปกรณ์ฮาร์ดแวร์เข้ากับ APIs (Application Programming Interface) ซึ่งเป็นการพัฒนาโปรแกรมแบบ Flow-Based Programming ที่มีหน้า UI สำหรับนักพัฒนาให้ใช้งานผ่าน Web Browser ทำให้การเชื่อมต่อเส้นทางการไหลของข้อมูลนั้นเป็นเรื่องง่าย

     เนื่องจาก Node-RED เป็น Flow-Based Programming นั้นทำให้เราแทบจะไม่ต้องเขียน Code ในการพัฒนาโปรแกรมเลย แค่เพียงเลือก Node มาวางแล้วเชื่อมต่อก็สามารถควบคุม I/O ได้ โดย Node-RED จะมี Node ให้เลือกใช้งานอย่างหลากหลาย         

     สามารถสร้างฟังก์ชัน JavaScript ได้โดยใช้ Text Editor ที่มีอยู่ใน Node-RED และยังสามารถบันทึก Function, Templates, Flows เพื่อไปใช้งานกับงานอื่นต่อไป      

     Node-RED นั้นทำงานบน Node.js ทำให้เหมาะสำหรับการใช้งานกับ Raspberry Pi เนื่องจากใช้ทรัพยากรน้อย ขนาดไฟล์ไม่ใหญ่และ Node.js ยังทำหน้าที่เป็นตัวกลางให้ Raspberry Pi สามารถติดต่อกับ Web Browser และอุปกรณ์อื่นๆ ได้

เริ่มต้นการใช้งาน  Node-RED

  1. ตรวจสอบว่า Raspberry Pi ของเรามี Node-RED หรือไม่ ซึ่ง image ตัวใหม่ๆ จะมีมาพร้อมกับ Raspbian อยู่แล้ว

  2. วิธีตรวจสอบ  พิมพ์คำสั่งเพื่อ RUN  Node-RED ดังรูป

     

  3. หากมี Node-RED อยู่แล้วก็จะปรากฏข้อความดังรูป 

     

   4. จากนั้นเปิด Web Browser  แล้วใส่ IP Address ของ Raspberry Pi ของเรา โดยใช้ port 1880 ดังรูป 

(ในกรณี ที่ทำการเชื่อมต่อ LAN และแชร์สัญญาณอินเตอร์เนตจาก Computer ให้ Raspberry Pi สามารถใช้ raspberrypi. mshome.net แทนหมายเลข IP Address ได้) 

      

  5. จะปรากฏเป็นหน้า UI ของ Node-RED ดังรูป

 การเชื่อมต่อ Node

  1. การใช้งาน Node-RED นั้น จะเป็นการใช้งานแบบ Flow-based programming โดยเราสามารถเลือก node ที่ต้องการจะใช้มาวางบน Workspace ได้เลย

  2. ให้เลือก Inject แล้วลากมากวางบน Workspace ดังรูป

     

  (Workspace ใน Node-RED จะถูกเรียกว่า Flow เราสามารถเพิ่ม Flow ด้วยกดเครื่องหมาย + บน tabโดยจะเพิ่มมาอยู่ในรูปแบบของ tab ทางด้านบนของ Flow)

  3. ให้ลองทดสอบ timestamp โดยใช้ node debug

   4. จากนั้นให้กด Deploy  ซึ่งจะเป็นการ compile และ update คำสั่งให้พร้อมใช้งาน

 5. จากนั้นให้กดปุ่มบน Inject timestamp เพื่อส่งค่าแล้วสังเกตผลการ debug ดังรูป

(ค่า timestamp จะมีค่าเริ่มต้นเป็นค่าปัจจุบันมีหน่วยเป็นมิลลิวินาทีเริ่มตั้งแต่ปี 1970 แต่สามารถนำค่านี้ไปแปลงให้อยู่ในรูปของ array ที่จะแสดงเป็น มิลลิวินาที, วินาที, นาที, ชั่วโมง, วันที่, เดือน, ปี ได้ โดยจะมีตัวอย่างการแปลงให้ในเรื่อง Import and Export flow from clipboard)

การส่งข้อความเป็น String

  1. node inject สามารถเปลี่ยนชนิดของ payload ได้

  2. เลือกชนิดของ payload

 3. ใส่ข้อความเข้าไปใน payload แล้วคลิกปุ่ม Done

     

  4. คลิกปุ่ม Deploy

  5. คลิกปุ่มส่งข้อมูลแล้วสังเกตผล

 

การใช้งาน Function และ Global Context

 

  1. เลือก Node function มาวาง ซึ่งภายใน Node นี้จะสามารถใส่คำสั่งเพื่อดำเนินการต่างๆกับข้อมูลก่อนที่ข้อมูลจะถูกส่งต่อไป

 2. เมื่อเรากด Double Click ที่ Nodefunction จะมีหน้า Text Editor ให้ใช้งาน

      

  3. ใส่ชื่อ และคำสั่งภายในฟังก์ชันโดยฟังก์ชันนี้จะเป็นฟังก์ชันที่จะนับจำนวนครั้งที่กดส่งข้อมูลเลข 1 ซึ่งทุกครั้งที่เรากดส่ง 1 จะมีการแสดงค่าว่าเรากดไปครั้งที่เท่าไหร่ และเก็บผลรวมของจำนวนครั้งไว้ในตัวแปร Global Context ส่วนถ้ากดส่งข้อมูลเลข 0 ก็จะทำการเคลียร์ค่าผลรวมที่เก็บไว้

    

   if(context.hasOwnProperty(“counter”) จะใช้ในการตรวจสอบว่า ใน objectcontext นั้นมีคุณสมบัติที่ชื่อ counter หรือไม่ ถ้ามีก็จะบวกค่าไป 1 แต่ถ้าไม่มีก็จะสร้างคุณสมบัติ counter ขึ้นมา และกำหนดให้ค่าเท่ากับ 1)

  4. เพิ่ม Flow ใหม่เข้ามา โดยสามารถทำได้อีกวิธีตามขั้นตอนนี้

 5. สร้างฟังก์ชัน ใหม่ขึ้นมา โดยตั้งชื่อฟังก์ชันว่า get global count

    

 6. ฟังก์ชัน get global count นั้นจะเป็นฟังก์ชันที่ใช้แสดงผลรวมของจำนวนครั้งที่ได้ส่งข้อมูลจาก Flow 1 ผ่านตัวแปร Global Context

    

  • ผลลัพธ์จาก Flow 1

    

  • ผลลัพธ์จาก Flow 2

อ่านต่อหน้า 2...