Çözüldü5.90K görüntülenmeArduinoarduino uno lora 30d LoRa Transceiver Lorawan
0

merhaba;  iki adet lorayı tarama yontemi ile veriyi alıyorum .her hangi bir sorun yok . Ancak arduino mega bir sure sonra donuyor bu yuzden watcdog timer kullanmak zorunda kalıyorum. sizde de donma sorunu oldumu .donma sorunu ne olabilir teşekkurler . aşagıya kodun ozetini paylaşıyorum.derlediğim zaman hata vermiyor.

#include "LoRa_E32.h"<br />#include <avr/wdt.h><br />#include <SoftwareSerial.h><br />SoftwareSerial mySerial(52, 51); // using Arduino mega<br />LoRa_E32 e32ttl(&mySerial);<br />void printParameters(struct Configuration configuration);<br />void printModuleInformation(struct ModuleInformation moduleInformation);<br /> void setup()<br />{<br />wdt_enable(WDTO_8S);<br />Serial.begin(9600);<br />delay(50);<br />Serial1.begin(9600);<br />delay(50);<br />e32ttl.begin();<br />delay(50);<br /> Serial.println("start!!!!!!!!!!!!");<br />  }<br /> struct Message {<br />char message[8];<br />byte temperature[4];<br />} ;<br />struct MessageHumidity {<br />char message[8];<br />byte humidity;<br />} ;<br />byte Sensor = 0;<br />int delayy = 3500;<br /> int times;<br />boolean message_coming;<br /> const byte Address[2] = {1, 3}; //1, 3 address of sensors to be read<br /> void loop() {<br />  for (Sensor = 0; Sensor < 2 ; Sensor++) {<br /> scanner();<br />}<br />}<br /> void scanner() {<br /> ResponseStatus rs = e32ttl.sendFixedMessage( 0 , Address[Sensor] , 6 , "up" ); // Sensor scanning//&message, sizeof(Message)<br />Serial.println(rs.getResponseDescription());<br /> message_coming = true;<br />times = millis();<br />wdt_reset();<br /> while (message_coming) {<br />  if (millis() > times + delayy) {<br /> times = millis();<br /> message_coming = false;<br /> }<br />else<br />{<br />  if (e32ttl.available() > 1) {<br />  char type[5];<br />ResponseContainer rs = e32ttl.receiveInitialMessage(sizeof(type));<br />String typeStr = rs.data;<br />if (typeStr == "TEMP")<br />{<br />ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(Message));<br />struct Message message = *(Message*) rsc.data;<br />  rsc.close();<br />}<br />else if (typeStr == "HUM")<br />{<br /> ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(MessageHumidity));<br />struct MessageHumidity message = *(MessageHumidity*) rsc.data;<br />rsc.close();<br /> } else {<br />Serial.println("Something goes wrong!!");<br />}<br />}<br />}<br />}<br />}

Soru yeni cevaplara kapalıdır.
Mehmet En iyi cevap olarak seçildi Haziran 6, 2021

#include “LoRa_E32.h”
#include
#include
SoftwareSerial mySerial(52, 51); // using Arduino mega
LoRa_E32 e32ttl(&mySerial);
void printParameters(struct Configuration configuration);
void printModuleInformation(struct ModuleInformation moduleInformation);

void setup()
{
wdt_enable(WDTO_8S);
Serial.begin(9600);
delay(50);
Serial1.begin(9600);
delay(50);
e32ttl.begin();
delay(50);

Serial.println(“start!!!!!!!!!!!!”);

}

struct Message {
char message[8];
byte temperature[4];
} ;
struct MessageHumidity {
char message[8];
byte humidity;
} ;
byte Sensor = 0;
int delayy = 3500;

int times;
boolean message_coming;

const byte Address[2] = {1, 3}; //1, 3 address of sensors to be read

void loop() {

for (Sensor = 0; Sensor times + delayy) {

times = millis();

message_coming = false;

}
else
{

if (e32ttl.available() > 1) {

char type[5];
ResponseContainer rs = e32ttl.receiveInitialMessage(sizeof(type));
String typeStr = rs.data;
if (typeStr == “TEMP”)
{
ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(Message));
struct Message message = *(Message*) rsc.data;

rsc.close();
}
else if (typeStr == “HUM”)
{

ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(MessageHumidity));
struct MessageHumidity message = *(MessageHumidity*) rsc.data;
rsc.close();

} else {
Serial.println(“Something goes wrong!!”);
}
}
}
}
}

0

Hocam yazdığınız kod düzeltilemeyecek kadar çok hata vardı. oturdum bende baştan yazdım. Lora ve başka modüller ile çalışılırken sıcaklık nem ölçümü şu şekilde yapılır.

// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain
 // REQUIRES the following Arduino libraries:
// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library
// - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor
 #include "DHT.h"
 #define DHTPIN 2     // Digital pin connected to the DHT sensor
// Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 --
// Pin 15 can work but DHT must be disconnected during program upload.
 // Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
 // Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 3 (on the right) of the sensor to GROUND (if your sensor has 3 pins)
// Connect pin 4 (on the right) of the sensor to GROUND and leave the pin 3 EMPTY (if your sensor has 4 pins)
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
 // Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors.  This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);
 #include "LoRa_E32.h"
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // Arduino RX <-- e32 TX, Arduino TX --> e32 RX
LoRa_E32 e32ttl(&mySerial);
 byte bumakina = 10;
byte nem_si [3];
byte sicaklik_si [4];
int i = 0;
int kalibr_nem = -2;
int kalibr_sicaklik = 0;
int bekleme = 2500;
unsigned long sure = 0;
float h, t, f;
 void setup() {
  Serial.begin(9600);
  delay(500);
  dht.begin();
  e32ttl.begin();
  delay(500);
  Serial.print("bu makina: ");
  Serial.println(bumakina);
   *(float*)(nem_si) = 0;
  *(float*)(sicaklik_si) = 0;
  Serial.println(F("Başlıyoruz..."));
}
  struct Mesaj {
  char Firma[10];
  char Birim[10];
  byte MakineNo[2];
  byte Nem[3];
  byte Sicaklik[4];
  int id;
};
 void loop() {
  if (millis() > sure + bekleme) {
    sure = millis();
    atesOlcumYap ();
  }
  while (e32ttl.available()  > 1) {
    ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(Mesaj));
    struct Mesaj mSSS = *(Mesaj*) rsc.data;
    Serial.print(F("Firma: "));
    Serial.println(mSSS.Firma);
    Serial.print(F("Makina No: "));
    Serial.print(F("ID: "));
    Serial.println(mSSS.id);
    rsc.close();
     if (*(int*)(mSSS.MakineNo) == bumakina) {
      Serial.println(F("mesaj var adres doğru"));
       i++;
      delay(200);
      struct Mesaj {
        char Firma[10] = "fixaj.com";
        char Birim[10] = "Depo";
        byte MakineNo[2];
        byte Nem[3];
        byte Sicaklik[4];
        int id;
      } mesaj;
       *(int*)(mesaj.MakineNo) = bumakina;
      *(float*)(mesaj.Nem) = *(float*)(nem_si);
      *(float*)(mesaj.Sicaklik) = *(float*)(sicaklik_si);
      mesaj.id = i;
       Serial.print(F("LORA nem ve sıcaklık: "));
      Serial.print(*(int*)(nem_si));
      Serial.println(F(" %"));
      Serial.print(*(float*)(sicaklik_si));
      Serial.println(F(" C"));
       ResponseStatus rs = e32ttl.sendFixedMessage(0, 44, 4, &mesaj, sizeof(Mesaj));
      Serial.println(rs.getResponseDescription());
    } else {
      Serial.println(F("yanlış adres"));
    }
     delay(1000);
  }
}
  void atesOlcumYap () {
  h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  f = dht.readTemperature(true);
   // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }
   // Compute heat index in Fahrenheit (the default)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);
   Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F("%  Temperature: "));
  Serial.print(t);
  Serial.print(F("°C "));
  Serial.print(f);
  Serial.print(F("°F  Heat index: "));
  Serial.print(hic);
  Serial.print(F("°C "));
  Serial.print(hif);
  Serial.println(F("°F"));
   *(float*)(nem_si) = h + kalibr_nem;
  *(float*)(sicaklik_si) = t + kalibr_sicaklik;
   Serial.print(*(float*)(nem_si));
  Serial.print(",\t");
  Serial.println(*(float*)(sicaklik_si));
}

DHT kütüphanesi olarak şu dht kütüphanesini kullandım. bu kütüphane adafruit sensor kütüphanesine ihtiyaç duyduğu için bununda kurulması gereklidir.

yukarıda yazdığım slave kısmı içindir. Geçmiş örneklerde yaptığımız “alıcı-verici” uygulamasında struct yapısını bu örnek ile aynı yaparak bu örneği kullanabilirsiniz. Dikkat edin burada makina No doğru olmadılır.

Mehmet Yeni yorum gönderildi Haziran 6, 2021

Bu arada siz dht ile çalıştığınız için bende dht ile yazdım. Yoksa Dht sensörünü ve üst modellerini kesinlikle tavsiye ETMİYORUM! Nem değeri yanıltıyor.

0

hocam MemoryFree.h bende bir ara denemiştim doğru çalışmıyordu. dilerseniz kodlarınızın son halini bana mail atın alıcı ve verici olarak ben de deneyeyim.

Mehmet Cevaplanan soru Mayıs 29, 2021
0

mehmet bey;yukarda yazdıgınız gonderme alma metodlarına gore duzenleme yaptım. struct yapısındaki hatayı da  duzelttim fakat yıne donma sorunu devam ediyor.

#include <MemoryFree.h> kutuphanesini  kullanarak  Serial.println(freeMemory(),DEC); fonksiyonu ile memory durumunu yazdırdım hafızada bir azalma goremedim yani hafızanın dolmasıyla ilgili değil bu donma problemi.

Sezgin Korkmaz Cevaplanan soru Mayıs 28, 2021
0

hocam ilk gördüğüm hata veri paketlerinin ucu açık kalması,

struct yapısını şu şekil oluşturun, altta data var dikkat edin.

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

veri yollarken şu şekilde yollayın

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

gelen mesajı da şu şekilde okuyun

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

sizin kodda bazen rsc close hiç çağrılmıyor.

birde aklınızda olsun string çok fazla sram yer. onun yerine sayı kullanın

if (typeStr == "HUM")

Mehmet Cevaplanan soru Mayıs 26, 2021
0

hocam kodu bana mail atar mısınız, derlenmiş halini bende kod hiç çalışmıyor.

Mehmet Yeni yorum gönderildi Mayıs 26, 2021