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.:
- the data couldnt appear on esp32 serial monitor.
- 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.

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.!!
azhar