Skip to content

Commit

Permalink
Update
Browse files Browse the repository at this point in the history
  • Loading branch information
zipou committed Nov 1, 2017
1 parent 1f9e760 commit 4065cea
Show file tree
Hide file tree
Showing 3 changed files with 155 additions and 25 deletions.
125 changes: 125 additions & 0 deletions lib/DS18B20/src/DS18B20.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
#include "DS18B20.h"

float DS18B20::_temperature = 0.00;

void DS18B20::init(int pin) {
_oneWire = new OneWire(pin);
}

float DS18B20::getTemperature() {
while(!readTemperature()) {
Serial.println("Looping...");
}
return _temperature;

}

boolean DS18B20::readTemperature() {
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;

if ( !_oneWire->search(addr)) {
Serial.println("No more addresses.");
Serial.println();
_oneWire->reset_search();
delay(250);
return false;
}

Serial.print("ROM =");
for( i = 0; i < 8; i++) {
Serial.write(' ');
Serial.print(addr[i], HEX);
}

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

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

_oneWire->reset();
_oneWire->select(addr);
_oneWire->write(0x44, 1); // start conversion, with parasite power on at the end

delay(1000); // maybe 750ms is enough, maybe not
// we might do a ds.depower() here, but the reset will take care of it.

present = _oneWire->reset();
_oneWire->select(addr);
_oneWire->write(0xBE); // Read Scratchpad

Serial.print(" Data = ");
Serial.print(present, HEX);
Serial.print(" ");
for ( i = 0; i < 9; i++) { // we need 9 bytes
data[i] = _oneWire->read();
Serial.print(data[i], HEX);
Serial.print(" ");
}
Serial.print(" CRC=");
Serial.print(OneWire::crc8(data, 8), HEX);
Serial.println();

// Convert the data to actual temperature
// because the result is a 16 bit signed integer, it should
// be stored to an "int16_t" type, which is always 16 bits
// even when compiled on a 32 bit processor.
int16_t raw = (data[1] << 8) | data[0];
if (type_s) {
raw = raw << 3; // 9 bit resolution default
if (data[7] == 0x10) {
// "count remain" gives full 12 bit resolution
raw = (raw & 0xFFF0) + 12 - data[6];
}
} else {
byte cfg = (data[4] & 0x60);
// at lower res, the low bits are undefined, so let's zero them
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
//// default is 12 bit resolution, 750 ms conversion time
}
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");
_temperature = celsius;

if ( celsius > 100){
return false;
}

return true;

}

DS18B20::DS18B20() {

}
12 changes: 12 additions & 0 deletions lib/DS18B20/src/DS18B20.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#include <OneWire.h>

class DS18B20 {
public:
DS18B20();
void init(int pin);
float getTemperature();
boolean readTemperature();
static float _temperature;
private:
OneWire* _oneWire;
};
43 changes: 18 additions & 25 deletions src/EspGw.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,15 @@ RFLib rf;
#include <WifiLib.h>
WifiLib wifi;

#include <DHT.h>
DHT dht(DHTPIN, DHT22);
// #include <DHT.h>
// DHT dht(DHTPIN, DHT22);

#include <Ticker.h>
Ticker flipper;

#include <DS18B20.h>
DS18B20 tempChip;

String getChipId() {
uint8_t chipid[6];
esp_efuse_read_mac(chipid);
Expand All @@ -34,38 +37,20 @@ String getChipId() {
id += String(chipid[i], HEX);
}
return id;
// Serial.printf("%02x:%02x:%02x:%02x:%02x:%02x\n", chipid[0], chipid[1], chipid[2], chipid[3], chipid[4], chipid[5]);
}

void sendSensor() {

int i = 0;
int tryHarder = 0;
float h = 0;
float t = 0;
while (i <= tryHarder && (isnan(h) || h==0 ) ) {
Serial.println("Trying to read from DHT sensor!");
// Serial.println(i);
h = dht.readHumidity();
t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit
i = i + 1;
}

if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}

Serial.println("Sending Info through mqtt");

float temp = tempChip.getTemperature();

StaticJsonBuffer<200> jsonBuffer;
JsonObject& message = jsonBuffer.createObject();
message["temperature"] = t;
message["humidity"] = h;
message["temperature"] = temp;

JsonObject& root = jsonBuffer.createObject();
root["sensor"] = getChipId();
root["protocol"] = "dht";
root["protocol"] = "temperature";
root["data"] = message;
char buffer[150];
root.printTo(buffer);
Expand Down Expand Up @@ -103,6 +88,13 @@ void rfCallback(const char* protocol, const char* message) {
mqttlib.publish(MQTT_TOPIC_OUT, buffer);
}

float readTemperature() {
Serial.println("Reading Temp...");
float temp = tempChip.getTemperature();
Serial.println(temp);
return temp;
}

void setup() {
Serial.begin(SERIAL_CONSOLE_SPEED);
pinMode(BUILTIN_LED, OUTPUT);
Expand All @@ -121,7 +113,8 @@ void setup() {
RFLibCallback afunc = &rfCallback;
rf.setCallback(afunc);

dht.begin();
// dht.begin();
tempChip.init(DHTPIN);

flipper.setCallback(sendSensor);
flipper.setInterval(TEMP_INTERVAL);
Expand Down

0 comments on commit 4065cea

Please sign in to comment.