IP'ye String Ifade Koymak

Merhaba, Elimde Leonardo ETH ile güzel sıcaklık ölçüm web server uygulamaları yapıyorum. Bildiğiniz üzere, kodlamanın başında byte mac = { 0x90, 0xA2, 0xDA, 0x10, 0xE3, 0x29 }; IPAddress ip(192,168,1,149); EthernetServer server(80); ifadeleri var. Bu bağlamda browser’da 192.168.1.149 yazınca cihazın içindeki web sayfasını görüntüleyebiliyorum. Ben istiyorum ki browser’a IP girmek yerine string bir ifade mesela 9A girebileyim. Bu 9A lokasyonun ismi. Yani uzun uzadıya IP girmektense lokasyon adıyla bunu yapmak nasıl mümkün olabilir? Tşk.

mdns kurman lazım arduıno destekliyormu bilmiyorum esp32 ve esp8266 da mdns servisini aktif edince lokal ağda boyle kısaltılmiş isimlere ip atayabiliyor

Bu uygulama ile ilgili olarak, aşağıdaki kodlama çalışması Arduino Leonardo ETH+LM35 içeren basit bir webserver sıcaklık izleme sistemidir. Browser’a ilgili IP numarasını yazınca sıcaklık ölçüm değeri karşıma çıkıyor. [code] include < SPI.h> include < Ethernet2.h> byte mac = { 0x90, 0xA2, 0xDA, 0x10, 0xE3, 0x29 }; IPAddress ip(192, 168, 1, 149); EthernetServer server(80); int sicaklik=0; const int sicaklik_pin=A0; void setup() { Serial.begin(9600); while (!Serial) { ; } Ethernet.begin(mac, ip); server.begin(); Serial.print(“server is at “); Serial.println(Ethernet.localIP()); } void olcum() { sicaklik=analogRead(sicaklik_pin); sicaklik=sicaklik*0.48828125; delay(1000); } void loop() { olcum(); EthernetClient client = server.available(); if (client) { Serial.println(“new client”); boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); if (c == ‘\n’ && currentLineIsBlank) { client.println(“HTTP/1.1 200 OK”); client.println(“Content-Type: text/html”); client.println(“Connection: close”); client.println(“Refresh: 10”); client.println(); client.println(””); client.println(“”); client.println("

“); client.println(”“); client.println(”“);
client.println(”.style1{text-align: center;font-size: xx-large;}“);
client.println(”“); client.println(”“); client.println(”“); client.println(”
“); client.println(sicaklik); client.println(”
“); client.println(”“); client.println(”"); break; } if (c == ‘\n’) { currentLineIsBlank = true; } else if (c != ‘\r’) { currentLineIsBlank = false; } } } delay(1); // close the connection: client.stop(); Serial.println(“client disconnected”); } } [/code] IP yerine 9A gibi string bir ifade yazmak için başla forumlarda aşağıdaki gibi bir kod çözümü sundular ama bu çözümü benim kodlamama nasıl entegre edeceğim orası muamma. Bu konuda yardımcı olabilecek var mı acaba? Tşk. #include \< IPAddress.h\> void setup() { Serial.begin(9600); IPAddress ip(192, 168, 1, 149); char IPstring[16]; IPtoa(ip, IPstring); Serial.println(IPstring); } void loop() {} // convert IPAddress to char array and put it in the passed buffer void IPtoa(const IPAddress & IP, char IPcharBuffer[]) { #if defined(\_\_ARDUINO\_X86\_\_) sprintf (IPcharBuffer, "%u", IP[0]); #else //defined(\_\_ARDUINO\_X86\_\_) utoa(IP[0], IPcharBuffer, 10); //convert the first octet #endif //defined(\_\_ARDUINO\_X86\_\_) for (byte octetCount = 1; octetCount \< 4; octetCount++) { //convert the other 3 octets strcat(IPcharBuffer, "."); char octetChar[3 + 1]; //3 digit byte + null terminator #if defined(\_\_ARDUINO\_X86\_\_) sprintf (octetChar, "%u", IP[octetCount]); #else //defined(\_\_ARDUINO\_X86\_\_) utoa(IP[octetCount], octetChar, 10); //convert the octet #endif //defined(\_\_ARDUINO\_X86\_\_) strcat(IPcharBuffer, octetChar); } }

bu kod parçası ip adresini sizin kodunuzun içinde ipden stringe çeviriyor.ve bu sizin istediğiniz gibi kısaltma değil 123,45,67 şeklindeki 3 bytelık paketi “123.45.67” şekline dönüştürüyor. sizin aradığınız tarayıcının adres hanesinde a9.local dediğinizde 192.168.1.149 a gidecek ve a10.lokal dediğinizde 192.168.150 ye gidecek bir düzen kurmanız lazım. buna multicast dns deniyor yani mdns esp8266 da bu yapılıyor ip yerine verilen isimden web sunucuya ulaşılıyor. ama kablolu ethernetteki kod için biraz araştırmanız lazım esp8266 için şu link var https://www.megunolink.com/documentation/connecting/mdns-browser/ ethernet olanı bulamadım

Evet okoman, Dediğinizi anlıyorum. Teşekkür ediyorum..Peki şunu sorayım yeri gelmişken. Bu kurduğum sistem yani Leonardo ETH + LM635 sıcaklık izleme sistemi şu an evimdeki network’e bağlı. Arduino’da hiçbir değişiklik yapmadan,dediğim gibi bir isimlendirmeyi modem ayarları üzerinden yapabilir miyim? Ya da modem değil de, sadece kendi PC’mdeki browser’da böyle bir ayar çekme ihtimalim var mı? O bile bir çözüm benim için.

Aslında son dediğimi buldum. Direkt browser’da yer işareti koyarak yapabiliyorum. Yer işaretine istediğim ismi koyabiliyorum. Tabi bu sadece kendi PC’mi ilgilendiriyor. O zaman şunu sorayım, modemden yapılabilecek merkezi bir ayar bulunuyor mu? Yani 192.168.1.149 için 9A deme şansım var mı modemde? Böylece aynı ağdaki tüm PC ler için ortak bir dil kullanmış olabileceğim. Tşk.

evde lokal bir web sunucu kurabilirsiniz. tum verileri bu sunucuya atarsınız. sunucudaki web sayfası da gelen verıleri bir sayfada toplu halde gösterir. evde bir sunucunuz varsa lokal dns kurulabilir sanırım hiç denemedim. yada pc nizde hosts doayası vardır bu dosya içinde tanımlama yaparak bir isim ve ip adresine yönlendirme yapabilirsiniz.