herkse merhaba. 5 loradan ısı nem verisi almak istiyorum. 1 alıcı dan veri almak tamam. alıcı kısmında çoklu loradan veri almayı başaramadım. hangi loradan veri geldiğini alıcıda nasıl ayırt edeceğim. esp32 kullanıyorum bununla ilgili bir kod varsa lütfen paylaşırmısınız..
////VERİCİ
#include "LoRa_E22.h" #include <HardwareSerial.h> #define M0 32 //3in1 PCB mizde pin 7 #define M1 33 //3in1 PCB mizde pin 6 #define RX 25 //3in1 PCB mizde pin RX #define TX 35 //3in1 PCB mizde pin TX #include <Wire.h> #include "ClosedCube_HDC1080.h" ClosedCube_HDC1080 hdc1080; HardwareSerial fixajSerial(1); //Serial biri seçiyoruz. LoRa_E22 e22(TX, RX, &fixajSerial, UART_BPS_RATE_9600); struct Signal { char type[80]= "CiHAZ ODASI" ; byte temp[4]; byte nem[4]; byte id[1]; } data; void setup() { pinMode(M0, OUTPUT); pinMode(M1, OUTPUT); digitalWrite(M0, LOW); digitalWrite(M1, LOW); Serial.begin(9600); hdc1080.begin(0x40); delay(500); e22.begin(); delay(500); } void loop() { delay(1000); *(float*)(data.temp) = hdc1080.readTemperature(); *(float*)(data.nem) = hdc1080.readHumidity(); *(float*)(data.id) = 02; ResponseStatus rs = e22.sendFixedMessage(0, 2, 18, &data, sizeof(Signal)); Serial.println(rs.getResponseDescription()); Serial.println(*(float*)(data.temp)); Serial.println(*(float*)(data.nem)); Serial.println(*(float*)(data.id)); }
//// ALICI #include "LoRa_E22.h" #include <SoftwareSerial.h> //SoftwareSerial mySerial(A0, A1); SoftwareSerial fixSerial(10, 11); // RX, TX /* Pinler Arduino MEGA Lora E32 433T20d A8 3 A9 4 */ #define DS3231_ADDRESS 0x68 #define M0 7 #define M1 6 LoRa_E22 e22(&fixSerial); #include <Wire.h> #include "TWILiquidCrystal.h" //#include <LiquidCrystal_I2C.h> uint8_t m_addr = 55; LiquidCrystal lcd(m_addr); int sayici=0; byte zero = 0x00; //****************************************************** byte karakter0[8] = { 0x00, 0x0E, 0x11, 0x10, 0x11, 0x0E, 0x04, 0x00 }; // ç byte karakter2[8] = { 0x0C, 0x12, 0x12, 0x0C, 0x00, 0x00, 0x00, 0x00 }; // Derece byte karakter1[8] = { 0x0A, 0x00, 0x0E, 0x11, 0x11, 0x11, 0x0E, 0x00 }; // ö byte karakter3[8] = { 0x1F, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x1F }; // kare byte karakter4[8] = { 0xE, 0x11, 0x10, 0x10, 0x10, 0x11, 0xE, 0x4 }; // Ç byte karakter5[8] = { 0xE,0x0,0xE,0x11,0xF,0x1,0xE,0x0 }; // ğ byte karakter6[8] = { 0x0,0x0,0xC,0x4,0x4,0x4,0xE,0x0}; // ı byte karakter7[8] = { 0xE,0x0,0xF,0x10,0x13,0x11,0xF,0x0 }; // Ğ byte karakter8[8] = { 0xF,0x10,0x10,0xE,0x1,0x1,0x1E,0x4 }; // Ş byte karakter9[8] = {0xE,0xE,0x4,0x5,0xE,0x14,0x6,0x1B }; //adam //******************************************************** //LiquidCrystal_I2C lcd(0x25,20,4); struct Signal { char type[80]; byte temp[4]; byte nem[4]; byte id[4]; } data; void setup() { Wire.begin(); pinMode(M0, OUTPUT); pinMode(M1, OUTPUT); digitalWrite(M0, LOW); digitalWrite(M1, LOW); Serial.begin(9600); e22.begin(); delay(800); lcd.begin(40, 4); lcd.clear(); lcd.createChar(0, karakter0); lcd.createChar(2, karakter2); lcd.createChar(1, karakter1); lcd.createChar(3, karakter3); lcd.createChar(4, karakter4); lcd.createChar(5, karakter5); lcd.createChar(6, karakter6); lcd.createChar(7, karakter7); lcd.createChar(8, karakter8); lcd.createChar(9, karakter9); //lcd.backlight(); lcd.setContrast(5); //lcd.saveContrast(20); lcd.setBrightness(250); //lcd.saveBrightness(250); lcd.setCursor(10, 1); lcd.println(" ISI TAKiP"); Serial.begin(9600); delay(1500); lcd.clear(); } void loop() { //atecihaz(); // mg2022(); // atedepo(); //kalibre(); //savdepo(); while (e22.available() > 1) { // Gelen mesaj okunuyor ResponseStructContainer rsc = e22.receiveMessage(sizeof(Signal)); struct Signal data = *(Signal*) rsc.data; delay(1000); Serial.println(*(float*)(data.id)); if (*(float*)(data.id)=1){ atecihaz(); } if (*(float*)(data.id)=2){ mg2022(); } if (*(float*)(data.id)==3) atedepo(); if (*(float*)(data.id)==4) kalibre(); if (*(float*)(data.id)==5) savdepo(); } } void atecihaz() { while (e22.available() > 1) { // Gelen mesaj okunuyor ResponseStructContainer rsc = e22.receiveMessage(sizeof(Signal)); struct Signal data = *(Signal*) rsc.data; lcd.setCursor(2,0); lcd.print("ATE"); if (*(float*)(data.temp) == 125.00){ lcd.setCursor(0,1); lcd.print("--.--"); lcd.write(byte(2));lcd.print("C"); } else lcd.setCursor(0,1); lcd.print(*(float*)(data.temp));lcd.write(byte(2));lcd.print("C"); lcd.setCursor(0,2); lcd.print("% "); lcd.print(*(float*)(data.nem)); Serial.println(*(float*)(data.temp)); Serial.println(*(float*)(data.nem)); Serial.flush(); rsc.close(); Serial.flush(); } } void mg2022() { while (e22.available() > 1) { // Gelen mesaj okunuyor ResponseStructContainer rsc = e22.receiveMessage(sizeof(Signal)); struct Signal data = *(Signal*) rsc.data; lcd.setCursor(8,0); // lcd.print("Yer: "); //lcd.setCursor(8,0); lcd.print("MG2022"); //Serial.print("Yer: "); //Serial.println(data.type); lcd.setCursor(8,1); //lcd.print("ISI: "); //lcd.setCursor(6,2); lcd.print(*(float*)(data.temp));lcd.write(byte(2));lcd.print("C"); lcd.setCursor(8,2); //lcd.print("NEM: "); //lcd.setCursor(6,3); lcd.print("% "); lcd.print(*(float*)(data.nem)); Serial.flush(); rsc.close(); Serial.flush(); } } void atedepo() { while (e22.available() > 1) { // Gelen mesaj okunuyor ResponseStructContainer rsc = e22.receiveMessage(sizeof(Signal)); struct Signal data = *(Signal*) rsc.data; lcd.setCursor(16,0); // lcd.print("Yer: "); //lcd.setCursor(8,0); lcd.print("ATE DEP"); //Serial.print("Yer: "); //Serial.println(data.type); lcd.setCursor(16,1); //lcd.print("ISI: "); //lcd.setCursor(6,2); lcd.print(*(float*)(data.temp));lcd.write(byte(2));lcd.print("C"); lcd.setCursor(16,2); //lcd.print("NEM: "); //lcd.setCursor(6,3); lcd.print("% "); lcd.print(*(float*)(data.nem)); Serial.flush(); rsc.close(); Serial.flush(); } } void kalibre() { while (e22.available() > 1) { // Gelen mesaj okunuyor ResponseStructContainer rsc = e22.receiveMessage(sizeof(Signal)); struct Signal data = *(Signal*) rsc.data; lcd.setCursor(24,0); // lcd.print("Yer: "); //lcd.setCursor(8,0); lcd.print("KALBRE"); //Serial.print("Yer: "); //Serial.println(data.type); lcd.setCursor(24,1); //lcd.print("ISI: "); //lcd.setCursor(6,2); lcd.print(*(float*)(data.temp));lcd.write(byte(2));lcd.print("C"); lcd.setCursor(24,2); //lcd.print("NEM: "); //lcd.setCursor(6,3); lcd.print("% "); lcd.print(*(float*)(data.nem)); Serial.flush(); rsc.close(); Serial.flush(); } } void savdepo() { while (e22.available() > 1) { // Gelen mesaj okunuyor ResponseStructContainer rsc = e22.receiveMessage(sizeof(Signal)); struct Signal data = *(Signal*) rsc.data; lcd.setCursor(32,0); // lcd.print("Yer: "); //lcd.setCursor(8,0); lcd.print("SAVS DEP"); //Serial.print("Yer: "); //Serial.println(data.type); lcd.setCursor(32,1); //lcd.print("ISI: "); //lcd.setCursor(6,2); lcd.print(*(float*)(data.temp));lcd.write(byte(2));lcd.print("C"); lcd.setCursor(32,2); //lcd.print("NEM: "); //lcd.setCursor(6,3); lcd.print("% "); lcd.print(*(float*)(data.nem)); Serial.flush(); rsc.close(); Serial.flush(); } }
özür dilerim yanlış anlaşıldım herhalde. ben 5 farklı noktaya değil 5 farklı noktadan veri almak istiyorum benim alıcı kısmında sorunum var. birde yanlışlıkla lora E22 yerine E32 satın almışım e22 ile e32 haberleşebilirmi. bir fak gördüm frekansla ilgili e22 de 868.125 oluyor e32 de 868.000.
sipariş numarasını paylaştığınız için teşekkürler.
5 farklı noktaya yollayacağınız veriyi bir array oluşturup sırayla çağırarak tarama usulu verileri alabilirsiniz. örnek uygulama şu https://fixaj.com/lora-modulunun-temelleri/
ayırt etmek için ise struct yapısına id diye bir değişken tanıplayıp her ısı ve sıcaklık verisini gönderen noktada oraya farklı bir ide yaz.
Sipariş Kodu : 206277526216
Sipariş Kodu : 207915751418