Нужен ESP32 для использования 3 последовательных портов
У меня есть проект, для которого требуется 3 последовательных порта на моем 38-контактном микроконтроллере ESP32 Dev. Два из них предназначены для сенсорных дисплеев Nextion, а другой — для GPS. Насколько я понимаю, проблема в том, что ESP32 имеет 3 аппаратных последовательных порта, из которых можно использовать только 2. GPIO 1 и 3 не могут быть подключены к дисплею во время загрузки, а Software Serial в Arduino IDE 2.0.4 несовместим с ESP32. Кто-нибудь может сказать мне, как я могу использовать 3 последовательных порта?
Спасибо
@Richard White Building From Sc, 👍2
Обсуждение3 ответа
Добро пожаловать, Ричард! Ваш вопрос интересен и является распространенной проблемой на арене Arduino. Я просто использую плату SPI или I2C, которая выводит RS232. Я наткнулся на них несколько лет назад и использовал несколько, они отлично работали. Я не помню, как они назывались, но вот ссылка на одну из множества доступных: "https://andino.systems/extensions/rs232" Это был первый поисковый запрос, который я использовал: arduino SPI to RS232 module" ;. Вот еще одна ссылка на Pi: "https://forums.raspberrypi.com//viewtopic.php?t=146908&p=1083915#p1024636"
Гил, это не дискуссионный форум. Мы пишем ответ не для плаката, а для задачи. В поле для ответов помещайте только решения. Пожалуйста, пройдите тур https://arduino.stackexchange.com/tour, @Juraj
Да, можно назначить любые контакты GPIO последовательным, используя библиотеку HardwareSerial, до 3-х UART-соединений. См. эту ссылку для справки: https://copperhilltech.com /blog/esp32-programming-three-serial-ports-uarts-using-the-arduino-ide/
Я тоже играю с двумя Nextion и esp32. было бы здорово пообщаться с вами и провести мозговой штурм
#define UART1_ODU_BAUD_RATE 2400
#define U1RXD 32
#define U1TXD 33
Используйте это для инициализации UART при настройке
// Конфигурация UART1
uart_config_t Configurazione_UART1 = {
.baud_rate = UART1_ODU_BAUD_RATE,
.data_bits = UART_DATA_8_BITS,
.parity = UART_PARITY_EVEN,
.stop_bits = UART_STOP_BITS_1,
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
.source_clk = UART_SCLK_APB,
};
uart_param_config(NUMERO_PORTA_SERIALE, &Configurazione_UART1);
esp_log_level_set(TAG, ESP_LOG_INFO);
uart_set_pin(NUMERO_PORTA_SERIALE, U1TXD, U1RXD, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
uart_driver_install(NUMERO_PORTA_SERIALE, BUF_SIZE, BUF_SIZE, 20, &uart1_queue, 0);
xTaskCreate(UART_ISR_ROUTINE, "UART_ISR_ROUTINE", 2048, NULL, 12, NULL);
//vTaskDelete(NULL);
Создание функции ISR
static void UART_ISR_ROUTINE(void *pvParameters) //uart1
{
uart_event_t event;
size_t buffered_size;
bool exit_condition = false;
String ODU_PAC_ONE_Temp = "";
ODU_PAC_ONE = "";
while (1) {
if (xQueueReceive(uart1_queue, (void * )&event, (portTickType)portMAX_DELAY)) {
if (event.type == UART_DATA) {
uint8_t UART1_data[128];
int UART1_data_length = 0;
ESP_ERROR_CHECK(uart_get_buffered_data_len(UART_NUM_1, (size_t*)&UART1_data_length));
UART1_data_length = uart_read_bytes(UART_NUM_1, UART1_data, UART1_data_length, 100);
for (byte i = 0; i < UART1_data_length; i++) {
ODU_PAC_ONE_Temp += (int) UART1_data[i];
}
}
else if (event.type == UART_FRAME_ERR) {
}
}
if (exit_condition) {
break;
}
}
vTaskDelete(NULL);
}
Здесь вы получите свои данные (int) UART1_data[i]
Этот ответ может выиграть от небольшого объяснения. Чем это лучше, чем простое переназначение портов?, @StarCat
- SoftwareSerial не будет читать всю напечатанную строку при вызове readString()
- Проблема с использованием модуля Bluetooth с платой ESP32s2
- AT-команда не отвечает на последовательный монитор
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- Как остановить SoftwareSerial от получения данных и повторно включить его в какой-то другой момент?
- Ардуино для чтения с преобразователя RS232 в последовательный модуль TTL
- Не нашел датчик отпечатков пальцев :( Arduino Mega 2560 Adafruit Fingerprint Sensor
- Как работает последовательная связь на Arduino?
используйте ota для загрузки скетчей, в любом случае это быстрее, безопаснее и гибче. вы также можете использовать software serial, mos def., @dandavis
Любой из выводов последовательного порта ESP32 легко переназначить на другие выводы, поэтому вы не привязаны к стандартной распиновке., @StarCat
Добро пожаловать, Ричард, ваш вопрос интересен и является распространенной проблемой на арене Arduino. Я просто использую плату SPI или I2C, которая выводит RS232. Я наткнулся на них несколько лет назад и использовал несколько, они отлично сработали. Я не помню, как они назывались, но вот ссылка на один из многих доступных: «https://andino.systems/extensions/rs232». Это был первый поисковый запрос, который я использовал: модуль arduino SPI to RS232». Вот еще одна ссылка на Pi: "https://forums.raspberrypi.com//viewtopic.php?t=146908&p=1083915#p1024636", @Gil
Не полный ответ, но, в зависимости от модели вашего GPS, вместо этого вы можете использовать I2C., @dda