Avatar for petrynchyn

petrynchyn

Member since Jan 2016 • Last active May 2016
  • 0 conversations
  • 2 comments

Most recent activity

  • in ESP8266
    Avatar for petrynchyn

    After the firmware 1q84.tvemasterf35ac96 this code started working with failures, problem only with DHT module.
    In firmware 1v84.tvemaster363580f everything worked well.
    ESP-12q

    var dht = require("DHT22").connect(D4);
    
    var ds18 = require("DS18B20").connect(new OneWire(D5));
    
    I2C1.setup({sda:D12, scl:D14});
    var tsl = require('TSL2561').connect(I2C1);
    tsl.init(tsl.config.address.FLOAT,
             tsl.config.timing._402MS,
             tsl.config.gain._1X);
    
    var a = setInterval(function (){
      dht.read(function (a) { console.log("Temp is      ",a.temp,"  °C and RH is ",a.rh,"%");});
    
      ds18.getTemp(function (temp) { console.log("Temp is      ",temp,"°C");}, true);
    
      tsl.getLuminosity( tsl.config.spectrum.VISIBLE, 
           function (x) { print ("Luminosity is",x,"Lux"); }  
      );
    }, 3000);
    

    terminal window:

     _____                 _
    |   __|___ ___ ___ _ _|_|___ ___
    |   __|_ -| . |  _| | | |   | . |
    |_____|___|  _|_| |___|_|_|_|___|
              |_| http://espruino.com
     1v84.tve_master_f35ac96 Copyright 2016 G.Williams
    WARNING: the esp8266 port is in beta!
    Flash map 4MB:512/512, manuf 0xe0 chip 0x4016
    >echo(0);
    =undefined
    Temp is       20.1   °C and RH is  18.4 %
    Temp is       20.875 °C
    Luminosity is 22 Lux
    Temp is       20.1   °C and RH is  18.3 %
    Temp is       20.875 °C
    Luminosity is 22 Lux
    Temp is       20.2   °C and RH is  18.3 %
    Temp is       20.875 °C
    Luminosity is 22 Lux
    Temp is       20.2   °C and RH is  18.2 %
    Temp is       20.875 °C
    Luminosity is 22 Lux
    Temp is       20.875 °C
    Luminosity is 22 Lux
    Temp is       -1   °C and RH is  -1 %
    Temp is       20.875 °C
    Luminosity is 22 Lux
    Temp is       -1   °C and RH is  -1 %
    Temp is       20.875 °C
    Luminosity is 22 Lux
    Temp is       -1   °C and RH is  -1 %
    Temp is       20.875 °C
    Luminosity is 22 Lux
    Temp is       -1   °C and RH is  -1 %
    Temp is       20.875 °C
    Luminosity is 22 Lux
    Temp is       -1   °C and RH is  -1 %
    Temp is       20.875 °C
    Luminosity is 22 Lux
    Temp is       -1   °C and RH is  -1 %
    Temp is       20.2   °C and RH is  18.2 %
    Temp is       20.875 °C
    Luminosity is 22 Lux
    Temp is       20.2   °C and RH is  18.3 %
    Temp is       20.875 °C
    Luminosity is 22 Lux
    
  • in ESP8266
    Avatar for petrynchyn

    Here's my modified @hygy code. I set Timeout depending on Thermometer Resolution and Max Conversion Time. Tested on DS18B20 and ESP-12q. Can someone check and update code DS18B20.js ?

    /*
    Module for the DS18B20 temperature sensor
    
    var ow = new OneWire(A1);
    var sensor = require("DS18B20").connect(ow);
    sensor.getTemp(function (temp) {    console.log("Temp is "+temp+"°C");  }, true);
    sensor.setRes(9);
    sensor.getTemp(function (temp) {    console.log("Temp is "+temp+"°C");  }, true);
    var sensor2 = require("DS18B20").connect(ow, 1);
    var sensor3 = require("DS18B20").connect(ow, -8358680895374756824);
    
    */
    
    var C = {
        CONVERT_T: 0x44,
        COPY: 0x48,
        READ: 0xBE,
        WRITE: 0x4E
    };
    
    function DS18B20(oneWire, device) {
        this.bus = oneWire;
        if (device === undefined) {
            this.sCode = this.bus.search()[0];
        } else {
            if (parseInt(device).toString() == device && device >= 0 && device <= 126) {
                this.sCode = this.bus.search()[device];
            } else {
                this.sCode = device;
            }
        }
        this.deviceTypeCode=parseInt(this.sCode[0]+this.sCode[1]);
    }
    /** For internal use - read the scratchpad region */
    DS18B20.prototype._readSpad = function() {
        var spad = [];
        this.bus.reset();
        this.bus.select(this.sCode);
        this.bus.write(C.READ);
        for (var i = 0; i < 9; i++) {
            spad.push(this.bus.read());
        }
        return spad;
    };
    /** For internal use - write the scratchpad region */
    DS18B20.prototype._writeSpad = function(th, tl, conf) {
        this.bus.reset();
        this.bus.select(this.sCode);
        this.bus.write(C.WRITE);
        this.bus.write(th);
        this.bus.write(tl);
        this.bus.write(conf);
        this.bus.reset();
        this.bus.select(this.sCode);
        this.bus.write(C.COPY);
        this.bus.reset();
    };
    /** Set the resolution in bits. From 8 to 12 bits */
    DS18B20.prototype.setRes = function(res) {
        var spad = this._readSpad();
        res = [0x1F, 0x3F, 0x5F, 0x7F][E.clip(res, 9, 12) - 9];
        this._writeSpad(spad[2], spad[3], res);
    };
    /** Return the resolution in bits. From 8 to 12 bits */
    DS18B20.prototype.getRes = function() {
        return [0x1F, 0x3F, 0x5F, 0x7F].indexOf(this._readSpad()[4]) + 9;
    };
    /** Return true if this device is present */
    DS18B20.prototype.isPresent = function() {
        return this.bus.search().indexOf(this.sCode) !== -1;
    };
    /** Get a temperature reading, in degrees C */
    DS18B20.prototype.getTemp = function(callback,verify) {
      if ((verify && !this.isPresent()) || !this.sCode) {
        return callback(null);
      }
      var tim = {9:94, 10:188, 11:375, 12:750}; //Thermometer Resolution (bit) : Max Conversion Time (ms)
      this.bus.reset();
      this.bus.select(this.sCode);
      this.bus.write(C.CONVERT_T, true);
      setTimeout(
       function(me) {
        var s = me._readSpad();
        var str="";
        s.forEach( function(v) { str+=" 0x"+v.toString(16); } );
        var temp = s[0] + (s[1]<<8);
        if (temp > 32767) temp -= 65536;
        switch (me.deviceTypeCode){
         case 10: temp = temp/ 2.0; break;
         default: temp = temp/16.0; break;
        }
       callback(temp);
      }, tim[this.getRes()], this);
    }
    /** Return a list of all DS18B20 sensors with the alarms set */
    DS18B20.prototype.searchAlarm = function() {
        return this.bus.search(0xEC);
    };
    /** Set alarm low and high values in degrees C - see DS18B20.prototype.searchAlarm.
      If the temperature goes below `lo` or above `hi` the alarm will be set. */
    DS18B20.prototype.setAlarm = function(lo, hi) {
        lo--; // DS18B20 alarms if (temp<=lo || temp>hi), but we want (temp<lo || temp>hi)
        if (lo < 0) lo += 256;
        if (hi < 0) hi += 256;
        var spad = this._readSpad();
        this._writeSpad(hi, lo, spad[4]);
    };
    /** Initialise a DS18B20 device. Use either as:
      connect(new OneWire(pin)) - use the first found DS18B20 device
      connect(new OneWire(pin), N) - use the Nth DS18B20 device
      connect(new OneWire(pin), ID) - use the DS18B20 device with the given ID
     */
    exports.connect = function(oneWire, device) {
        return new DS18B20(oneWire, device);
    };
    
Actions