ESP32-IDFでUART通信を行ってみる

ESP32-IDFでUART機能を試してみます。

こんにちは、北神です。IoTではGPSや既存のシリアル通信機器が話題になることもあります。

さっそく、ESP32-IDFでUARTを試してみまいと思います。

詳しい資料は、以下の公式情報から辿ってみてください。

https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/uart.html

    #define UART_2_TXD  16
    #define UART_2_RXD  17

    const int uart_num = UART_NUM_2;
        uart_config_t uart_config = {
        .baud_rate = 9600,//115200,
        .data_bits = UART_DATA_8_BITS,
        .parity = UART_PARITY_DISABLE,
        .stop_bits = UART_STOP_BITS_1,
        .flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
        .rx_flow_ctrl_thresh = 122,
    };
    uart_param_config(uart_num, &uart_config);
    uart_set_pin(uart_num, UART_2_RXD, UART_2_TXD, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
    uart_driver_install(uart_num, 128+1, 0,0, NULL, 0);

以上の通り、GPIO16とGPIO17(UART_2)をUART用に設定しました。
uart_configでは、見慣れたUARTの設定を細かく行っています。

uart_driver_installでハマった点は、rx_buffer_sizeが128以下に設定するとエラーがでるという点です。
多分、rx_buffer_sizeを用いてmallocを行なっている用に思えますので、小さすぎるバッファは作成できないのでしょう。
とりあえず、最小の128+1で構成すればOKです。

受信に関しては

    int len = uart_read_bytes(uart_num, data, 1 , 1000 / portTICK_RATE_MS);

で済みます。

uart_read_bytesは、公式より以下の関数になります。

    int uart_read_bytes(uart_port_tuart_num, void *buf, uint32_t length, TickType_t ticks_to_wait)

ここで、lengthを指定してあげれば、length分溜まったデータを取得することができます。
今回は、わざわざ1バイト毎の取得を行い改行文字でカッティングを行いたい為、lengthを1としました。

こんな感じで、UART通信も設定できるようです。

めでたし、めでたし。

それでは!

関連記事

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA