You are reading a single comment by @maxogden and its replies. Click here to read the full conversation.
  • I couldn't get either the DS2xxx module or the code examples in this thread to work for writing to a DS2431, so I ended up porting some Java code I found to JavaScript and writing worked

    https://gist.github.com/maxogden/c0b33da­285e0fe809a8aa7009bc510f7

    // Used with GeekHeart https://www.tindie.com/products/MakersBo­x/geekheart/
    
    var ow = new OneWire(4) // D2 on NodeMCU
    var code = ow.search()[0] // will be empty array if it failed to find your DS2431
    
    // write a Uint8Array of arbitrary length 8 bytes at a time with a 100ms delay (add callback if you need it)
    function write (data) {
      var buf = new Uint8Array(13)
      var row = 0
      
      function next () {
        var pos = row * 8;
        for (var i = 0; i < 8; i++) {
          buf[i] = data[pos + i]
        }
        write8(pos, buf);
        if (pos + 8 >= data.length) return console.log('done');
        row++;
        if (row >= 16) return console.log('done'); // EEPROM has 16 rows of 8 bytes
        setTimeout(next, 100);
      }
      
      next()
    }
    
    // write 8 bytes to addr offset
    // example write8(0, new Uint8Array([1,1,1,1,1,1,1,1)
    function write8 (addr, data) {
      console.log(addr, data)
      var i
      ow.reset();
      ow.select(code);
      ow.write(0x0F, 1);  // Write ScratchPad
      ow.write(addr, 1); 
      ow.write(0x00, 1); 
      for ( i = 0; i < 8; i++)
        ow.write(data[i], 1);  
      
      ow.reset();
      ow.select(code);    
      ow.write(0xAA);         // Read Scratchpad
      
      for ( i = 0; i < 13; i++)     
        data[i] = ow.read();
    
      ow.reset();
      ow.select(code);
      ow.write(0x55, 1);     // Copy ScratchPad
      ow.write(data[0], 1); 
      ow.write(data[1], 1);  // Send TA1 TA2 and ES for copy authorization
      ow.write(data[2], 1);
    }
    
    // read num bytes from addr offset
    // example read(0, 8)
    function read(addr, num) {
      ow.reset();
      ow.select(code);
      ow.write(0xF0); // read
      ow.write(addr&0xFF);
      ow.write(addr>>16);
      var buf = new Uint8Array(num)
      for (var i = 0; i < num; i++) buf[i] = ow.read()
      return buf
    }
    
    // same as read() but decodes into string
    function readString (addr, num) {
      var buf = read(addr, num)
      var str = ''
      for (var i = 0; i < buf.length; i++) {
        str += String.fromCharCode(buf[i])
      }
      return str
    }
    
    // write a long string starting at addr 0
    function writeString (str) {
      var data = new Uint8Array(str.split('').map(function (c){ return c.charCodeAt(0) }))
      write(data)
    }
    
About

Avatar for maxogden @maxogden started