#include <stdio.h>
#include "driver/gpio.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#define WIRED_PIN_DATA GPIO_NUM_33
void reset_ds18b20(){
gpio_set_direction(WIRED_PIN_DATA, GPIO_MODE_OUTPUT);
gpio_set_level(WIRED_PIN_DATA, 0);
esp_rom_delay_us(480); // Delay microssegundos
gpio_set_direction(WIRED_PIN_DATA, GPIO_MODE_INPUT); //aguarda leitura
esp_rom_delay_us(60); // Delay microssegundos
if(!(gpio_get_level( WIRED_PIN_DATA) )){
esp_rom_delay_us(240); // Delay microssegundos
}
}
void sendBit(uint8_t biti){
gpio_set_direction(WIRED_PIN_DATA, GPIO_MODE_OUTPUT);
if(biti){
gpio_set_level(WIRED_PIN_DATA, 0);
esp_rom_delay_us(60); // Delay microssegundos
gpio_set_direction(WIRED_PIN_DATA, GPIO_MODE_INPUT); //aguarda leitura
}else {
gpio_set_level(WIRED_PIN_DATA, 0);
esp_rom_delay_us(1); // Delay microssegundos
gpio_set_direction(WIRED_PIN_DATA, GPIO_MODE_INPUT); //aguarda leitura
}
}
uint8_t readBit(){
gpio_set_direction(WIRED_PIN_DATA, GPIO_MODE_OUTPUT);
gpio_set_level(WIRED_PIN_DATA, 0);
esp_rom_delay_us(15); // Delay microssegundos
gpio_set_direction(WIRED_PIN_DATA, GPIO_MODE_INPUT);
esp_rom_delay_us(5); // Delay microssegundos
uint8_t biti = gpio_get_level( WIRED_PIN_DATA);
esp_rom_delay_us(50); // Delay microssegundos
return biti;
}
void convertTemperature(){
reset_ds18b20(); // inicia a comunicação
sendBit(0); // Envia o comando de presença
// Envio do comando "Convert T"
for (int i = 0; i < 8; i++) {
sendBit((0x44 >> i) & 0x01); // Envia cada bit do comando
}
printf("Conversão sendo realizada\n");
}
void modePower(){
reset_ds18b20(); // inicia a comunicação
sendBit(0); // envia o comando de presença
for(int i = 0; i < 8;i++){
sendBit((0xB4 >> i) & 0x01); //envia cada bit do comando
}
vTaskDelay(pdMS_TO_TICKS(20));
int modoenergia = gpio_set_direction(WIRED_PIN_DATA, GPIO_MODE_INPUT);
printf("Modo de energia: %d \n", modoenergia);
//return gpio_get_level( WIRED_PIN_DATA);
}
uint16_t readScratchpad(){
reset_ds18b20();
sendBit(0); // Envia o comando de presença
// Envia o comando "Read Scratchpad" (0xBE)
for (int i = 0; i < 8; i++) {
sendBit((0xBE >> i) & 0x01); // Envia cada bit do comando
}
uint16_t data = 0;
for (int i = 0; i < 16; i++) {
data |= (readBit() << i); // Lê 16 bits do Scratchpad
}
return data;
}
void app_main() {
int cont = 0 ;
gpio_set_direction(WIRED_PIN_DATA, GPIO_MODE_OUTPUT);
while (1) {
convertTemperature(); // Inicia a conversão
vTaskDelay(pdMS_TO_TICKS(750)); // Aguarda a conversão (750 ms)
if(cont == 5){
modePower();
cont = 0;
}
uint16_t temperatureData = readScratchpad(); // Lê os dados do Scratchpad
printf("Temperatura: %d º\n", temperatureData);
vTaskDelay(pdMS_TO_TICKS(1000)); // Atraso de 2 segundos antes da próxima leitura
cont++;
}
}
Loading
ds18b20
ds18b20