An event-emitter interface to an Apple IR Remote using the Tessel IR Module
This module takes the burden off of processing the infared byte buffers and extends the events from ir-attx4
to provide a higher-level API for programming against Apple remotes. This module supports both the first and second generation of remotes.
var tessel = require('tessel');
var port = tessel.port['A'];
var apple = require('tessel-apple-remote')(port);
apple.on('menu', function() {
console.log('menu');
});
Simple button presses:
menu
center
up
down
right
left
play
Each event name has a corresponding [name].long
event for long presses:
menu.long
center.long
up.long
down.long
right.long
left.long
play.long
NOTE: both play
and play.long
only apply to the 2nd Generation remote.
Each Apple Remote sends along a simple remote ID between 0-255 (0xFF). To differentiate between remotes, you can prefix both the command events and continuation events with that id. For example, if your remote had the ID of 50
apple.on('50.menu', function() {
console.log('my remote clicked "menu"');
});
To enable discovery on the fly of remote IDs, an id
event is emitted, with a value of the new id. This event will only be emitted the first time that ID is encountered.
apple.on('id', function(id) {
console.log('a new challenger appears', id);
});
To test this, you can either use two remotes, or you can first press a button on the remote, notice the id
event fires, then change your remote's ID by pressing and holding the menu + center buttons for about 10 seconds. After your remote's ID is changed, another id
event will be emitted on the next button press. See examples/lockout.js for an example of how to isolate your code to the first remote to send an event.
The standard data
event is unmodified.
apple.on('data', function(data) {
// access to the low-level duration stream
console.log(data.toString('hex'));
});
The standard error
event is unmodified.
apple.on('error', function(error) {
console.log(error);
});
- Plug the IR module into Port A on your Tessel, then connect via USB
tessel run [script]
to test scripts in examples folder.- Click buttons on your remote and commence mad science.
Helpful reference material on the implemenation:
- https://github.com/tessel/ir-attx4#api-infrared-on-data-callback-data-Emitted-when-an-infrared-signal-is-detected
- http://techdocs.altium.com/display/FPGA/NEC+Infrared+Transmission+Protocol
- http://en.wikipedia.org/wiki/Apple_Remote#Technical_details
- https://github.com/squeed/AppleRemoteSender/blob/master/AppleRemoteSender.cpp
- https://hifiduino.wordpress.com/apple-aluminum-remote/
You need:
- a Tessel
- an IR module
- either a first-generation (white) Apple remote
- or a second-generation (silver) Apple remote