Selamun aleykum hayirli gunler dilerim
Bana Arduino kodlariyla ilgili yardimci olabilecek arkadaslara onceden tesekkur ederim.
yapmak istedigim sey xiaomi oda termometresi uzerinden bluetooth kullanilarak esp 32 kartima sicaklik,nem ve batarya degerlerini alip yorumluyacak ve bu degerleri lcd ekrana yazdirmamda yardima ihtiyacim var.
durum soyleki hersey tamam degerleri aliyorum ve seriport ekranindan oda sicakligi nem ve batarya degerini okuyabiliyorum sadece bu okunan degerleri bi turlu lcd ekrana yazdiramadim,yeni oldugum icin neyi nerde nasil kullanacagimi bilemedim heralde ondan dolayi isin icinden cikamadim,bu yonde deneyimli veya bilgisi dahilinde olan arkadaslardan yardimci olmalarini rica ediyorum,onceden tesekkurler.
kullandigim kodlari asagida paylasiyorum.
Bana Arduino kodlariyla ilgili yardimci olabilecek arkadaslara onceden tesekkur ederim.
yapmak istedigim sey xiaomi oda termometresi uzerinden bluetooth kullanilarak esp 32 kartima sicaklik,nem ve batarya degerlerini alip yorumluyacak ve bu degerleri lcd ekrana yazdirmamda yardima ihtiyacim var.
durum soyleki hersey tamam degerleri aliyorum ve seriport ekranindan oda sicakligi nem ve batarya degerini okuyabiliyorum sadece bu okunan degerleri bi turlu lcd ekrana yazdiramadim,yeni oldugum icin neyi nerde nasil kullanacagimi bilemedim heralde ondan dolayi isin icinden cikamadim,bu yonde deneyimli veya bilgisi dahilinde olan arkadaslardan yardimci olmalarini rica ediyorum,onceden tesekkurler.
kullandigim kodlari asagida paylasiyorum.
Kod:
#include <Wire.h>
#include "SPI.h"
#include "soc/soc.h"
#include "soc/rtc_cntl_reg.h"
#include "esp_system.h"
#include <sstream>
#include <LiquidCrystal_I2C.h>
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEScan.h>
#include <BLEAdvertisedDevice.h>
int relayPin = 5;
int signaLed = 2;
int sicaklik = 0;
int nem = 0;
String adres ="";
#define SCAN_TIME 15 // seconds
boolean METRIC = true; //Set true for metric system; false for imperial
BLEScan *pBLEScan;
void IRAM_ATTR resetModule(){
ets_printf("reboot\n");
esp_restart_noos();
}
float current_humidity = -100;
float previous_humidity = -100;
float current_temperature = -100;
float previous_temperature = -100;
class MyAdvertisedDeviceCallbacks : public BLEAdvertisedDeviceCallbacks {
void onResult(BLEAdvertisedDevice advertisedDevice)
{
if (advertisedDevice.haveName() && advertisedDevice.haveServiceData() && !advertisedDevice.getName().compare("ATC")) {
std::string strServiceData = advertisedDevice.getServiceData();
uint8_t cServiceData[100];
char charServiceData[100];
strServiceData.copy((char *)cServiceData, strServiceData.length(), 0);
Serial.printf("\n\nAdvertised Device: %s\n", advertisedDevice.toString().c_str());
adres=advertisedDevice.toString().c_str();
for (int i=0;i<strServiceData.length();i++) {
sprintf(&charServiceData[i*2], "%02x", cServiceData[i]);
}
std::stringstream ss;
ss << "fe95" << charServiceData;
Serial.print("Payload:");
Serial.println(ss.str().c_str());
char eventLog[256];
unsigned long value, value2;
char charValue[5] = {0,};
switch (cServiceData[11]) {
case 0x04:
sprintf(charValue, "%02X%02X", cServiceData[15], cServiceData[14]);
value = strtol(charValue, 0, 16);
if(METRIC)
{
current_temperature = (float)value/10;
}else
{
current_temperature = CelciusToFahrenheit((float)value/10);
}
break;
case 0x06:
sprintf(charValue, "%02X%02X", cServiceData[15], cServiceData[14]);
value = strtol(charValue, 0, 16);
current_humidity = (float)value/10;
Serial.printf("HUMIDITY_EVENT: %s, %d\n", charValue, value);
break;
case 0x0A:
sprintf(charValue, "%02X", cServiceData[14]);
value = strtol(charValue, 0, 16);
Serial.printf("BATTERY_EVENT: %s, %d\n", charValue, value);
break;
case 0x0D:
sprintf(charValue, "%02X%02X", cServiceData[15], cServiceData[14]);
value = strtol(charValue, 0, 16);
if(METRIC)
{
current_temperature = (float)value/10;
}else
{
current_temperature = CelciusToFahrenheit((float)value/10);
}
Serial.printf("TEMPERATURE_EVENT: %s, %d\n", charValue, value);
sicaklik = value;
sprintf(charValue, "%02X%02X", cServiceData[17], cServiceData[16]);
value2 = strtol(charValue, 0, 16);
current_humidity = (float)value2/10;
Serial.printf("HUMIDITY_EVENT: %s, %d\n", charValue, value2);
nem = value2;
break;
}
}
}
};
void setup() {
pinMode(signaLed,OUTPUT);
pinMode(relayPin,OUTPUT);
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector
Serial.begin(115200);
Serial.println("ESP32 XIAOMI DISPLAY");
initBluetooth();
}
void loop() {
char printLog[256];
Serial.printf("Start BLE scan for %d seconds...\n", SCAN_TIME);
BLEScanResults foundDevices = pBLEScan->start(SCAN_TIME);
int count = foundDevices.getCount();
printf("Found device count : %d\n", count);
delay(100);
if (adres=="Name: ATC, Address: ff:ff:ff:ff:ff:ff")//Elinizdeki cihazın MAC adresini yazın!
{
for(int i = 1; i<4; i++)
{
digitalWrite(signaLed,HIGH);
delay(50);
digitalWrite(signaLed,LOW);
delay(50);
}
if(sicaklik >= 231)
{
digitalWrite(relayPin,LOW);
}
else if(sicaklik <= 225)
{
digitalWrite(relayPin,HIGH);
}
}
}
void initBluetooth()
{
BLEDevice::init("");
pBLEScan = BLEDevice::getScan(); //create new scan
pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());
pBLEScan->setActiveScan(true); //active scan uses more power, but get results faster
pBLEScan->setInterval(0x50);
pBLEScan->setWindow(0x30);
}
String convertFloatToString(float f)
{
String s = String(f,1);
return s;
}
float CelciusToFahrenheit(float Celsius)
{
float Fahrenheit=0;
Fahrenheit = Celsius * 9/5 + 32;
return Fahrenheit;
}