| Ваш IP: 3.239.7.207 | Online(21) - гости: 9, боты: 12 | Загрузка сервера: 2.17 ::::::::::::

ESP32 + Bluetooth — терморегулятор

На базе ESP32  используя сеть Bluetooth можно создать простой терморегулятор. В качестве датчика температуры используется цифровой датчик DS18B20. Вся информация и органы регулирования температуры выводятся в Android приложение.

Регулировка температуры может быть пределах от 10 до 50 °С. Гистерезис 1 °С (может быть изменен в скетче). Для управления нагревательным элементом используется вывод ESP32 D22 к которому можно подключить реле (модуль реле, максимальный выходной ток вывода ESP32 не должен превышать 40 мА).

Перед загрузкой скетча рекомендую ознакомится со статьей  — ESP32 DevKit v1 Wi-Fi Bluetooth ESP32-WROOM-32 (Arduino IDE).

#include <BluetoothSerial.h>   // Входит в состав Arduino IDE 
#include <OneWire.h>           // Входит в состав Arduino IDE 
#include <EEPROM.h>            // Входит в состав Arduino IDE 
  OneWire  ds(15); // Вход датчика D15
  BluetoothSerial BL;
 
  float temper;
  int w,reg,buf[2],i,wb,rele,k;
  unsigned long buff,times,times1;
  const int gis = 1; // int гистерезис
  String BT_CALLBACK = "";
 
void setup() {
  Serial.begin(9600);
  EEPROM.begin(100); // под EEPROM выделить 100 ячеек памяти 
  BL.register_callback(BTCallback);
  BL.begin("ESP32",false); // Имя Вашего устройства Bluetooth
  BL.setTimeout(100);
  Serial.println("Bluetooth OK");
  pinMode (2, OUTPUT);  // LED
  pinMode (22,OUTPUT);  // выход рег. реле D22
  reg=EEPROM.read(0);
}
 
void loop() {
/////// ПРИЕМ ДАННЫХ /////////////////////////  
   if(BL.available()){
    for (i=0;i<1;i++) { 
      buf[0] = BL.parseInt(); 
      buf[1] = BL.parseInt();}    
      times=millis();times=millis();wb=1;w=1;
      }
 
///////////// обработка команд /////////////////// 
   if(buf[0]>10&&wb==1){ wb=0;
     if(buf[0]==102){reg++;if(reg>50){reg=50;}}
     if(buf[0]==101){reg--;if(reg<10){reg=10;}}
     }
 
//////////// reg temp
     if(reg >= temper + gis){rele=1;digitalWrite(22,HIGH);}
     if(reg <= temper - gis){rele=0;digitalWrite(22,LOW);} 
 
     blue();
 
//////////////// EEPROM
  if(millis()-times>5000&&w==1){EEPROM.write(0,reg);times=millis();w=0;EEPROM.commit();}
 
  /////// измерение температуры 1 раз в секунду
  if(k==0){digitalWrite(2,LOW);}
  if(k==1){digitalWrite(2,HIGH);}
  if(k>1){k=0;}
  if(millis()-times1>1000){temper = dsRead(0);times1=millis();k++;}
  delay(20);
}// loop
 
float dsRead(byte x) {
  byte data[2], addr[8][8], kol = 0;
  while (ds.search(addr[kol])) {  // поиск датчиков, определение адреса и кол-ва датчиков
    kol++;
  } 
  ds.reset_search();  // Сброс поиска датчика
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0x44, 0);  // Измерение температуры с переносом данных в память
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0xBE);     // Обращение памяти
  data[0] = ds.read();// Чтение памяти byte low
  data[1] = ds.read();// Чтение памяти byte high
  float value = ((data[1] << 8) | data[0]) / 16.0; return (float)value; // Расчет температуры и вывод
}
 
void blue(){
  //////// отправка данных в android
   BL.print(temper,1);
   BL.print(":");
   BL.print(reg);
   BL.print(":");
   BL.println(rele);
  }
 
void BTCallback(esp_spp_cb_event_t event, esp_spp_cb_param_t *param){
    if(event == ESP_SPP_SRV_OPEN_EVT){BT_CALLBACK = "BTonConnect";}
    else if(event == ESP_SPP_CLOSE_EVT){ESP.restart();}
    else if(event == ESP_SPP_DATA_IND_EVT){BT_CALLBACK = "BTonReceivedStart";}
    else if(event == ESP_SPP_WRITE_EVT){BT_CALLBACK = "BTonWrite";}
}

Приложение — app-debug.apk

Форум — http://forum.rcl-radio.ru/viewtopic.php?id=264

Добавить комментарий

Войти с помощью: 

Случайные статьи

  • Бестрансформаторный источник питания 12 В / 15 мА

    Бестрансформаторный источник питания 12 В / 15 мА

    Некоторые схемы которые имеют небольшой ток потребления, поэтому для их работы можно использовать простые бестрансформаторные источники питания. В подобных источниках питания целесообразно использовать диодный мост, для увеличения величины выходного тока и меньшей пульсации выходного напряжения, что позволяет использовать конденсаторный фильтр меньшей емкости. Поэтому в предложенной схеме VD3 VD4 используются как …Подробнее...
  • Секундомер на ATtiny2313 (Arduino IDE)

    Секундомер на ATtiny2313 (Arduino IDE)

    На базе ATtiny2313 можно собрать простой секундомер. Информация выводится на дисплей LCD1602. Для управления секундомером используются три кнопки — СТАРТ, СТОП, СБРОС. Минимальный шаг секундомера 0,1 секунда, максимальное время измерения 24 часа. Кнопки СТОП и СТАРТ работают через прерывания IN0 и INT1 (пример — https://rcl-radio.ru/?p=94273), время тактируется при помощи таймера …Подробнее...
  • Часы-будильник на PIC16F877A

    Часы-будильник на PIC16F877A

    На рисунке показана схема часов с будильником. Часы отображают часы, минуты и секунды, будильник только часы и минуты. Дополнительной опцией часов является термометр, датчик температуры LM35 подключен к выводу 9 (AN6) микроконтроллера. После подачи питания на микроконтроллер необходимо установить правильное время, сделать это можно при помощи кнопки «Установка времени», при …Подробнее...
  • Автоматическая регулировка усиления

    Автоматическая регулировка усиления

    Автоматическая регулировка усиления  (АРУ) регулирует выходной сигнал в определенных пределах, при разном уровне входного сигнала.В результате устраняются различия громкости, которые могут раздражать, при смене каналов радиоприемника, телевизора… Полевой транзистор VT1 используется как переменное сопротивление. Это значение может  от бесконечности до 150Ω, тем самым регулируя усиление ОУ на TL072.Подробнее...
  • Регулируемый блок питания с цифровым управлением

    Схема регулируемого блока питания м цифровым управлением состоит из регулятора положительного напряжен7ия на KM317, КПОМ декадного счетчика CD4017, таймера NE555 и регулятора отрицательного напряжения на LM7912. Напряжение сети понижается трансформатором до напряжения +/-12В при токе 1А во вторичной обмотке, далее оно выпрямляется. С1-С5 емкостной фильтр постоянного напряжения. Светодиод LED1 сигнализирует …Подробнее...