Отрицательные температуры и ds18b20

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Мля! Да сколько можно? Тормозной жидкости выпил? Градус идиотии уже зашкаливает!

    float celsius =  (short)(ds.read() | (ds.read()<<8))/16.0;
    float temp =  (short)((ds.read()<<16 | (ds.read()<<8)) / 16.0 ;
    Temp = (float) celsius; 
    //temp = (float) temp; 

 

Thorn
Offline
Зарегистрирован: 07.11.2014

wdrakula пишет:

Мля! Да сколько можно? Тормозной жидкости выпил? Градус идиотии уже зашкаливает!

    float celsius =  (short)(ds.read() | (ds.read()<<8))/16.0;
    float temp =  (short)((ds.read()<<16 | (ds.read()<<8)) / 16.0 ;
    Temp = (float) celsius; 
    //temp = (float) temp; 

Да негорячитесь вы так.  Бывет.

Саоме главное то что... ПОЛУЧИЛСОЬ то ёлки палки. Щас впихну в свой народный мониторинг. Спасибо всё кто принимал участие в этом ... в этом разговоре :)

#include <Wire.h>                     //Подключаем библиотеку для использования I2C  
#include <OneWire.h>                  //Подключаем библиотеку для температурного датчика DS18B20
#include <ESP8266WiFi.h>
#include <Adafruit_BMP085.h>          //Подключаем библиотеку для маленького барометра (темп., абс.высота и атм.давление)
#include <DHT.h>                      //Подключаем библиотеку двсеми народнолюбимого шротового DHT11

//=====Termo_Sensor ds18b20*
int tempPin=12;                      //Определяем порт шины OneWire (IC) для температурного датчика DS18B20, Gpio12
OneWire ds(tempPin);                 //Создаем объект для работы с термометром
byte data[12];
byte addr[8]={0x28,0xFF,0xFA,0x85,0x54,0x14,0x01,0x67};    //адрес датчика DS18B20_уличного 8266-03s
unsigned long flagDallRead=0;       //Флаг для обработки показаний с датчиков Dallas
unsigned int raw;                   //Если экранированный кабель, можно подключать до 32 термо-датчиков DS18B20
float temp;                         //Температура на уличке с точностью 0,06 градС

//=====Pressure*
Adafruit_BMP085 bmp;
float pres;

//=====Humidity*
#define DHTTYPE DHT11
#define DHTPIN  14                    //Gpio14
DHT dht(DHTPIN, DHTTYPE, 11);         //Initialize DHT sensor, 11 works fine for ESP8266
float hmdt;         

//=====Wi-Fi setup*
const char* ssid="имя_сети_wi-fi";
const char* password="паролик";

IPAddress device_ip   (10,32,10,33);                          //IP eso8266-03s street DeepNet
IPAddress dns_ip      (8,8,8,8);
IPAddress gateway_ip  (10,32,10,1);                           //DNS DeepNet
IPAddress subnet_mask (255,255,255,0);

WiFiClient client;
String apiKey="ключик_АПИ";     //ThingSpeak API key, DeepNet_street
const char* serverTS="api.thingspeak.com";  

const char* hostN="narodmon.ru";
String Hostname;                     //Имя железки - выглядит как ESP18FE349C4EBD т.е. ESP+mac адрес.
    
//=====Delays*
const int sleepTimeS=300;              //Время перехода в "глубокий сон", Секунд....

void setup(){
  Wire.begin(2,13);                                  //Переназначаем i2c для мелкой 8266-03, 2pin -SDA && 13pin -SCL
  bmp.begin();                                       //Initialize Pressure sensor
  dht.begin();                                       //Initialize Humidity sensor
//  Serial.begin(115200);                            //Serial connection from ESP-01 via 3.3v console cable
  razrDall(0x60);   
    delay(10);
  Hostname="ESP"+WiFi.macAddress();
  Hostname.replace(":","");
  WiFi.begin(ssid, password);                        //Connect to WiFi network
  WiFi.config(device_ip, gateway_ip, subnet_mask);   //Setup WiFi network
//    Serial.print("\n\r \n\rWorking to connect");
      while (WiFi.status() != WL_CONNECTED){         // Wait for connection
//        delay(500);}
        delay(10);}
//          Serial.print(".");}
//  Serial.println("");
//  Serial.println("esp8266-03");
//  Serial.print("Connected to: ");
//  Serial.println(ssid);
//  Serial.print("IP address: ");
//  Serial.println(WiFi.localIP());
//  Serial.print("signal strength (RSSI):");
//  Serial.print(rssi);
//  Serial.println(" dBm"); 
//  Serial.print("MAC address: ");
//  Serial.println(WiFi.macAddress());
}

//=========== Функция изменения разрядности Даллас
void razrDall(byte raz){
 ds.reset();                                         //Cброс шины
 ds.select(addr);                                    //выставить адрес
 ds.write(0x4E);                                     //разрешение записать конфиг
 ds.write(0x7F);                                     //Th контроль температуры макс 128грд
 ds.write(0xFF);                                     //Tl контроль температуры мин -128грд
 ds.write(0x60);                                     //0x60 12-бит разрешение, 0x00 -9бит разрешение
}

//=========== Считывание и Обработка температур
void tempDallas(unsigned long interval){
  static unsigned long prevTime=0;
  if (millis()-prevTime>interval){                   //Проверка заданного интервала
  static boolean flagDall=0;                         //Признак операции
  prevTime=millis();
  flagDall=!flagDall;                                //Инверсия признака
  if (flagDall){
    ds.reset();
    ds.write(0xCC);                                  //Обращение ко всем датчикам
    ds.write(0x44);                                  //Команда на конвертацию
    flagDallRead=1;                                  //Время возврата в секундах
      }else{
    ds.reset();
    ds.select(addr);
    ds.write(0xBE);                                  //Считывание значения с датчика
  float celsius = (short)(ds.read()|(ds.read()<<8))/16.0;
  temp=(float) celsius; 
  flagDallRead=2;                                    //Время возврата в секундах
//  Serial.print("Temp: ");
//  Serial.println(temp); 
     }
   }
}

//========== Считывание Давления
void bar(){
  pres=(bmp.readPressure()/133.3);
//  tempB=bmp.readTemperature();                     //-0.5 для bmp180 3.3v
//  alt=bmp.readAltitude();
//  bmp.readSealevelPressure();
//  bmp.readAltitude(101500);
//  Serial.print("tempBmp: "); 
//  Serial.println(tempB);
//  Serial.print("presBmp: ");
//  Serial.println(pres); 
//  Serial.print("Alt: "); 
//  Serial.println(alt); 
//  Serial.println("+++"); 
}

//========== Считывание Влажности воздуха
void hmdtDht(){                                 //Reads the temp and humidity from the DHT sensor and sets the global variables for both
  hmdt = (dht.readHumidity()+4);                //Read humidity (percent)
//  tempC = (dht.readTemperature(false)-6);     //Read temperature as Fahrenheit, для Celsius (true)
//  Serial.print("tempDht: "); 
//  Serial.println(tempC); 
//  Serial.print("hmdtDht: "); 
//  Serial.println(hmdt);  
//  Serial.println("...");
}

 //========== Проверяем интервал для отправки в ThingSpeak
void thingspeak(){
  if (client.connect(serverTS,80)){             //Dns "184.106.153.149" or api.thingspeak.com:"80" or port
    String postStr = apiKey;
    postStr +="&field1=";
    postStr += String(temp);
    postStr +="&field2=";
    postStr += String(hmdt);
    postStr +="&field3=";
    postStr += String(pres);
    postStr +="&field4=";
    postStr += String(WiFi.RSSI());
    postStr += "\r\n\r\n";
    client.print("POST /update HTTP/1.1\n"); 
    client.print("Host: api.thingspeak.com\n"); 
    client.print("Connection: close\n"); 
    client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n"); 
    client.print("Content-Type: application/x-www-form-urlencoded\n"); 
    client.print("Content-Length: "); 
    client.print(postStr.length()); 
    client.print("\n\n"); 
    client.print(postStr);
  }
}

 //========== Проверяем интервал для отправки в Narodmon
void narodmon(){
  if (client.connect(hostN, 8283)){                   //Dns "94.142.140.101" or narodmon.ru:"8283" or port
    String buf;
    buf = "#" + Hostname + "#DeepNet_home" + "\r\n";  //Заголовок И ИМЯ, которое будет отображаться в народном мониторинге, чтоб не палить мак адрес
    buf = buf + "#T1#" + String(temp) + "\r\n";       //Температура ds18b20 
    buf = buf + "#H1#" + String(hmdt) + "\r\n";       //Влажность dht11 + поправка
    buf = buf + "#P1#" + String(pres) + "\r\n";       //Атмосферное давление bmp180
    buf = buf + "#R1#" + String(WiFi.RSSI()) + "\r\n";//Уровень сигнала wi-fi точки
    buf = buf + "##\r\n"; // закрываем пакет
      client.print(buf);                              //Отправляем данные
  }
}
  
void loop(){
  tempDallas(flagDallRead*1000);
  bar();
  hmdtDht();
  thingspeak();
  narodmon();
  client.stop();
//  Serial.println ("Closing WiFi connection...");
  WiFi.disconnect();
    delay(150);
//  Serial.print ("Entering deep sleep mode for... ");
//  Serial.println (sleepTimeS);                            //mode - WAKE_RF_DEFAULT, WAKE_RFCAL, WAKE_NO_RFCAL, WAKE_RF_DISABLED
  ESP.deepSleep(sleepTimeS * 1000000, WAKE_RF_DEFAULT);     //Переходим в DeepSleep, (WAKE_NO_RFCAL);
    delay(400);
}

Никаких проверок подключено или нет к вафле неоставлял, что отправляем непроверяется, всё в угоду минимума времени измерения и отправки.

Тут https://thingspeak.com/channels/314888 и тут https://narodmon.ru/615 можно посмотреть кому интересно показатели.