Merhaba,
Youtube kanalımda detayları ile yayınladığım projeme ait modül bağlantı şeması ve proje kodlarına yazının devamından ulaşabilirsiniz. Xiaomi’nin tasarladığı oldukça şık ve işlevsel bu ürün sayesinde kombi kullanımı için önemli olan konfor ve tasarruf odaklı bir proje gerçekleştirdik. Projede kullanılan donanımlar:
1-Xiaomi Bluetooth Sıcaklık ve Nem Sensörü
2-ESP32 Geliştirme Kartı
3-5v Röle
Not: Kodların sorunsuz çalışması için ESP32 çekirdek sürümünü 1.0.0 sürümüne düşürmeniz gerekmektedir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
///////////////////////////////////////////////////////////////// // ESP32 & Xiaomi Bluetooth sensor v1.00 // // Get the latest version of the code here: // // http://educ8s.tv/esp32-xiaomi-hack // ///////////////////////////////////////////////////////////////// #include "SPI.h" #include "soc/soc.h" #include "soc/rtc_cntl_reg.h" #include "esp_system.h" #include <sstream> #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("MJ_HT_V1")) { 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: MJ_HT_V1, Address: 58:2c:34:35:30:f9")//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; } |
Merhaba
Elinize sağlık güzel ve faydalı bir çalışma olmuş.
Kaç metreden sonsuz çalışıyor.
bu çalışmada dereceyi değiştirmek istediğimizde kod sayfasından değiştirip tekrar kodu modüle mi göndermemiz gerekecek, yoksa xiaomi nin cep telefonu uygulamasından ayar yapabiliyormuyuz ?? birde bahsettiğiniz güncellemeleri de bekliyoruz…
Merhaba, mevcut haliyle sıcaklık değeri yazılım üzerinden atanıyor, termostat meselesine acil çözüm bulmam gerektiği için bu şekilde yaptım. Sonraki aşamada telefon üzerinden zaman modülasyonu ve sıcaklık kontrolü yapılacak şekilde yeniden tasarlayacağım.
çalışman takdire şayan.. birçok insana yardımcı olabilmek güzel bir duygu olsa gerek.. telefon üzerinden sıcaklığı değiştirebilmek adına yapacağın modülasyonu en kısa zamanında yapabilirsen bizleri sevindirirsin. birçok kişi bu işlemi telefondan kolayca değiştirebilme özelliğini bekliyor. bu kişilerden biri de benim.. en azından şimdilik bu modülasyonu ekleme şansın varmı ?? çünkü birkaç yerde yapılacak olan geliştirmeler bu kışa yetişmez demişsin.. elinden gelenin en iyisini yapmaya çalıştığını biliyoruz lakin birçok kişi senden bu yardımı bekliyor emin ol.. bizleri fazla bekletmezsen çok müteşekkir oluruz.. iyi çalışmalar
telefon kontrollü tasarım ne zaman gelecek
MERHABA İYİ ÇALIŞMALAR BU YAPMIŞ OLDUĞUNUZ PROJE İLİGİLİ ASLINDA ARDUİNO KODLAMASI İLE İLGİLİ YARDIM ALMAK İSTİYORUM MERAK EDİYORUM BU KODLAMALAR NASIL YAPILIYOR VE NELERE DİKKAT ETMEMİZ GEREK BU YAPMIŞOLDUĞUNU PAYLAŞIM İLE İLGİLİ KODLAMAYI ARDUİNO PROGRAMINDA TEST ETİĞİM ZAMAN HATA VERİYOR.
İYİ ÇALIŞMALAR
Xiaomi Nem/Sıcaklık Sensörü ve ESP32 İle Kablosuz Oda Termostatı Projesi
Merhaba, nasıl bir hata kodu alıyorsunuz.
Merhaba,
Temiz bir çalışma olmuş,elinize sağlık.
Ben kodları biraz daha modifleyip, Blynk ile cep telefonu üzerinden zaman ayarlı ve uzaktan erişilebilecek şekilde düzenledim. Fakat bir problem yaşıyorum. ESP32 modül ile Xiaomi sıcaklık sensörü arasındaki mesafe açık alanda 4m’nin üzerine çıktığında modül data alamıyor. Bunu iyileştirmenin bir yolu var mıdır?
Merhaba, teşekkür ederim. BLE modüller kapalı alanda 20 metreye kadar veri iletimi yapabiliyorlar. Sistemi evimin tüm odalarında sorunsuz kullanabiliyorum. ESP32 için 4 metre çok az bir değer.
Fevzi bey, Blynk ile yapmış olduğunuz kod değişikliğini ve Blynk uygulamasını nasıl yapıldığı konusunu bizlere de anlatabilirmisiniz ? telefon üzerinden derece değiştirebilmek daha kullanışlı olacak bizler için.. her ikinize de ayrı ayrı teşekkür ederiz
Blynk ile nasıl kullanabildiniz? hafıza yetmiyor neleri modifiye ettiniz acaba?
Mrb, aynı kodları kullanarak hiç bir değişiklik yapmadan ürünü yaptım fakat resimdeki hatayı alıyorum.
https://imgyukle.com/i/qeFhv
Neden olabilir? Yardımcı olursanız memnun olurum.
Merhaba,
Arduino üzerinden Tools > Board > Boards Manager > ESP32 yolunu takip ederek ESP32 çekirdek sürümünü 1.0.0’a düşürün ve sonrasında kodlarınızı tekrar derleyerek karta yükleyin. Sorun düzelecektir.
Mrb,
yazdığınız şekilde 1.0.0 versiyon çekirdek sürüm yükleyerek denedim. Sonuç aynı. Hoca’nın bahsettiği yeni ve eski sürüm esp32’lerde de denedim hepsinde aynı durum. Bir sonuç alamadım malesef. Başka bir öneriniz olur mu?
merhaba, benzer problemi ben de yaşadım, board manager dan ESP32 nin tüm versiyonlarını silin baştan 1.0.0 ı kurun. Temiz kurulum ile çözdüm.
#Fevzi merhaba, cevap için tşk ediyorum. Deneyeceğim.
Merhaba,
Öncelikle elinize sağlık. Faydalı bir çalışmanızı bizimle paylaştığınız için teşekkür ederim. Ben de uygulamaya çalıştım ancak sorun yaşıyorum. ESP32 ye kodları aktardım ve seri monitörde normal çalışıyor görünüyor ancak bir türlü röleyi düzgün kontrol etmiyor. Role ya sürekli açık yada sürekli kapalı kalıyor. Rolenin in girişine DC vererek denediğimde role tetikleniyor. Sorun ESP32 ile ilgili olabilir mi ya da kodun aktarılması esnasında kart ile ilgili parametrelerin farlkı olması etkiler mi ? Benim kullandığım ESP32 sanırım orjinal bir kart değil. Bu konuda bilginiz varsa yardımcı olabilirseniz sevinirm.
Merhaba,
İlginiz için teşekkür ederim.
Seri monitörden aldığınız Payload verisinin uzunluğunu videodaki ile kıyaslar mısınız, siz de daha kısa data mı görünüyor?
ESP üzerinde kodlar doğru çalışıyor. Sıcaklık nem ve pil bilgisi geliyordu. Ancak röle düzgün çalışmıyordu. Röleyi harici beslemeyi denedim o da olmadı. Son olarak ESP üzerindeki 3.3V ile çıkışı ile röleyi besledim bu şekilde çalıştı. Uzun kullanımda bir sorun olurmu bilemedim ancak başka türlü çalışmıyor.Teşekkür ederim.
Aynı sorun Bende de oldu esp ile rölenin in bağlantısı arasına uygun değerde Bi direnç koyarak çözüldü sorun
Videodakinden daha kısa data gözüküyor ve röle sürekli açık kalıyor.
Ne yapabiliriz
Merhaba,
ESP32 versiyonu 1.0.0’a düşürüp kodları yeniden derleyip yüklediğinizde sorun düzelecektir.
Arduino:1.8.8 (Windows 10), Kart:”DOIT ESP32 DEVKIT V1, 80MHz, 115200, None”
C:\Users\ZÃœMRA Å?EVÄ°K\Desktop\termostat\termostat.ino: In function ‘void resetModule()’:
termostat:36:22: error: ‘esp_restart_noos’ was not declared in this scope
exit status 1
‘esp_restart_noos’ was not declared in this scope
This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.
Böyle bi hata veriyor program kontrol ettiğimiz de bunun çözümü nedir ?
Arduino IDE Boards Manager’den ESP32 çekirdek sürümünü 1.0.0 olarak değiştirdiğiniz zaman sorun düzelecektir.
Aynı sorunu bende yaşadım rölenin in bacağıyla esp arasına uygun değerde Bi direnç koyarak çözdüm sorunu
Üstadım, malzemeler hazır, lakin blynk ile cep telefonundan kontrol edilebilir bir şeyler yapmaya kalktım işin içinden çıkamadım, beyin yandı.. lakin bir iki proje buldum bu konuyla ilgili. gerekli kodlamalar buralardan alınıp belki düzenleme yapılabilir. bize bu konu hakkında yardımcı olabilirsen çok seviniriz… ilgili kodların bulunduğu projelerin linklerini aşığıya ekliyorum;
https://www.hackster.io/thearduinoguy/esp8266-heating-controller-thermostat-with-blynk-interface-db96b7
https://community.blynk.cc/t/esp8266-hvac-control/2586
iyi çalışmalar…
esp.deneme:1:21: error: soc/soc.h: No such file or directory
compilation terminated.
exit status 1
soc/soc.h: No such file or directory
Böyle bi hata veriyor sorun nedir?
hocam ben kodu komple kopyalayıp attım esp32 içerisine kurulumu yükledim. fakat sizin videoda gösterdiğiniz şekilde com ekranında advertise device, payload, sıcaklık ve nem yazıları çıkmadı. sadece ”Found device count : 1
Start BLE scan for 15 seconds…” yazıyor. neden acaba
ESP32 çekirdek versiyonu nedir?
Selamlar oncelikle eline saglik. yapmak istedigim seyi yapmis olman arasstirma yapmadan 1 dakikada cozumu bulmami sagladi. Ancak daha once ESP32 gormemis olmakla birlikte Arduino ve ilgili herseyide video ve anlatimlarindan ogrendim. Anlayacagin olaya cok hakim degilim. Yorumlar ve videodaki tum hassas noktalara dikkat ederek uygulamayi yaptim. Sorun su diger yorumlarda da gordugum uzere role surekli acik konumda kaliyor. Baska bir arkadasin denedigi 3.3V luk pinide denedim cozum olmadi. ESP surum 1.0.0. Serial Monitor’de daha geliyor. Net sekilde cozumleniyor. Ancak relay surekli acik durumda. Konuyla iliskili midir bilmiyorum ama mavi Led’de herhangi indikasyon vermiyor. Herhangi tavsiyen var mi ? Bir arkadasin onerdigi direnc islemini deneyemedim. Cunku acikcasi nasil yapilacagini ve almam gereken komponent’in ne oldugunu bilmiyorum. Bendeki ESP32 nin arkasinda sadece ESP32 DEVKITV1 yaziyor. Herhangi marka ibaresi yok. Ancak pinout semalarinda ayni oldugunu tespit ettigim DOIT’e gore kurulum yaptim. Simdiden tesekkur ederim.
Yukarida yazmayi atladigim 2 unsur var. 1.si urun Cinden alindi. 2.si bende Found Dvice 12,13 civarinda cikiyor. (ne olduklarini teyit etmedim ama evde xiaomi’nin bircok sensoru var.) Bunlar etkiler mi ?
Aleykümselam,
Evde veya kapsama alanı içinde çok fazla BLE Advertise yayını olduğu için sistem karışıyor olabilir. Mail adresi verir misiniz, sadece kullanacağınız sensörden veri geldiğinde işlem yapılmasını sağlayacak şekilde düzenlenmiş kodları göndereyim. Elinizdeki cihazın MAC adresini ilgili alana girip kodları yeniden yüklemeniz yeterli olacak.
volturkmen@gmail.com Bu arada Roleyi calistirdim. Daha dogrusu baska bir role daha aldim. yinede mac filtreleme icin kodu bekliyorum cok tesekkurler.
Arkadasım eline saglık cok guzel olmuş.
Benim bir sorum olacaktı mumkunse yardımcı olurmusun ?
Elimde xiaomi gateway baglı ısı olcer ve prizim var odada bellı bır sıcaklıga dustugunde prize elektrik verır belli bır ısıya yukseldıgınde prizi kapar kombiye rolemı baglamalıyım (kombiyi start stop ıcın elektrik akımı ıle nasıl calıstırabılırım)
Merhaba Orhan Bey,
Bu prizi direkt kombinin gücüne bağlarsanız priz gücü kestiğinde kombinin enerjisi de kesileceği için sıcak su ihtiyacı için sorun olacaktır.
Xiaomi’nin Aqara Wireless Relay ürünü bu iş için uygun.Bunun yanında prizi söküp haricen adaptörle besleyip içindeki röle kontaklarına kombinin termostat tetik uçlarını da bağlayabilirsiniz.
2 tane esp32 aldım ikisinde de hep aynı yanıtı ve pay load ı okuyor
Advertised Device: Name: MJ_HT_V1, Address: 58:2d:34:33:a6:61, serviceUUID: 0000180f-0000-1000-8000-00805f9b34fb
Payload:fe95ff03677995bf
Found device count : 1
Start BLE scan for 15 seconds…
sürekli serial portta bu dönüyor. Aygıt yöneticisinden portu com10 yaptım normalde com3 idi. Arduino 1.8.8 esp 1.0.0 yüklü esp lerimin 2 sinin üzerinde ne dev kit ne doit hiç bir şey yazmıyor. Velhasıl durum böyle oldu üstadım.
Merhaba,
Payload verisinin az olması 1.0.0’dan yüksek bir ESP32 kütüphanesi kullandığınızı gösteriyor. Sürümü 1.0.0’a düşürdüğünüzde sorun düzelecektir.
şimdi bugra hocam ben bu projeyi 2 gün önce yapmaya başladım 2 gündür bir problemi çözemedim. problemim şu serial ekranda gelen sinyallerde sıcaklık nem bilgilerini alamıyorum ve payload da gelen veriler sizinkinden kısa serial ekrandaki gelen sinyaller şunlar;
Advertised Device: Name: MJ_HT_V1, Address: 58:2d:34:36:3b:e6, serviceUUID: 0000180f-0000-1000-8000-00805f9b34fb
Payload:fe95d7180bec416e
Found device count : 1
Start BLE scan for 15 seconds…
Merhaba,
ESP32 çekirdek sürümü 1.0.0’dan yüksek ise bu sorun ortaya çıkıyor. Sürümü 1.0.0’a düşürmeniz gerekiyor.
bu söylediğinizi ilk esp32yi kurarken görmeyip en güncel sürümünü yüklemiştim sonradan kaldırıp 1.0.0 sürümünü geri yükledim ama sorun devam ediyor. arduino programını denetim masasından kaldırsam en baştan yüklesem hattan gerekirse pc me format atıp geri yüklesem düzelirmiki demek istediğim ilk güncel sürümü yüklediğim için bazı parça dosyalar kalkmıyor olabilir ?
merhaba bahsetmiş olduğunuz sürünmü indir ama hiç bir şekilde esp32 modulu ile ilgili bir bölüm bulamadım. paylaşmış olduğunuz kodları koptala yapıştır yaptıkan sonra derlediğim zaman bu hatayı veriyor yardımcı olumusunuz ?
exit status 1
soc/soc.h: No such file or directory
merhabalar esp 32 çekirdek sürümünü indirmek için öncelikle yapmanız gereken (ilk kurulum yapanlar için)
Esp32 dosyalarını indirmek için. Araçlar >> Kartlar >> Kart Yöneticisine tıklıyoruz.
açılan sayfanın alt kısmında ” Ek devre Kartları Yöneticisi URL’leri” diye bir bölüm göreceksiniz boş olan kısma ”https://dl.espressif.com/dl/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json” bu kodu yapıştırıyoruz ve tamam deyip çıkıyoruz ardından kart yöneticisinden çekirdek sürümünü 1.0.0 a düşürebilirsiniz. Kolay gelsin.
Selamun aleykum Buğra kardeşim. Esp32 ile xaiomi arasındaki Bluetooth bağlantısında kopma oluyor bunun önüne nasıl geçeriz?
Aleykümselam Musa Bey,
Her ne kadar BLE standardının kapalı alanda 20 metreye kadar iletişim kurabildiği bilinse de; evdeki duvarların kalınlığı, şebeke voltajı dalgalanmaları(ESP32’yi kilitleyebiliyor), evde veya çevrede 2.4Ghz frekansını bastıran/parazit yayan cihazların varlığı, cep telefonu ile Xiaomi’ye bağlanmak iletişimi bozabiliyor. Bu gibi durumlarda Xiaomi ve ESP32’yi yaklaştırmak gerekiyor. Bunun yanında bazı klon ESP32 modüllerin sık sık kilitlendiğini biliyoruz.
Ev içerinde sadece Wifi modem var ve kaç ghz ile çalışıyor bilmiyorum. Ayrıca mesafeden dolayı iletişim kopuyor diye düşünüp kablo aracılığıyla daha yakın bir yere getirdim sonuç yine aynı belirli bir zaman sorun yok daha sonrasında iletişim kopuyor tekrar yeniden. Gücü kesip bağlamak gerekiyor ki yeniden İletişim kurulsun
Buğra hocam kopma olduğu zaman tekrar bağlantı istegi gönderen bir kod yapısı eklenebilir mi ? Birde kopya esp32 olup olmadığını nasıl anlarız neye göre alim yapmalıyız?
İyi akşamlar . Xiaomi termometrenin başka modelinde uyarmı bu proje için mesela bu https://www.googleadservices.com/pagead/aclk?sa=L&ai=DChcSEwjNleqLlbruAhUT3FEKHQaAA8MYABABGgJ3cw&ae=2&ohost=www.google.com.tr&cid=CAASEuRoIHghJtnmAN_a1lwOPr09kw&sig=AOD64_1qWj3GAZKdXZm7npkT4VwAtCN4fw&q&adurl&ved=2ahUKEwia6-KLlbruAhUPqxoKHStUCx0Q0Qx6BAgFEAE
Merhaba,
Xiaomi’nin yeni ürünleri de kullanılabilir fakat firmware, yani içinde gömülü yazılımın modifiye edilmesi gerekiyor.
https://www.youtube.com/watch?v=NXKzFG61lNs
İYİ AKŞAMLAR ÖNERDİĞİNİZ ESP32 STOKLARDA BULUNMUYOR BAŞKA BİR ESP32 ÖNERİNİZ HANGİSİ.aldığım esp32 uyum sağlamadı sanırım öneriniz nedir.aldığım ürün bu https://www.direnc.net/esp32-wroom-32d-wifi-bluetooth-gelistirme-modulu