#include "driver/gpio.h" #include "driver/uart.h" #include "esp_log.h" #include "esp_system.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "light.c" #include "string.h" static const int RX_BUF_SIZE = 1024; #define TXD_PIN (GPIO_NUM_12) #define RXD_PIN (GPIO_NUM_13) int sendData(const char *logName, const char *data) { const int len = strlen(data); const int txBytes = uart_write_bytes(UART_NUM_1, data, len); ESP_LOGI(logName, "Wrote %d bytes", txBytes); return txBytes; } static void tx_task(void *arg) { static const char *TX_TASK_TAG = "TX_TASK"; esp_log_level_set(TX_TASK_TAG, ESP_LOG_INFO); while (1) { sendData(TX_TASK_TAG, "Hello world"); vTaskDelay(2000 / portTICK_PERIOD_MS); } } static void rx_task(void *arg) { static const char *RX_TASK_TAG = "RX_TASK"; esp_log_level_set(RX_TASK_TAG, ESP_LOG_INFO); uint8_t *data = (uint8_t *)malloc(RX_BUF_SIZE + 1); uint8_t tx_buff[4] = {0}; while (1) { const int rxBytes = uart_read_bytes(UART_NUM_1, data, RX_BUF_SIZE, 100 / portTICK_PERIOD_MS); if (rxBytes > 0) { data[rxBytes] = 0; ESP_LOGI(RX_TASK_TAG, "Read %d bytes: '%s'", rxBytes, data); ESP_LOG_BUFFER_HEXDUMP(RX_TASK_TAG, data, rxBytes, ESP_LOG_INFO); if (data[0] == 0x11 && rxBytes >= 2) { if (data[1] <= 6) { light_mode = data[1]; } tx_buff[0] = data[0]; tx_buff[1] = light_mode; uart_write_bytes(UART_NUM_1, tx_buff, 2); } else if (data[0] == 0x12 && rxBytes >= 2) { tx_buff[0] = 0x12; tx_buff[1] = data[1]; led_strip_set_brightness(data[1]); uart_write_bytes(UART_NUM_1, tx_buff, 2); } else if (data[0] == 0x13 && rxBytes >= 2) { tx_buff[0] = 0x12; tx_buff[1] = display_ambient_lighting_level + (int8_t)data[1]; led_strip_set_brightness(tx_buff[1]); uart_write_bytes(UART_NUM_1, tx_buff, 2); } } } free(data); } void asr_pro_init() { 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_APB, }; // We won't use a buffer for sending data. uart_driver_install(UART_NUM_1, RX_BUF_SIZE * 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); xTaskCreate(rx_task, "uart_rx_task", 1024 * 2, NULL, configMAX_PRIORITIES, NULL); // xTaskCreate(tx_task, "uart_tx_task", 1024 * 2, NULL, configMAX_PRIORITIES - // 1, // NULL); }