arduino ile esp8266 arasında serial port okuma sorunu

Başlatan istek61, 07 Ağustos 2020, 21:44:45

istek61

İ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 ?


Meraklı Acemi

LukeSkywalker

Ş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.

istek61




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; }
}

}
Meraklı Acemi

muhendisbey

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.
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

istek61

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.
Meraklı Acemi

istek61

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.
Meraklı Acemi

mehmet

İlgili fonksiyonu kendiniz yazabilirsiniz.
Kütüphanelere neden bağımlı kalasınız?
Python ile de deneyebilirsiniz...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

istek61

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.
Meraklı Acemi

OG

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. 
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Kabil ATICI

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.
ambar7

istek61

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
Meraklı Acemi

istek61

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ı ?
Meraklı Acemi

istek61

ü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);
}
Meraklı Acemi

mehmet

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.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr