Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

ESP8266 WiFiUDP

Başlatan Firzen, 18 Eylül 2022, 20:03:03

Firzen

Herkese Merhabalar,

ESP8266 ile bir kaç deneme yapmaya başladım ve Üniversitede laboratuvara giriş için küçük bir panel tasarımı yapmaya karar verdim.

Bu panel moduler olacağı için bazı isterleri aşağıda sıralıyorum: Bu yapılanlar için 8266'da yapılması planlananları yazıyorum.

  • Öncelikle panele cep telefonu vs ile bağlanıp ardından ortamdaki WiFi Router'ın bilgileri girilecek. Sistemi internete bağlamak için.
  • Ardından, 8266 otomatik IP alacak ve devamından UART RX-TX bilgisini UDP üzerinden yayın yapacak.

Öncelikle hangi veri gönderilecek ve nasıl gönderilecek kısmı ile uğraştığımdan sonrasından ESP kısmı da bana kaldı.

WifiUDP vs ile denemelere başladım.

Sistemde telefondan önce cihaza ardından Router'a bağlama kısmını hallettim. Aklıma takılan nokta ise UDP kısmı orada IP adresi girmemi istiyor ama ben IP adresini otomatik çekmesini istiyorum.

Bu konuda bir fikti olan var mı acaba?

Teşekkürler.

The University of Sheffield                                  (PhD) Automatic Control and Systems Engineering

brandice5

Sorunu tam olarak anlamadım. ESP8266'nin otomatik (DHCP'den) aldığı adresi mi öğrenmeye çalışıyorsun?
Normalde 2 IP adresi bilmen gerekiyor. Birincisi ESP8266'nin UART dan aldığı bilgileri göndereceği adres, ikinsici senin routera üzerinden ESP8266'ya veri göndereceğin adres, yani ESP8266 nin kendi adresi.

Firzen

Demek istediğinizi anladım sanırsam. Haberleşme/internet bilmediğim için soruyorum zaten. Ben olayı şöyle algılamıştım:

  • Öncelikle ESP8266 wifi ile bağlan
  • Ardından Router bilgilerini gir
  • Sistem reset attıktan sonra otomatik IP atasın kendine
  • ve devamında kendi üzerinde yayın yapsın ve biz ona erişim sağlayalım.

Sanırım bu dediğim şekilde değil sizin dediğiniz gibi 2 IP'de bilmek gerekiyor? Bu dediğim gibi yapmak için ne yapmam lazım? webserver vs mi?

 
The University of Sheffield                                  (PhD) Automatic Control and Systems Engineering

brandice5

Sanırım "Serial to Ethernet Converter" tarzı birşey yapmaya çalışıyorsunuz.
Bunu yapmanın bir kaç yolu var, ama hangisi size tam uyar bilemiyorum. Aşağıdaki gibi bir sistem olduğunu farzedelim.

(Remote PC)--->[WiFi Router]<---(ESP8266)
  10.0.0.2                 10.0.0.1             10.0.0.3

yani elimizde bir wifi router ve bu router'a bağlı bir PC ve ESP8266 var diyelim. Bunların temsili IP adreslerini altlarına yazdım.

Şimdi burada wifi router her iki cihazın da IP adreslerini biliyor ama iki cihaz birbirlerinin adreslerini bilmiyor.
Yani ESP8266 kendi seri portundan bir veri okuduğu zaman bunu nereye göndereceğini bilmiyor. Aynı şekilde eğer PC üzerinden ESP8266'ye birşey göndermek istiyorsanız siz de ESP8266'nin IP adresini bilmiyorsunuz.

Bunu aşmanın bir yolu "hostname" kullanmaktır. ESP8266'ye bir hostname atarsanız, bu hostname'i PC üzerinden ESP8266'ye erişirken kullanabilirsiniz. WiFi router'a yapacağınız bir DNS sorgusu size ESP8266'nin IP adresini verecektir.

Ama hala eksik bir nokta var, ESP8266 PC'nin Ip adresini nasıl öğrenecek? Aslında UDP yerine TCP kullansaydınız bu çok kolaydı. TCP üzerinden veri göndermeden önce bağlantı kurmanız gerekir, yani TCP "connection oriented" bir protokoldür. TCP ile karşıya bağlantı kurduğunuz anda karşı taraf otomaik olarak IP adresini öğrenir. UDP "connectionless" bir ptotkol olduğu için, PC tarafı herhangi bir veri göndermeden karşı tarafın IP adresini öğrenemezsiniz. Bunu UDP üzerinden bir "transport layer" implemente ederek çözebilirsiniz.

Dediğim gibi değişik yollar var. Ben hala tam olarak isterleri anlayamadım. Mesela sadece seriport bilgisini monitor etmek, çift taraflı veri göndermek istemiyorsanız, ESP8266' tarafında seri port verisini UDP üzerinden "broadcast" edebilirsiniz. Broadcast için spesifik bir IP adresi gerekmez, broadcast adresi her zaman "255.255.255.255" dir. PC tarafında ise, wifi router'a bağlı herhangi bir PC/cihaz bu broadcast yapılan veriyi okuyabilir. Gönderdiğiniz bilgileri başkalarının görmesini istemiyorsanız bu iyi bir yöntem değil.

Firzen

Alıntı yapılan: brandice5 - 19 Eylül 2022, 01:53:00Sanırım "Serial to Ethernet Converter" tarzı birşey yapmaya çalışıyorsunuz.
Bunu yapmanın bir kaç yolu var, ama hangisi size tam uyar bilemiyorum. Aşağıdaki gibi bir sistem olduğunu farzedelim.

(Remote PC)--->[WiFi Router]<---(ESP8266)
  10.0.0.2                 10.0.0.1             10.0.0.3

yani elimizde bir wifi router ve bu router'a bağlı bir PC ve ESP8266 var diyelim. Bunların temsili IP adreslerini altlarına yazdım.

Şimdi burada wifi router her iki cihazın da IP adreslerini biliyor ama iki cihaz birbirlerinin adreslerini bilmiyor.
Yani ESP8266 kendi seri portundan bir veri okuduğu zaman bunu nereye göndereceğini bilmiyor. Aynı şekilde eğer PC üzerinden ESP8266'ye birşey göndermek istiyorsanız siz de ESP8266'nin IP adresini bilmiyorsunuz.

Bunu aşmanın bir yolu "hostname" kullanmaktır. ESP8266'ye bir hostname atarsanız, bu hostname'i PC üzerinden ESP8266'ye erişirken kullanabilirsiniz. WiFi router'a yapacağınız bir DNS sorgusu size ESP8266'nin IP adresini verecektir.

Ama hala eksik bir nokta var, ESP8266 PC'nin Ip adresini nasıl öğrenecek? Aslında UDP yerine TCP kullansaydınız bu çok kolaydı. TCP üzerinden veri göndermeden önce bağlantı kurmanız gerekir, yani TCP "connection oriented" bir protokoldür. TCP ile karşıya bağlantı kurduğunuz anda karşı taraf otomaik olarak IP adresini öğrenir. UDP "connectionless" bir ptotkol olduğu için, PC tarafı herhangi bir veri göndermeden karşı tarafın IP adresini öğrenemezsiniz. Bunu UDP üzerinden bir "transport layer" implemente ederek çözebilirsiniz.

Dediğim gibi değişik yollar var. Ben hala tam olarak isterleri anlayamadım. Mesela sadece seriport bilgisini monitor etmek, çift taraflı veri göndermek istemiyorsanız, ESP8266' tarafında seri port verisini UDP üzerinden "broadcast" edebilirsiniz. Broadcast için spesifik bir IP adresi gerekmez, broadcast adresi her zaman "255.255.255.255" dir. PC tarafında ise, wifi router'a bağlı herhangi bir PC/cihaz bu broadcast yapılan veriyi okuyabilir. Gönderdiğiniz bilgileri başkalarının görmesini istemiyorsanız bu iyi bir yöntem değil.

Aslinda son paragrafta dedigim islemi anlamissiniz. Benim yapmak istedigim tek tarafli acik cevrim bir sistem. Yani ESP8266 Router'a baglanacak ve ardindan ustundeki veriler yayin yapacak. Bense yayin verilerini toplayacagim. ESP8266'ya bir veri gondermeyecegim.
The University of Sheffield                                  (PhD) Automatic Control and Systems Engineering