اطلاعیه

Collapse
No announcement yet.

شیلد سنسور دمای DS18B20 برد Wemos Mini D1

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    شیلد سنسور دمای DS18B20 برد Wemos Mini D1

    من برای اطمینان از صحت محاسبات و کیفیت محصول «شیلد سنسور دمای DS18B20 برد Wemos Mini D1» رو به همراه Wemos Mini D1 خریداری کردم.(از eca.ir) ولی متاسفانه هیچ دیتاشیتی برای ان ارایه نشد. من با توجه به کدهای دوستان هر چه تلاش کردم موفق به خواندن دما نشدم.

    #include <OneWire.h>
    #include <DallasTemperature.h>

    #define ONE_WIRE_BUS 2

    OneWire oneWire(ONE_WIRE_BUS);
    DallasTemperature sensors(&oneWire);

    void setup() {
    // put your setup code here, to run once:
    Serial.begin(115200); //Serial connection
    sensors.begin();
    }

    void loop() {
    // call sensors.requestTemperatures() to issue a global temperature
    // request to all devices on the bus
    Serial.print("Requesting temperatures...");
    sensors.requestTemperatures(); // Send the command to get temperatures
    Serial.println("DONE");
    // After we got the temperatures, we can print them here.
    // We use the function ByIndex, and as an example get the temperature from the first sensor only.
    float celsius = sensors.getTempCByIndex(0);

    // Check if reading was successful
    if(celsius != DEVICE_DISCONNECTED_C)
    {
    Serial.print("Temperature for the device 1 (index 0) is: ");
    Serial.println(celsius);
    }
    else
    {
    Serial.println("Error: Could not read temperature data");
    }

    HttpPost(celsius);
    delay(1000*(delaytime-1));
    Serial.println("LOOP...");
    }


    برنامه من خطای
    0906.692 -> Requesting temperatures...DONE
    0906.692 -> Error: Could not read temperature data
    میدهد.
    لطفا کمک نمایید.
    مشکل از کجاست؟ ایا مشکل نرم افزاریه یا سخت افزاری؟

    #2
    پاسخ : شیلد سنسور دمای DS18B20 برد Wemos Mini D1

    درود ، بعیده سخت افزاری باشه ، لطفاً برنامه زیر رو تست کنید

    I already have a Ds18B20 example on this site but i was interested to see that searching through popular electronic component sites a DS18B20 shield for the Wemos mini, I couldn’t find a link on the Wemos site so I was intrigued and purchased one, I had planned on actually designing one (night still do […]

    دیدگاه


      #3
      پاسخ : شیلد سنسور دمای DS18B20 برد Wemos Mini D1

      ممنون از راهنمایی شما
      ولی این بار دیگر هیچ پاسخی دریافت نشد.
      با یک کد دیگر که امتحان کردم این جواب رو میداد:
      14:01:11.381 -> Requesting temperatures...DONE
      14:01:11.419 ->
      Temp C: -127.00 Temp F: -196.60
      یعنی همیشه منفی 127؟؟؟؟ احساس میکنم که شیلد مربوطه با خود سنسور DS18B20 متفاوت باشه!
      جدیدترین ویرایش توسط rrreza; ۱۴:۱۲ ۱۳۹۷/۱۱/۰۱.

      دیدگاه


        #4
        پاسخ : شیلد سنسور دمای DS18B20 برد Wemos Mini D1

        من این بار حرفه ای تر اقدام کردم. اول آدرس را به دست آوردم و سپس کد زیر را نوشتم ولی باز پاسخ گرفتم:
        Temp C: -127.0000 Temp F: -196.6000
        نمی دونم ماژول خریداری شده از eca مشکل داره و یا برنامه نویسی ماژول با سنسورش متفاوته! نظر دوستان چیست؟

        #include <DallasTemperature.h>
        #include <OneWire.h>

        // OneWire DS18S20, DS18B20, DS1822 Temperature Example

        OneWire ds(D2); // on pin D4 (a 4.7K resistor is necessary)
        DeviceAddress adress1={0x28, 0xFF, 0xBF, 0x29, 0x64, 0x16, 0x04, 0x97 };
        void setup(void)
        {
        Serial.begin(9600);
        }

        void loop(void)
        {
        byte i;
        byte present = 0;
        byte type_s;
        byte data[12];
        byte addr[8];
        float celsius, fahrenheit;

        if ( !ds.search(addr))
        {
        ds.reset_search();
        delay(250);
        return;
        }

        if (OneWire::crc8(addr, 7) != addr[7])
        {
        Serial.println("CRC is not valid!");
        return;
        }

        // the first ROM byte indicates which chip
        switch (addr[0])
        {
        case 0x10:
        type_s = 1;
        break;
        case 0x28:
        type_s = 0;
        break;
        case 0x22:
        type_s = 0;
        break;
        default:
        Serial.println("Device is not a DS18x20 family device.");
        return;
        }

        ds.reset();
        ds.select(addr);
        ds.write(0x44, 1); // start conversion, with parasite power on at the end
        delay(1000);
        present = ds.reset();
        ds.select(addr);
        ds.write(0xBE); // Read Scratchpad

        for ( i = 0; i < 9; i++)
        {
        data[i] = ds.read();
        }

        // Convert the data to actual temperature
        int16_t raw = (data[1] << 8) | data[0];
        if (type_s) {
        raw = raw << 3; // 9 bit resolution default
        if (data[7] == 0x10)
        {
        raw = (raw & 0xFFF0) + 12 - data[6];
        }
        }
        else
        {
        byte cfg = (data[4] & 0x60);
        if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms
        else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
        else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms

        }
        celsius = (float)raw / 16.0;
        fahrenheit = celsius * 1.8 + 32.0;
        Serial.print(" Temperature = ");
        Serial.print(celsius);
        Serial.print(" Celsius, ");
        Serial.print(fahrenheit);
        Serial.println(" Fahrenheit");
        }

        دیدگاه

        لطفا صبر کنید...
        X