ds18x20 (community library)

Summary

Name Value
Name ds18x20
Version 0.0.4
Installs 9504
License GPL
Author MORA99 jkn@air-port.dk
URL https://github.com/MORA99/particle-ds18x20
Repository https://github.com/MORA99/particle-ds18x20.git
Download .tar.gz
All Versions 0.0.4, 0.0.3, 0.0.2, 0.0.1

DS18B20/DS18S20 library with support for multiple sensors

Example Build Testing

Device OS Version:

This table is generated from an automated build. Success only indicates that the code compiled successfully.

Library Read Me

This content is provided by the library maintainer and has not been validated or approved. Ported AVR code for interacting with DS18B20 sensors.

Supports multiple sensors on one pin.

Standard hardware configuration, 4.7k ohm resistor from data to VCC line.

Note that this is C code, not CPP, so functions etc are not enclosed in their own name space. The functions are named crc8 for the CRC calculations, ow_ for onewire functions, and DS18X20_ for temperature specific functions.

Typical usage

#include "ds18x20.h"
#include "onewire.h"

uint8_t sensors[80];

void log(char* msg)
{
Particle.publish("log", msg);
delay(500);
}

void setup()
{
ow_setPin(D0);
}

void loop()
{
uint8_t subzero, cel, cel_frac_bits;
char msg[100];
log("Starting measurement");

DS18X20_start_meas( DS18X20_POWER_PARASITE, NULL ); //Asks all DS18x20 devices to start temperature measurement, takes up to 750ms at max resolution
delay(1000); //If your code has other tasks, you can store the timestamp instead and return when a second has passed.

uint8_t numsensors = ow_search_sensors(10, sensors);
sprintf(msg, "Found %i sensors", numsensors);
log(msg);


for (uint8_t i=0; i<numsensors; i++)
{
if (sensors[i*OW_ROMCODE_SIZE+0] == 0x10 || sensors[i*OW_ROMCODE_SIZE+0] == 0x28) //0x10=DS18S20, 0x28=DS18B20
{
//log("Found a DS18B20");
if ( DS18X20_read_meas( &sensors[i*OW_ROMCODE_SIZE], &subzero, &cel, &cel_frac_bits) == DS18X20_OK ) {
char sign = (subzero) ? '-' : '+';
int frac = cel_frac_bits*DS18X20_FRACCONV;
sprintf(msg, "Sensor# %d (%02X%02X%02X%02X%02X%02X%02X%02X) =  : %c%d.%04d\r\n",i+1,
sensors[(i*OW_ROMCODE_SIZE)+0],
sensors[(i*OW_ROMCODE_SIZE)+1],
sensors[(i*OW_ROMCODE_SIZE)+2],
sensors[(i*OW_ROMCODE_SIZE)+3],
sensors[(i*OW_ROMCODE_SIZE)+4],
sensors[(i*OW_ROMCODE_SIZE)+5],
sensors[(i*OW_ROMCODE_SIZE)+6],
sensors[(i*OW_ROMCODE_SIZE)+7],
sign,
cel,
frac
);
log(msg);
}
else
{
Particle.publish("log", "CRC Error (lost connection?)");
}
}
}
delay(10000);
}

Browse Library Files