İyi Günler arkadaşlar. ESP8266 ile arduino unoyu UART üzerinden haberleştirmek istiyorum. Küçük bir yazılım yazdım. ESP8266 ya serialden basla komutu geldiğinde 2 saniyede bir integer tipinde değişken arttıracak ve bunu arduinoya gönderecek arduino da myserial üzerinden geleni serial'e yazacak.
Sorunum şu: Serialde yazdırdığım değerler çok sağlıklı görünmüyor. Ara sıra farklı değerler gözüküyor. Bu durum neden kaynaklanıyor olabilir? Ve nasıl çözebilirim?
Devrenin bağlantısı
ESP8266 modül şeklinde
arduino Uno modül şeklinde
ESP8266 RX -> arduino p11
ESP8266 TX -> arduino p10
ESP8266 GND -> arduino GND
Serial çıktısı
ESP-> Arduino arduino serial çıktısı
1 1
2 2
3 3
4 4
5 5
6 5
7 7
8 8
9 9
10 9
11 11
12 12
13 13
14 41
15 15
16 16
17 17
18 81
19 91
20 20
// ESP8266 üzerindeki kod
#include <ESP8266WiFi.h>
int a;
String s;
int b;
void setup() {
Serial.begin(115200);
}
void loop() {
if(Serial.available()){
s=Serial.readStringUntil('\r');
}
if(s=="basla"){
a++;
Serial.print(a);
delay(2000);
}
}
// Arduino Uno üzerindeki kod
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX on Arduino
int a=0;
void setup() {
Serial.begin(115200);
mySerial.begin(115200);
}
void loop() {
if(a==0){
mySerial.print("basla");
a=1;
}
if(mySerial.available()){
Serial.println(mySerial.readStringUntil('\r'));
}
}
Baud hızını 57600'e Düşürdüm sorun çözüldü arkadaşlar. Hız arttıkça Uart'ın verimi de düşüyor modüller her ne kadar desteklesede.
Byte olarak okuyup, stringe yüklemen daha stabil olur. readStringUntil komutunda benzer hatalar ile karşılaşmıştım.
57600 hızında sıkıntısız 2.5 saat çalıştı sonra kapattım. Ama dediğini 115200 baud hızında denerim.
Yazılımsal Serial port yerine donanımsal Serial port kullanın.
Kullandığınız illede UNO olması gerekmiyorsa , Mega kullanın. 4 tane seri port var...