ESP32 - Puertos UART2

Estoy empezando a trabajar con una ESP32.

Según el esquema de PinOuts, tiene 3 puertos de comunicación.

En un manual que he leido, recomendaba a no usar los puertos de comunicación Rx1 y Tx1 ya que si lo haces la ESP32 se bloquea. La razón que indica es, que de manera predeterminada UART1 usa los mismos pines que la memoria Flash.

Opbiando este recomendación, y para probar, realicé un Steck corto, y tiene razón, que se bloquea:

int LED =2;

void setup ( )
{
   Serial.begin(19200);  
   Serial1.begin(19200);
   pinMode(LED,OUTPUT);
}
 
void loop ( )
// Software equivalente a presionar en el escudo GSM el botón "Power"
{
   digitalWrite(LED,HIGH);
   Serial.println("Encendido");
   delay(2000);
   digitalWrite(LED,LOW);
   Serial.println("Apagado");
   delay(5000);
}

Como no hace falta ni pinchar un led, ya que el integrado de la placa, está anexo al pin 2, es muy sencillo ver si parpadea.
En este caso no hace nada.

Mi siguiente paso, es intentar usar el UART2, y así dejar libre el UART0, para comunicación con el Monitor Serie del PC.

En este punto es donde me atasco.
Para el Arduino, hay muchos casos en los que se usa la librería SofwareSerial para habilitar otros pines de comunicación.
En el caso de que se use un MEGA, con habilitar el Serial1, o Serial2, tenemos el problema solucionado.

En este caso y como vienen indicados de fabrica para el UART2 los pines (RX 16, y Tx 17), intenté operar de igual manera, pero no soy capaz de comunicarme.

Mantengo comunicación con el Monitor Serial, pero no tengo comunicación por el UART2.

He investigado sobre la forma de comunicarse con ellos, y hasta ahora encuentro casos en la que usan la librería HardwareSerial, para definir los puertos Rx y Tx.

I solved this problem when I discovered that quite every pin can be used for UART2 and UART3 in the "hardware serial" setup.

Surbyte ya lo indicó tambien en un post antiguo:

Lo entiendes mal tauro, el ESP32 permite reprogramar todo. Pero tambien se permite usar una forma de SoftwareSerial especial pera los ESP8266 y 32. Ya la has usado Joel_Zavala?

La cuestión es que si la ESP32, como bien dice Surbyte permite configurarlo todo, pero ya de serie viene con puertos establecidos de comunicación, ¿Es obligatorio emplear librerías para definir esos puertos, o se puede trabajar con los preestablecidos con normalidad, al igual que hacemos con los Arduino MEGA?

Gracias de antemano.

Continuaré trabajando en ello.

1 Like

Bueno, ya he conseguido hacer algo.

Como pensaba, no me ha hecho falta usar una librería para emplear el puerto de comunicación UART2.
Al venir definido, basta con habilitarlo en código para que funcione.

Ya me parecía, ya que es una constumbre bastante empleada en la programación de Arduino, al copiar un código realizado para un Arduino UNO y pegarlo para usarlo en un MEGA.
Cuando realmente el MEGA, ya los tiene definidos de fábrica.

Al grano.
He realizado este código para hacer una llamada con una SIM900 y de momento funciona.
Lo cuelgo para el que le sirva de desarrollo:

    #define RXD2 16
    #define TXD2 17
    
    int On=2;
    
    void setup ( )
    {
       Serial.begin(115200);  
       //Serial2.begin(19200);
       Serial2.begin(19200,SERIAL_8N1,RXD2,TXD2); //SERIAL_8N1 8-bit No parity 1 Stop bit
       pinMode(On,OUTPUT);
       SIM900power();   //Apagar el módulo
       delay(20000);    // Dar tiempo para iniciar y conseguir RED.
       		    // No  hay un modo mas inteligente de hacerlo?
    }
     
    void SIM900power ( )
    // Software equivalente a presionar en el escudo GSM el botón "Power"
    {
       digitalWrite(On,HIGH);
       delay(2000);
       digitalWrite(On,LOW);
       delay(5000);
    }
     
    void callSomeone ( )
    {
       Serial.println("Comenzando la llamada");
       
       Serial2.println("ATD + +número telefono;") ; // Número de telefono. Formato Internacional
      
       Serial.println("Marcando Numero");
       delay(100);
      
       Serial.println("llamando");
       Serial2.println();
       delay(30000 ) ;             // Esperar 30 segundos...   
       Serial2.println("ATH") ;    // Colgar
       
       Serial.println("Llamada Realizada");
    }
     
    void loop ( )
    {
       callSomeone ( ); // Llama
       SIM900power( );    // Apaga el telefon
       while (1); // Hazlo
    }

De todas formas, si alguien me puede indicar, el porque existe una librería, la cual emplean para definir los pines 16 y 17, por HardWare, se lo agradezco.

Me da que pensar, que a mi me funcione, de manera simple, y alguien s ha parado a desarrollar una librería, la cual emplea mucha gente para definir los puertos que viene ya predefinidos de serie.

Igual evito interferencias.
:roll_eyes:

2 Likes

al esp32 le podes habilitar hasta tres, por lo menos hasta ahi llegue

1 Like