Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Atmel => Konuyu başlatan: istek61 - 07 Ağustos 2020, 21:44:45

Başlık: arduino ile esp8266 arasında serial port okuma sorunu
Gönderen: istek61 - 07 Ağustos 2020, 21:44:45
İyi akşamlar;

Arduino ile esp8266 12-E arasında 8 ve 9. pin üzerinden serial port açtım. (115200)

arduino üile serial port üzerinden #komut1# şeklinde esp8266 ya komut gönderdigimde,
Esp8266 www.birsite.com/komuttakisorgu işlemini çagırıyor. gelen mesajıda yine arduinonun serial portuna yolluyor.

gelen bilgileri dinliyorum ve Esp8266.readString(); komutu ile okuyorum.

20 - 30 karakterli bilginin bir bölümünden sonrasını hiç okumuyor.
kısa olanları genelde okuyor.

sorunum şu
gelen bilgide şu yazıyor.

#sorgu01#-#

bukadar basit bilgide ben "-" karakterini alarak işlem yaptırıyorum.
serial port biliyorsunuz bazen sapıtıp enteresan karakterler çıkartıyor ve #sorgu01#,# olarak değiştirebiliyor.

bu parazitlenmenin sebebi ne olabilir ? RX portunu dirençlerle 3.3v a sabitledim.

Bu sistemden %100 net bilgi alışverişi yapabilmem için öneriniz ne ?


Başlık: Ynt: arduino ile esp8266 arasında serial port okuma sorunu
Gönderen: LukeSkywalker - 08 Ağustos 2020, 13:39:55
Şemanızı görmeden, yaptığınız uygulama kodlarının ilgili kısmını görmeden bir şey söylemek zor. Normalde öyle bir şeyin olmaması lazım. Ben bahsettiğiniz şekilde bir karakter sapıtması hatasıyla hiç bir zaman karşılaşmıyorum.
Başlık: Ynt: arduino ile esp8266 arasında serial port okuma sorunu
Gönderen: istek61 - 08 Ağustos 2020, 14:57:04
(https://istek.org/esp8266.png)


esp bağlantım bu şekilde.


esp8266 Serial dinleme Kodum;

while(Serial.available()){
veri = Serial.readString();
if ( veri != "none") { Serial.println("#komut1#"); }
}

Arduino serial dinleme kodum;

#include <SoftwareSerial.h>
int ArduinoRx = 9; // Esp8266 Tx pin
int ArduinoTx = 10; // Esp8266 Rx pin
SoftwareSerial Esp8266(ArduinoRx, ArduinoTx);

void setup() {
  Serial.begin(115200);
  Esp8266.begin(115200);

}

void loop() {

while(Esp8266.available()){ 
String HttpVeri = Esp8266.readString();
HttpVeri.trim();
if ( HttpVeri == "#komut1" ) {  şu işlemi yap; }
}

}
Başlık: Ynt: arduino ile esp8266 arasında serial port okuma sorunu
Gönderen: muhendisbey - 08 Ağustos 2020, 23:20:38
Alıntı yapılan: istek61 - 07 Ağustos 2020, 21:44:45serial port biliyorsunuz bazen sapıtıp enteresan karakterler çıkartıyor

Sağlıklı bir seri port iletişiminde bu dediğiniz pek fazla olmaz.
Mesafe ve gürültü durumuna göre Max3232 ve blendajlı kablo kullanmanız gerekebilir.

- ye bakmak yerine #sorgu kısmını finduntil ile bakıp 01 lik kısmı parseInt yapabilirsiniz. Tabi #sorgu kısmı hiç değişmeyecekse.

Ben verileri garanti metotlarla okumak istiyorum derseniz parity, stop bit gibi seri iletişimin nimetlerinden faydalanabilirsiniz. Baud rate'i düşürmeyi deneyebilirsiniz.
Başlık: Ynt: arduino ile esp8266 arasında serial port okuma sorunu
Gönderen: mehmet - 08 Ağustos 2020, 23:33:48
Tek başına ESP yapamaz mı bu işi?
Başlık: Ynt: arduino ile esp8266 arasında serial port okuma sorunu
Gönderen: istek61 - 09 Ağustos 2020, 00:59:21
Alıntı yapılan: muhendisbey - 08 Ağustos 2020, 23:20:38Sağlıklı bir seri port iletişiminde bu dediğiniz pek fazla olmaz.
Mesafe ve gürültü durumuna göre Max3232 ve blendajlı kablo kullanmanız gerekebilir.

- ye bakmak yerine #sorgu kısmını finduntil ile bakıp 01 lik kısmı parseInt yapabilirsiniz. Tabi #sorgu kısmı hiç değişmeyecekse.

Ben verileri garanti metotlarla okumak istiyorum derseniz parity, stop bit gibi seri iletişimin nimetlerinden faydalanabilirsiniz. Baud rate'i düşürmeyi deneyebilirsiniz.

haklısınız daha kısa ve net bitlerle işi yürütmeye çalışacağım ama webden gelen bilgiyi mesela ekrana yazdırmak istesem bunun daha kolay bi yoluda olmalı aslında.
muhtemelen sorun gürültü, çünkü 1K ve 2K dirençleri taktığımda artık tek bitlik hatalar almaya başladım. finduntil kullansamda başlangıç ve sonlandırıcı arasında sorun çıktıgı için karakter hatasına çözüm bulamayacagım sanırım.

gürültüye 595 entegreyle 165 register entegreleri kullanıyorum. bunlar sorun olabilir.
yada esp8266 düşük amper çektiginde de gürültülere sebep olabiliyormuş.

yabancı kaynakları araştırıyorum. gürültüyü daha da nasıl azaltabilirim diye bakıyorum.
Başlık: Ynt: arduino ile esp8266 arasında serial port okuma sorunu
Gönderen: istek61 - 09 Ağustos 2020, 01:02:10
Alıntı yapılan: mehmet - 08 Ağustos 2020, 23:33:48Tek başına ESP yapamaz mı bu işi?

evet olacaktı fakat programlama alt yapısı avr olmadıgı için arduino ide de 165 entegresi için ShiftIn.h kütüphanesini kullandıgımda esp hata veriyor.
alternatifi ne olabilir bilmedigim için gürültüyü nasıl giderebilirime odaklandım.

belki direkt 0 ve 1 nolu pinleri kullanabilirim.
Başlık: Ynt: arduino ile esp8266 arasında serial port okuma sorunu
Gönderen: mehmet - 09 Ağustos 2020, 09:46:00
İlgili fonksiyonu kendiniz yazabilirsiniz.
Kütüphanelere neden bağımlı kalasınız?
Python ile de deneyebilirsiniz...
Başlık: Ynt: arduino ile esp8266 arasında serial port okuma sorunu
Gönderen: istek61 - 09 Ağustos 2020, 11:28:23
Alıntı yapılan: mehmet - 09 Ağustos 2020, 09:46:00İlgili fonksiyonu kendiniz yazabilirsiniz.
Kütüphanelere neden bağımlı kalasınız?
Python ile de deneyebilirsiniz...

python bilmiyorum. aslında lazım olsa 2 güne ögrenirim de bit decimal gibi kavramlarda entegrelerin çalışma mantıgına çok hakim degilim.
benim ki tamamen merakla gelişen bir sevgi. kabataslak bilgilerle baya güzel işler yaptım. şimdi daha az pinle daha çok buton ve led kontrolünü sağladım. sadece esp ile gelen bilgiyi php üzerinden işlemem gerek.
aklımda ki şey yenidoğan bebekler için kontrol mekanizması. anne ilaç verdiyse butona basacak gelen bilgiye göre o butonu aktif edip ledini yakacak. banyosu uyudugu uyandıgı saatleri aile ve Dr. u online olarak çizelgelerle görecek.
ek donanımlarla oda sıcaklıkları... çocugun ateş ölçümleri yine bu siteye düşecek

ama işte bilgiye gürültüsüz erişmem şart. çünkü çok kısa bilgiyi %95 kararlılıkla çekebiliyorum.
yaptığım cihazda lcd ekran olsa da aile ilac butonuna bassa ve ona çocugun ilaç içtigi saatleri çeksem bu sefer tuhaf karakterlerle karşılaşabilirim. buda cihazı çöp yapar. onun için çözemezsem dediginiz gibi shiftin.h yerine farklı yollar deneyip direkt esp üzerinden bu işi yönetecegim.
ilginize tşk ederim.
Başlık: Ynt: arduino ile esp8266 arasında serial port okuma sorunu
Gönderen: OG - 09 Ağustos 2020, 12:50:54
Donanım şartlarına uymak gerek,
Seri iletişim TTL ve uzun kablo ile yapılıyorsa zaten baştan hatalı.

CRC ekleyip, bilgiyi doğru alasıya tekrarlamak da konuya basit çözüm,
ancak data trafiği yoğun ise bu usul başka soruna sebep olur. 
Başlık: Ynt: arduino ile esp8266 arasında serial port okuma sorunu
Gönderen: Kabil ATICI - 09 Ağustos 2020, 18:50:05
Yazılımsal seri port kullanıyorsan, bu zaten sıkıntı.Çünkü önceliği olan bir işlem olursa, yazılımsal seri port devre dışı kalır. Bu arada while döngüsü ile iş yaptığında işlem tamamlanana kadar zaten başka bir işe bakmaz.

Eğer bu iletişim hızı konusunda kararlı isen, donanım olarak Seri portu olan modelleri seç. Örneğin PB uzantılı işlemcisi olan Arduino seçebilirsin.En azından iki tane donanımsal seri portu var.

Veya Mega tarzı bir donanım seçebilirsin ki kafadan 4 adet seri portu var.
Başlık: Ynt: arduino ile esp8266 arasında serial port okuma sorunu
Gönderen: istek61 - 09 Ağustos 2020, 22:56:59
Alıntı yapılan: mehmet - 09 Ağustos 2020, 09:46:00İlgili fonksiyonu kendiniz yazabilirsiniz.
Kütüphanelere neden bağımlı kalasınız?
Python ile de deneyebilirsiniz...

web sayfanızda pic16f877a ile 16 buton 16 led kontrolü yapmışsınız.
arduino bağlantı şematigi mevcutmudur
Başlık: Ynt: arduino ile esp8266 arasında serial port okuma sorunu
Gönderen: istek61 - 10 Ağustos 2020, 02:22:38
Alıntı yapılan: OG - 09 Ağustos 2020, 12:50:54Donanım şartlarına uymak gerek,
Seri iletişim TTL ve uzun kablo ile yapılıyorsa zaten baştan hatalı.

CRC ekleyip, bilgiyi doğru alasıya tekrarlamak da konuya basit çözüm,
ancak data trafiği yoğun ise bu usul başka soruna sebep olur. 

örnek bir kod var mı ?
Başlık: Ynt: arduino ile esp8266 arasında serial port okuma sorunu
Gönderen: istek61 - 10 Ağustos 2020, 04:18:29
üstatlara son bir sorum daha var.

115200 baud la Esp den arduino ya şu veriyi yolluyorum. string olarak 90 karakter sanırım.

#01#03:15#02#03:15#03#03:15#04#03:15#05#03:15#06#03:15#07#03:15#08#03:15#09#10/08/2020#10#


fakat arduino seriale gelen bilgi

#01#03:15#02#03:15#03#03:15#06#03:15#05#03:15#06#03:15#07#03:15#01

normalde arduino saniyede 11520 karakter okumuyor mu? neden eksik karakter geliyor ?


dinleme kodum ;

void loop() {
while(esp8266.available() > 0){ 
char veri = esp8266.read();
Serial.write(veri);
delay(1);
}
Başlık: Ynt: arduino ile esp8266 arasında serial port okuma sorunu
Gönderen: mehmet - 10 Ağustos 2020, 11:20:58
Alıntı yapılan: istek61 - 09 Ağustos 2020, 22:56:59web sayfanızda pic16f877a ile 16 buton 16 led kontrolü yapmışsınız.
arduino bağlantı şematigi mevcutmudur
Bazen kodu, bazen de şemayı bulabilirsiniz.
Biraz çaba ile olmayanı çözmek mümkündür.
Başlık: Ynt: arduino ile esp8266 arasında serial port okuma sorunu
Gönderen: mufitsozen - 10 Ağustos 2020, 13:01:17
Alıntı yapılan: istek61 - 10 Ağustos 2020, 04:18:29üstatlara son bir sorum daha var.

115200 baud la Esp den arduino ya şu veriyi yolluyorum. string olarak 90 karakter sanırım.

#01#03:15#02#03:15#03#03:15#04#03:15#05#03:15#06#03:15#07#03:15#08#03:15#09#10/08/2020#10#


fakat arduino seriale gelen bilgi

#01#03:15#02#03:15#03#03:15#06#03:15#05#03:15#06#03:15#07#03:15#01

normalde arduino saniyede 11520 karakter okumuyor mu? neden eksik karakter geliyor ?


dinleme kodum ;

void loop() {
while(esp8266.available() > 0){ 
char veri = esp8266.read();
Serial.write(veri);
delay(1);
}


Google'dan ARA! (http://www.just-fucking-google.it?s=arduino%20serial%20port%20read%20buffer%20size&e=finger)


Increasing the length of Serial Buffer in Arduino
Go to "arduino\hardware\arduino\avr\cores\arduino"
Edit "HardwareSerial.cpp" in Notepad.
Search for "#define SERIAL_BUFFER_SIZE 64"
Change it to "#define SERIAL_BUFFER_SIZE 256"
Save
Başlık: Ynt: arduino ile esp8266 arasında serial port okuma sorunu
Gönderen: mustafacan - 10 Ağustos 2020, 15:13:17
Çözüm şu
Sorunu bende yaşadım
Hızı ,9600 e çek ve 2 okuma arası 1 saniye boşluk ver
Şuan dediğin sistemin benzerini 6 aydır çalıştırıyorum. Tık yok
Başlık: Ynt: arduino ile esp8266 arasında serial port okuma sorunu
Gönderen: istek61 - 10 Ağustos 2020, 22:09:39
Alıntı yapılan: mufitsozen - 10 Ağustos 2020, 13:01:17Google'dan ARA! (http://www.just-fucking-google.it?s=arduino%20serial%20port%20read%20buffer%20size&e=finger)


Increasing the length of Serial Buffer in Arduino
Go to "arduino\hardware\arduino\avr\cores\arduino"
Edit "HardwareSerial.cpp" in Notepad.
Search for "#define SERIAL_BUFFER_SIZE 64"
Change it to "#define SERIAL_BUFFER_SIZE 256"
Save

sanırım yeni sürüm ide lerde bu dediginiz yok. aşagıda ki tanımlama yapılmış.
SERIAL_TX_BUFFER_SIZE>256
zaten  256 olarak ayarlı.
google da 10 gündür araştırma yapıyorum 500 site gezmişimdir. :) google öyle herşeyi çözemiyor. bu işte deneyim önemli.
birtek 9600 baud u denemedim.
esp 115200 ye ayarlı oldugu için sorun çıkarırmı onu deneyecektim. eger çıkarırsa 9600 e config ediliyor ama boot un yanma ihtimali var... bakalım deniyoruz:) yardımların için tşkler
Başlık: Ynt: arduino ile esp8266 arasında serial port okuma sorunu
Gönderen: istek61 - 11 Ağustos 2020, 01:48:30
neyse buraya kadarmış, sanırım esp yandı :)

9600 baud u denedikten bir süre sonra "Connection refused" hatası almaya başladım. wifi'ye de bağlanıyor fakat ne yaptıysam web sayfasından veriyi çekemiyor.
yeni esp alana kadar projeye ara veriyorum.
emegi gecen herkese teşekkür ederim.

konuyu özetlersek de;

standartlara göre
* Espden 64 byte 'ın üstünde bir veri softwareserial port üzerinden arduinoya gönderilirse. buffer fazlasını atıyor ve veri eksik gözüküyor. çözüm olarak softwareserial.cpp nin içindeki 64 değerini 128 yada 256 ya çıkarabiliriz.
ben yine de gönderilecek veriyi 32 byte lık parçalara bölerek göndermeyi daha mantıklı buluyorum. yeni esp gelirse kodu yazdıktan sonra test edip buraya atarım.

* espden gelen veride arada karakter sapması sorununa bir çözüm bulamadık. muhtemel sebebi kablolardan gelen verinin parazitlenmesi olabilir. 1117 regülatörünün yetersiz gelmesi olabilir. breadboard üzerinden test ettigim için bu konuda bir bilgi veremeyecegim. çin menşeili çakma esp de almış olabilirim...