Esp32 always resetting while receive data from uno

hi there....
in this project i make comunication arduino uno wit esp32 while arduino sending any data sensor to esp32,while esp32 ask the data to arduino uno.but if esp32 doesnt ask the data from arduino uno,arduino uno couldnt send the data sensor. but when ive upload ech program on arduino uno and esp32 (as receiver) and appear the data into serial monitor in esp32,the proble happen.:

  1. the data couldnt appear on esp32 serial monitor.
  2. when i press the esp32 reset button with 115200 baudrate,it always resetting or i change 9600 baudrate it so always resetting
    (ive put 10k resistor in uart betwen rx and tx).but when i checked outpur arduino uno voltage rx & tx it just 0.98 v and about 0.45v,when i chek voltage rx and tx in esp32,it shows rx=1.23 while it always changed about max 3.24 ,and tx alwas constant no more 1.xx.but when i changed baud rate 9600 it doesnt appear on serial monitor.

esp32 always resetting.


this is project serial comunication fritzing schematic.
image
arduino uno program (as sender sensor data program. here i change dht11 with dht22.

#include<DHT.h>

//konfigurasi untuk sesor DHT22
#define DHT_PIN 8
#define DHTTYPE DHT22

//buat variabel untuk sesnsor DHT22
DHT dht (DHT_PIN, DHTTYPE);

//variabel untuk menampung nilai sensor
int ldr;
float humidity,temperature;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  //aktifkan sensor DHT
  dht.begin();
    

}

void loop() {
//   ldr = analogRead(0);
//  //baca temperature dan kelembapan
//  temperature = dht.readTemperature();
//  humidity    = dht.readHumidity();
//  Serial.println(ldr);
//  Serial.println(temperature);
//  Serial.println(humidity);
  //perintah berikut di buat sebagai ilustrasi jika node mcu meminta data ke arduino uno
  String minta = "";
  //baca permintaan nodeMCU
  while(Serial.available()>0)
  {
    minta += char(Serial.read());
  }
  //buang spasi data yang diterima
  minta.trim();
  //uji variable minta

  if (minta == "Ya")
  {
    //jika iya maka kirim data
    kirimdata();
  }
  //kosongkan variabel minta
  minta = "";
  delay(500); //arduino akan melakukan pengecekan setiap satu detik ada permintaan atau tidak.
    
  /*hal penting dalam melakukan pengiriman data adalah pastikan data tidak
  dikirim secara terus menerus oleh arduino uno ke node mcu karena ia mengirim 
  data terlalu cepat.ketika dia mengirim data terlalu ceapt,akan ada masalah di node mcu nya
  nah masalahnya adalah gampang reset sendiri,ini juga adalah kelemahan node mcu
  jika menerima data terus menerus dengan cepat dapat reset sendiri.atau ketika kita memprogram 
  node mcu terjadi delay yg sangat lama,juga dapat menyebabkan reset,
  solusinya:
  data dikirim oleh arduino uno apabila ada permintaan dari node mcu.
  kita buat node mcu meminta data pada arduino uno.jika tidak ada permintaan
  makan arduino uno tidak akan mengirim data.
  
  */
  
}
//arduino akan mengirim data jika ada permintaan dari nodemcu
void kirimdata()
{
 //baca nilai sensor LDR
  ldr = analogRead(0);
  //baca temperature dan kelembapan
  temperature = dht.readTemperature();
  humidity    = dht.readHumidity();
  
  
  //sediakan variabel penampung data yang akan dikirim
  //data kirim = "10#29.05#84.50"
  String datakirim = String(ldr) + "#" + String(temperature) + "#" + String(humidity);
  //kirim data
  Serial.println(datakirim); //proses mengirim data
}

esp32 program as receiver data sensor,but it doesnt appear on esp32 serial monitor.

#include<SoftwareSerial.h>

//buat variable untuk sofware serial (Rx,Tx)
SoftwareSerial DataSerial(12, 13);

//millis sebagai pengganti delay
unsigned long previousMillis =0; //mendeteksi waktu akhir pengecekan
/*perbedaan millis dan delay: delay jika dijalankan maka program lain akan terhenti sebaliknya millis tidak*/
const long interval = 3000;
 
String arrData[3];//karena nilai sensor 3(jumlah sensor)
void setup() {
  // berikut program dimana node mcu meminta data pada arduino uno kemudian node mcu akan membacanya.
  //node mcu akan memina data setiap 3 detik sekali.
  Serial.begin(9600);
  DataSerial.begin(9600);
}

void loop() {
  // konfigurasi millis 
  unsigned long currentMillis = millis(); //baca waktu millis (mili second saat ini)
  if (currentMillis - previousMillis >= interval)//jika program belum mencapai 3sekon maka program dilewati
  {
    //update previouMillis(dia harus tahu dia harus refreh itu kapan)
    previousMillis = currentMillis;
    
    // prioritas pembacaan data dari arduino uno (hasil kiriman data)
    //baca data serial 
    String data = "";
    while(DataSerial.available()>0)
    {
      data += char(DataSerial.read());
    }
    //buang spasi datanya
    data.trim();

    //uji data jika arduino kirim data kosong,maka diabaikan,jika tdk kosong maka format data "10#29.34#9845"
    //kemudian kita parsing data(pecah data)
    //kemudian setelah memecah data butuh array.
    int index = 0;
    //cara parsing dengan for
      for (int i=0; i<= data.length(); i++)
      {
        char delimiter = '#';//karena menggunakan charr maka tanda petik satu
        if (data[i] != delimiter)
          arrData[index]  += data[i];

        else
          index++;  //variable index bertambah 1
    
      }
      //pastikan data yang dikirim lengkap(LDR,temp,hum)
      //urutanya 0=LDR, 1=Temp, 2=hum
      if (index == 2) //index dimulai dari 0,1,2 
      {
        //kita tampilkan nilai  sensor ke serial monitor
        Serial.println(arrData[0]);//LDR
        Serial.println(arrData[1]); //Temp
        Serial.println(arrData[2]); //hum
        Serial.println();//perintah spasi
      }
      
      arrData[0] = "";//INI dikosongkan karena jika tidak data nambah terus.
      arrData[1] = "";
      arrData[2] = "";
  }
  //minta data ke arduino uno 
  DataSerial.println("Ya");
  
}


, please give me a solution
.thanks a lot. have a nice day.!! :slightly_smiling_face:

azhar

Make sure ESP8266 has a good power supply driving it, separate to the Uno's supply.

Take a look at this project Arduino to Arduino via Serial
you need to allow for the NodeMcu being 3v3 versus the Uno being 5v


You can alternatively use this circuit

Here I am using SoftwareSerial on the Uno so the USB can be used for debugging. Hardware serial is better but difficult to debug so start with software serial until things are running.

Here some example sketches using the SerialComs class from my SafeString library
UnoSoftSerialCSVToESP8266.ino (2.2 KB)
ESP8266CSV_fromUno.ino (2.5 KB)

Here is a simple echo test sketch to run on each board and open two IDEs and connect each board to one and open the two monitors,
UnoSoftSerialEchoTest.ino (825 Bytes)
You need to change the SoftwareSerial settings for the ESP8266

1 Like