E45-TTL-100 not transmitting when connected to Arduino

While working on one of my project involving Arduino and E45-TTL-100 LoRa 868MHz radio modules, I’ve discovered that it is not working exactly like expected. Documentation states:

(…) When the data inputted by user is up to 58 byte, the module will start wireless transmission (…)
(…) When the required transmission bytes is less than 58 byte, the module will wait 3-byte time and treat it as data termination (…)

If I understand this correctly, E45-TTL-100 should begin radio transmission when:

  • 58 bytes were sent via serial port
  • serial transmission stopped for 3 bytes. So, at 9600bps, 3ms pause whould trigger transmission
    void loop() {

In theory, code from the able should send string “Test” every 100ms. Unfortunately, it was not happening. Second E45-TTL-100 was not receiving anything. Also SDR dongle was not catching any transmissions. Something was wrong. I even contacted CD Ebyte, but they were unable to help me and The Internet was equally useless. What was wrong? No idea… looks like some kind of E45-TTL-100 MCU bug…

The solution

The solution is, hmmm, surprisingly simple. You not only have to stop transmitting, but also end serial port (Serial.end()) and open it again (Serial.begin()) after short period of time. In my experiments I’ve determined that 20-30ms of closed port selves the problem. So, code from above should be replaced with following:

void loop() {
        delay(70); //The rest of requested delay. So 100 - 30 = 70

It might not be the prettiest solution ever, but it works.

19 thoughts to “E45-TTL-100 not transmitting when connected to Arduino”

    1. Those are different ideas. E45-TTL-100 has it’s one additional CPU and uses Serial port. That Dragino is connected using SPI bus and adruino has to do all the work

      1. Hi Dziku,

        First of all, thank you for your response.
        AS far as I understand, both devices (dragino and E45-TTL-100) are using LoRa, so my question is :
        if I send a LoRa packet from E45-TTL-100, can Dragino is able to receive it ?
        I had a successful attempt between Dragino board and Rakwireless board (RAK811-N). The thing is : with Dragino and RAK811-N, I can retrieve usual LoRa parameters through API (such as Spreading Factor, Bandwidth, etc..)…with E45-TTL-100, I can’t see those parameters…I can just change : Frenquency, Channel (can see that with dragino API for instance…), address….
        So to cut a long story short, I am not sure that those devices (ie Dragino and E45-TTL-100) can communicate at all….I have thought it could be possible because both used LoRa chip…

        1. You can not set SF, CR and Bandwidth for E45-TTL-100. Of course, all setting you can sat for them, end up as specific SF, CR and Bandwidth, but you would have to guess them.

          They should be compatible, since all use LoRa protocol, but E45-TTL-100 is using sits own over-the-air protocol. You would have to implement that protocol by yourself on the Dragino

          1. Ok and thank again Dziku. It helps me understand a lot what’s going on under the hood…I am going to use many Dragino then, because they seem to be a lot more versatile and open source oriented….At least, I can use APIs (such as https://github.com/sandeepmistry/arduino-LoRa or RadioHead) to change parameters as I want via programming (Arduino IDE). By the way: Great stuff in your blog ! thanks for sharing knowledge !

          1. Hi Zeilo. Not at all. 🙁 I think E45 TTL 100 uses its own protocol. So I used 2 E45 TTL 100 for one project (raingauge) and many draguino for another (automatic firework lighter). Bye

  1. Until now i am not yet using the E32/E45-TTL-moduls but those from DORJI named “DRF1278DM”.
    I am using it for e.g. text- and GPS- communication together with ANDROID Smartphones/Tablets connected via Bluetooth. Here i am running terminal programs and there are no general problems.
    More can be found here: http://www.kh-gps.de/loratext.htm ( Sorry, page is in German, but there is a quick link for translation by Google ).

  2. Hi Dziku,

    I bought two of those little thing (E45-TTL-100)….but I am not able to make them communicate via Arduino, here my simple code:

    Arduino Sender
    void setup() {

    void loop() {
    delay(70); //The rest of requested delay. So 100 – 30 = 70

    Arduino Receiver

    SoftwareSerial mySerial(10, 11); // RX, TX
    int incomingByte = 0; // for incoming serial data

    void setup() {

    void loop() {
    // send data only when you receive data:
    if (mySerial.available() > 0) {
    // read the incoming byte:
    //incomingByte = mySerial.read();


    Where is my mistake ? M0 and M1 are connected to ground (normal mode), Channel 4, address ffff

    Thank you,

    1. Eventually, It is working…with :

      Module A (sender) : Channel 6, Address 0
      Module B (receiver) : Channel 6, Address FFFF

      Hope this can help the others.

      Bye bye

    1. What do you mean? You can change E45-TTL-100 modes by setting M0/M1 pins. In this case, I put them both to ground so the module is in normal mode (see datasheet for M0/M1 combinaisons). In another, I needed to put the device in sleep mode…I can send you how I managed to do this by code but it is quite simple.

  3. Hi FRED, just want to ask if you able to communicate the Dragino and E45 TTL 100? can you share to me your codes? Thank you

  4. Did you ever work out why this solution worked? I had no luck using your method and even changing micro completely has had no impact. I’ve run it the MCU TX – E32 RX through a simple resistor, a level converter, tried a pull-up and pull down and nothing works.

    This bug is crippling my throughput, I rely on many small messages and instead of the theoretical max of ~300 messages per second I’m getting 5 which basically renders my handful of chips completely useless.

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.