Add clear version of commit 72f30ad
.
This commit is contained in:
parent
e12077513f
commit
6178865cc6
16 changed files with 1044 additions and 0 deletions
22
extras/ds18b20/LICENSE
Normal file
22
extras/ds18b20/LICENSE
Normal file
|
@ -0,0 +1,22 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2016 Grzegorz Hetman : ghetman@gmail.com
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
9
extras/ds18b20/component.mk
Normal file
9
extras/ds18b20/component.mk
Normal file
|
@ -0,0 +1,9 @@
|
|||
# Component makefile for extras/ds18b20
|
||||
|
||||
# expected anyone using bmp driver includes it as 'ds18b20/ds18b20.h'
|
||||
INC_DIRS += $(ds18b20_ROOT)..
|
||||
|
||||
# args for passing into compile rule generation
|
||||
ds18b20_SRC_DIR = $(ds18b20_ROOT)
|
||||
|
||||
$(eval $(call component_compile_rules,ds18b20))
|
105
extras/ds18b20/ds18b20.c
Normal file
105
extras/ds18b20/ds18b20.c
Normal file
|
@ -0,0 +1,105 @@
|
|||
#include "onewire/onewire.h"
|
||||
#include "ds18b20.h"
|
||||
|
||||
#define DS1820_WRITE_SCRATCHPAD 0x4E
|
||||
#define DS1820_READ_SCRATCHPAD 0xBE
|
||||
#define DS1820_COPY_SCRATCHPAD 0x48
|
||||
#define DS1820_READ_EEPROM 0xB8
|
||||
#define DS1820_READ_PWRSUPPLY 0xB4
|
||||
#define DS1820_SEARCHROM 0xF0
|
||||
#define DS1820_SKIP_ROM 0xCC
|
||||
#define DS1820_READROM 0x33
|
||||
#define DS1820_MATCHROM 0x55
|
||||
#define DS1820_ALARMSEARCH 0xEC
|
||||
#define DS1820_CONVERT_T 0x44
|
||||
|
||||
uint8_t readDS18B20(uint8_t pin, ds_sensor_t *result){
|
||||
|
||||
uint8_t addr[8];
|
||||
uint8_t sensor_id = 0;
|
||||
onewire_reset_search(pin);
|
||||
|
||||
while(onewire_search(pin, addr)){
|
||||
uint8_t crc = onewire_crc8(addr, 7);
|
||||
if (crc != addr[7]){
|
||||
printf("CRC check failed: %02X %02X\n", addr[7], crc);
|
||||
return 0;
|
||||
}
|
||||
|
||||
onewire_reset(pin);
|
||||
onewire_select(pin, addr);
|
||||
onewire_write(pin, DS1820_CONVERT_T, ONEWIRE_DEFAULT_POWER);
|
||||
sdk_os_delay_us(750);
|
||||
onewire_reset(pin);
|
||||
onewire_select(pin, addr);
|
||||
onewire_write(pin, DS1820_READ_SCRATCHPAD, ONEWIRE_DEFAULT_POWER);
|
||||
|
||||
uint8_t get[10];
|
||||
|
||||
for (int k=0;k<9;k++){
|
||||
get[k]=onewire_read(pin);
|
||||
}
|
||||
|
||||
//printf("\n ScratchPAD DATA = %X %X %X %X %X %X %X %X %X\n",get[8],get[7],get[6],get[5],get[4],get[3],get[2],get[1],get[0]);
|
||||
crc = onewire_crc8(get, 8);
|
||||
|
||||
if (crc != get[8]){
|
||||
printf("CRC check failed: %02X %02X\n", get[8], crc);
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t temp_msb = get[1]; // Sign byte + lsbit
|
||||
uint8_t temp_lsb = get[0]; // Temp data plus lsb
|
||||
uint16_t temp = temp_msb << 8 | temp_lsb;
|
||||
|
||||
float temperature;
|
||||
|
||||
temperature = (temp * 625.0)/10000;
|
||||
//printf("Got a DS18B20 Reading: %d.%d\n", (int)temperature, (int)(temperature - (int)temperature) * 100);
|
||||
result[sensor_id].id = sensor_id;
|
||||
result[sensor_id].major = (int)temperature;
|
||||
result[sensor_id].minor = (int)(temperature) - (int)temperature * 100;
|
||||
sensor_id++;
|
||||
}
|
||||
return sensor_id;
|
||||
}
|
||||
|
||||
float read_single_DS18B20(uint8_t pin){
|
||||
|
||||
onewire_init(pin);
|
||||
onewire_reset(pin);
|
||||
|
||||
onewire_write(pin, DS1820_SKIP_ROM, ONEWIRE_DEFAULT_POWER);
|
||||
onewire_write(pin, DS1820_CONVERT_T, ONEWIRE_DEFAULT_POWER);
|
||||
|
||||
sdk_os_delay_us(750);
|
||||
|
||||
onewire_reset(pin);
|
||||
onewire_write(pin, DS1820_SKIP_ROM, ONEWIRE_DEFAULT_POWER);
|
||||
onewire_write(pin, DS1820_READ_SCRATCHPAD, ONEWIRE_DEFAULT_POWER);
|
||||
|
||||
uint8_t get[10];
|
||||
|
||||
for (int k=0;k<9;k++){
|
||||
get[k]=onewire_read(pin);
|
||||
}
|
||||
|
||||
//printf("\n ScratchPAD DATA = %X %X %X %X %X %X %X %X %X\n",get[8],get[7],get[6],get[5],get[4],get[3],get[2],get[1],get[0]);
|
||||
uint8_t crc = onewire_crc8(get, 8);
|
||||
|
||||
if (crc != get[8]){
|
||||
printf("CRC check failed: %02X %02X", get[8], crc);
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t temp_msb = get[1]; // Sign byte + lsbit
|
||||
uint8_t temp_lsb = get[0]; // Temp data plus lsb
|
||||
|
||||
uint16_t temp = temp_msb << 8 | temp_lsb;
|
||||
|
||||
float temperature;
|
||||
|
||||
temperature = (temp * 625.0)/10000;
|
||||
return temperature;
|
||||
//printf("Got a DS18B20 Reading: %d.%d\n", (int)temperature, (int)(temperature - (int)temperature) * 100);
|
||||
}
|
20
extras/ds18b20/ds18b20.h
Normal file
20
extras/ds18b20/ds18b20.h
Normal file
|
@ -0,0 +1,20 @@
|
|||
#ifndef DRIVER_DS18B20_H_
|
||||
#define DRIVER_DS18B20_H_
|
||||
|
||||
typedef struct {
|
||||
uint8_t id;
|
||||
uint8_t major;
|
||||
uint8_t minor;
|
||||
} ds_sensor_t;
|
||||
|
||||
// Scan all ds18b20 sensors on bus and return its amount.
|
||||
// Result are saved in array of ds_sensor_t structure.
|
||||
// Cause printf in esp sdk don`t support float,
|
||||
// I split result as two number (major, minor).
|
||||
uint8_t readDS18B20(uint8_t pin, ds_sensor_t *result);
|
||||
|
||||
// This method is just to demonstrate how to read
|
||||
// temperature from single dallas chip.
|
||||
float read_single_DS18B20(uint8_t pin);
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue