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