thinkspeak

LoRa dan Gelen Veriyi İnternete Gönderme

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

2 adet hazır PCBPCB Satın Almak İçin Tıklaynız ->

2 adet e32 433T20d e32 tll 1wSatın Almak için Tıklayınız ->

1adet HDC1080 Sıcaklık ve Nem Sensörü Satın Almak İçin Tıklayın->

Arduino 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.

Burası Bizim Merkez noktamız internete buradan çıkış vereceğiz
Sıcaklık ve nemi ölçtüğümüz Uç noktamız. burada bir değişiklik yapmadı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);
  }
}

1.5 Sonuç

ThinkSpeak verilerin grafik hali