[Raspberry Pi] ควบคุม GPIO ผ่าน JavaScript ด้วย NodeJS + onoff

[Raspberry Pi] ควบคุม GPIO ผ่าน JavaScript ด้วย NodeJS + onoff

        onoff เป็น Package ที่จะช่วยให้ใช้ NodeJS ควบคุม GPIO บน Raspberry Pi ได้ง่ายขึ้น จึงเป็นผู้ช่วยหลักสำหรับงานที่ต้องการทำ Raspberry Pi ให้เป็น Web Server แล้วควบคุมอุปกรณ์ต่างๆผ่าน GPIO โดยมีขั้นตอนการติดตั้งดังนี้

        • ต้องติดตั้ง NodeJS ก่อน โดยดูขั้นตอนได้จาก [Raspberry Pi] การติดตั้ง NodeJS

        • ย้าย Directory มาที่ /var/www ด้วยคำสั่ง cd /var/www

002

 

        • ติดตั้ง node-gyp ก่อน ด้วยคำสั่ง npm install -g node-gyp

002

 

003

 

        • ติดตั้ง onoff ด้วยคำสั่ง npm install onoff –save (ถ้าใช้คำสั่ง npm ไม่ได้ แปลว่ายังไม่ได้ติดตั้ง NodeJS)

001

 

005

 

        • ทำการสร้างไฟล์ JavaScript ชื่ออะไรก็ได้ขึ้นมาสำหรับเขียนโค๊ด โดยใช้คำสั่ง sudo nano test.js (ในตัวอย่างนี้กำหนดชื่อไฟล์เป็น test.js)

006

 

        • พิมพ์คำสั่งลงไปดังนี้

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);

007

        คำสั่งนี้เป็นการเรียกใช้ onoff เพื่อทำโปรแกรมไฟกระพริบ โดยกำหนดขา LED ให้เป็นขา 2 แล้วสั่งให้ติดและดับทุกๆ 1 วินาทีด้วยคำสั่ง setInterval โดยการติดหรือดับแต่ละครั้งก็จะมีการแสดงข้อความด้วยว่า LED On หรือ LED Off

        เมื่อเสร็จแล้วให้ปิดและบันทึกไฟล์เก็บไว้ (กด Ctrl + X แล้วกด Y ตามด้วย Enter)

 

        • สำหรับการต่อวงจรให้ต่อ ตัวต่านทาน 330 โอห์ม และ LED  จากขา 2 ไปยัง Ground ดังภาพ

010

DSC03179

DSC03181

 

        • สั่งให้ไฟล์ test.js ทำงานด้วยคำสั่ง sudo node test

008

 

        • เมื่อโปรแกรมเริ่มทำงานก็จะแสดงข้อความให้เห็นบนหน้าจอ

009

 

        และสังเกตที่ LED ก็จะเห็นว่ากระพริบตามที่โปรแกรมกำหนด

DSC03177

 

         • เมื่อต้องการให้หยุดทำงาน ให้กด Ctrl + C

014

 

        • ในกรณีที่ต้องการตั้งเวลาหยุดทำงาน ให้เพิ่มคำสั่ง 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);

 015        โดยคำสั่งที่เพิ่มเข้าไปคือจะให้คำสั่งที่อยู่ใน setTimeout เริ่มทำงานเมื่อเวลาผ่านไป 7 วินาที ซึ่งคำสั่งที่มีอยู่ในนั้นก็จะเป็นคำสั่งหยุดให้คำสั่งไฟกระพริบหยุดทำงาน

 

        • ให้ลองทดสอบอีกครั้งก็จะพบว่า โปรแกรมจะสั่งให้ LED กระพริบได้ 7 วินาที แล้วก็จะหยุดทำงานเองโดยทันที

016

 

        สำหรับ 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 ให้ศึกษา

 

Facebook Comments Box