onoff เป็น Package ที่จะช่วยให้ใช้ NodeJS ควบคุม GPIO บน Raspberry Pi ได้ง่ายขึ้น จึงเป็นผู้ช่วยหลักสำหรับงานที่ต้องการทำ Raspberry Pi ให้เป็น Web Server แล้วควบคุมอุปกรณ์ต่างๆผ่าน GPIO โดยมีขั้นตอนการติดตั้งดังนี้
• ต้องติดตั้ง NodeJS ก่อน โดยดูขั้นตอนได้จาก [Raspberry Pi] การติดตั้ง NodeJS
• ย้าย Directory มาที่ /var/www ด้วยคำสั่ง cd /var/www
• ติดตั้ง node-gyp ก่อน ด้วยคำสั่ง npm install -g node-gyp
• ติดตั้ง onoff ด้วยคำสั่ง npm install onoff –save (ถ้าใช้คำสั่ง npm ไม่ได้ แปลว่ายังไม่ได้ติดตั้ง NodeJS)
• ทำการสร้างไฟล์ JavaScript ชื่ออะไรก็ได้ขึ้นมาสำหรับเขียนโค๊ด โดยใช้คำสั่ง sudo nano test.js (ในตัวอย่างนี้กำหนดชื่อไฟล์เป็น test.js)
• พิมพ์คำสั่งลงไปดังนี้
console.log("LED Blinking Start"); var Gpio = require('onoff').Gpio, led = new Gpio(2, 'out'); setInterval(function() { var state = led.readSync(); if(state === 0) { led.writeSync(1); console.log("LED On"); } else { led.writeSync(0); console.log("LED Off"); } }, 1000);
คำสั่งนี้เป็นการเรียกใช้ onoff เพื่อทำโปรแกรมไฟกระพริบ โดยกำหนดขา LED ให้เป็นขา 2 แล้วสั่งให้ติดและดับทุกๆ 1 วินาทีด้วยคำสั่ง setInterval โดยการติดหรือดับแต่ละครั้งก็จะมีการแสดงข้อความด้วยว่า LED On หรือ LED Off
เมื่อเสร็จแล้วให้ปิดและบันทึกไฟล์เก็บไว้ (กด Ctrl + X แล้วกด Y ตามด้วย Enter)
• สำหรับการต่อวงจรให้ต่อ ตัวต่านทาน 330 โอห์ม และ LED จากขา 2 ไปยัง Ground ดังภาพ
• สั่งให้ไฟล์ test.js ทำงานด้วยคำสั่ง sudo node test
• เมื่อโปรแกรมเริ่มทำงานก็จะแสดงข้อความให้เห็นบนหน้าจอ
และสังเกตที่ LED ก็จะเห็นว่ากระพริบตามที่โปรแกรมกำหนด
• เมื่อต้องการให้หยุดทำงาน ให้กด Ctrl + C
• ในกรณีที่ต้องการตั้งเวลาหยุดทำงาน ให้เพิ่มคำสั่ง setTimeout เข้าไปดังนี้
console.log("LED Blinking Start"); var Gpio = require('onoff').Gpio, led = new Gpio(2, 'out'), iv; iv = setInterval(function() { var state = led.readSync(); if(state === 0) { led.writeSync(1); console.log("LED On"); } else { led.writeSync(0); console.log("LED Off"); } }, 1000); setTimeout(function() { clearInterval(iv); led.writeSync(0); led.unexport(); console.log("LED Blinking Stop"); }, 7000);
โดยคำสั่งที่เพิ่มเข้าไปคือจะให้คำสั่งที่อยู่ใน setTimeout เริ่มทำงานเมื่อเวลาผ่านไป 7 วินาที ซึ่งคำสั่งที่มีอยู่ในนั้นก็จะเป็นคำสั่งหยุดให้คำสั่งไฟกระพริบหยุดทำงาน
• ให้ลองทดสอบอีกครั้งก็จะพบว่า โปรแกรมจะสั่งให้ LED กระพริบได้ 7 วินาที แล้วก็จะหยุดทำงานเองโดยทันที
สำหรับ onoff นั้นสามารถสั่งงานได้ในระดับ Digital Input/Output เท่านั้น ไม่สามารถทำงานที่นอกเหนือจากนี้ได้อย่าง UART, SPI หรือ I2C เป็นต้น ดังนั้นจึงเหมาะแก่การสั่งงานอุปกรณ์อย่างง่ายเสียมากกว่า เช่น ควบคุมหลอดไฟ เป็นต้น
แต่ onoff ก็เหมาะสำหรับผู้เริ่มต้นที่มีความสนใจในเรื่องอิเล็กทรอนิกส์พื้นฐานและต้องการนำไปประยุกต์ใช้งานอย่างง่าย โดยใช้ NodeJS เป็นตัวพัฒนา อย่างเช่น การสั่งงานผ่านหน้าเว็ปที่ใช้ Raspberry Pi เป็น Web Server เพื่อควบคุมอุปกรณ์ภายนอกบางอย่าง
สำหรับข้อมูลเพิ่มเติมของ onoff สามารถศึกษาเพิ่มเติมได้ที่ https://github.com/fivdi/onoff หรือ https://www.npmjs.com/package/onoff ซึ่งจะมีตัวอย่างคำสั่งจากผู้พัฒนาและการใช้งานแต่ละคำสั่งของ onoff ให้ศึกษา