ESP-Now UIFlow to Arduino



  • Dear All,

    I am trying to send a message using the EspNow blocks in UIFlow to an ESP32 running an Arduino program. The message is sent and received but I can't seem to get the data in the Arduino program it just returns '1' even though the length alters as I alter the data being sent. When I look at the Python code it is sending a string, so I think I'm asking how to convert a Python string into an Arduino string/character array. Sorry if this is a real newbie question.

    Blocky - Python code
    def buttonA_wasPressed():
    global iCount
    espnow.send(id=1, data=str('HELLO!'))
    pass
    btnA.wasPressed(buttonA_wasPressed)

    Arduino ESP-Now receive code
    void OnDataRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len)
    {
    char macStr[18];
    char sData[data_len];

    snprintf(macStr, sizeof(macStr), "%02x:%02x:%02x:%02x:%02x:%02x",
    mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
    Serial.print("Last Packet Recv from: "); Serial.println(macStr);
    Serial.print("Data Length: "); Serial.println(data_len);
    Serial.print("Last Packet Recv Data: "); Serial.println(*data);
    Serial.println("");
    }

    Arduino Output
    11:39:37.342 -> Last Packet Recv from: d8:a0:1d:55:4b:38
    11:39:37.342 -> Data Length: 16
    11:39:37.342 -> Last Packet Recv Data: 1
    11:39:37.342 ->



  • Hey

    since you pass a pointer to the println-function and the cpu does not know what type of data is located at that position this behaviours seems normal.
    In the example in the link they create a structure for the transmitted data. In the callback they copy the recieved data in this structure and later you can print exactly what you want:
    https://randomnerdtutorials.com/esp-now-esp32-arduino-ide/



  • Hi Lukas,

    Thank you for the link. I will see if I can use their method. I did find a solution that works.

    I noticed that the received data starting at index 11 was getting ASCII codes so I modified the Arduino code to construct a String starting from that position. The ESP-Now OnDataRecv callback now looks like this (the string construction is in bold).

    void OnDataRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len)
    {
    char macStr[18];

    String tData="";
    char Ascii[1];
    for(int i=10;i<data_len;i++)
    {
    tData+=(char)data[i];
    }

    snprintf(macStr, sizeof(macStr), "%02x:%02x:%02x:%02x:%02x:%02x",
    mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);

    Serial.print("Last Packet Recv from: "); Serial.println(macStr);
    Serial.print("Data Length: "); Serial.println(data_len);
    Serial.print("Last Packet Recv Data: '"); Serial.print(tData);
    Serial.println("'");
    }

    Arduino Output

    13:38:11.806 -> Last Packet Recv from: d8:a0:1d:55:4b:38
    13:38:11.806 -> Data Length: 22
    13:38:11.806 -> Last Packet Recv Data: 'Hello World!'