Konuyu Oyla:
  • Derecelendirme: 5/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
TIdTCPServer'dan seçili client'a veri gönderme [çözüldü]
#11
(23-11-2020, Saat: 08:53)pro_imaj Adlı Kullanıcıdan Alıntı:
(22-11-2020, Saat: 15:19)Yasemin Adlı Kullanıcıdan Alıntı: Merhaba
Okulların tekrar kapanmasıyla Delphi ve Arduino üzerinde daha çok çalışmaya başladım. Aklımda şöyle bir IoT projesi tasarladım.

[img]P077FI.png[/img]

1. Aşama
Tek bir Arduino'dan adc değerini Ethernet üzerinden Delphi'ye gönderip değerleri gösterip duruma göre Arduino geri komut göndermek.
Bu aşamayı başarılı bir şekilde geçtim. Case durumuna göre tek bir Arduino'ya geri komut gönderip Arduino'da işlem yapabiliyorum.

procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
gelen:string;
begin
 gelen:=AContext.Connection.IOHandler.ReadLn();
 //gelen veriyi satı sonuna kadar oku
 Memo1.Lines.Add( DateTimeToStr( Now ) +'  '+ gelen);
 ProgressBar1.Position:= StrToInt( gelen );
 Label1.Caption:=gelen;
  case StrToInt(gelen) of
    0..500:AContext.Connection.IOHandler.WriteLn('led_yak');
    501..1023:AContext.Connection.IOHandler.WriteLn('led_sondur');
  end;
end;

[img]wqCjo3.png[/img]

giphy.gif
 
2. Aşama
İki adet Arduino'dan adc değerini okuyup Delphi'ye göndermek ve ayrı ayrı göstermek. Bu aşamayı da tamamladım.

procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
gelen: string;
Parcala: TArray<String>;
Arduino_nu:Integer;
adc_deger:string;
begin
  gelen:=AContext.Connection.IOHandler.ReadLn();
 //gelen veriyi satı sonuna kadar oku
 Parcala := gelen.Split(['-']);
 Arduino_nu:= StrToInt(parcala[0]);
 adc_deger:= Parcala[1];
 case Arduino_nu of
   1:begin
     Memo1.Lines.Add( DateTimeToStr(Now) +' '+ adc_deger );
     ProgressBar1.Position:= StrToInt( adc_deger);
     Label3.Caption:=adc_deger;
   end;
   2:begin
     Memo2.Lines.Add( DateTimeToStr(Now) +' '+ adc_deger );
     ProgressBar2.Position:= StrToInt( adc_deger);
     Label4.Caption:=adc_deger;
   end;
 end;
end;

giphy.gif  

3. Aşama Çözemediğim ve sormak istediğim kısım
1. Aşamada tek Arduino'ya komut gönderdiğim gibi burada da iki Arduino'dan istediğim Arduino'ya (client) komut göndermek istiyorum. Bunun için bir sonraki sayfada sorulan sorudaki aynı kodları kullanarak bir client listesi oluşturdum.

procedure TForm1.IdTCPServer1Connect(AContext: TIdContext);
var
 LHost: string;
 LItem: TListItem;
 List: TIdContextList;
begin
ListView1.Items.BeginUpdate;
 LItem:= ListView1.Items.Add;
 LItem.Caption := AContext.Connection.Socket.Binding.PeerPort.ToString;
 LItem.SubItems.Add(AContext.Connection.Socket.Binding.PeerIP);
 LItem.Data:= AContext;
ListView1.Items.EndUpdate;

ListBox1.Items.Add(AContext.Connection.Socket.Binding.PeerIP
 +' '+ AContext.Connection.Socket.Binding.PeerPort.ToString) ;

end;

Sonuçta şöyle bir ekranım oldu:

giphy.gif
 
Çözemediğim ve sormak istediğim kısım ise 
-iki Arduino'dan istediğime Nasıl komut gönderirim?
-OnExecute dışında buton click altında istediğim Arduino'ya komut gönderebilir miyim?


Değerli tavsiyelerinizi okumayı çok isterim.

@Yasemin Soru örnek niteliğinde güzel bir sonuca ulaşmış.

Burada merak ettiğim Arduino tarafında nasıl bir kod çalışıyor, bu konuda bilgi verebilir misiniz.

Projeler; 
1-Arduino tarafında çalışan kodlar. (Bu kısmında Delphi kodlama dışınca C kodları ile işlem yapıyor diye biliyorum.) 
2-Delphi tarafında veri çalışan kodlar.

Teşekkürler.

 Merhaba
 Gün içinde online derslerim vardı anca fırsat bulabildim. 
Arduino'yla Ethernet üzerinde iletişimi Arduino Ethermet Client örneği ile çalıştırdım. Tüm Arduino kodu bu örnek üzerine yazdım, koda ek olarak adc okuması ekledim.

 İyi çalışmalar
KOTO Teknik 10. sınıf öğrencisiyim.
Nextion HMI, Arduino ve Delphi FMX ile ilgileniyorsanız Yotube Kanalım size katkı sağlayabilir.


Cevapla
#12
(23-11-2020, Saat: 08:53)pro_imaj Adlı Kullanıcıdan Alıntı:
(22-11-2020, Saat: 15:19)Yasemin Adlı Kullanıcıdan Alıntı: Merhaba
Okulların tekrar kapanmasıyla Delphi ve Arduino üzerinde daha çok çalışmaya başladım. Aklımda şöyle bir IoT projesi tasarladım.

[img]P077FI.png[/img]

1. Aşama
Tek bir Arduino'dan adc değerini Ethernet üzerinden Delphi'ye gönderip değerleri gösterip duruma göre Arduino geri komut göndermek.
Bu aşamayı başarılı bir şekilde geçtim. Case durumuna göre tek bir Arduino'ya geri komut gönderip Arduino'da işlem yapabiliyorum.

procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
gelen:string;
begin
 gelen:=AContext.Connection.IOHandler.ReadLn();
 //gelen veriyi satı sonuna kadar oku
 Memo1.Lines.Add( DateTimeToStr( Now ) +'  '+ gelen);
 ProgressBar1.Position:= StrToInt( gelen );
 Label1.Caption:=gelen;
  case StrToInt(gelen) of
    0..500:AContext.Connection.IOHandler.WriteLn('led_yak');
    501..1023:AContext.Connection.IOHandler.WriteLn('led_sondur');
  end;
end;

[img]wqCjo3.png[/img]

giphy.gif
 
2. Aşama
İki adet Arduino'dan adc değerini okuyup Delphi'ye göndermek ve ayrı ayrı göstermek. Bu aşamayı da tamamladım.

procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
gelen: string;
Parcala: TArray<String>;
Arduino_nu:Integer;
adc_deger:string;
begin
  gelen:=AContext.Connection.IOHandler.ReadLn();
 //gelen veriyi satı sonuna kadar oku
 Parcala := gelen.Split(['-']);
 Arduino_nu:= StrToInt(parcala[0]);
 adc_deger:= Parcala[1];
 case Arduino_nu of
   1:begin
     Memo1.Lines.Add( DateTimeToStr(Now) +' '+ adc_deger );
     ProgressBar1.Position:= StrToInt( adc_deger);
     Label3.Caption:=adc_deger;
   end;
   2:begin
     Memo2.Lines.Add( DateTimeToStr(Now) +' '+ adc_deger );
     ProgressBar2.Position:= StrToInt( adc_deger);
     Label4.Caption:=adc_deger;
   end;
 end;
end;

giphy.gif  

3. Aşama Çözemediğim ve sormak istediğim kısım
1. Aşamada tek Arduino'ya komut gönderdiğim gibi burada da iki Arduino'dan istediğim Arduino'ya (client) komut göndermek istiyorum. Bunun için bir sonraki sayfada sorulan sorudaki aynı kodları kullanarak bir client listesi oluşturdum.

procedure TForm1.IdTCPServer1Connect(AContext: TIdContext);
var
 LHost: string;
 LItem: TListItem;
 List: TIdContextList;
begin
ListView1.Items.BeginUpdate;
 LItem:= ListView1.Items.Add;
 LItem.Caption := AContext.Connection.Socket.Binding.PeerPort.ToString;
 LItem.SubItems.Add(AContext.Connection.Socket.Binding.PeerIP);
 LItem.Data:= AContext;
ListView1.Items.EndUpdate;

ListBox1.Items.Add(AContext.Connection.Socket.Binding.PeerIP
 +' '+ AContext.Connection.Socket.Binding.PeerPort.ToString) ;

end;

Sonuçta şöyle bir ekranım oldu:

giphy.gif
 
Çözemediğim ve sormak istediğim kısım ise 
-iki Arduino'dan istediğime Nasıl komut gönderirim?
-OnExecute dışında buton click altında istediğim Arduino'ya komut gönderebilir miyim?


Değerli tavsiyelerinizi okumayı çok isterim.

@Yasemin Soru örnek niteliğinde güzel bir sonuca ulaşmış.

Burada merak ettiğim Arduino tarafında nasıl bir kod çalışıyor, bu konuda bilgi verebilir misiniz.

Projeler; 
1-Arduino tarafında çalışan kodlar. (Bu kısmında Delphi kodlama dışınca C kodları ile işlem yapıyor diye biliyorum.) 
2-Delphi tarafında veri çalışan kodlar.

Teşekkürler.

Projenin tüm kodlarını istemişsiniz. Bilmiyorum böyle istekler bana biraz garip geliyor. Ya ben çok ketumum ya siz çok geniş. Ama ben bir başkasının projenin tüm kodlarını bana vermesini aklımın ucundan bile geçirmem. En samimi arkadaşım olsa bile istesem vereceğini bilsem bile istemem. Bir başkasının da benden projenin tüm kodlarını istemesini de asla hoş karşılamam. Bilmiyorum ben de mi bir sorun var. Fikrimi paylaşmak istedim.
Cevapla
#13
(23-11-2020, Saat: 22:14)bibilen Adlı Kullanıcıdan Alıntı:
(23-11-2020, Saat: 08:53)pro_imaj Adlı Kullanıcıdan Alıntı: @Yasemin Soru örnek niteliğinde güzel bir sonuca ulaşmış.

Burada merak ettiğim Arduino tarafında nasıl bir kod çalışıyor, bu konuda bilgi verebilir misiniz.

Projeler; 
1-Arduino tarafında çalışan kodlar. (Bu kısmında Delphi kodlama dışınca C kodları ile işlem yapıyor diye biliyorum.) 
2-Delphi tarafında veri çalışan kodlar.

Teşekkürler.

Projenin tüm kodlarını istemişsiniz. Bilmiyorum böyle istekler bana biraz garip geliyor. Ya ben çok ketumum ya siz çok geniş. Ama ben bir başkasının projenin tüm kodlarını bana vermesini aklımın ucundan bile geçirmem. En samimi arkadaşım olsa bile istesem vereceğini bilsem bile istemem. Bir başkasının da benden projenin tüm kodlarını istemesini de asla hoş karşılamam. Bilmiyorum ben de mi bir sorun var. Fikrimi paylaşmak istedim.
@Yasemin Teşekkürler, belki birilerinin işine yarayacak, eğitim videolarını takip ediyorum eline sağlık.


@bibilen  Projeyi yapan kişi kodları paylaşmış, sizin ketum olarak devam etmeniz tercihiniz.

İyi çalışmalar.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  [ÇÖZÜLDÜ] Scrollbox içindeki nesneyi başka scrollbox a sürükle bırak wiseman 14 259 Dün, Saat: 21:36
Son Yorum: wiseman
  [ÇÖZÜLDÜ] WebDav ile Bulut Sunucuya Dosya Yükleme theSinan 9 2.833 14-01-2021, Saat: 01:48
Son Yorum: SenayAkgun
  [ÇÖZÜLDÜ] Çalışma Zamanında oluşturulan nesnede çalışma farkı wiseman 7 199 13-01-2021, Saat: 12:53
Son Yorum: PROGRAMADOR35
  Aynı anda 10.000 farklı cihazdan veri alışverişi yapma. pro_imaj 23 1.342 27-12-2020, Saat: 11:22
Son Yorum: pro_imaj
  [ÇÖZÜLDÜ] Tablodaki verileri belirli bir düzenle memoya aktarma wiseman 8 330 25-12-2020, Saat: 17:14
Son Yorum: hi_selamlar



Konuyu Okuyanlar: 1 Ziyaretçi