Arduino+Esp32+LCD+(Xiaomi)

NEW STYLE

Kıdemli Üye
20 Nis 2014
2,394
1
3
nereye
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.
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;
}
 

NEW STYLE

Kıdemli Üye
20 Nis 2014
2,394
1
3
nereye

NEW STYLE

Kıdemli Üye
20 Nis 2014
2,394
1
3
nereye
daha detaylı bilgi verirseniz ona göre kaynak önere bilirim yada yardımcı olabilirim
selam,yardimci olabilirseniz sevinirim,sorunum soyle ilk olarak xiaomi oda termostatindan aldigim sicaklik,nem ve batarya degerlerini esp32 kartiyla bluetooth uzerinden bu bilgileri aliyorum seriport uzerinde IDE'de yazdiriyorum her sey tamamdir,simdi istedigim sey bu alinan degerleri bi LCD-16x2 ekran baglayip yazdirmak,yazdirdim bi turlu deneme yanilma yoluyla ama simdi soyle bi sikinti cikti ortaya ekran birden karisiyor sacma sapan anlamsiz karekterler cikiyor,bu yonde bilgiliyseniz bu sorunlari cozmemde yardimci olbilirmisiniz yada fikrini alabilecegim deneyimli bilgili sorunuma yanit verebilecek birine ihtiyacim var.
iyi gunler,iyi forumlar dilerim.
 

Anglisc

Üye
17 Tem 2012
57
3
26
u33d8x857
selam,yardimci olabilirseniz sevinirim,sorunum soyle ilk olarak xiaomi oda termostatindan aldigim sicaklik,nem ve batarya degerlerini esp32 kartiyla bluetooth uzerinden bu bilgileri aliyorum seriport uzerinde IDE'de yazdiriyorum her sey tamamdir,simdi istedigim sey bu alinan degerleri bi LCD-16x2 ekran baglayip yazdirmak,yazdirdim bi turlu deneme yanilma yoluyla ama simdi soyle bi sikinti cikti ortaya ekran birden karisiyor sacma sapan anlamsiz karekterler cikiyor,bu yonde bilgiliyseniz bu sorunlari cozmemde yardimci olbilirmisiniz yada fikrini alabilecegim deneyimli bilgili sorunuma yanit verebilecek birine ihtiyacim var.
iyi gunler,iyi forumlar dilerim.
#include <LiquidCrystal_I2C.h>
LCD için i2c kütüphanesi kullanmışsın. LCD i2c modülüne sahip ve 4 kablo çıkışlı mı?

Eğer öyleyse aşağıda hazırladığım test kodunu yeni bir dosya ile derle ve yükle. Sonuca göre tekrar inceleyelim.

#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); void setup() { lcd.begin(); } void loop() { lcd.setCursor(0,0); lcd.print("Ekran"); lcd.setCursor(1,1); lcd.print("Testi"); delay(2000); lcd.clear(); lcd.setCursor(0,0); lcd.print("Basarili"); delay(2000); lcd.clear(); }
 
Son düzenleme:

NEW STYLE

Kıdemli Üye
20 Nis 2014
2,394
1
3
nereye
#include <LiquidCrystal_I2C.h>
LCD için i2c kütüphanesi kullanmışsın. LCD i2c modülüne sahip ve 4 kablo çıkışlı mı?

Eğer öyleyse aşağıda hazırladığım test kodunu yeni bir dosya ile derle ve yükle. Sonuca göre tekrar inceleyelim.

#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); void setup() { lcd.begin(); } void loop() { lcd.setCursor(0,0); lcd.print("Ekran"); lcd.setCursor(1,1); lcd.print("Testi"); delay(2000); lcd.clear(); lcd.setCursor(0,0); lcd.print("Basarili"); delay(2000); lcd.clear(); }
aynen oyle calisiyor suan dedigim gibi ayarladim biseyler,ama dogru duzcun calismiyor,burda anlatdigim gibi.
selam,yardimci olabilirseniz sevinirim,sorunum soyle ilk olarak xiaomi oda termostatindan aldigim sicaklik,nem ve batarya degerlerini esp32 kartiyla bluetooth uzerinden bu bilgileri aliyorum seriport uzerinde IDE'de yazdiriyorum her sey tamamdir,simdi istedigim sey bu alinan degerleri bi LCD-16x2 ekran baglayip yazdirmak,yazdirdim bi turlu deneme yanilma yoluyla ama simdi soyle bi sikinti cikti ortaya ekran birden karisiyor sacma sapan anlamsiz karekterler cikiyor,bu yonde bilgiliyseniz bu sorunlari cozmemde yardimci olbilirmisiniz yada fikrini alabilecegim deneyimli bilgili sorunuma yanit verebilecek birine ihtiyacim var.
iyi gunler,iyi forumlar dilerim.
 

Anglisc

Üye
17 Tem 2012
57
3
26
u33d8x857
aynen oyle calisiyor suan dedigim gibi ayarladim biseyler,ama dogru duzcun calismiyor,burda anlatdigim gibi.
Bir üst mesajda yazdığım test koduyla dener misin? Bunu yapma amacımız deneme kodunda dahi sorun yaşarsak problem donanımsal veya elektriksel bağlantıdadır, sorun yaşamazsak problem yazılımdadır. Hata ayıklama için önce alan belirleyelim.
 

NEW STYLE

Kıdemli Üye
20 Nis 2014
2,394
1
3
nereye
Bir üst mesajda yazdığım test koduyla dener misin? Bunu yapma amacımız deneme kodunda dahi sorun yaşarsak problem donanımsal veya elektriksel bağlantıdadır, sorun yaşamazsak problem yazılımdadır. Hata ayıklama için önce alan belirleyelim.
Hocam yapmistimda testini bide sizin dediginiz gibi tekrardan yukledim,tamamdir calisiyor,ha bu arada ekran isigini acma ekledim ve lcd.begin calismiyr onun yerine lcd.init kullanim.:)
 

NEW STYLE

Kıdemli Üye
20 Nis 2014
2,394
1
3
nereye
lcd.init kullanmanız sorun teşkil etmez. Ana kodu çalıştırırken anlamsız karakterler çıkmaya devam ediyor mu?
ilk basta evet oldu sanirsam guc tuketiminden dolayi oluyor ekrani ayri bi telefon adaptorunden besledim duzeldi,ama kendi kodlarimi geri yukledigimde yine bozulmalar var.
sizinle site disi konusabilecegim sosial iletisim adresiniz varsa hizli konusmak adina bide resimlerini gostermek hemde site cirliligi yartmada konusabilecegimiz bi adresiniz varsa ozelden verebilirmisiniz?
 

Anglisc

Üye
17 Tem 2012
57
3
26
u33d8x857
ilk basta evet oldu sanirsam guc tuketiminden dolayi oluyor ekrani ayri bi telefon adaptorunden besledim duzeldi,ama kendi kodlarimi geri yukledigimde yine bozulmalar var.
sizinle site disi konusabilecegim sosial iletisim adresiniz varsa hizli konusmak adina bide resimlerini gostermek hemde site cirliligi yartmada konusabilecegimiz bi adresiniz varsa ozelden verebilirmisiniz?
PM'den telegram adresimi ilettim
 

ERSSE

Katılımcı Üye
6 Kas 2019
465
4
138
Street
selam,yardimci olabilirseniz sevinirim,sorunum soyle ilk olarak xiaomi oda termostatindan aldigim sicaklik,nem ve batarya degerlerini esp32 kartiyla bluetooth uzerinden bu bilgileri aliyorum seriport uzerinde IDE'de yazdiriyorum her sey tamamdir,simdi istedigim sey bu alinan degerleri bi LCD-16x2 ekran baglayip yazdirmak,yazdirdim bi turlu deneme yanilma yoluyla ama simdi soyle bi sikinti cikti ortaya ekran birden karisiyor sacma sapan anlamsiz karekterler cikiyor,bu yonde bilgiliyseniz bu sorunlari cozmemde yardimci olbilirmisiniz yada fikrini alabilecegim deneyimli bilgili sorunuma yanit verebilecek birine ihtiyacim var.
iyi gunler,iyi forumlar dilerim.
Türkçe harfler mi saçma sapan çıkıyor yoksa herşeymi
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.