Hardware::iButton::Device - object to represent iButtons
use Hardware::iButton::Connection; $c = new Hardware::iButton::Connection "/dev/ttyS0"; @b = $c->scan(); foreach $b (@b) { print "id: ", $b->id(), ", reg0: ",$b->readreg(0),"\n"; }
This module talks to iButtons via the "active" serial interface (anything using the DS2480, including the DS1411k and the DS 9097U). It builds up a list of devices available, lets you read and write their registers, etc.
The connection object is an Hardware::iButton::Connection. The main user-visible purpose of it is to provide a list of Hardware::iButton::Device objects. These can be subclassed once their family codes are known to provide specialized methods unique to the capabilities of that device. Those devices will then be Hardware::iButton::Device::DS1920, etc.
Brian Warner, warner@lothar.com
http://www.ibutton.com, http://sof.mit.edu/ibuttonpunks/
$family = $b->family(); # "01" for DS1990A/DS2401 "id only" buttons $serial = $b->serial(); # "000001F1F1F3", as stamped on button $crc = $b->crc(); # "E5" error check byte $id = $b->id(); # the previous three joined together: "01000001F1F1F3E5"
$b->select();
Activate this button (in Dallas terms, "move it to the Transport Layer"). All other buttons will be idled and will not respond to commands until the bus is reset with $c-reset()>. Returns 1 for success, undef if the button is no longer on the bus.
$c-
$button->is_present();
Checks to see if the given button is still present, using the Search ROM command. Returns 1 if it is, 0 if not.
or, how not to get lost in your own navel
$model = $b->model(); # "DS1992" $bytes = $b->memsize(); # 128 bytes $type = $b->memtype(); # "NVRAM" $special = $b->specialfuncs(); # "thermometer", "clock", "java", "crypto"
$data = $b->read_memory($start, $length);
Reads memory from the iButton. Acts like $data = substr(memory, $start, $length). If you read beyond the end of the device, you will get all ones in the unimplemented addresses.
$data = substr(memory, $start, $length)
$b->write_memory($start, $data);
Writes memory to the iButton NVRAM. Acts like substr(memory, $start, length($data)) = $data;. Writes in chunks to separate 32-byte pages, each chunk going to the scratchpad first, verified there, then copied into NVRAM. Returns the number of bytes successfully written.
substr(memory, $start, length($data)) = $data;
$temp = $b->read_temperature(); $temp = $b->read_temperature_hires();
These methods can be used on DS1820/DS1920 Thermometer iButtons. They return a temperature in degrees C. The range is -55C to +100C, the resolution of the first is 0.5C, the resolution of the second is about 0.01C. The accuracy is about +/- 0.5C.
Useful conversions: $f = $c*9/5 + 32, $c = ($f-32)*5/9 .
$f = $c*9/5 + 32
$c = ($f-32)*5/9
To install Hardware::iButton::Device, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Hardware::iButton::Device
CPAN shell
perl -MCPAN -e shell install Hardware::iButton::Device
For more information on module installation, please visit the detailed CPAN module installation guide.