Site icon Renzo Mischianti

Receiving corrupt data from E32 ttl 100 modules

Hello Renzo, I have two identical E32 ttl 100 modules running on two teensys. (one Teensy 4.0 and one 3.5). Communicating with the E32 modules works perfectly. I can write settings(parameters) to and read the settings from the E32 modules. When it comes to transmitting to other e32 modules on the other hand.., I get what looks like corrupt or incomplete data packets on the receiving end. example below: TQ ␅KZסe␋�f␖�TQ 0.00 Zסe␋�f␖�TQ TQ ␅KZסe␋�f␖�TQ 0.00 Zסe␋�f␖�TQ I have tried various solutions. I tried your library, KrisKasprzak's library, I tried writing my own one and using the SerialTransfer library with it to send and receive structs over uart but all to the same conclusion, corrupted incoming data. I have even tried just sending a single char but ended up receiving three bytes, none of which equalled the char I sent. I used your example code with your library and the output above is what I see. Below is my transmitting code on my Teensy 3.5 M0 = 24 M1 = 25 TXD = 26 <--4.7k--> 3.3v RXD = 27 <--4.7k--> 3.3v AUX = 35
c++

#define HWSERIAL1 Serial1
LoRa_E32 dataLink1(&HWSERIAL1, AUX_PIN, M0_PIN, M1_PIN);

void setup() {

  Serial.begin(9600);

  HWSERIAL1.setRX(RXD_PIN);
  HWSERIAL1.setTX(TXD_PIN);
  HWSERIAL1.begin(9600);

  dataLink1.begin();
	// After set configuration comment set M0 and M1 to low
	// and reboot if you directly set HIGH M0 and M1 to program
	ResponseStructContainer c;
	c = dataLink1.getConfiguration();
	Configuration configuration = *(Configuration*) c.data;
	configuration.ADDL = 0;
	configuration.ADDH = 5;
	configuration.CHAN = 4;
	configuration.OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION;
	dataLink1.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);
	c.close();
}

struct Message {
    char type[5];
    char message[8];
    int temperature;
} message;

int i = 0;

void loop() {

  delay(500);
	i++;
	struct Message {
	    char type[5] = "TEMP";
	    char message[8] = "Kitchen";
	    byte temperature[4];
	} message;

	*(float*)(message.temperature) = 19.2;

	ResponseStatus rs = dataLink1.sendMessage(&message, sizeof(Message));
	Serial.println(rs.getResponseDescription());
  
}

And this is my receiving code:
c++

#define HWSERIAL1 Serial1
LoRa_E32 dataLink1(&HWSERIAL1, AUX_PIN, M0_PIN, M1_PIN);

void setup() {

  Serial.begin(9600);

  HWSERIAL1.setRX(RXD_PIN);
  HWSERIAL1.setTX(TXD_PIN);
  HWSERIAL1.begin(9600);

  dataLink1.begin();
	// After set configuration comment set M0 and M1 to low
	// and reboot if you directly set HIGH M0 and M1 to program
	ResponseStructContainer c;
	c = dataLink1.getConfiguration();
	Configuration configuration = *(Configuration*) c.data;
	configuration.ADDL = 0;
	configuration.ADDH = 5;
	configuration.CHAN = 4;
	configuration.OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION;
	dataLink1.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);
	c.close();
}

struct Message {
    char type[5];
    char message[8];
    byte temperature[4];
} message;

int i = 0;

void loop() {

  if (dataLink1.available()  > 1){

		ResponseStructContainer rsc = dataLink1.receiveMessage(sizeof(Message));
		struct Message message = *(Message*) rsc.data;
		Serial.println(message.type);

		Serial.println(*(float*)(message.temperature));
		Serial.println(message.message);
//		free(rsc.data);
		rsc.close();
	}
}
I really hope you can help me solve this problem! Hoping to hear from you or someone else that can help soon. Regards,
Exit mobile version