Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Diğer => Konuyu başlatan: Firzen - 18 Eylül 2022, 20:03:03

Başlık: ESP8266 WiFiUDP
Gönderen: Firzen - 18 Eylül 2022, 20:03:03
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 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.

Başlık: Ynt: ESP8266 WiFiUDP
Gönderen: brandice5 - 18 Eylül 2022, 22:20:01
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.
Başlık: Ynt: ESP8266 WiFiUDP
Gönderen: Firzen - 19 Eylül 2022, 00:33:13
Demek istediğinizi anladım sanırsam. Haberleşme/internet bilmediğim için soruyorum zaten. Ben olayı şöyle algılamıştı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?

 
Başlık: Ynt: ESP8266 WiFiUDP
Gönderen: brandice5 - 19 Eylül 2022, 01:53:00
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.
Başlık: Ynt: ESP8266 WiFiUDP
Gönderen: Firzen - 19 Eylül 2022, 14:46:43
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.