Search code examples
cesp32at-command

Problems with issuing at#httpsnd command over UART


I have a custom board that features a Telit LE910C1-EUX module communicating with an ESP32 processor through UART (the ESP32 module is programmed using the ESP-IDF v4.3.2 framework).

Here's the routine I have written to send commands to the Telit module:

esp_err_t TelitSerialCommand(const char* command) {

    // Send command over UART
    uart_write_bytes(UART_NUM_1, command, strlen(command));
    if(uart_wait_tx_done(UART_NUM_1, 100) != ESP_OK) {
        ESP_LOGE(TAG, "Could not send Telit command");
        return ESP_ERR_TIMEOUT;
    }

    // Wait for two seconds
    vTaskDelay(2000/portTICK_RATE_MS);
    return ESP_OK;
}

While here's the routine I have written to read the Telit's response:

esp_err_t TelitSerialRead(char* RxBuf, size_t length) {

    // First, clean current string holding past message
    strncpy(RxBuf, "", length);

    // Check how many data bytes are present in UART buffer
    esp_err_t status = uart_get_buffered_data_len(UART_NUM_1, &length);
    if (status != ESP_OK) {
        ESP_LOGE(TAG, "Could not get UART rx buffer size");
        return status;
    }

    // Read those bytes
    length = uart_read_bytes(UART_NUM_1, RxBuf, length, 100);

    // Clean UART buffer
    uart_flush(UART_NUM_1);
    return ESP_OK;
}

With these two routines, I am able to send commands to the Telit module and read its responses. When it comes to performing a POST operation using at#httpsnd, however, it seems like the command doesn't get through.

Here's a list of commands I use:

at+cmee=2\r
at#sgact=1,1\r
at#httpcfg=0,"www.httpbin.org",80,0,,,0\r
at#httpsnd=0,0,"/post",15,"application/json"\r

After prompting the latter command, the Telit should reply with >>> signaling that it's ready to read serial data; what I get instead is the same command I issue, as if it was not terminated and the module was currently waiting for the \r symbol. I finally get the >>> reply after another AT command is sent, but I am sure that the at#httpsnd command is terminated with the carriage return, so I am not sure why the Telit behaves like this. If I communicate with the Telit using minicom through USB (hence bypassing the ESP32 mcu) then all the commands above work. I can ping the 8.8.8.8 server so I know I have network connection, and the GET command AT#HTTPQRY=0,0,"/get"\r works just fine.

Have you ever dealt with a similar problem? Any help would be appreciated!


Solution

  • Turns out I had to disable the rs232 flow control by issuing the command AT&K0