Further fixes and adjustments for getting UART working on esp32 boards

This commit is contained in:
Lorow
2025-11-04 00:55:12 +01:00
parent 3b66642a83
commit 68cac0b3ac
20 changed files with 129 additions and 100 deletions
+1 -1
View File
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.16)
set(EXTRA_COMPONENT_DIRS ${CMAKE_CURRENT_LIST_DIR}/components)
if(IDF_TARGET STREQUAL "esp32s3" or IDF_TARGET STREQUAL "esp32s2")
if(IDF_TARGET STREQUAL "esp32s3")
list(APPEND EXTRA_COMPONENT_DIRS ${CMAKE_CURRENT_LIST_DIR}/extra_components)
endif()
+5 -2
View File
@@ -2,7 +2,7 @@
CONFIG_IDF_TARGET="esp32"
# CONFIG_IDF_TARGET_ESP32S3 is not set
# CONFIG_WIRED_MODE is not set
CONFIG_BLINK_GPIO=33
CONFIG_LED_DEBUG_GPIO=33
# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240 is not set
# CONFIG_ESP32S3_SPIRAM_SUPPORT is not set
# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set
@@ -55,5 +55,8 @@ CONFIG_SPIRAM_SPEED_80M=y
#
# OpenIris: Serial Communication Settings
#
CONFIG_UART_PORT_NUMER=1
CONFIG_UART_PORT_NUMBER=0
CONFIG_UART_RX_PIN=-1
CONFIG_UART_TX_PIN=-1
# end of OpenIris: Serial Communication Settings
+5 -2
View File
@@ -2,7 +2,7 @@
CONFIG_IDF_TARGET="esp32"
# CONFIG_IDF_TARGET_ESP32S3 is not set
# CONFIG_WIRED_MODE is not set
CONFIG_BLINK_GPIO=33 # todo check this pin
CONFIG_LED_DEBUG_GPIO=33 # todo check this pin
# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240 is not set
# CONFIG_ESP32S3_SPIRAM_SUPPORT is not set
# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set
@@ -55,5 +55,8 @@ CONFIG_SPIRAM_SPEED_80M=y
#
# OpenIris: Serial Communication Settings
#
CONFIG_UART_PORT_NUMER=1
CONFIG_UART_PORT_NUMBER=0
CONFIG_UART_RX_PIN=-1
CONFIG_UART_TX_PIN=-1
# end of OpenIris: Serial Communication Settings
+5 -2
View File
@@ -2,7 +2,7 @@
CONFIG_IDF_TARGET="esp32"
# CONFIG_IDF_TARGET_ESP32S3 is not set
# CONFIG_WIRED_MODE is not set
CONFIG_BLINK_GPIO=33 # todo check this pin
CONFIG_LED_DEBUG_GPIO=33 # todo check this pin
# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240 is not set
# CONFIG_ESP32S3_SPIRAM_SUPPORT is not set
# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set
@@ -55,5 +55,8 @@ CONFIG_SPIRAM_SPEED_80M=y
#
# OpenIris: Serial Communication Settings
#
CONFIG_UART_PORT_NUMER=1
CONFIG_UART_PORT_NUMBER=0
CONFIG_UART_RX_PIN=-1
CONFIG_UART_TX_PIN=-1
# end of OpenIris: Serial Communication Settings
+1 -7
View File
@@ -68,10 +68,4 @@ CONFIG_GENERAL_BOARD="facefocusvr_eye_l"
# CONFIG_GENERAL_ENABLE_WIRELESS is not set
# CONFIG_LED_DEBUG_ENABLE is not set
CONFIG_LED_EXTERNAL_AS_DEBUG=y
CONFIG_GENERAL_ADVERTISED_NAME="FFVR Eye L"
#
# OpenIris: Serial Communication Settings
#
CONFIG_UART_PORT_NUMER=1
# end of OpenIris: Serial Communication Settings
CONFIG_GENERAL_ADVERTISED_NAME="FFVR Eye L"
+1 -6
View File
@@ -68,9 +68,4 @@ CONFIG_GENERAL_BOARD="facefocusvr_eye_r"
# CONFIG_GENERAL_ENABLE_WIRELESS is not set
# CONFIG_LED_DEBUG_ENABLE is not set
CONFIG_LED_EXTERNAL_AS_DEBUG=y
CONFIG_GENERAL_ADVERTISED_NAME="FFVR Eye R"
#
# OpenIris: Serial Communication Settings
#
CONFIG_UART_PORT_NUMER=1
# end of OpenIris: Serial Communication Settings
CONFIG_GENERAL_ADVERTISED_NAME="FFVR Eye R"
-5
View File
@@ -69,8 +69,3 @@ CONFIG_GENERAL_BOARD="facefocusvr_face"
# CONFIG_LED_DEBUG_ENABLE is not set
CONFIG_LED_EXTERNAL_AS_DEBUG=y
CONFIG_GENERAL_ADVERTISED_NAME="FFVR Face"
#
# OpenIris: Serial Communication Settings
#
CONFIG_UART_PORT_NUMER=1
# end of OpenIris: Serial Communication Settings
+1 -6
View File
@@ -57,9 +57,4 @@ CONFIG_GENERAL_INCLUDE_UVC_MODE=y
# CONFIG_START_IN_UVC_MODE is not set
# CONFIG_MONITORING_LED_CURRENT is not set
CONFIG_GENERAL_BOARD="project_babble"
CONFIG_GENERAL_ENABLE_WIRELESS=y
#
# OpenIris: Serial Communication Settings
#
CONFIG_UART_PORT_NUMER=1
# end of OpenIris: Serial Communication Settings
CONFIG_GENERAL_ENABLE_WIRELESS=y
+1 -6
View File
@@ -2566,9 +2566,4 @@ CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y
CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y
CONFIG_SUPPORT_TERMIOS=y
CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS=1
# End of deprecated options
#
# OpenIris: Serial Communication Settings
#
CONFIG_UART_PORT_NUMER=1
# end of OpenIris: Serial Communication Settings
# End of deprecated options
-5
View File
@@ -62,8 +62,3 @@ CONFIG_GENERAL_INCLUDE_UVC_MODE=y
# CONFIG_MONITORING_LED_CURRENT is not set
CONFIG_GENERAL_BOARD="xiao_esp32s3"
CONFIG_GENERAL_ENABLE_WIRELESS=y
#
# OpenIris: Serial Communication Settings
#
CONFIG_UART_PORT_NUMER=1
# end of OpenIris: Serial Communication Settings
+1 -7
View File
@@ -48,10 +48,4 @@ CONFIG_SPIRAM_CS_IO=26
# CONFIG_SPIRAM_FETCH_INSTRUCTIONS is not set
# CONFIG_SPIRAM_RODATA is not set
# CONFIG_SPIRAM_SPEED_120M is not set
CONFIG_SPIRAM_SPEED_80M=y
# CONFIG_SUPPORTS_EXTERNAL_LED_CONTROL is not set
#
# OpenIris: Serial Communication Settings
#
CONFIG_UART_PORT_NUMER=1
# end of OpenIris: Serial Communication Settings
CONFIG_SPIRAM_SPEED_80M=y
+1 -6
View File
@@ -49,9 +49,4 @@ CONFIG_SPIRAM_CS_IO=26
# CONFIG_SPIRAM_RODATA is not set
# CONFIG_SPIRAM_SPEED_120M is not set
CONFIG_SPIRAM_SPEED_80M=y
# CONFIG_SUPPORTS_EXTERNAL_LED_CONTROL is not set
#
# OpenIris: Serial Communication Settings
#
CONFIG_UART_PORT_NUMER=1
# end of OpenIris: Serial Communication Settings
# CONFIG_SUPPORTS_EXTERNAL_LED_CONTROL is not set
+1 -6
View File
@@ -49,9 +49,4 @@ CONFIG_SPIRAM_CS_IO=26
# CONFIG_SPIRAM_RODATA is not set
# CONFIG_SPIRAM_SPEED_120M is not set
CONFIG_SPIRAM_SPEED_80M=y
# CONFIG_SUPPORTS_EXTERNAL_LED_CONTROL is not set
#
# OpenIris: Serial Communication Settings
#
CONFIG_UART_PORT_NUMER=1
# end of OpenIris: Serial Communication Settings
# CONFIG_SUPPORTS_EXTERNAL_LED_CONTROL is not set
+2 -2
View File
@@ -5,7 +5,7 @@ set (
ProjectConfig
)
if ("$ENV{IDF_ETARGET}" STREQUAL "esp32s3")
if ("$ENV{IDF_TARGET}" STREQUAL "esp32s3")
list(APPEND requires
tinyusb
)
@@ -16,7 +16,7 @@ set (
"SerialManager/SerialManager.cpp"
)
if ("$ENV{IDF_ETARGET}" STREQUAL "esp32s3" OR "$ENV{IDF_ETARGET}" STREQUAL "esp32s2" )
if ("$ENV{IDF_TARGET}" STREQUAL "esp32s3" )
list(APPEND source_files
"SerialManager/SerialManager_esp32s3.cpp"
)
@@ -10,6 +10,7 @@
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "sdkconfig.h"
#include "esp_log.h"
#include "driver/gpio.h"
#include "esp_vfs_dev.h"
@@ -5,27 +5,87 @@
void SerialManager::setup()
{
// usb_serial_jtag_driver_config_t usb_serial_jtag_config;
// usb_serial_jtag_config.rx_buffer_size = BUF_SIZE;
// usb_serial_jtag_config.tx_buffer_size = BUF_SIZE;
// usb_serial_jtag_driver_install(&usb_serial_jtag_config);
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,
};
const auto uart_num = static_cast<uart_port_t>(CONFIG_UART_PORT_NUMBER);
uart_driver_install(uart_num, BUF_SIZE, BUF_SIZE, 0, NULL, 0);
uart_param_config(uart_num, &uart_config);
uart_set_pin(uart_num,
CONFIG_UART_TX_PIN,
CONFIG_UART_RX_PIN,
UART_PIN_NO_CHANGE,
UART_PIN_NO_CHANGE);
}
void uart_write_bytes_chunked(uart_port_t uart_num, const void *src, size_t size)
{
while (size > 0)
{
auto to_write = size > BUF_SIZE ? BUF_SIZE : size;
auto written = uart_write_bytes(uart_num, src, to_write);
src += written;
size -= written;
}
}
void SerialManager::try_receive()
{
static auto current_position = 0;
const auto uart_num = static_cast<uart_port_t>(CONFIG_UART_PORT_NUMBER);
int len = uart_read_bytes(uart_num, this->temp_data, BUF_SIZE, 1000 / 20);
// If driver is uninstalled or an error occurs, abort read gracefully
if (len <= 0)
{
return;
}
if (len > 0)
{
notify_startup_command_received();
}
// since we've got something on the serial port
// we gotta keep reading until we've got the whole message
// we will submit the command once we get a newline, a return or the buffer is full
for (auto i = 0; i < len; i++)
{
this->data[current_position++] = this->temp_data[i];
// if we're at the end of the buffer, try to process the command anyway
// if we've got a new line, we've finished sending the commands, process them
if (current_position >= BUF_SIZE || this->data[current_position - 1] == '\n' || this->data[current_position - 1] == '\r')
{
data[current_position] = '\0';
current_position = 0;
const nlohmann::json result = this->commandManager->executeFromJson(std::string_view(reinterpret_cast<const char *>(this->data)));
const auto resultMessage = result.dump();
// todo check if this works
// uart_write_bytes_chunked(uart_num, resultMessage.c_str(), resultMessage.length())s
uart_write_bytes(uart_num, resultMessage.c_str(), resultMessage.length());
}
}
}
void SerialManager::shutdown()
{
// Stop heartbeats; timer will be deleted by main if needed.
// Uninstall the USB Serial JTAG driver to free the internal USB for TinyUSB.
// esp_err_t err = usb_serial_jtag_driver_uninstall();
// if (err == ESP_OK)
// {
// ESP_LOGI("[SERIAL]", "usb_serial_jtag driver uninstalled");
// }
// else if (err != ESP_ERR_INVALID_STATE)
// {
// ESP_LOGW("[SERIAL]", "usb_serial_jtag_driver_uninstall returned %s", esp_err_to_name(err));
// }
// Uninstall the UART driver to free the internal to keep compatibility with JTAG implementation.
const auto uart_num = static_cast<uart_port_t>(CONFIG_UART_PORT_NUMBER);
esp_err_t err = uart_driver_delete(uart_num);
if (err == ESP_OK)
{
ESP_LOGI("[SERIAL]", "usb_serial_jtag driver uninstalled");
}
else if (err != ESP_ERR_INVALID_STATE)
{
ESP_LOGW("[SERIAL]", "usb_serial_jtag_driver_uninstall returned %s", esp_err_to_name(err));
}
}
+15 -3
View File
@@ -108,13 +108,25 @@ menu "OpenIris: WiFi Configuration"
endmenu
menu "OpenIris: Serial Communication Settings"
config UART_PORT_NUMER
config UART_PORT_NUMBER
int "UART Port number"
default 1
range 1 4
default 0
range 0 4
help
The UART port to use for communication
config UART_RX_PIN
int "UART RX PIN number"
default -1
help
The UART RX pin to use for communication. If set to -1 we won't override it. It will be treated as NO_CHANGE
config UART_TX_PIN
int "UART TX PIN number"
default -1
help
The UART TX pin to use for communication. If set to -1 we won't override it. It will be treated as NO_CHANGE
endmenu
menu "OpenIris: LED Configuration"
+5 -7
View File
@@ -447,20 +447,18 @@ CONFIG_WIFI_AP_PASSWORD="12345678"
#
# OpenIris: Serial Communication Settings
#
CONFIG_USE_UART_FOR_COMMUNICATION=y
CONFIG_UART_PORT_NUMER=1
CONFIG_UART_PORT_NUMBER=0
CONFIG_UART_RX_PIN=-1
CONFIG_UART_TX_PIN=-1
# end of OpenIris: Serial Communication Settings
#
# OpenIris: LED Configuration
#
CONFIG_LED_DEBUG_ENABLE=y
CONFIG_LED_DEBUG_GPIO=8
CONFIG_LED_DEBUG_GPIO=33
CONFIG_LED_EXTERNAL_GPIO=1
CONFIG_LED_EXTERNAL_CONTROL=y
# CONFIG_LED_EXTERNAL_AS_DEBUG is not set
CONFIG_LED_EXTERNAL_PWM_FREQ=5000
CONFIG_LED_EXTERNAL_PWM_DUTY_CYCLE=100
# CONFIG_LED_EXTERNAL_CONTROL is not set
# end of OpenIris: LED Configuration
#
+6 -12
View File
@@ -447,30 +447,24 @@ CONFIG_WIFI_AP_PASSWORD="12345678"
#
# OpenIris: Serial Communication Settings
#
CONFIG_UART_PORT_NUMER=1
CONFIG_UART_PORT_NUMBER=1
CONFIG_UART_RX_PIN=-1
CONFIG_UART_TX_PIN=-1
# end of OpenIris: Serial Communication Settings
#
# OpenIris: LED Configuration
#
CONFIG_LED_DEBUG_ENABLE=y
CONFIG_LED_DEBUG_GPIO=8
CONFIG_LED_DEBUG_GPIO=33
CONFIG_LED_EXTERNAL_GPIO=1
CONFIG_LED_EXTERNAL_CONTROL=y
# CONFIG_LED_EXTERNAL_AS_DEBUG is not set
CONFIG_LED_EXTERNAL_PWM_FREQ=5000
CONFIG_LED_EXTERNAL_PWM_DUTY_CYCLE=100
# CONFIG_LED_EXTERNAL_CONTROL is not set
# end of OpenIris: LED Configuration
#
# OpenIris: Monitoring
#
CONFIG_MONITORING_LED_CURRENT=y
CONFIG_MONITORING_LED_ADC_GPIO=3
CONFIG_MONITORING_LED_GAIN=11
CONFIG_MONITORING_LED_SHUNT_MILLIOHM=22000
CONFIG_MONITORING_LED_SAMPLES=10
CONFIG_MONITORING_LED_INTERVAL_MS=500
# CONFIG_MONITORING_LED_CURRENT is not set
# end of OpenIris: Monitoring
#
+2
View File
@@ -101,6 +101,8 @@ class OpenIrisDevice:
self.connection = serial.Serial(
port=self.port, baudrate=115200, timeout=1, write_timeout=1
)
self.connection.dtr = False
self.connection.rts = False
print(f"✅ Connected to the device on {self.port}")
return True
except Exception as e: