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);
  }
}