LoRa dan Gelen Veriyi İnternete Gönderme
LoRa dan Gelen Veriyi İnternete Gönderme yazımızda çok sıkı bir içerik sizlere hazırlıyor olmuş olacağız. Bu yazımızda HDC1080 Sıcaklık ve nem sensör kullanımını, Lora ile veri transferi, Ethernet shield kullanımı ve ThingSpeak alt yapısını kullanıp verileri internete göndermiş olacağız. Bence fixaj youtube kanalımızda ki en kapsamlı video bu olacak. Keyifle izleyip, işinize yarar bilgiler edinmeniz dileği ile..
1.1 Projenin Kapsamı
Bu projede HDC1080 sıcaklık ve nem sensörümüz ile sıcaklık ve nemi ölçüp, LoRa ile uzaktaki merkez alıcıya göndereceğiz oradan de verileri Thingspeak alt yapısını kullanarak internet ortamında saklayacağız. Ardında gelen anlık verilerin cep telefonu ve internet üzerinden raporlamasını birlikte yapacağız. Basit bir gateaway yapısı kurmuş olacağız.
1.2 Gerekli Malzemeler
HDC1080 Sıcaklık ve Nem Sensörü
Yüksek nemde mükemmel doğruluk sağlayan bu sıcaklık ve nem sensörü, hassas ölçümler için idealdir.
Ürün Sayfasına GitE22-900T22D 7km Menzilli 900MHz LoRa Modülü
SX1262 çipli, 900 MHz bandında çalışan ve 7km’ye kadar menzil sunan bir LoRa modülüdür.
Ürün Sayfasına GitLoRa 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 GitArduino Mega
Arduino Nano
Ethernet Shield
1.3 Devre Bağlantı Şeması
bu yazımızda bildiğiniz üzeri önceki yazımızın devamı olduğu için devre şemalarında değişiklik yapmadım sadece ethernet shield i Arduino Meganın üstüne taktım.
Burada dikkat etmemiz gereken 2 konu var. Birinci ethernet shield, diğeri Sinter malzeme. Bu konuyu video da detaylı anlatacağım.
1.4 Kodlar
Kullandığımız koda geçmeden biraz thingspeak kütüphanesini tanıyalım. Thingspeak matlab altyapısı üzerine kurulmuş. iot, internet of Things ürünlerinizi bağlayabileceğiniz Amazon AWS altyapısını kullanan, kullanımı kolay bir server hizmetidir.
Thinspeak için kullanacağımız kütüphaneye de şuradan ulaşabilirsiniz.
Kod olarak bir önceki videomuzda yayınladığımız koda ilave olarak thingspeak kütüphanesini ekliyoruz.
Verici Kodu
#include <Wire.h>
#include "ClosedCube_HDC1080.h"
ClosedCube_HDC1080 hdc1080;
#include "LoRa_E32.h"
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // Arduino RX <-- e32 TX, Arduino TX --> e32 RX
LoRa_E32 e32ttl(&mySerial);
struct Signal {
char type[15] = "Fixaj.com";
byte temp[4];
byte nem[4];
} data;
void setup()
{
Serial.begin(9600);
Serial.println("Fixaj.com Arduino Test");
// 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
e32ttl.begin();
delay(500);
}
void loop()
{
delay(3000);
*(float*)(data.temp) = hdc1080.readTemperature();
*(float*)(data.nem) = hdc1080.readHumidity();
ResponseStatus rs = e32ttl.sendFixedMessage(0, 63, 23, &data, sizeof(Signal));
Serial.println(rs.getResponseDescription());
Serial.println(*(float*)(data.temp));
Serial.println(*(float*)(data.nem));
}
Merkez Noktamız İnternete veri göndereceğim yer. Basit Gateaway
#include "LoRa_E32.h"
#include <SoftwareSerial.h>
SoftwareSerial mySerial(A8, A9);
/*
Pinler Arduino Nano Lora E32 433T20d
11 3
10 4
*/
#include <Ethernet.h>
#include "secrets.h"
#include <SPI.h>
#include "ThingSpeak.h" // always include thingspeak header file after other header files and custom macros
byte mac[] = SECRET_MAC;
// Set the static IP address to use if the DHCP fails to assign
IPAddress ip(192, 168, 44, 177);
IPAddress myDns(192, 168, 0, 1);
EthernetClient client;
unsigned long myChannelNumber = SECRET_CH_ID;
const char * myWriteAPIKey = SECRET_WRITE_APIKEY;
float sicaklik = 0;
float nem = 0;
LoRa_E32 e32ttl(&mySerial);
struct Signal {
char type[15] = "Fixaj.com";
byte temp[4];
byte nem[4];
} data;
void setup() {
Serial.begin(9600);
delay(500);
e32ttl.begin();
delay(500);
pinMode(4, OUTPUT);
digitalWrite(4, HIGH);
Ethernet.init(10);
Serial.println("Initialize Ethernet with DHCP:");
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
// Check for Ethernet hardware present
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :(");
while (true) {
delay(1); // do nothing, no point running without Ethernet hardware
}
}
if (Ethernet.linkStatus() == LinkOFF) {
Serial.println("Ethernet cable is not connected.");
}
// try to congifure using IP address instead of DHCP:
Ethernet.begin(mac, ip, myDns);
} else {
Serial.print(" DHCP assigned IP ");
Serial.println(Ethernet.localIP());
}
// give the Ethernet shield a second to initialize:
delay(1000);
ThingSpeak.begin(client); // Initialize ThingSpeak
}
void loop() {
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));
Serial.print("Ortam Nemi: ");
Serial.println(*(float*)(data.nem));
rsc.close();
sicaklik = *(float*)(data.temp);
nem = *(float*)(data.nem);
//UÇMAYA BAŞLIYORUZ..
ThingSpeak.setField(1, sicaklik);
ThingSpeak.setField(2, nem);
// write to the ThingSpeak channel
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (x == 200) {
Serial.println("Channel update successful.");
}
else {
Serial.println("Problem updating channel. HTTP error code " + String(x));
}
delay(20000);
}
}