Comunicação entre arduino nano e esp32

Boas, preciso de ajuda para fazer com que um Arduino Nano leia os dados de um sensor e os envie para um ESP32 através da comunicação serial. Não estou a conseguir estabelecer esta comunicação.

Obrigado.

Olá! Bem vindo ao Fórum.

Como você ligou os dois microcontroladores? Qual a programação de ambos?

Quando for possível, dê uma lida em Como obter o melhor desse Fórum. Lá tem boas dicas de como nos ajudar a ajudar você! :wink:

Arduino Nano

void setup() {
Serial.begin(9600); // Inicia a comunicação serial com a velocidade de 9600 bps
}

void loop() {
Serial.println("Bom dia");
delay(1000);
}

Esp32

void setup() {
Serial.begin(9600);
}

void loop() {
if (Serial.available()) {
String dadosRecebidos = Serial.readStringUntil('\n');
Serial.print("ESP32 recebeu: ");
Serial.println(dadosRecebidos);
}
}

Você não contou como os dois microcontroladores estão ligados...

Duas dicas:

  1. O Arduino Nano opera em 5V. O Esp32 opera em 3.3V, então idealmente é preciso usar conversores de nível lógico entre os dois, ou você pode queimar o pino do ESP.

  2. O Arduino Nano só tem uma porta hardware serial (pinos 0 e 1), que também é usada na sua comunicação com o Monitor Serial. Então, para você ver o que está acontecendo ao mesmo tempo em que estabelece uma comunicação entre os dois microcontroladores, é preciso escolher outros dois pinos no Nano e usar a biblioteca Softwareserial.

Uma outra pergunta: por que você precisa dos dois microcontroladores? Não daria para ligar o sensor direto no ESP?

Estou a usar um gps (AIR530) e não tenho codigo para o esp so para o arduino

#include <SoftwareSerial.h>
SoftwareSerial SoftSerial(2, 4);
unsigned char buffer[64]; // buffer array for data receive over serial port
int count=0; // counter for buffer array
void setup()
{
SoftSerial.begin(9600); // the SoftSerial baud rate
Serial.begin(9600); // the Serial port of Arduino baud rate.
}

void loop()
{
if (SoftSerial.available()) // if date is coming from software serial port ==> data is coming from SoftSerial shield
{
while(SoftSerial.available()) // reading data into char array
{
buffer[count++]=SoftSerial.read(); // writing data into array
if(count == 64)break;
}
Serial.write(buffer,count); // if no data transmission ends, write buffer to hardware serial port
clearBufferArray(); // call clearBufferArray function to clear the stored data from the array
count = 0; // set counter of while loop to zero
}
if (Serial.available()) // if data is available on hardware serial port ==> data is coming from PC or notebook
SoftSerial.write(Serial.read()); // write it to the SoftSerial shield
}

void clearBufferArray() // function to clear buffer array
{
for (int i=0; i<count;i++)
{
buffer[i]=NULL;
} // clear all index of array with command NULL
}

Se essa é a razão, acredite, será muito mais fácil você aprender a escrever o código para o ESP32 do que fazer o ESP32 "conversar" com o Nano.

O ESP32 tem mais de uma porta UART (não precisa de Softwareserial) e você praticamente pode configurar ela em diferentes pinos. Eu também já vi aqui que seu GPS opera tanto com 5V quanto com 3.3V, então também não tem problema relacionado à voltagem.

Tente aprender como funciona comunicação Serial no ESP e adapte seu programa.
Aqui está um começo, que mostra como configurar uma porta serial no ESP32:

https://circuits4you.com/2018/12/31/esp32-hardware-serial2-example/

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.