ESP32-s2 mini и UART на произвольных пинах

Decent

✩✩✩✩✩✩✩
30 Сен 2023
17
2
Здравствуйте.
Купил ESP32-s2 mini и LoRa модуль E220-900T22D, работающий по UART.
Посмотрел распиновку на официальном сайте тут https://www.wemos.cc/en/latest/s2/s2_mini.html
Хочу, чтоб у меня UART работал на пинах 33 и 35, cоединил у двух модулей RX-TX, TX-RX GND-GND, VCC-VCC, пытаюсь что-то отправить или принять... и тишина.
В Arduino IDE пишу

C++:
Serial1.begin(9600, SERIAL_8N1, 33, 35);
И... ничего не работает. Нахожу другую схему...

где пины 33 и 35 обозначены теми же номерами плюс подписано, что они могут работать как UART. Значит, я всё делаю правильно. Но оно не работает.
Кстати, точно такое же подключение на Wemos D1 mini (это ESP8266) работало, т.е., модуль нормальный. Правда, там нет аппаратного UART на произвольных пинах, поэтому пришлось подключить библиотеку SoftwareSerial.
 
Изменено:

Геннадий П

★★★★★★✩
14 Апр 2021
1,847
595
44
Подключать нужно не к каким в голову взбредет, ESP32 это не поддерживает.

Берете любую удобоваримую распиновку ESP32:
1697814383189.png

UART0 - GPIO1/3
UART2 - GPIO16/17

Смотрим схему модуля: S2_mini.pdf (wemos.cc)
И ищем к каким контактам они идут.
 

Decent

✩✩✩✩✩✩✩
30 Сен 2023
17
2
Подключать нужно не к каким в голову взбредет, ESP32 это не поддерживает.
Откуда информация? Я не встречал ещё ни одного источника, который это утверждал бы. Пины переназначаются и на изображении выше даже указано, на какие пины это возможно сделать:
UART/I2C/PWM (ALL GPIO PINS)
 

Decent

✩✩✩✩✩✩✩
30 Сен 2023
17
2
Пока искал решение вопроса, в англоязычном форуме нашёл тему, в которой человек столкнулся с той же проблемой. И ровно так же у него не переназначались пины. Решение в итоге было не решением, а костылём - использование SoftwareSerial.

Вероятно, перед строчкой
C++:
Serial1.begin(9600, SERIAL_8N1, 33, 35);
надо было ещё что-то дописать. Помню, в ESP8266 для преобразования пинов RX и TX в обычные GPIO надо было написать
C++:
pinMode(1, FUNCTION_3);                                                    // Превращаем пин TX в GPIO
pinMode(3, FUNCTION_3);                                                    // Превращаем пин RX в GPIO
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,723
481
@Decent, а если в ассемблер залезть? Лично я с ассемблером ESP32 не работал, но всяко должны быть команды для назначения любого UART на нужные GPIO, раз уж так написано в даташите.
 
Изменено:

Decent

✩✩✩✩✩✩✩
30 Сен 2023
17
2
Предварительные итоги.
Попробовал библиотеку SoftwareSerial, и... не заработало.
Сделал вторую плату - заработало. Освобожусь, перенесу проект снова на хардварный UART, но явно что-то не так было в железе... может, бракованая ESP...
 

vortigont

★★★★★✩✩
24 Апр 2020
916
493
Saint-Petersburg, Russia
на есп32 сериал пины переназначаются с пол пинка. Возможно в ардуиновской обёртке есть какие-то хитрости.
попробуйте Serial1.setPins(rx, tx) или Serial1.end(); Serial1.begin(bla, bla, bla)
А вообще лучше так - собирать проект с глобальным флагом NO_GLOBAL_SERIAL и создавать объекты HardwareSerial самому по необходимости.
Код:
HardwareSerial myUart(1); // нужный номер сериал
myUart.begin(bla, bla, bla);
пользоваться софтсериалом на есп32 это моветон, аппаратный сериал на ней довольно неплох.
 

Decent

✩✩✩✩✩✩✩
30 Сен 2023
17
2
Извините, что мучаю вопросами.
Итак, поменял плату ESP32-s2 на точно такую же, всё заработало. Полагаю, был сгоревший порт (или два, т.к. не работал и TX и RX).
 
Изменено: