Akıllı Ev Otomasyonu
Bu projemizde sizlerle birlikte LoRa E32 modülünü ( 443T30D ) ve Topway dokunmatik ekranını kullanarak kablosuz akıllı ev sistemlerini nasıl kodlayabileceğinizi öğreteceğiz. Projemizde kullandığımız ekran üzerinde gösterilen butonları dinleme, tıklandığına aksiyona geçirme ve LoRa üzerinden alıcıya gönderip daha sonra vantilatörü çalıştırma komutları hem YouTube kanalımızda hem de aşağıdaki kodda mevcuttur.
Ayrıca YouTube kanalımızdan ESP32 gibi düşük akımda çalışan bir modülü nasıl yüksek akım gerektiren vantilatör gibi ev eşyalarının çalıştırmak için kullanabileceğimizi görebilirsiniz.
Solid State Role Modülü sayesinde siz de istediğiniz ev eşyalarınızı LoRa ile kontrol edebilirsiniz.
Videomuzu izlemek için tıklayınız:
Gerekli Malzemeler

ESP32 30-Pin ESP-WROOM-32 WiFi Bluetooth
Çift çekirdekli işlemciye sahip, WiFi ve Bluetooth özellikleri barındıran bu ESP32 modülü, çok çeşitli IoT projelerinde kullanılabilir.
Ürün Sayfasına Git
ESP32 30-Pin ESP-WROOM-32 WiFi Bluetooth
Çift çekirdekli işlemciye sahip, WiFi ve Bluetooth özellikleri barındıran bu ESP32 modülü, çok çeşitli IoT projelerinde kullanılabilir.
Ürün Sayfasına Git
LoRa Başlangıç Seti (SX1278 E32-433T20D)
LoRa teknolojisi ile tanışmak isteyenler için 433 MHz bandında çalışan, SX1278 çipli modül ve anten içeren bir başlangıç setidir.
Ürün Sayfasına Git
Kodlar
Aşağıda iki farklı kod sekmesiyle karşılaşacaksınız. Birinci kod gönderici kısmına ait, ikincisi ise alıcı kısmına aittir. Alıcı’da aldığımız buton state’lerine göre işlem yapmaktayız. LoRa E32 modülünün kullanımı ve diğer detaylar için kod üzerinde bulunan yorum satırlarını okuyunuz.
Ekran Tarafının Kodu:
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 | /****************************************Copyright (c)**************************************************** ** Fixaj Mehmet YILDIZ ** ** ** Tüm hizmetler Mehmet Yıldız şirketi Fixaj tarafından sağlanmaktadır. ** FİXAJ MAĞAZALARIMIZ DIŞINDA SATIN ALINAN TOPWAY MARKA DOKUNMATİK EKRANLARDA BU KÜTÜPHANENİN TİCARİ OLARAK KULLANIMI YASAKTIR. ** Herhangi bir program, belge, test sonucu, çözüm, destek ve diğer malzeme ve bilgiler yalnızca referans amaçlıdır ** ve müşterilerin kullanmama veya atıfta bulunma ve kendileri tarafından değişiklik yapma hakları vardır. ** Müşterinin kullanımı sırasında herhangi bir özel, tesadüfi veya dolaylı kayıp meydana gelirse, ** herhangi bir bütünlük, güvenilirlik ve diğer garantileri sağlamak için şirket sorumlu olmayacaktır. ** HERHANGİ BİR SORUMLULUĞUN KABUL EDİLMEMESİ. ** Fixaj ** ** **--------------File Info------------------------------------------------------------------------------- ** Modified by: MEHMET YILDIZ ** Modified date: 8.06.2023 ** Version: v0.1 ** Description: ********************************************************************************************************/ #define E32_TTL_1W // E32 30d modülleri için bunu aktif et #include <HardwareSerial.h> #include <FixajEkran.h> unsigned long kanalBekleme_sure = 0 ; int kanalBekleme_bekleme = 2500 ; #define RX 17 // Lora nın 3. pini RX in ESP 32 de hangi pine bağlı olduğu #define TX 16 // Lora nın 4. pini TX in ESP 32 de hangi pine bağlı olduğu HardwareSerial fixajSerial( 2 ); //esp32 hardware serial kullanıyoruz FixajEkran FixajSS(TX, RX, & fixajSerial, UART_BPS_RATE_115200_Ekran); #include "LoRa_E32.h" #define M0 32 //3in1 PCB mizde pin 7 #define M1 33 //3in1 PCB mizde pin 6 #define RXLora 27 // Lora nın 3. pini RX in ESP 32 de hangi pine bağlı olduğu #define TXLora 35 // Lora nın 4. pini TX in ESP 32 de hangi pine bağlı olduğu //Alıcı tarafı ESP32 olduğu parametre ayaraları değişmemiz gerekiyor. HardwareSerial fixajSerial1( 1 ); //esp32 hardware serial kullanıyoruz LoRa_E32 FixajLora(TXLora, RXLora, & fixajSerial1, UART_BPS_RATE_9600); //PARAMETRE AYARLARI #define Adres 1 //0--65000 arası bir değer girebilirsiniz. Diğer Modüllerden FARKLI olmalı #define Kanal 20 //Frekans değeri Diğer Modüllerle AYNI olmalı. //E32 için 0--31 arasında bir sayı giriniz. //E32 433 için Frekans = 410 + kanal değeri #define GonderilecekAdres 2 //Mesajın gönderileceği LoRa nın adresi struct Signal { char sifre[ 15 ] = "Fixaj.com" ; char konum[ 15 ]; bool btnSulama; bool btnAydinlatma; bool btnOtopark; bool btnHava; } data; #define addrSulama 0x080004 #define addrAydinlatma 0x080006 #define addrOtopark 0x080008 #define addrHavandirma 0x08000A Buton havandirma( 0 , 3 ); Buton sulama( 0 , 0 ); Buton aydinlatma( 0 , 1 ); Buton otopark( 0 , 2 ); bool havandirmaDurum = false ; bool sulamaDurum = false ; bool aydinlatmaDurum = false ; bool otoparkDurum = false ; void setup () { Serial.begin ( 115200 ); delay ( 100 ); FixajSS.begin(); delay ( 500 ); if ( ! FixajSS.EkranTest()) { Serial.println ( "bağlantı hatası, kabloları kontrol edin" ); //ESP yi veya NANO yu PCB den çıkarıp programı yükleyin sonra PCB takın //Ekran nın Baud Rate ni de ayarlamayı unutmuş olabilirsiniz. //SGTools programından projenize sağ tıklayın Prpject properties-> Baud rate //sonra arayüz tasarımını tekrar Ekrana yükleyin. } delay ( 100 ); pinMode (M0, OUTPUT ); pinMode (M1, OUTPUT ); FixajLora.begin(); LoraE32Ayarlar(); digitalWrite (M0, LOW ); digitalWrite (M1, LOW ); delay ( 500 ); Serial.println ( "Fixaj.com Basliyor..." ); } void loop () { if (FixajSS.dokunmaDinle()) { if (FixajSS.butonBasildiMi(sulama)) { Serial.println ( "sulama click" ); sulamaDurum = ! sulamaDurum; FixajSS.yaz(addrSulama, sulamaDurum); } else if (FixajSS.butonBasildiMi(aydinlatma)) { Serial.println ( "aydinlatma click" ); aydinlatmaDurum = ! aydinlatmaDurum; FixajSS.yaz(addrAydinlatma, aydinlatmaDurum); } else if (FixajSS.butonBasildiMi(otopark)) { Serial.println ( "otopark click" ); otoparkDurum = ! otoparkDurum; FixajSS.yaz(addrOtopark, otoparkDurum); } else if (FixajSS.butonBasildiMi(havandirma)) { Serial.println ( "havandirma click" ); havandirmaDurum = ! havandirmaDurum; FixajSS.yaz(addrHavandirma, havandirmaDurum); } } if ( millis () > kanalBekleme_sure + kanalBekleme_bekleme) { kanalBekleme_sure = millis (); data.btnSulama = sulamaDurum; data.btnAydinlatma = aydinlatmaDurum; data.btnOtopark = otoparkDurum; data.btnHava = havandirmaDurum; ResponseStatus rs = FixajLora.sendFixedMessage( highByte (GonderilecekAdres), lowByte (GonderilecekAdres), Kanal, & data, sizeof (Signal)); Serial.print ( "Sonuc: " ); Serial.println (rs.getResponseDescription()); } } void LoraE32Ayarlar() { digitalWrite (M0, HIGH ); digitalWrite (M1, HIGH ); ResponseStructContainer c; c = FixajLora.getConfiguration(); Configuration configuration = * (Configuration * )c.data; //DEĞİŞEBİLEN AYARLAR // Üstte #define kısmında ayarlayınız configuration.ADDL = lowByte (Adres); configuration.ADDH = highByte (Adres); configuration.CHAN = Kanal; //SEÇENEKLİ AYARLAR configuration.SPED.airDataRate = AIR_DATA_RATE_010_24; //Veri Gönderim Hızı 2,4 varsayılan //configuration.SPED.airDataRate = AIR_DATA_RATE_000_03; //Veri Gönderim Hızı 0,3 En uzak Mesafe //configuration.SPED.airDataRate = AIR_DATA_RATE_101_192; //Veri Gönderim Hızı 19,2 En Hızlı //configuration.OPTION.transmissionPower = POWER_20; //Geönderim Gücü max Varsayılan //configuration.OPTION.transmissionPower = POWER_10; //Geönderim Gücü min configuration.OPTION.transmissionPower = POWER_30; // E32 30d modülleri için bunu aktif et //GELİŞMİŞ AYARLAR configuration.SPED.uartBaudRate = UART_BPS_9600; configuration.SPED.uartParity = MODE_00_8N1; configuration.OPTION.fec = FEC_0_OFF; //configuration.OPTION.fec = FEC_1_ON; configuration.OPTION.fixedTransmission = FT_FIXED_TRANSMISSION; //configuration.OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; configuration.OPTION.wirelessWakeupTime = WAKE_UP_250; configuration.OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; // Ayarları KAYDET ve SAKLA ResponseStatus rs = FixajLora.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE); Serial.print ( "Ayarlar Durum: " ); Serial.println (rs.getResponseDescription()); c.close(); } |
Röle Tarafı
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 | /* Kernel for the receiver part */ #define E32_TTL_1W // for 30d modules #include "LoRa_E32.h" #include <HardwareSerial.h> // pinout region #define M0 32 #define M1 33 #define RX 17 #define TX 16 #define L_RX 27 // pins for LoRa #define L_TX 35 // pins for LoRa x2 #define role1 2 #define role2 4 #define role3 13 #define role4 25 // parameters region #define Adres 2 // cross values with transmitter setup #define Kanal 20 // frequency #define GonderilecekAdres 1 // cross values with transmitter setup #define password "Fixaj.com" HardwareSerial fixajSerial1( 1 ); LoRa_E32 FixajLora(L_TX, L_RX, & fixajSerial1, UART_BPS_RATE_9600); struct Signal { char sifre[ 15 ] = password; char konum[ 15 ]; bool btnSulama; bool btnAydinlatma; bool btnOtopark; bool btnHava; } data; void setup () { Serial.begin ( 115200 ); while ( ! Serial) { ; } delay ( 500 ); // ^^ pinMode (M0, OUTPUT ); // define output pins pinMode (M1, OUTPUT ); pinMode (role1, OUTPUT ); pinMode (role2, OUTPUT ); pinMode (role3, OUTPUT ); pinMode (role4, OUTPUT ); delay ( 100 ); // ^^ FixajLora.begin(); LoraE32Ayarlar(); digitalWrite (M0, LOW ); digitalWrite (M1, LOW ); delay ( 100 ); // start Serial.println (F( "Booting.. Fixaj.com" )); } void loop () { while (FixajLora.available() > 1 ) { // Reading the message ResponseStructContainer rsc = FixajLora.receiveMessage( sizeof (Signal)); struct Signal data = * (Signal * )rsc.data; rsc.close(); if (strcmp(data.sifre, password) = = 0 ) { // Sifre dogru mu Serial.println (F( "Password verified" )); switch (data.btnSulama) { case true : Serial.println (F( "SULAMA ACILIYOR..." )); digitalWrite (role1, HIGH ); Serial.println (F( "____________________" )); Serial.println (F( " " )); Serial.println (F( " " )); break ; case false : Serial.println (F( "Sulama Kapaniyor..." )); Serial.println (F( "____________________" )); Serial.println (F( " " )); Serial.println (F( " " )); digitalWrite (role1, LOW ); break ; } switch (data.btnAydinlatma) { case true : Serial.println (F( "Aydinlatma Aciliyor..." )); Serial.println (F( "____________________" )); Serial.println (F( " " )); Serial.println (F( " " )); digitalWrite (role2, HIGH ); break ; case false : Serial.println (F( "Aydinlatma Kapaniyor..." )); Serial.println (F( "____________________" )); Serial.println (F( " " )); Serial.println (F( " " )); digitalWrite (role2, LOW ); break ; } switch (data.btnOtopark) { case true : Serial.println (F( "Otopark Aciliyor..." )); Serial.println (F( "____________________" )); Serial.println (F( " " )); Serial.println (F( " " )); digitalWrite (role3, HIGH ); break ; case false : Serial.println (F( "Otopark Kapaniyor..." )); Serial.println (F( "____________________" )); Serial.println (F( " " )); Serial.println (F( " " )); digitalWrite (role3, LOW ); break ; } switch (data.btnHava) { case true : Serial.println (F( "Havalandirma Aciliyor..." )); Serial.println (F( "____________________" )); Serial.println (F( " " )); digitalWrite (role4, HIGH ); break ; case false : Serial.println (F( "Havalandirma Kapaniyor..." )); Serial.println (F( "____________________" )); Serial.println (F( " " )); digitalWrite (role4, LOW ); break ; } } } } void LoraE32Ayarlar() { digitalWrite (M0, HIGH ); digitalWrite (M1, HIGH ); ResponseStructContainer c; c = FixajLora.getConfiguration(); Configuration configuration = * (Configuration * )c.data; //DEĞİŞEBİLEN AYARLAR // Üstte #define kısmında ayarlayınız configuration.ADDL = lowByte (Adres); configuration.ADDH = highByte (Adres); configuration.CHAN = Kanal; //SEÇENEKLİ AYARLAR configuration.SPED.airDataRate = AIR_DATA_RATE_010_24; //Veri Gönderim Hızı 2,4 varsayılan //configuration.SPED.airDataRate = AIR_DATA_RATE_000_03; //Veri Gönderim Hızı 0,3 En uzak Mesafe //configuration.SPED.airDataRate = AIR_DATA_RATE_101_192; //Veri Gönderim Hızı 19,2 En Hızlı //configuration.OPTION.transmissionPower = POWER_20; //Geönderim Gücü max Varsayılan //configuration.OPTION.transmissionPower = POWER_10; //Geönderim Gücü min configuration.OPTION.transmissionPower = POWER_30; // E32 30d modülleri için bunu aktif et //GELİŞMİŞ AYARLAR configuration.SPED.uartBaudRate = UART_BPS_9600; configuration.SPED.uartParity = MODE_00_8N1; configuration.OPTION.fec = FEC_0_OFF; //configuration.OPTION.fec = FEC_1_ON; configuration.OPTION.fixedTransmission = FT_FIXED_TRANSMISSION; //configuration.OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; configuration.OPTION.wirelessWakeupTime = WAKE_UP_250; configuration.OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; // Ayarları KAYDET ve SAKLA ResponseStatus rs = FixajLora.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE); Serial.print ( "Ayarlar Durum: " ); Serial.println (rs.getResponseDescription()); c.close(); } |