Merhaba. E32 verici modülü esp32’ye alıcı modülü nano 3in1 pcb’ye taktık. Barometre gibi modülleri vericide kullanınca kütüphaneli kodlar çalışıyor ve haberleşme sağlanıyor ama neo7m gps ile haberleşme sağlayamıyoruz. Verici portunda veri okunuyor ancak iletişim sağlanmıyor. Esp32’de listen komutu hata verdiği için sitedeki gps örneğinden yararlanamadık, HardwareSerial kütüphanesi listen komutunu çalıştırmadı. Gps’i ve Lora’yı esp’nin farklı tx rx girişlerine bağladık listen komutuna ihtiyacımız kalmayabileceğini düşünerek fakat işe yaramadı. Parametre ayarları, bağlantı şemaları ve kodları ekledim. Teşekkürler.
şipariş no: 208245222215
[apcode language="php"]
#include "LoRa_E32.h"<br />#include <SoftwareSerial.h><br />#define M0 7 <br />#define M1 6<br /> /*<br /> Pinler Arduino Nano Lora E32 433T20d<br /> 11 3<br /> 10 4<br />*/<br />SoftwareSerial mySerial(10,11);<br />LoRa_E32 e32ttl(&mySerial);<br /> struct Signal {<br /> byte irtifa;<br /> byte random;<br /> byte pitch;<br /> byte roll;<br /> byte yaw;<br />} data;<br /> void setup() {<br /> pinMode(M0,OUTPUT); <br /> pinMode(M1,OUTPUT);<br /> digitalWrite(M0,0);<br /> digitalWrite(M1,0);<br /> Serial.begin(9600);<br /> e32ttl.begin();<br /> delay(500);<br />}<br /> void loop() {<br /> ResponseStatus rs = e32ttl.sendFixedMessage(0, 2, 23, &data, sizeof(Signal)); <br /> delay(2000);<br /> while (e32ttl.available() > 1) { <br /> ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(Signal));<br /> struct Signal data = *(Signal*) rsc.data;<br /> Serial.print(*(float*)(data.irtifa));<br /> Serial.print("/");<br /> rsc.close();<br /> }<br />}
#include <Wire.h><br /> #include <TinyGPS++.h><br /> #include <HardwareSerial.h><br />#include "LoRa_E32.h"<br />#include "Wire.h"<br />#define M0 32<br />#define M1 33<br /> #define RXD2 16<br />#define TXD2 17<br /> long timer=0;<br /> // OLED display height, in pixels<br /> //On ESP32: GPIO-21(SDA), GPIO-22(SCL)<br /> TinyGPSPlus gps;<br /> HardwareSerial neogps(2);<br />HardwareSerial loraport(1);<br /> LoRa_E32 e32ttl(RX, TX, &loraport, UART_BPS_RATE_9600);<br /> struct Signal {<br /> byte irtifa[10];<br /> byte pitch[10];<br /> byte roll[10];<br /> byte yaw[10];<br />} data;<br /> void setup() {<br /> Serial.begin(9600);<br /> //Begin serial communication Arduino IDE (Serial Monitor)<br /> //Begin serial communication Neo6mGPS<br /> neogps.begin(9600, SERIAL_8N1, RXD2, TXD2);<br /> e32ttl.begin();<br /> delay(500);<br /> // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally<br /> }<br /> void loop() {<br /> if (neogps.available())<br /> {<br /> if (gps.encode(neogps.read()))<br /> {<br /> if (millis() - timer > 500) {<br /> displayInfo();<br /> displayLORA();<br /> timer = millis();<br />}}<br /> if (millis() > 5000 && gps.charsProcessed() < 10)<br /> {<br /> Serial.println(F("No GPS detected: check wiring."));<br /> while(true);<br /> }<br /> }<br />} <br /> void displayLORA(){<br /> * (float *)(data.irtifa) = gps.altitude.meters();<br /> ResponseStatus rs = e32ttl.sendFixedMessage(0, 1, 7, &data, sizeof(Signal));<br /> Serial.println(rs.getResponseDescription()); <br />ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(Signal));<br /> }<br /> void displayInfo()<br />{<br /> Serial.print(F("Location: "));<br /> if (gps.location.isValid())<br /> {<br /> Serial.print(gps.location.lat(), 6);<br /> Serial.print(F(","));<br /> Serial.print(gps.location.lng(), 6);<br /> }<br /> else<br /> {<br /> Serial.print(F("INVALID"));<br /> }<br /> Serial.print(F(" altitude: "));<br /> if (gps.location.isValid()) {<br /> Serial.print(gps.altitude.meters(), 2);<br /> }<br /> else<br /> {<br /> Serial.print(F("INVALID"));<br /> }<br /> Serial.print(F(" Date/Time: "));<br /> if (gps.date.isValid())<br /> {<br /> Serial.print(gps.date.month());<br /> Serial.print(F("/"));<br /> Serial.print(gps.date.day());<br /> Serial.print(F("/"));<br /> Serial.print(gps.date.year());<br /> }<br /> else<br /> {<br /> Serial.print(F("INVALID"));<br /> }<br /> Serial.print(F(" "));<br /> if (gps.time.isValid())<br /> {<br /> if (gps.time.hour() < 10) Serial.print(F("0"));<br /> Serial.print(gps.time.hour());<br /> Serial.print(F(":"));<br /> if (gps.time.minute() < 10) Serial.print(F("0"));<br /> Serial.print(gps.time.minute());<br /> Serial.print(F(":"));<br /> if (gps.time.second() < 10) Serial.print(F("0"));<br /> Serial.print(gps.time.second());<br /> Serial.print(F("."));<br /> if (gps.time.centisecond() < 10) Serial.print(F("0"));<br /> Serial.print(gps.time.centisecond());<br /> }<br /> else<br /> {<br /> Serial.print(F("INVALID"));<br /> }<br /> Serial.println();<br /> }
[/apcode]
Kodu tam kopyalamamissiniz. Rx ve tx tanimini goremedim esp de. Oraya dikkat edin. Devre semanizin da resmininatin. Pcb varmi? 3in1 shield?
Cevabınız için teşekkürler. Videodaki koddan yararlanarak ufak değişiklikler yaparak aşağıdaki kodları kullandık fakat haberleşme sağlayamadık. [apcode language="php"]
//alıcı #include "LoRa_E32.h" #include <SoftwareSerial.h> SoftwareSerial mySerial (10,11); LoRa_E32 e32ttl(&mySerial); float lat,lng,irtifa; #define M0 7 #define M1 6 struct Signal { char type [15] = "selam"; byte lat [10]; byte lng [10]; byte irtifa [10]; } data; void setup() { pinMode(M0,OUTPUT); pinMode(M1,OUTPUT); digitalWrite(M0,LOW); digitalWrite(M1,0); Serial.begin(115200); e32ttl.begin(); delay(500); } void loop() { while (e32ttl.available() > 1) { ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(Signal)); struct Signal data = *(Signal*) rsc.data; Serial.print(F("Gelen mesaj lat: ")); Serial.print(*(float*)(data.lat),6); Serial.print(", Lng: "); Serial.print(*(float*)(data.lng),10); Serial.print(", irtifa: "); Serial.print(*(float*)(data.irtifa),4); rsc.close(); } }
//verici #include <TinyGPSPlus.h> #include "LoRa_E32.h" #include <HardwareSerial.h> #define M0 32 #define M1 33 HardwareSerial vericiSerial (1); LoRa_E32 e32ttl (TX,RX,&vericiSerial, UART_BPS_RATE_9600); static const uint32_t GPSBaud = 9600; unsigned long kanalBekleme_sure = 0; int kanalBekleme_bekleme = 5000; unsigned long kanalBekleme_sure2 = 0; int kanalBekleme_bekleme2 = 2000; TinyGPSPlus gps; struct Signal { char type [15] = "selam"; byte lat [10]; byte lng [10]; byte irtifa [10]; }data; void setup() { pinMode(M0,OUTPUT); pinMode(M1,OUTPUT); digitalWrite(M0,LOW); digitalWrite(M1,0); Serial.begin(115200); Serial2.begin(GPSBaud); e32ttl.begin(); delay (500); } void loop() { while (Serial2.available()>0){ kanalBekleme_sure = millis(); if (gps.encode (Serial2.read())) displayInfo(); } if (millis() > kanalBekleme_sure + kanalBekleme_bekleme) { Serial.println (F("No GPS detected: check wiring.")); while (true); } } void displayInfo() { Serial.print (F("location:")); // if (gps.location.isValid()) // { Serial.print(gps.location.lat(),6); Serial.print(F(",")); Serial.print(gps.location.lng(),6); Serial.print(F(",")); Serial.print(F("irtifa:")); Serial.print(gps.altitude.meters()); *(float*)(data.lat) = gps.location.lat(); *(float*)(data.lng) = gps.location.lng(); *(float*)(data.irtifa) = gps.altitude.meters(); if (millis()> kanalBekleme_sure2 + kanalBekleme_bekleme2) { kanalBekleme_sure2 = millis(); ResponseStatus rs = e32ttl.sendFixedMessage(0, 3, 23, &data, sizeof(Signal)); Serial.println(rs.getResponseDescription()); }
[/apcode]
Hatta bu video tam sizin proje gecende yapmistik. Yine 3in1 esp pcb kullandim. Bi fark versiyonu 1 den sonra rx pinini 25 olark degistim. Yeni pcb alirsaniz. Bu videodaki kodda rx i 25 olarak degismeniz yeterlidir
Mrb, soruyu sorarken, ben soylemeden gerekli bilgileri paylastiginiz icin teşekkürler gelelim sorunuza.
Esp32 de 3 tane Hardware serial oldugunicin listen a gerek yoktur. Hangi pcb kullniyorsunuz bilmiyorum ama 3in1 esp kullanmanizi tavsiye ederim. Bu pcb de serial 2 yi direk sizin kullanmizia biraktigim icin ordan gps e baglanabilirsiniz.
3in1 esp pcb nasil kullancaginizi bu videodan bakabilirsiniz. https://youtu.be/pQaW4Ns63q0