-
-
Save basham/806605 to your computer and use it in GitHub Desktop.
| /* | |
| DESCRIPTION | |
| ----------- | |
| Use NodeJS to read RFID ids through the USB serial stream. Code derived from this forum: | |
| http://groups.google.com/group/nodejs/browse_thread/thread/e2b071b6a70a6eb1/086ec7fcb5036699 | |
| CODE REPOSITORY | |
| --------------- | |
| https://gist.github.com/806605 | |
| VIDEO DEMO | |
| ---------- | |
| http://www.flickr.com/photos/chrisbasham/5408620216/ | |
| CHANGE LOG | |
| ---------- | |
| 02/02/2011 - Refactored code and acknowledged contributors. Listening for other helpful stream Events. | |
| 02/01/2011 - Created initial code. | |
| AUTHOR | |
| ------ | |
| Chris Basham | |
| @chrisbasham | |
| http://bash.am | |
| https://github.com/basham | |
| CONTRIBUTORS | |
| ------------ | |
| Elliott Cable | |
| https://github.com/elliottcable | |
| SOFTWARE | |
| -------- | |
| NodeJS, version 0.2.6 | |
| http://nodejs.org | |
| HARDWARE | |
| -------- | |
| Sparkfun RFID USB Reader | |
| http://www.sparkfun.com/products/8852 | |
| RFID Reader ID-20 | |
| http://www.sparkfun.com/products/8628 | |
| EM4102 125 kHz RFID Tags | |
| http://www.trossenrobotics.com/store/p/3620-Blue-Key-Fob.aspx | |
| EXAMPLE RFID IDs | |
| ---------------- | |
| 2800F7D85D5A | |
| 3D00215B3671 | |
| 31007E05450F | |
| 31007E195503 | |
| 2800F77C5BF8 | |
| */ | |
| // NodeJS includes | |
| var sys = require('sys'); | |
| var fs = require('fs'); | |
| // Stores the RFID id as it reconstructs from the stream. | |
| var id = ''; | |
| // List of all RFID ids read | |
| var ids = []; | |
| // ARGUMENT 1: | |
| // Stream path, unique to your hardware. | |
| // List your available USB serial streams via terminal and choose one: | |
| // ls /dev | grep usb | |
| // Had trouble with TTY, so used CU. | |
| // ARGUMENT 2: | |
| // Simplifies restruction of stream if one bit comes at a time. | |
| // However, I don't know if or how this setting affects performance. | |
| fs.createReadStream('/dev/cu.usbserial-A600exqM', { bufferSize: 1 }) | |
| .on('open', function(fd) { | |
| sys.puts('Begin scanning RFID tags.'); | |
| }) | |
| .on('end', function() { | |
| sys.puts('End of data stream.'); | |
| }) | |
| .on('close', function() { | |
| sys.puts('Closing stream.'); | |
| }) | |
| .on('error', function(error) { | |
| sys.debug(error); | |
| }) | |
| .on('data', function(chunk) { | |
| chunk = chunk.toString('ascii').match(/\w*/)[0]; // Only keep hex chars | |
| if ( chunk.length == 0 ) { // Found non-hex char | |
| if ( id.length > 0 ) { // The ID isn't blank | |
| ids.push(id); // Store the completely reconstructed ID | |
| sys.puts(id); | |
| } | |
| id = ''; // Prepare for the next ID read | |
| return; | |
| } | |
| id += chunk; // Concat hex chars to the forming ID | |
| }); |
Hi,
it's not works for me, need help please.
I have the same hardware: Sparkfun RFID USB Reader, RFID Reader ID-12 and EM4102 125 kHz RFID Tags.
I'm logged in with root, I can open a stream from "dev/ttyUSB0", but when I scan a tag, I don't have output.
Chmod of ttyUSB0 is like this:
crw-rw---- 1 root dialout 188, 0 2012-11-05 12:25 ttyUSB0
Here my script:
var fs = require('fs')
fs.createReadStream("/dev/ttyUSB0", {
bufferSize: 1
})
.on('open', function(fd){
console.log('Stream read');
})
.on('end', function(){
console.log('Stream end');
})
.on('data', function(data){
console.log('Stream data');
})
.on('error', function(error) {
console.log('Stream error');
})
Where I disconnect the Sparkfun RFID USB Reader, I receive the "end" event, so ttyUSB0 is file.
I use a virtual machine with VMware player.
How can I fix that, I don't know, I'm confused about that
Thank you for your help.
[...] When I disconnect the Sparkfun RFID USB Reader, I receive the "end" event, so "/dev/ttyUSB0" is the right file. [...]
It's works now. I'm rolling back to v0.8 of nodejs. Now, my problem is that I get a empty buffer when I scan a tag like this: <Buffer 00 00 00 00 00 00 00 00 00 00 00 00 00 00>
What did it mean ? Thank you
I know this code is insanely old but how would you go about writing data TO the tag ?
@freak4pc I don't know how you'd write to a RFID tag. Never tried, and I don't have such hardware. The tags I used for this project are read-only. Would certainly be interested if you figure out some solution.
i have the issue with retrieving the USB serial streams . could you anyone please
help me ?
I appreciate you sticking to your style and explaining your rationale with passion. Even though I'm not fully adopting your sly coding aesthetic, there is a lot I like about it. I've added you as a contributor.