mirror of
https://github.com/MrUnknownDE/OpenIris-ESPIDF.git
synced 2026-05-02 20:36:04 +02:00
Further fixes and adjustments for getting UART working on esp32 boards
This commit is contained in:
+1
-1
@@ -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()
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
@@ -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"
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
#
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user