dokunmatik ekran ile Arduino kullanımı

Dokunmatik Ekran ve Arduino Kullanımı

Gerekli Malzemeler:

Kodlar:

Youtube Fixaj kanalımızda anlatığımız Video da kullanmış olduğumuz kodlar:

/****************************************Copyright (c)****************************************************
**                             		Fixaj  Mehmet YILDIZ
**
**                             		https://fixaj.com/  
**
** 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:    
 
********************************************************************************************************/

#include <HardwareSerial.h>
#include <FixajEkran.h>

unsigned long kanalBekleme_sure = 0;
int kanalBekleme_bekleme = 2000;

#define sayiGece 0x080002
#define sayiMotor 0x080004
#define sayiGeri 0x080006
#define sayiSepet 0x080008

int b = 0, m = 0;

#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

#define kirmiziPin 32
#define yesilPin 33
#define maviPin 27

HardwareSerial fixajSerial(2);  //esp32 hardware serial kullanıyoruz
FixajEkran FixajSS(TX, RX, &fixajSerial, UART_BPS_RATE_115200_Ekran);


Buton geceModu(0, 0);
Buton motor(0, 1);
Buton geri(0, 2);
Buton sepet(0, 3);
Buton bildirim(0, 4);
Buton keypadTest(0, 16);

void setup() {
  Serial.begin(115200);
  while (!Serial)
    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);
  Serial.println("Fixaj.com Basliyor...");

  pinMode(kirmiziPin, OUTPUT);
  pinMode(yesilPin, OUTPUT);
  pinMode(maviPin, OUTPUT);
}

void loop() {

  if (FixajSS.dokunmaDinle()) {
    if (FixajSS.butonBasildiMi(geceModu)) {
      Serial.print("geceModu click: ");
      FixajSS.oku(sayiGece, &b);
      Serial.println(b);
      if (b) {
        digitalWrite(kirmiziPin, 1);
      } else {
        digitalWrite(kirmiziPin, 0);
      }
    }

    else if (FixajSS.butonBasildiMi(motor)) {
      Serial.print("motor click: ");
      FixajSS.oku(sayiMotor, &m);
      Serial.println(m);
      if (m) {
        digitalWrite(yesilPin, 1);
      } else {
        digitalWrite(yesilPin, 0);
      }
    }
  }
}

Arayüz Tasarımı

Voltmetre

ESP32 ve ADS1115 ile Hassas Ölçümlü Voltmetre yapımı

Bu yazımızda normal ESP32 modellerinde mümkün olmayan bir hassaslık ile gerilim ölçer yani “Voltmetre” kurmayı ve programlamayı öğreteceğiz. Üstelik Topway dokunmatik ekran kullanarak okuduğumuz verileri anlık olarak grafik haline getirip istediğimiz uzaklık ve hız ile ekranda kaydıracağız. Sağlıklı çalışan bir Voltmetre yapmak için ESP32 içinde bulunan ADC özelliğini kullanacağız. Ancak ADC tek başına çok kötü bir hassaslığa sahip olduğundan, ADS1115 diye isimlendiren bir modül ile çok hassas analog okuma yapabileceğiz.

Bu sorun ESP32 s3 modellerinde çözülmüştür, başka bir yazımızda s3 incelemesini de gerçekleştireceğiz.

Gerekli Malzemeler

Kodlar

/****************************************Copyright (c)****************************************************
**                             		Fixaj  Mehmet YILDIZ
**
**                             		https://fixaj.com/  
**
** 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:        	  23.06.2023
** Version:                	v0.1
** Description:    
 
********************************************************************************************************/


#include <HardwareSerial.h>
#include <FixajEkran.h>
#include <Adafruit_ADS1X15.h>

Adafruit_ADS1115 ads; /* Use this for the 16-bit version */
//Adafruit_ADS1015 ads; /* Use this for the 12-bit version */
float transformedValue = 0.0;

//#define graf 0x060000
#define graf 0x0602bc
#define volt 0x080002

#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

#define SIZE 350        // Array boyutu
#define OFFSET 0        // Orta değer (genliği 2'ye böleriz)
#define AMPLITUDE 1000  // Maksimum genlik

int sin_wave[SIZE];  // Sinüs dalgası için array
INT16U Alog[SIZE];

HardwareSerial fixajSerial(2);  //esp32 hardware serial kullanıyoruz
FixajEkran FixajSS(TX, RX, &fixajSerial, UART_BPS_RATE_115200_Ekran);

int16_t adc0, adc1, adc2, adc3;
float volts0, volts1, volts2, volts3;

void setup() {
  Serial.begin(115200);
  while (!Serial) {
    ;
  }
  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);
  if (!ads.begin()) {
    Serial.println("Failed to initialize ADS.");
    while (1)
      ;
  }

  ads.setDataRate(uint16_t RATE_ADS1115_860SPS);
  Serial.println("Fixaj.com Basliyor...");
}

void loop() {


  for (int i = 0; i < SIZE; i++) {
    memmove(&(Alog[0]), &(Alog[1]), (SIZE - 1) * sizeof(Alog[0]));
    adc0 = ads.readADC_SingleEnded(0);
    volts0 = ads.computeVolts(adc0);

    Alog[SIZE - 1] = (int)round(mapFloat(volts0, 0, 3.29, 0, 309.0));

    //ekran yenileme hızı.
    if (i % 3 == 0) {
      FixajSS.grafikCiz(graf, SIZE, Alog);
    }
  }

  FixajSS.yaz(volt, Alog[SIZE - 1]);
  Serial.println(".");
}


float mapFloat(float x, float x1, float x2, float y1, float y2) {
  return (x - x1) * (y2 - y1) / (x2 - x1) + y1;
}

Uygulama Dosyalarını İndirmek için tıklayınız

Dijital Ekran ve LoRa ile akıllı ev uygulaması

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

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:

/****************************************Copyright (c)****************************************************
**                             		Fixaj  Mehmet YILDIZ
**
**                             		https://fixaj.com/  
**
** 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ı

/* 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();
}

Dosyalar

E70 ile Otomasyon

E70 ile Otomasyon

Bu yazımızda sizlere E70 ile otomasyon projesi yapacağız. 2 noktadan sıcaklık ve nem değerlerini bekleme olmaksızın aynı anda merkez noktaya göndereceğiz ve merkezde gelen verileri düzgün bir şekilde görüntüleyeceğiz.

Bu projemizde E70 433nw30s modelleri ile birlikte sıcaklık ve nem ölçümü için hdc1080 sıcaklık ve nem sensörünü kullanacağız.

Ayrıca hdc1080 sensörünün yoğun nem altında, çiy kırağı gibi sensörü köreltecek su zerreciklerine karşı sensörün kendi içinde barındırdığı heater özelliğinden de bahsedeceğiz.

Gerekli Malzemeler

HDC1080 Sıcaklık ve Nem Sensörü

Kodlar

burada sizlere 2 farklı kod paylaşam öncelikle HDC 1080 sensörünün harika özelliği olan heater nasıl kullanılır onunla alakalı bir kod parçası paylaşacağım. diğer kodda ise e70 ve hdc sıcaklık ve nem sensörlerimiz ile uygulama yapacağız.

HDC 1080 Isıtıcı Örnek Kodu

/**************************************************************************************

This is a heater example for ClosedCube HDC1080 Humidity and Temperature Sensor breakout booard

Initial Date: 01-Feb-2017

Hardware connections for Arduino Uno:
VDD to 3.3V DC
SCL to A5
SDA to A4
GND to common ground

Written by AA for ClosedCube

MIT License

**************************************************************************************/

#include <Wire.h>
#include "ClosedCube_HDC1080.h"

ClosedCube_HDC1080 hdc1080;

unsigned long kanalBekleme_sure = 0;
int kanalBekleme_bekleme = 15000;

void setup() {
  Serial.begin(9600);
  Serial.println("ClosedCube HDC1080 Heater Arduino Test");
  Serial.println();

  // Default settings:
  //  - Heater off
  //  - 14 bit Temperature and Humidity Measurement Resolutions
  hdc1080.begin(0x40);

  Serial.print("Manufacturer ID=0x");
  Serial.println(hdc1080.readManufacturerId(), HEX);  // 0x5449 ID of Texas Instruments
  Serial.print("Device ID=0x");
  Serial.println(hdc1080.readDeviceId(), HEX);  // 0x1050 ID of the device
}

void loop() {
  Serial.print("T=");
  Serial.print(hdc1080.readTemperature());
  Serial.print("C, RH=");
  Serial.print(hdc1080.readHumidity());
  Serial.println("%");
  delay(300);

  if (millis() > kanalBekleme_sure + kanalBekleme_bekleme) {
    kanalBekleme_sure = millis();
    Serial.print("Heating up for approx. ");
    Serial.print(5);
    Serial.println(" seconds. Please wait...");
    hdc1080.heatUp(5);  // approx 10 sec
    printRegister(hdc1080.readRegister());
  }
}

void printRegister(HDC1080_Registers reg) {
  Serial.println("HDC1080 Configuration Register");
  Serial.println("------------------------------");

  Serial.print("Software reset bit: ");
  Serial.print(reg.SoftwareReset, BIN);
  Serial.println(" (0=Normal Operation, 1=Software Reset)");

  Serial.print("Heater: ");
  Serial.print(reg.Heater, BIN);
  Serial.println(" (0=Disabled, 1=Enabled)");

  Serial.print("Mode of Acquisition: ");
  Serial.print(reg.ModeOfAcquisition, BIN);
  Serial.println(" (0=T or RH is acquired, 1=T and RH are acquired in sequence, T first)");

  Serial.print("Battery Status: ");
  Serial.print(reg.BatteryStatus, BIN);
  Serial.println(" (0=Battery voltage > 2.8V, 1=Battery voltage < 2.8V)");

  Serial.print("T Measurement Resolution: ");
  Serial.print(reg.TemperatureMeasurementResolution, BIN);
  Serial.println(" (0=14 bit, 1=11 bit)");

  Serial.print("RH Measurement Resolution: ");
  Serial.print(reg.HumidityMeasurementResolution, BIN);
  Serial.println(" (00=14 bit, 01=11 bit, 10=8 bit)");
}

E70 ve HDC1080 Sensörün Birlikte Kullanımı

#include <HardwareSerial.h>
#define M0 32  //  3in1 PCB mizde pin 7
#define M1 33  //  3in1 PCB mizde pin 6
#define RX 27  //  Lora nın 3. pini RX in ESP32 de hangi pine bağlı olduğu
#define TX 35  //  Lora nın 4. pini TX in ESP32 de hangi pine bağlı olduğu

#include <Wire.h>
#include "ClosedCube_HDC1080.h"

ClosedCube_HDC1080 hdc1080;

HardwareSerial fixajSerial(1);

unsigned long kanalBekleme_sure = 0;
int kanalBekleme_bekleme = 3000;
bool ayarMod = false;
byte e = 0;

struct Signal {
  char konum[30];
  byte temp[4];
  byte nem[4];
} mesaj;

void setup() {
  Serial.begin(115200);
  fixajSerial.begin(115200, SERIAL_8N1, TX, RX);
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, 1);  //  coordinator mode m0=0, m1=0  |  normal mode m0=1, m1=0
  digitalWrite(M1, 0);
  pinMode(14, OUTPUT);
  Serial.println("Fixaj.com baslat...");
  delay(2000);

  // Default settings:
  //  - Heater off
  //  - 14 bit Temperature and Humidity Measurement Resolutions
  hdc1080.begin(0x40);

  ayarMod = false;  //normal kullanımda ayarMod false yapın
  //ayarDegis();  //ayarDegis ve mevcutAyarlar metodunu aynı anda çağırmayınız.
  mevcutAyarlar();
}

void loop() {

  if (ayarMod) {

    if (Serial.available()) {
      fixajSerial.write(Serial.read());
    }

    if (fixajSerial.available()) {
      Serial.write(fixajSerial.read());
    }

  } else {

    if (millis() > kanalBekleme_sure + kanalBekleme_bekleme) {
      kanalBekleme_sure = millis();
      strcpy(mesaj.konum, "NODE2: Sistem Odasi");
      *(float *)(mesaj.temp) = hdc1080.readTemperature();
      *(float *)(mesaj.nem) =hdc1080.readHumidity();
      gonder(&mesaj);
    }

    while (fixajSerial.available()) {
      receive(&mesaj);
      Serial.print("Konum: ");
      Serial.print(mesaj.konum);
      Serial.print(",\t Sıcaklık: ");
      Serial.print(*(float *)(mesaj.temp));
      Serial.print(",\t Nem: ");
      Serial.println(*(float *)(mesaj.nem));

      /*
      Serial.print("RSSI: ");
      char rssi[1];
      fixajSerial.readBytes(rssi, 1);
      Serial.println(rssi[0], DEC);
      */
    }
  }
}

void gonder(Signal *mdata) {
  fixajSerial.write((uint8_t *)mdata, sizeof(Signal));
}

bool receive(Signal *mdata) {
  return (fixajSerial.readBytes((uint8_t *)mdata, sizeof(Signal)) == sizeof(Signal));
}

/*
ayarDegis fonksiyonu parametre ayarlarını nasıl değiştireceğinizi 
gösterir. Örnek olarak bazı ayarlar yapılmıştır.
*/

void ayarDegis() {
  if (ayarMod) {
    fixajSerial.print("++");
    delay(100);
    fixajSerial.print("+++");  // Ayarlar ekranına giriş
    delay(100);
    fixajSerial.println("AT+WMCFG=1");  // 0 coordinatör, 1 Node, 4 default
    delay(100);
    fixajSerial.println("AT+PIDCFG=1453");  //ağ şifresi
    delay(100);
    fixajSerial.println("AT+CNCFG=5");  //the channels are only 0,1,2,3,4,5,6 and 128.
    delay(100);
    fixajSerial.println("AT+TFOCFG=0");  // 0 boardcast gibi, 1 data+long adres, 3 data+ RSSI
    delay(100);
    fixajSerial.println("AT+TFICFG=0");  //0 input broadcast, 1 short adres + data, 2 long adres + data
    delay(100);
    fixajSerial.println("AT+RSTART");
  }
}

/*
mevcutAyarlar fonksiyonu E70 modülünün üstünde kayıtlı olan mevcut ayarlarını
ekrana yazdırır.
*/

void mevcutAyarlar() {
  if (ayarMod) {
    fixajSerial.print("++");
    delay(100);
    fixajSerial.print("+++");  // Ayarlar ekranına giriş
    delay(100);
    fixajSerial.println("AT+CNCFG=?");  //hangi frekanas
    delay(100);
    fixajSerial.println("AT+WMCFG=?");  //MODE 0-COOR 1- NORMAL
    delay(100);
    fixajSerial.println("AT+PWCFG=?");  //GÜÇ
    delay(100);
    fixajSerial.println("AT+TFOCFG=?");  //OUTPUT FORMAT
    delay(100);
    fixajSerial.println("AT+TFICFG=?");  //INPUT FORMAT
    delay(100);
    fixajSerial.println("AT+TMCFG=?");  //LONG RAGE OR GFSK
    delay(100);
    fixajSerial.println("AT+PIDCFG=?");  //NET İD
    delay(100);
    fixajSerial.println("AT+DMCFG=?");
    delay(100);
    fixajSerial.println("AT+RSCFG=?");  //OTO RESET SÜRESİ
    delay(100);
    fixajSerial.println("AT+UBCFG=?");  //BAUD RATE 7- 115200
    delay(100);
    fixajSerial.println("AT+UPCFG=?");  //ODD OR EVEN PARİTY
    delay(100);
    fixajSerial.println("AT+IOCFG=?");  //PUSH PULL OR OPEN DRAİN
    delay(100);
    fixajSerial.println("AT+VER");  //VERSİYON
    delay(100);
    fixajSerial.println("AT+TLCFG=?");  //CONCURRENCY
    delay(100);
    fixajSerial.println("AT+DMCFG=?");
    delay(100);
    fixajSerial.println("AT+EXIT");
    delay(2);
  }
}

Hangi GPS modülü?

Hangi GPS modülü?

hagi GPS modülü yazmızda piyasada en çok kullanılan u-blox marka neo 6m, neo 7m ve neom8n modellerini inceleyeceğiz. Kütüphanesiniz nasıl kullanacağımızı ve lora modülü ile veri transferi apılır gibi konuları detaylı anlatmaya çalışacağım

GOALS

•GPS modülü ilk nasıl bulundu

•GPS modül çeşitleri

•M8N nin farkları

•ESP32 mi NANO ile mi kullanalım

•İlk uygulama

•TingGPSPlus kütüphane

•GPS verisini yollama konularına değineceğiz

Gerekli Malzemeler

LoRa Başlangıç Seti
LoRa Başlangıç Seti

E32 433T20D Lora Modülü uygun anten, PCB , Kutu ve Arduino nano modülleri ile birlikte en Uygun Fiyatlı set.

LoRa Uzman Seti
LoRa Uzman Seti

E22 900T22D Lora Modülü uygun anten, PCB , Kutu ve Arduino nano modülleri ile birlikte en Uygun Fiyatlı set.

Kullanacağımız Kodlar

Kütüphanesi kullanım ESP32

/*
 * There are three serial ports on the ESP known as U0UXD, U1UXD and U2UXD.
 * 
 * U0UXD is used to communicate with the ESP32 for programming and during reset/boot.
 * U1UXD is unused and can be used for your projects. Some boards use this port for SPI Flash access though
 * U2UXD is unused and can be used for your projects.
 * 
*/

#define RXD2 16
#define TXD2 17  

void setup()
{

  Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2);
  // Start the Arduino hardware serial port at 9600 baud
  Serial.begin(9600); 
}

void loop()
{
  // Displays information when new sentence is available.
  /*while (Serial2.available() > 0){
    Serial.write(Serial2.read());
  }
*/

   while (Serial2.available()) {
    Serial.print(char(Serial2.read()));
  }

  Serial.println("-----------------------------");
}

Kütüphane ile kullanım örneği

#include <TinyGPSPlus.h>
#define RXD2 16
#define TXD2 17

// The TinyGPSPlus object
TinyGPSPlus gps;
struct Signal {
  char sifre[15] = "Fixaj.com";
  char konum[15];
  bool btn1;
  byte btn2[10];
  byte btn3[4];
} data;

void setup() {
  Serial.begin(115200);
  Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2);


  Serial.println(F("DeviceExample.ino"));
  Serial.println(F("A simple demonstration of TinyGPSPlus with an attached GPS module"));
  Serial.print(F("Testing TinyGPSPlus library v. "));
  Serial.println(TinyGPSPlus::libraryVersion());
  Serial.println(F("by Mikal Hart"));
  Serial.println();
}

void loop() {
  // This sketch displays information every time a new sentence is correctly encoded.
  while (Serial2.available() > 0)
    if (gps.encode(Serial2.read()))
      displayInfo();
}

void displayInfo() {
  Serial.print(F("Location: "));
  if (gps.location.isValid()) {
    Serial.print(gps.location.lat(), 6);
    Serial.print(F(","));
    Serial.print(gps.location.lng(), 6);
    *(float*)(data.btn2) = gps.location.lng();
  } else {
    Serial.print(F("INVALID"));
  }

  Serial.print(F("  Date/Time: "));
  if (gps.date.isValid()) {
    Serial.print(gps.date.month());
    Serial.print(F("/"));
    Serial.print(gps.date.day());
    Serial.print(F("/"));
    Serial.print(gps.date.year());
  } else {
    Serial.print(F("INVALID"));
  }

  Serial.print(F(" "));
  if (gps.time.isValid()) {
    if (gps.time.hour() < 10) Serial.print(F("0"));
    Serial.print(gps.time.hour());
    Serial.print(F(":"));
    if (gps.time.minute() < 10) Serial.print(F("0"));
    Serial.print(gps.time.minute());
    Serial.print(F(":"));
    if (gps.time.second() < 10) Serial.print(F("0"));
    Serial.print(gps.time.second());
    Serial.print(F("."));
    if (gps.time.centisecond() < 10) Serial.print(F("0"));
    Serial.print(gps.time.centisecond());
  } else {
    Serial.print(F("INVALID"));
  }

  Serial.println();
}

Kümes Otomasyonu

Kümes Otomasyonu

Bu yazımızda basit bir otomasyon sistemi nasıl kurulur onu anlatacağım. Örnek olarak bir kümes otomasyonu kuracağız. Sıcaklık ve nem değerlerini iki farklı noktadan ölçümleyip değerleri Arduino Cloud üstünden kaydedeceğiz. Ardından gelen verileri göze hitap güzel grafiklere çevireceğiz.

iş bulma ve kurma adına işinize yarayabileceğini düşünüyor. Neticede uzaktan izleme ve kontrol sistemleri işletmelerin üretimlerini arttırdığı için akıllı tarım ve hayvancılık yapan yerlerde çokça tercih edilmektedir. NEden pahalı ithal çözümlere gidelim kendimiz yapalım 💪🏻.

Gerekli Malzemeler:

ESP32 ve 3in1 esp32 PCB ürünleri satın almak için tıklayın.

3in1 esp32 PCB

30 pin ESP32

Kodlar

Sıcaklık ve nem sensör noktalarından birisi

#include "LoRa_E32.h"
#include <SoftwareSerial.h>
#include <Wire.h>
#include "ClosedCube_HDC1080.h"

ClosedCube_HDC1080 hdc1080;

SoftwareSerial mySerial(3, 4); //PCB versiyon 4.3 den sonra bu şekilde olmalı
LoRa_E32 FixajSS(&mySerial);

#define M0 7
#define M1 6

//PARAMETRE AYARLARI
#define Adres 2   //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 3  //Mesajın gönderileceği LoRa nın adresi

struct Signal {
  char sifre[15] = "Fixaj.com";
  byte id;
  char konum[15];
  byte nem[4];   //0-100 arası bir değer olduğu için
  byte temp[5];  //0-250 arası bir değer yeterli şimdilik
                 // float tipinde 29.5 gibi bir değer atacak
} data;


void setup() {
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);

  Serial.begin(9600);
  FixajSS.begin();

  LoraE32Ayarlar();  // parametre ayarlarını buradan verecek

  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);

  hdc1080.begin(0x40);

  delay(500);
  Serial.println("başlıyoruz.. Fixaj.com");
}

void loop() {



  *(float*)(data.temp) = hdc1080.readTemperature();
  *(float*)(data.nem) = hdc1080.readHumidity();
  strcpy(data.konum, "Mutfak");
  data.id = 2;

  Serial.print("T=");
  Serial.print(*(float*)(data.temp));
  Serial.print("C, RH=");
  Serial.print(*(float*)(data.nem));
  Serial.println("%");

  /*
  delay(2000);  
  data.btn1 = false;
  *(float*)(data.btn2) = 37.199386;
  *(int*)(data.btn3) = 1453;
  strcpy(data.konum, "Teknofest");
*/
  //sıcaklık ve nem değerlerini ölçüp 2 saniyede bir merkeze iletecek.
  ResponseStatus rs = FixajSS.sendFixedMessage(highByte(GonderilecekAdres), lowByte(GonderilecekAdres), Kanal, &data, sizeof(Signal));
  delay(2000);
}

void LoraE32Ayarlar() {
  digitalWrite(M0, HIGH);
  digitalWrite(M1, HIGH);

  ResponseStructContainer c;
  c = FixajSS.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 = FixajSS.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);
  c.close();
}

Alıcı Server tarafı ESP32

/* 
  Sketch generated by the Arduino IoT Cloud Thing "Untitled"
  https://create.arduino.cc/cloud/things/709334d5-910a-4171-bb47-8818ebf3c0f6 

  Arduino IoT Cloud Variables description

  The following variables are automatically generated and updated when changes are made to the Thing

  float nemKumes;
  float nemMutfak;
  float tempKumes;
  float tempMutfak;
  bool anahtarc;

  Variables which are marked as READ/WRITE in the Cloud Thing will also have functions
  which are called when their values are changed from the Dashboard.
  These functions are generated with the Thing and added at the end of this sketch.
*/
#include "arduino_secrets.h"
#include "thingProperties.h"

#include <LoRa_E32.h>  // E32 modülleri için bunu aktif et
#include <HardwareSerial.h>
#define M0 32  //3in1 PCB mizde pin 7
#define M1 33  //3in1 PCB mizde pin 6
#define RX 27  //  Lora nın 3. pini RX in ESP 32 de hangi pine bağlı olduğu
#define TX 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 fixajSerial(1);  //esp32 hardware serial kullanıyoruz
LoRa_E32 FixajSS(TX, RX, &fixajSerial, UART_BPS_RATE_9600);

#define Adres 3   //0--65000 arası bir değer girebilirsiniz. Diğer Modüllerden FARKLI olmalı
#define Kanal 20  //Frekans değeri
//E32 için 0--31 arasında bir sayı giriniz.
//E32 433 için Frekans = 410+kanal değeri

#define roleKontak 14

struct Signal {
  char sifre[15] = "Fixaj.com";
  byte id;
  char konum[15];
  byte nem[4];   //0-100 arası bir değer olduğu için
  byte temp[5];  //0-250 arası bir değer yeterli şimdilik
                 // float tipinde 29.5 gibi bir değer atacak
} data;

void setup() {
  // Initialize serial and wait for port to open:
  Serial.begin(9600);
  // This delay gives the chance to wait for a Serial Monitor without blocking if none is found
  delay(1500);

  // Defined in thingProperties.h
  initProperties();

  // Connect to Arduino IoT Cloud
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);

  /*
     The following function allows you to obtain more information
     related to the state of network and IoT Cloud connection and errors
     the higher number the more granular information you’ll get.
     The default is 0 (only errors).
     Maximum is 4
 */
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();

  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);

  LoraE32Ayarlar();
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);

  pinMode(roleKontak, OUTPUT);

  delay(500);
  Serial.println("başlıyoruz.. Fixaj.com");
}

void loop() {
  ArduinoCloud.update();
  while (FixajSS.available() > 1) {

    ResponseStructContainer rss = FixajSS.receiveMessage(sizeof(Signal));
    struct Signal data = *(Signal*)rss.data;

    if (strcmp(data.sifre, "Fixaj.com") == 0) {
      //Serial.println("Sifre dogru");
      Serial.print("Konum1: ");
      Serial.print(data.konum);
      Serial.print("\t id: ");
      Serial.print(data.id);
      Serial.print("\t sicaklik: ");
      Serial.print(*(float*)(data.temp), 2);  // float tipinde olduğu için cast etmem lazım
      Serial.print("\t Nem: ");
      Serial.println(*(float*)(data.nem), 2);

      if (data.id == 1) {
        Serial.println("kümes verisi geldi");
        nemKumes = *(float*)(data.nem);
        tempKumes = *(float*)(data.temp);
      } else if (data.id == 2) {
        Serial.println("mutfak verisi geldi");
        nemMutfak = *(float*)(data.nem);
        tempMutfak = *(float*)(data.temp);
      }
    }


    rss.close();
  }
}

/*
  Since Anahtar is READ_WRITE variable, onAnahtarChange() is
  executed every time a new value is received from IoT Cloud.
*/


void LoraE32Ayarlar() {
  digitalWrite(M0, HIGH);
  digitalWrite(M1, HIGH);
  FixajSS.begin();  // şurayı unutunca ESP32 sürekli ken boot eder !!!DİKKAT!!!

  ResponseStructContainer c;
  c = FixajSS.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 = FixajSS.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);
  c.close();
}
/*
  Since Anahtarc is READ_WRITE variable, onAnahtarcChange() is
  executed every time a new value is received from IoT Cloud.
*/
void onAnahtarcChange() {
  digitalWrite(roleKontak, anahtarc);
}

Sonuç

Photo by Egor Myznik on Unsplash

Kolay Parametre Ayarları

Kolay Parametre Ayarları

bu yazımızda parametre ayarlarını programsal olarak vereceğiz ve böyle RF setting programı ile veya USB Stick ile uğraşmadan LoRa modüllerine Kolay Parametre Ayarları vereceğiz.

1 LoRa Başlangıç Seti Kodları

Gönderici Kodu:

//#define E32_TTL_1W // E32 30d modülleri için bunu aktif et
#include "LoRa_E32.h"

#include <SoftwareSerial.h>

SoftwareSerial mySerial(3, 4); //PCB versiyon 4.3 den sonra bu şekilde olmalı
LoRa_E32 FixajSS(&mySerial);

#define M0 7
#define M1 6

//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 btn1;
  byte btn2[10];
  byte btn3[4];
} data;


void setup() {
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);

  Serial.begin(9600);
  FixajSS.begin();

  LoraE32Ayarlar();

  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);

  delay(500);
  Serial.println("başlıyoruz.. Fixaj.com");
}

void loop() {

  data.btn1 = false;
  *(float*)(data.btn2) = 37.199386;
  *(int*)(data.btn3) = 1453;
  strcpy(data.konum, "Teknofest");

  ResponseStatus rs = FixajSS.sendFixedMessage(highByte(GonderilecekAdres), lowByte(GonderilecekAdres), Kanal, &data, sizeof(Signal));
  delay(2000);
}

void LoraE32Ayarlar() {
  digitalWrite(M0, HIGH);
  digitalWrite(M1, HIGH);

  ResponseStructContainer c;
  c = FixajSS.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 = FixajSS.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);
  c.close();
}

Alıcı Kodu:

//#define E32_TTL_1W // E32 30d modülleri için bunu aktif et
#include "LoRa_E32.h"  // E32 modülleri için bunu aktif et
#include <SoftwareSerial.h>

SoftwareSerial mySerial(3, 4); //PCB versiyon 4.3 den sonra bu şekilde olmalı
LoRa_E32 FixajSS(&mySerial);

#define M0 7
#define M1 6

#define Adres 2   //0--65000 arası bir değer girebilirsiniz. Diğer Modüllerden FARKLI olmalı
#define Kanal 20  //Frekans değeri
//E32 için 0--31 arasında bir sayı giriniz.
//E32 433 için Frekans = 410+kanal değeri

struct Signal {
  char sifre[15];
  char konum[15];
  bool btn1;
  byte btn2[10];
  byte btn3[4];
} data;


void setup() {
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);

  Serial.begin(9600);
  FixajSS.begin();

  LoraE32Ayarlar();

  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);

  delay(500);
  Serial.println("başlıyoruz.. Fixaj.com");
}

void loop() {
  while (FixajSS.available() > 1) {

    ResponseStructContainer rsc = FixajSS.receiveMessage(sizeof(Signal));
    struct Signal data = *(Signal*)rsc.data;
    rsc.close();

    if (strcmp(data.sifre, "Fixaj.com") == 0) {
      Serial.println("Sifre doğru");
      Serial.print("Konum: ");
      Serial.println(data.konum);
      Serial.print("buton durumu: ");
      Serial.println(data.btn1);
      Serial.print("Kordinat: ");
      Serial.println(*(float*)(data.btn2), 6);
      Serial.print("Büyük sayı: ");
      Serial.println(*(int*)(data.btn3));
    }
  }
}

void LoraE32Ayarlar() {
  digitalWrite(M0, HIGH);
  digitalWrite(M1, HIGH);

  ResponseStructContainer c;
  c = FixajSS.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 = FixajSS.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);
  c.close();
}

2 LoRa Uzman Seti

Gönderici Kodu

#include "LoRa_E22.h"
#include <SoftwareSerial.h>

SoftwareSerial mySerial(3, 4); //PCB versiyon 4.3 den sonra bu şekilde olmalı
LoRa_E22 FixajSS(&mySerial);

#define M0 7
#define M1 6

#define Adres 1   //0--65000 arası bir değer girebilirsiniz. Diğer Modüllerden FARKLI olmalı
#define Kanal 20    //Frekans değeri
//E22 için 0--80 arasında bir sayı giriniz. Diğer Modüllerle AYNI olmalı.
//E22 900 için Frekans = 850+kanal değeri.
#define Netid 63  //0--65000 arası bir değer girebilirsiniz. Diğer Modüllerle AYNI olmalı.

#define GonderilecekAdres 2

struct Signal {
  char sifre[15] = "Fixaj.com";
  char konum[15];
  bool btn1;
  byte btn2[10];
  byte btn3[4];
} data;


void setup() {
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);

  Serial.begin(9600);
  FixajSS.begin();

  LoraE22Ayarlar();

  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);

  delay(500);
  Serial.println("başlıyoruz.. Fixaj.com");
}

void loop() {

  data.btn1 = false;
  *(float*)(data.btn2) = 37.199386;
  *(int*)(data.btn3) = 1453;
  strcpy(data.konum, "Teknofest");

  ResponseStatus rs = FixajSS.sendFixedMessage(highByte(GonderilecekAdres), lowByte(GonderilecekAdres), Kanal, &data, sizeof(Signal));
  delay(2000);
}

void LoraE22Ayarlar() {

  digitalWrite(M0, LOW);
  digitalWrite(M1, HIGH);

  ResponseStructContainer c;
  c = FixajSS.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.NETID = Netid;
  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_111_625; //Veri Gönderim Hızı 62,5 En Hızlı

  configuration.OPTION.subPacketSetting = SPS_240_00;  //veri paket büyüklüğü 240 byte Varsayılan
  //configuration.OPTION.subPacketSetting = SPS_064_10; //veri paket büyüklüğü 64 byte
  //configuration.OPTION.subPacketSetting = SPS_032_11;  //veri paket büyüklüğü 32 en hızlısı

  configuration.OPTION.transmissionPower = POWER_22;  //Geönderim Gücü max Varsayılan
  //configuration.OPTION.transmissionPower = POWER_13;
  //configuration.OPTION.transmissionPower = POWER_10;  //Geönderim Gücü min

  //GELİŞMİŞ AYARLAR
  configuration.SPED.uartBaudRate = UART_BPS_9600;
  configuration.SPED.uartParity = MODE_00_8N1;
  configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011;
  configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED;

  //configuration.TRANSMISSION_MODE.WORTransceiverControl = WOR_TRANSMITTER;
  configuration.TRANSMISSION_MODE.WORTransceiverControl = WOR_RECEIVER;

  //configuration.TRANSMISSION_MODE.enableRSSI = RSSI_ENABLED;
  configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED;

  configuration.TRANSMISSION_MODE.fixedTransmission = FT_FIXED_TRANSMISSION;
  //configuration.TRANSMISSION_MODE.fixedTransmission = FT_TRANSPARENT_TRANSMISSION;

  configuration.TRANSMISSION_MODE.enableRepeater = REPEATER_DISABLED;
  //configuration.TRANSMISSION_MODE.enableRepeater = REPEATER_ENABLED;

  configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED;
  // configuration.TRANSMISSION_MODE.enableLBT = LBT_ENABLED;

  // Ayarları KAYDET ve SAKLA
  ResponseStatus rs = FixajSS.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);
  c.close();
}

Alıcı Kodu

#include "LoRa_E22.h"
#include <SoftwareSerial.h>

SoftwareSerial mySerial(3, 4); //PCB versiyon 4.3 den sonra bu şekilde olmalı
LoRa_E22 FixajSS(&mySerial);

#define M0 7
#define M1 6

#define Adres 2   //0--65000 arası bir değer girebilirsiniz. Diğer Modüllerden FARKLI olmalı
#define Kanal 20  //Frekans değeri
//E22 için 0--80 arasında bir sayı giriniz. Diğer Modüllerle AYNI olmalı.
//E22 900 için Frekans = 850+kanal değeri.
#define Netid 63  //0--65000 arası bir değer girebilirsiniz. Diğer Modüllerle AYNI olmalı.


struct Signal {
  char sifre[15] = "Fixaj.com";
  char konum[15];
  bool btn1;
  byte btn2[10];
  byte btn3[4];
} data;


void setup() {
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);

  Serial.begin(9600);
  FixajSS.begin();

  LoraE22Ayarlar();

  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);

  delay(500);
  Serial.println("başlıyoruz.. Fixaj.com");
}

void loop() {
  while (FixajSS.available() > 1) {

    ResponseStructContainer rsc = FixajSS.receiveMessage(sizeof(Signal));
    struct Signal data = *(Signal*)rsc.data;
    rsc.close();

    if (strcmp(data.sifre, "Fixaj.com") == 0) {
      Serial.println("Sifre doğru");
      Serial.print("Konum: ");
      Serial.println(data.konum);
      Serial.print("buton durumu: ");
      Serial.println(data.btn1);
      Serial.print("Kordinat: ");
      Serial.println(*(float*)(data.btn2), 6);
      Serial.print("Büyük sayı: ");
      Serial.println(*(int*)(data.btn3));
    }
  }
}


void LoraE22Ayarlar() {

  digitalWrite(M0, LOW);
  digitalWrite(M1, HIGH);

  ResponseStructContainer c;
  c = FixajSS.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.NETID = Netid;
  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_111_625; //Veri Gönderim Hızı 62,5 En Hızlı

  configuration.OPTION.subPacketSetting = SPS_240_00;  //veri paket büyüklüğü 240 byte Varsayılan
  //configuration.OPTION.subPacketSetting = SPS_064_10; //veri paket büyüklüğü 64 byte
  //configuration.OPTION.subPacketSetting = SPS_032_11;  //veri paket büyüklüğü 32 en hızlısı

  configuration.OPTION.transmissionPower = POWER_22;  //Geönderim Gücü max Varsayılan
  //configuration.OPTION.transmissionPower = POWER_13;
  //configuration.OPTION.transmissionPower = POWER_10;  //Geönderim Gücü min

  //GELİŞMİŞ AYARLAR
  configuration.SPED.uartBaudRate = UART_BPS_9600;
  configuration.SPED.uartParity = MODE_00_8N1;
  configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011;
  configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED;

  //configuration.TRANSMISSION_MODE.WORTransceiverControl = WOR_TRANSMITTER;
  configuration.TRANSMISSION_MODE.WORTransceiverControl = WOR_RECEIVER;

  //configuration.TRANSMISSION_MODE.enableRSSI = RSSI_ENABLED;
  configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED;

  configuration.TRANSMISSION_MODE.fixedTransmission = FT_FIXED_TRANSMISSION;
  //configuration.TRANSMISSION_MODE.fixedTransmission = FT_TRANSPARENT_TRANSMISSION;

  configuration.TRANSMISSION_MODE.enableRepeater = REPEATER_DISABLED;
  //configuration.TRANSMISSION_MODE.enableRepeater = REPEATER_ENABLED;

  configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED;
  // configuration.TRANSMISSION_MODE.enableLBT = LBT_ENABLED;

  // Ayarları KAYDET ve SAKLA
  ResponseStatus rs = FixajSS.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);
  c.close();
}

Pratik Röle Aç Kapa Uygulaması

Pratik Röle Aç Kapa Uygulaması

Merhaba Arkadaşlar bu yazımızda arkadaşlardan çokça soru olarak gelen düğmeye bastığımızda uzaktaki Röle açılsın, elimizi çektiğimizde röle kapansın uygulaması yapacağız.

LoRa ile Röle Açma Kapama Uygulaması

Gerekli Malzemeler

Bu projede Lora Uzman setini kullandım, gerekli buton ve Röleyi siz kendinize uygun olanı seçebilirsiniz.

Kodlar

Kumanda Kısmının kodu

#include "LoRa_E22.h"
// #include "LoRa_E32.h" // E32 modülleri için bunu aktif et
#include <SoftwareSerial.h>


SoftwareSerial mySerial(3, 4); //PCB versiyon 4.3 den sonra bu şekilde olmalı
LoRa_E22 E22(&mySerial);
// LoRa_E32 E32(&mySerial); // E32 modülleri için bunu aktif et

#define M0 7
#define M1 6
#define buton1 2
#define buton2 3


struct Signal {
  char sifre[15] = "Fixaj.com";
  char konum[15];
  byte btn1;
  byte btn2;
} data;

unsigned long kanalBekleme_sure = 0;
int kanalBekleme_bekleme = 2000;

bool mesajGonder = false;
bool butonDurumu = false;
bool butonDurumu2 = false;

void setup() {
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);

  Serial.begin(9600);
  E22.begin();

  pinMode(buton1, INPUT_PULLUP);
  pinMode(buton2, INPUT_PULLUP);

  delay(500);
  Serial.println("başlıyoruz.. Fixaj.com");
}

void loop() {
  if (!digitalRead(buton1)) {
    data.btn1 = 1;
    mesajGonder = true;
    butonDurumu = true; 

  } else if (butonDurumu && digitalRead(buton1)) {
    data.btn1 = 0;
    mesajGonder = true;
    butonDurumu = false;
    kanalBekleme_sure = 0;
  }

  if (!digitalRead(buton2)) {
    data.btn2 = 1;
    mesajGonder = true;
    butonDurumu2 = true; 

  } else if (butonDurumu2 && digitalRead(buton2)) {
    data.btn2 = 0;
    mesajGonder = true;
    butonDurumu2 = false;
    kanalBekleme_sure = 0;
  }

  if (millis() > kanalBekleme_sure + kanalBekleme_bekleme && mesajGonder) {
    kanalBekleme_sure = millis();
    ResponseStatus rs = E22.sendFixedMessage(0, 1, 63, &data, sizeof(Signal));
    Serial.print("buton 2 : ");
    Serial.print(data.btn2);
    Serial.print(", ");
    Serial.println(rs.getResponseDescription());
    mesajGonder = false;
  }
}

Röle Kısmının Kodu

#include "LoRa_E22.h"
#include <SoftwareSerial.h>

#define M0 7
#define M1 6
#define role1 2
#define role2 4

SoftwareSerial mySerial(3, 4); //PCB versiyon 4.3 den sonra bu şekilde olmalı
LoRa_E22 E22(&mySerial);

unsigned long kanalBekleme_sure = 0;
int kanalBekleme_bekleme = 5000;

struct Signal {
  char sifre[15] = "Fixaj.com";
  char konum[15];
  byte btn1;
  byte btn2;
} data;

void setup() {
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);

  Serial.begin(9600);
  E22.begin();

  pinMode(role1, OUTPUT);
  pinMode(role2, OUTPUT);

  delay(500);
  Serial.println("başlıyoruz.. Fixaj.com");
}

void loop() {
  while (E22.available() > 1) {
    // Gelen mesaj okunuyor
    ResponseStructContainer rsc = E22.receiveMessage(sizeof(Signal));
    struct Signal data = *(Signal*)rsc.data;
    rsc.close();

    if (strcmp(data.sifre, "Fixaj.com") == 0) {
      Serial.println("şifre doğru");
      kanalBekleme_sure = millis();

      if (data.btn1 == 1) {

        Serial.println("Röle 1 AÇ");
        digitalWrite(role1, HIGH);
        delay(30);

      } else if (data.btn1 == 0) {

        Serial.println("Röle 1 KAPAT");
        digitalWrite(role1, LOW);
        delay(30);
      }

      if (data.btn2 == 1) {

        Serial.println("Röle 2 AÇ");
        digitalWrite(role2, HIGH);
        delay(30);

      } else {

        Serial.println("Röle 2 KAPAT");
        digitalWrite(role2, LOW);
        delay(30);
      }
    }
  }
    if (millis() > kanalBekleme_sure + kanalBekleme_bekleme) {
      digitalWrite(role1, LOW);
      digitalWrite(role2, LOW);
    }
  
}

Lora Parametre Ayar Ekranı

Bu ayarlar Rölenin takılı olduğu PCB deki LoRa modülünün Parametre Ayarlarıdır.

Kumanda kısmı çok önemli değildir, farklı bir adres vererek diğer ayarları aynı yapabilirsiniz.

Sonuç

Detaylı anlatım ve sonuçta nasıl çalıştığını görmek için youtube videosunu izleyin

Multi Lora Nodes

Multi Lora Nodes

Merhaba Arkadaşlar bu yazımızda merak edilen çoklu lora ağı üstünde bir çalışma yapacağız. İngilizcesi aslında daha kulağa hoş geliyor Multi Lora Nodes, bu konu hakkında ben sağlıklı bir kaynak bulamadım internette, hatta üretici firmaya sorduğumda bana farklı lora modüllerini önerdiler. Ancak ben bunu E22 ve E32 lora modülleri nasıl yapabiliriz onu araştırdım.

Firma buna Yıldız bağlantı şekli diyor. Star network, burada bir kaç anahtar kelime var “Data Collision” , “multi slave & single master” “simultaneously” internette bu konular hakkında araştırma yapabilirsiniz.

Hatta şurada firmanın E70 dtu modelleri ile yaptığı bir videoda var: https://www.youtube.com/watch?v=pFL-_SaLFrA

Ancak ben bunu daha uygun fiyatlı olan E22 ve E32 modelleri ile yapmaya çalıştım. Sonuç olarak 750ms altında bir tarama hızına ulaştım. hatta bulduğum yöntem ile bu süreyi çok çok daha kısa sürelere çekebilirsiniz.

Multi Lora

Kullandığım Malzemeler

3in1 Shield NANO
3in1 Shield NANO

Video

Kodlar

Nodes, yanı bizim ölçüm noktaları, ben burada kabaca bir GPS verisi ve gerilim değeri gönderiyorum cihaz id si ile birlikte.

#include "LoRa_E22.h"
#include <SoftwareSerial.h>

SoftwareSerial mySerial(3, 4); //PCB versiyon 4.3 den sonra bu şekilde olmalı
LoRa_E22 E22(&mySerial);

#define M0 7
#define M1 6

struct Signal {
  char type[10] = "Urfa63";
  byte id;
  byte lat[6];
  byte lng[6];
  byte volt[6];
} data;



void setup() {
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);

  Serial.begin(9600);
  E22.begin();
  delay(500);
}

void loop() {

  while (E22.available() > 1) {

    // Gelen mesaj okunuyor
    ResponseStructContainer rsc = E22.receiveMessage(sizeof(Signal));
    struct Signal data = *(Signal*)rsc.data;
    Serial.print("Gelen Messaj: ");
    Serial.println(data.type);
    rsc.close();


    data.id = 7;
    *(float*)(data.lat) = 26.123;
    *(float*)(data.lng) = 36.312;
    *(float*)(data.volt) = 4.212;


    ResponseStatus rs = E22.sendFixedMessage(0, 4, 23, &data, sizeof(Signal));
    Serial.println(rs.getResponseDescription());
  }
}

Tarama noktası ben buna verici TX noktası diyeceğim

#include "LoRa_E22.h"
#include <SoftwareSerial.h>

SoftwareSerial mySerial(3, 4); //PCB versiyon 4.3 den sonra bu şekilde olmalı
LoRa_E22 E22(&mySerial);

#define M0 7
#define M1 6

byte SensorSays = 5;
const byte Frekanslar[] = { 1, 2, 3,6,7 };
byte mevcutLora = 0;

struct Signal {
  char type[10] = "Urfa63";
  byte id;
  byte lat[6];
  byte lng[6];
  byte volt[6];
} data;



void setup() {
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);

  Serial.begin(9600);
  E22.begin();
  delay(500);
}

void loop() { 

    for (mevcutLora = 0; mevcutLora < SensorSays; mevcutLora++) {
      int deger1 = mevcutLora + 1;
      String text1 = ". Sensörün değerleri alınıyor...";
      String sum1 = deger1 + text1;
      Serial.println(sum1);

      ResponseStatus rs = E22.sendFixedMessage(0, Frekanslar[mevcutLora], 23, &data, sizeof(Signal));
      Serial.println(rs.getResponseDescription());

      delay(750);
    }   
}

Alıcı yani Master, Esas noktamız burası

#include "LoRa_E22.h"
#include <SoftwareSerial.h>

SoftwareSerial mySerial(3,4); //PCB versiyon 4.3 den sonra bu şekilde olmalı
LoRa_E22 E22(&mySerial);

long a = 0;

#define M0 7
#define M1 6

struct Signal {
  char type[10];
  byte id;
  byte lat[6];
  byte lng[6];
  byte volt[6];
} data;



void setup() {
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);

  Serial.begin(9600);
  E22.begin();
  delay(500);
}

void loop() {

  while (E22.available() > 1) {
    a = millis();
    // Gelen mesaj okunuyor
    ResponseStructContainer rsc = E22.receiveMessage(sizeof(Signal));
    struct Signal data = *(Signal*)rsc.data;
    rsc.close();

    Serial.print("Gelen Messaj: ");
    Serial.print(data.type);
    Serial.print(" ,id: ");
    Serial.print(data.id);
    Serial.print(", Lat: ");
    Serial.print(*(float*)data.lat, 6);
    Serial.print(", lng: ");
    Serial.print(*(float*)data.lng, 6);
    Serial.print(", volt: ");
    Serial.print(*(float*)data.volt, 4);

    Serial.print(" ,işlem süresi: ");
    Serial.println(millis() - a);
  }
}

Parametre Ayarları

Lora modüllerinin Parametre Ayar ekranı

Packet Size” küçülterek işlemlerin hızlanmasını sağlıyorum ama çok etkili değil bilginiz olsun. “Tran mode” fixed yapmayı unutmayın. Adresleri de 1,2,3,4,5,6,7 şeklinde yaptım. 4 genel alıcı Master, 5 genel verici TX, 1,2,3 ve 6,7 ise bizim ölçüm noktalarının adresleri. Bütün lora modüllerinde sadece adresler farklı bunun dışındaki ayarların birebir aynı olması lazım.

Devre Şeması

3in1 PCB ile E32 Lora Kullanımı

3in1 PCB NANO ile E32 Lora Modülü Kullanımı

Bu yazımızda yeni başlayan arkadaşlarda sıkca gelen 3in1 PCB yi nasıl kullanırız, haberleştiremiyoruz soruları için hazır kodları ekledim.

Bildiğiniz üzeri 3in1 PCB ler USB Stick gibi kullanılıp lora modüllerine parametre ayarları verebildiği için ve Uzman arkadaşlarında uyku modu ve diğer modlerı kullanmak istemesinden ötürü M0 ve M1 pinleri direk GND ye bağlamadım PCB üstünde. M0 ve M1 pinlerini 3in1 PCB NANO üstünde 6 ve 7 nolu pinlere bağladım. Siz normal haberleştirme yaparken bu pinleri LOW moda yani GND ye çekmeniz gerekmektedir.

Bebek Odası Uygulaması Kodlarının 3in1 PCB nano ya uyarlanmış hali.

Merkeze takılacak Loranın PArametre Ayarları

MERKEZ NOKTA KODLARI

#include "LoRa_E32.h"
#include <SoftwareSerial.h>

SoftwareSerial mySerial(3, 4); //PCB versiyon 4.3 den sonra bu şekilde olmalı

/*
   Pinler     Arduino Nano    Lora E32 433T20d
                  11                3
                  10                4
*/

LoRa_E32 e32ttl(&mySerial);
#define M0 7
#define M1 6

struct Signal {
  char type[15] = "Fixaj.com";
  byte temp[4];
} data;


void setup() {
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);
  Serial.begin(9600);
  e32ttl.begin();
  delay(500);
}

void loop() {

  ResponseStatus rs = e32ttl.sendFixedMessage(0, 44, 23, &data, sizeof(Signal));
  Serial.println(rs.getResponseDescription());

  delay(2000);

  while (e32ttl.available()  > 1) {
    ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(Signal));
    struct Signal data = *(Signal*) rsc.data;
    Serial.print("Yer: ");
    Serial.println(data.type);
    Serial.print("Ortam Sıcaklığı: ");
    Serial.println(*(float*)(data.temp));
    rsc.close();
  }
}
Sensor noktasına takılacak loranın parametre ayarları

SENSOR NOKTASININ KODLARI

#include "LoRa_E32.h"
#include <SoftwareSerial.h>
SoftwareSerial mySerial(3, 4); //PCB versiyon 4.3 den sonra bu şekilde olmalı
LoRa_E32 e32ttl(&mySerial);

#define M0 7
#define M1 6

struct Signal {
  char type[15];
  byte temp[4];
} data;

void setup() {
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);
  Serial.begin(9600);
  e32ttl.begin();
  delay(500);
}

void loop() {
  while (e32ttl.available()  > 1) {

    // Gelen mesaj okunuyor
    ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(Signal));
    struct Signal data = *(Signal*) rsc.data;
    Serial.print("Gelen Messaj: ");
    Serial.println(data.type);
    rsc.close();

    //Gönderilecek paket veri hazırlanıyor
    struct Signal  {
      char type[15] = "Bebek Odası";
      byte temp[4];
    } data2;

    *(float*)(data2.temp) = 19.2;


    ResponseStatus rs = e32ttl.sendFixedMessage(0, 63, 23, &data2, sizeof(Signal));
    Serial.println(rs.getResponseDescription());

  }

}