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("<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>");
    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.

    [code]
    #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);
    }
    }
    [/code]
  • 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.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook
Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.