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,



 $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"



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.



Checks to see if the given button is still present, using the Search ROM command. Returns 1 if it is, 0 if not.

Button Introspection

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.


 $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.


 $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 .