Hi there, I have a problem with the serial communication between my esp32 and my sim900 shield (In-Depth: Send Receive SMS & Call with SIM900 GSM Shield & Arduino).
I set up my UART connection based on this example. I slightly changed the code to a buffersize request: if there are some bytes inside the buffer, they shal be processed. But the problem is, the shield sends permanent bytes and they can’t be formated by the ESP_LOGI function. The second problem is, the uart_get_buffered_data_len function shows a different buffersize waiting in the FIFO than the bytes fetched by the uart_read_bytes function. I get the some of this lines over and over again:
I (524112) MainTask: Buffer with 8 bytes filled.
I (524982) MainTask: Read 129 bytes: ‘�’
I (525032) MainTask: Buffer with 6 bytes filled.
I (525921) MainTask: Read 129 bytes: ‘’
I (525971) MainTask: Buffer with 5 bytes filled.
I (526861) MainTask: Read 129 bytes: ‘’
Here are some code snippets:
Here is the buffer variable from my myApp.h:
char RX_BUFFER[128 + 1];
Here is config UART from myApp.cpp:
const uart_config_t uart_config = {
.baud_rate = 115200,
.data_bits = UART_DATA_8_BITS,
.parity = UART_PARITY_DISABLE,
.stop_bits = UART_STOP_BITS_1,
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
.source_clk = UART_SCLK_REF_TICK
};
// We won't use a buffer for sending data.
uart_driver_install(UART_NUM_1, sizeof(RX_BUFFER) * 2, 0, 0, NULL, 0);
uart_param_config(UART_NUM_1, &uart_config);
uart_set_pin(UART_NUM_1, TXD_PIN, RXD_PIN, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
And here are the looped function from my myApp.cpp:
void App::executeMain(){
size_t Buffer_Size_Waiting;
esp_err_t UART_ERR = uart_get_buffered_data_len(UART_NUM_1, &Buffer_Size_Waiting);
if (UART_ERR == ESP_FAIL)
ESP_LOGI(MAIN_TASK_TAG, "Buffersize request failed.");
if ((Buffer_Size_Waiting > 0) && (UART_ERR == ESP_OK)) {
ESP_LOGI(MAIN_TASK_TAG, "Buffer with %d bytes filled.", Buffer_Size_Waiting);
const int rxBytes = uart_read_bytes(UART_NUM_1, &RX_BUFFER, sizeof(RX_BUFFER), 100 / portTICK_PERIOD_MS);
if (rxBytes > 0) {
ESP_LOGI(MAIN_TASK_TAG, "Read %d bytes: '%s'", rxBytes, RX_BUFFER);
rxBytes, ESP_LOG_INFO);
}
}
}
Hopefully someone have an idea or some experience with the very shield.
Thanks in advance!!
Greetings