2013-01-21 30 views
23

tôi kết nối một nút để các cảng Raspberry Pi GPIO:Async mâm xôi pi sự kiện gpio trong nodejs

http://adafruit.com/products/801

Các pi-gpio nút js mô-đun cho phép chỉ để kéo tình trạng hiện tại nhưng không phải chờ đợi cho một sự thay đổi trạng thái :

gpio.read(16, function(err, value) { 
    if(err) throw err; 
    console.log(value); // The current state of the pin 
}); 

Có giải pháp nào để ràng buộc sự kiện không đồng bộ không?

Trong ví dụ này, điều này sẽ bất cứ khi nào nút được nhấn.

Trả lời

11

Tôi khuyên bạn nên sử dụng mô-đun có tên onoff.

Nó có khả năng xem tệp giá trị trong khi không đánh thuế cpu bằng cách bỏ phiếu trong khoảng thời gian.

Tôi đã thực hiện một ứng dụng thử nghiệm nhỏ với node.js để thử các đèn LED và nút với nó, bạn có thể kiểm tra xem nó ra here.

10

tiếc là không có sự kiện nào được tạo khi sử dụng GPIO phần cứng. Bạn có thể tạo sự kiện bằng cách sử dụng bộ phát và setInterval để tạo bộ hẹn giờ kiểm tra trạng thái thường xuyên và sau đó phát ra một sự kiện cho ứng dụng của bạn.

var ee = new process.EventEmitter(), 
    buttonState; 

ee.on('stateChange', function(previousValue, value){ 
    console.log('button state changed from', previousValue, 'to', value); 
}); 

setInterval(function(){ 
    gpio.read(16, function(err, value) { 
    if(err){ 
     ee.emit('error', err); 
    } else{ 
     if(buttonState !== value){ 
     var previousState = buttonState; 
     buttonState = value; 
     ee.emit('stateChange', previousState, value); 
     } 
    }   
    }); 
}, 50); //check button state every 50ms 

Bạn có thể điều chỉnh bộ tính giờ theo yêu cầu của mình. Tôi nghĩ 50ms là một con số tốt vì mắt người không thể phát hiện sự khác biệt nếu nó nhanh hơn.

3

Tôi chỉ đến accross modulle này

https://github.com/EnotionZ/GpiO

Tôi đã không nhìn vào chiều sâu cho nó nhưng dường như nó sử dụng phương pháp setInterval ở chế độ nền.

+2

Có, nó sử dụng cùng một phương pháp tôi mô tả trong câu trả lời của tôi. –

0

Như một sang một bên, có một dự án rất giống với node.js (tuy nhiên nhiều hơn nữa cắt xuống) được gọi là Espruino.

Điều này chạy trên Raspberry Pi (và nhiều bộ điều khiển vi điều khiển ARM công suất thấp), hỗ trợ HTTP và có chức năng gọi là setWatch hoạt động chính xác theo cách bạn yêu cầu.

Các vấn đề liên quan