İçindekiler:

Arduino ve Ethernet'e Başlarken: 8 Adım
Arduino ve Ethernet'e Başlarken: 8 Adım

Video: Arduino ve Ethernet'e Başlarken: 8 Adım

Video: Arduino ve Ethernet'e Başlarken: 8 Adım
Video: Arduino Nedir? Nasıl Kurulur ve Neler Yapılabilir? #1 2024, Temmuz
Anonim
Arduino ve Ethernet'e Başlarken
Arduino ve Ethernet'e Başlarken

Arduino'nuz kablolu bir Ethernet bağlantısı aracılığıyla dış dünya ile kolayca iletişim kurabilir. Ancak başlamadan önce, bilgisayarların bir hub/yönlendiriciye RJ45 kabloları ile nasıl bağlanacağı, IP ve MAC adresinin ne olduğu vb. gibi temel bir bilgisayar ağı anlayışına sahip olduğunuz varsayılacaktır. Ayrıca, burada Ethernet hakkında iyi bir kısa özet var.

Görüntüye göre W5100 Ethernet denetleyici IC'sini (hemen hemen hepsi) kullanan bir Ethernet kalkanına sahip bir Arduino Uno'ya veya uyumlu bir panoya ihtiyacınız olacak.

Ayrıca, karta harici DC soketi üzerinden güç vermeniz gerekecektir – W5100 IC, USB gücünün sağlayabileceğinden daha fazla akım kullanır. 9V 1.5A fiş paketi/duvar siğili yeterli olacaktır.

Aşama 1:

resim
resim

Son olarak - kalkanlar ısınır - bu nedenle uzun süreli kullanımdan sonra W5100'e dokunmamaya dikkat edin. Emin değilseniz – bu W5100 IC'dir.

Adım 2:

Ethernet özellikli Arduino'nuza sahip olduğunuzda ve harici gücü bağladığınızda - her şeyin çalışıp çalışmadığını kontrol etmek iyi bir fikirdir. Arduino IDE'yi açın ve Dosya > Örnekler > Ethernet > Web Sunucusu'nu seçin. Bu, bir web tarayıcısındaki analog girişlerden toplanan verileri görüntüleyen basit bir çizim yükler. Ancak henüz yüklemeyin, küçük bir değişiklik gerekiyor.

Çizimin içinde yapılan Ethernet kalkanının IP adresini belirtmeniz gerekir. Bu basit, satıra gidin:

IPAdresi ip(10, 1, 1, 77);

Ve kendi kurulumunuza uyacak şekilde değiştirin. Örneğin, evimizde yönlendiricinin IP adresi 10.1.1.1, yazıcı 10.1.1.50 ve tüm bilgisayarlar …50'nin altındadır. Bu yüzden, hattı şu şekilde değiştirerek kalkan IP'mi 10.1.1.77 olarak ayarlayacağım:

bayt mac = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

Ancak sadece bir kalkanınız varsa, bırakın. Mevcut donanımınızla aynı bir MAC adresine sahip olma olasılığı çok, çok, istatistiksel olarak nadir olabilir, bu nedenle onu değiştirmek için başka bir zaman olabilir.

Aşama 3:

resim
resim

Ancak sadece bir kalkanınız varsa, bırakın. Mevcut donanımınızla aynı bir MAC adresine sahip olma olasılığı çok, çok, istatistiksel olarak nadir olabilir, bu nedenle onu değiştirmek için başka bir zaman olabilir.

Değişikliklerinizi yaptıktan sonra taslağı kaydedin ve yükleyin. Şimdi bir web tarayıcısı açın ve çizime girdiğiniz IP adresine gidin ve görüntüye benzer bir şeyle karşılaşmalısınız.

Ne oluyor?

Arduino, analog girişler tarafından ölçülen değerlerle basit bir web sayfası sunacak şekilde programlanmıştır. Güncellenmiş değerleri almak için tarayıcıyı yenileyebilirsiniz. Bu noktada – Ethernet kalkanlarının 10~13 numaralı dijital pinleri kullandığını, dolayısıyla bunları başka bir şey için kullanamayacağınızı lütfen unutmayın. Bazı Arduino Ethernet kalkanları, aynı zamanda başka bir dijital pin kullanan bir microSD kart soketine de sahip olabilir - bu yüzden hangisi olduğunu öğrenmek için belgelere bakın.

4. Adım:

Yine de artık Ethernet kalkanının çalıştığını görebildiğimize göre daha kullanışlı bir şeye geçebiliriz. Önceki örneği basit bir şekilde inceleyelim ve ağ üzerinden daha ilginç verileri nasıl dağıtabileceğimizi ve görüntüleyebileceğimizi görelim. Referans olarak, Ethernet ile ilgili tüm fonksiyonlar, Ethernet Arduino kütüphanesi tarafından gerçekleştirilir. Az önce kullandığımız taslağı incelerseniz ilginizi çekecek kısım şudur:

for (int analogChannel = 0; analogChannel < 6; analogChannel++) { int sensorReading = analogRead(analogChannel); client.print("analog giriş"); client.print(analogChannel); client.print(" is "); client.print(sensorReading); client.println(""); } client.println("");

Umarım taslağın bu bölümü tanıdık gelmiştir – serial.print()'i nasıl kullandığımızı hatırlayın; Geçmişte seri monitör kutusuna veri gönderirken? Şimdi biz de aynı şeyi yapabiliriz, ancak Ethernet kalkanımızdan bir web tarayıcısına veri göndermek – başka bir deyişle, çok basit bir web sayfası türüdür. Ancak biçimlendirmek için öğrenmek isteyebileceğiniz veya istemeyeceğiniz bir şey var. çıktı okunabilir bir biçimde – HTML kodu. Ben bir web sitesi geliştiricisi değilim (!) bu yüzden HTML'yi çok fazla araştırmayacağım.

Ancak, Arduino'nuz vb. ile güzel biçimlendirilmiş web sayfaları sunmak istiyorsanız, burada iyi bir başlangıç olacaktır. Basitlik açısından, aşağıdaki iki işlev en yararlı olacaktır:

client.print(" is ");

Müşteri.baskı (); metin veya veriyi web sayfasına geri göndermemizi sağlar. serial.print() ile aynı şekilde çalışır, yani orada yeni bir şey yok. Veri türünü ayrıca serial.print() ile aynı şekilde belirtebilirsiniz. Doğal olarak, verileri geri göndermek için de kullanabilirsiniz. Diğer yararlı satır:

client.println("");

bu, HTML kodunu web tarayıcısına geri göndererek yeni bir satır başlatmasını söyler. Aslında satır başı/yeni satıra neden olan kısım, bu, yeni bir satır için bir HTML kodudur (veya "etiket").

Bu nedenle, daha ayrıntılı web sayfası görüntüleri oluşturuyorsanız, client.print(); içine başka HTML etiketlerini ekleyebilirsiniz. Beyan. HTML komutları hakkında daha fazla bilgi edinmek istiyorsanız, işte iyi bir eğitim sitesi.

Son olarak - çizimin verileri yalnızca talep edildiğinde, yani web tarayıcısından bir talep aldığında göndereceğini unutmayın.

Adım 5: Arduino'nuza İnternet Üzerinden Erişme

Arduino'nuza İnternet Üzerinden Erişmek
Arduino'nuza İnternet Üzerinden Erişmek

Çok uzak çok iyi. Peki ya Arduino'nuza yerel ağın dışından erişmek istiyorsanız?

Statik bir IP adresine ihtiyacınız olacak - yani internet servis sağlayıcınızın bağlantınıza atadığı IP adresinin aynı kalması gerekiyor. Statik bir IP'niz yoksa, modeminizi/yönlendiricinizi kalıcı olarak değiştirdiğiniz sürece IP'niz değişmemelidir. Ancak bu optimal bir çözüm değildir.

ISS'niz size statik bir IP sunamıyorsa, Dinamik DNS sunan bir kuruluş kullanarak projede ilerleyebilirsiniz. Bu kuruluşlar size bir sayı yerine kendi statik IP ana bilgisayar adınızı (örn. Anladığım kadarıyla, modeminizin bu DDNS hizmetlerini desteklemesi (içinde yerleşik bir istemciye sahip olması) gerekiyor.

Örnek olarak, iki şirket No-IP veDynDNS.com'dur. Lütfen bu ikisini kullanmadığımı, sadece örnek olarak sunulduğunu unutmayın. Şimdi, IP adresinizi bulmak için… genellikle bu, yönlendiricinizin yönetim sayfasına giriş yaparak bulunabilir - genellikle 192.168.0.1'dir, ancak farklı olabilir. Donanımı sağlayıp sağlamadıklarını tedarikçinize veya ISS'nize danışın. Bu örnek için bir web tarayıcısından 10.1.1.1 girersem ve modem yönetim şifremi girdikten sonra resimdeki gibi aşağıdaki ekran geliyor.

6. Adım:

resim
resim

Aradığınız şey yukarıdaki resimde de görebileceğiniz gibi WAN IP adresinizdir. Şakacıları uzak tutmak için adresimin bir kısmını kararttım.

Yapılacak bir sonraki şey, bağlantı noktası iletmeyi açmaktır. Bu, yönlendiriciye dış dünyadan gelen istekleri nereye yönlendireceğini söyler. Modem böyle bir talep aldığında, bu talebi Ethernet kalkanımızın port numarasına göndermek istiyoruz. Kullanmak:

EthernetSunucu sunucusu(125);

taslağımızdaki fonksiyon port numarasını 125 olarak belirlemiştir. Her modemin konfigürasyon ekranı farklı görünecektir, ancak örnek olarak resimde bir tane var.

7. Adım:

resim
resim

Yukarıdaki resimde bir numaralı satırdan görebileceğiniz gibi, gelen port numaraları 125 olarak ayarlandı ve Ethernet kalkanının IP adresi 10.1.1.77 olarak ayarlandı – krokideki ile aynı.

Ayarları kaydettikten sonra hepimiz hazırız. Ethernet kalkanımın harici adresi WAN:125 olacak, bu yüzden Arduino'ya erişmek için sonunda:125 ile WAN adresimi uzaktaki web cihazının tarayıcısına yazacağım, bu da evde yalnız Ethernet donanımıyla bağlantı kuracak.

Ayrıca, 125 numaralı bağlantı noktasının gelen isteklere "açık" olmasını sağlamak için modeminizin güvenlik duvarı ayarlarını değiştirmeniz gerekebilir. Bunun nasıl yapılacağı hakkında daha fazla bilgi için lütfen modem belgelerinize bakın. Artık özgür dünyadaki herhangi bir İnternet bağlantılı cihazdan, WAN ve port numaramı URL alanına girebilir ve sonuçları alabilirim. Örneğin, bir telefondan LTE mobil veri yoluyla İnternet'e bağlandığında.

Yani bu aşamada artık Arduino'nuz tarafından oluşturulan basit bir web sayfasında verileri görüntüleyebilir ve sınırsız İnternet erişimi olan her yerden erişebilirsiniz. Önceki Arduino bilginizle artık sensörlerden veya bir çizimin diğer bölümlerinden gelen verileri kullanabilir ve geri almak için görüntüleyebilirsiniz.

8. Adım: Bir Web Sayfasında Sensör Verilerini Görüntüleme

Bir Web Sayfasında Sensör Verilerini Görüntüleme
Bir Web Sayfasında Sensör Verilerini Görüntüleme

Bir web sayfasında sensör verilerinin görüntülenmesine örnek olarak, ucuz ve popüler bir sıcaklık ve nem sensörü olan DHT22'yi kullanalım. Bu sayfada bulabileceğiniz DHT22 Arduino kütüphanesini kurmanız gerekecek. DHT22'yi ilk kez kullanıyorsanız, nasıl çalıştığını anlamak için kitaplıkta bulunan örnek çizimi deneyin.

DHT22'yi veri pini ile Arduino D2'ye, Vin'i 5V pinine ve GND'yi … GND'ye bağlayın. Şimdi çizimimiz için - bir web sayfasında sıcaklık ve nemi görüntülemek için. HTML'de değilseniz, kodu oluşturmak için bunun gibi çevrimiçi hizmetleri kullanabilirsiniz ve daha sonra çizimde kullanmak üzere değiştirebilirsiniz. Aşağıdaki örnekte, DHT22'den alınan sıcaklık ve nem verileri basit bir web sayfasında sunulmaktadır:

#include "SPI.h"#include "Ethernet.h"

// DHT22 sensörü için

#include "DHT.h" #define DHTPIN 2 #define DHTTYPE DHT22

// Kontrol cihazınız için aşağıya bir MAC adresi ve IP adresi girin.

// IP adresi yerel ağınıza bağlı olacaktır: byte mac = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAdresi ip(10, 1, 1, 77);

// Ethernet sunucu kitaplığını başlat

// kullanmak istediğiniz IP adresi ve port ile // (port 80 HTTP için varsayılandır): EthernetServer server(125); DHT dht(DHTPIN, DHTTYPE);

geçersiz kurulum()

{ dht.begin(); // Seri iletişimi açın ve bağlantı noktasının açılmasını bekleyin: Serial.begin(9600); while (!Seri) {; // seri bağlantı noktasının bağlanmasını bekleyin. Yalnızca Leonardo için gerekli } // Ethernet bağlantısını ve sunucuyu başlatın: Ethernet.begin(mac, ip); server.begin(); Serial.print("sunucu şu anda "); Serial.println(Ethernet.localIP()); }

boşluk döngüsü()

{ // gelen istemcileri dinle EthernetClient client = server.available(); if (istemci) { Serial.println("yeni istemci"); // bir http isteği boş bir satırla biter boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); Seri.write(c); // satırın sonuna geldiyseniz (yeni satır // karakteri aldıysanız) ve satır boşsa, http isteği sona erdi, // böylece bir yanıt gönderebilirsiniz if (c == 'n' && currentLineIsBlank) { // standart bir http yanıt başlığı gönder client.println("HTTP/1.1 200 OK"); client.println("İçerik Türü: metin/html"); client.println("Bağlantı: kapat"); // yanıtın tamamlanmasından sonra bağlantı kapatılacak client.println("Yenile: 30"); // her 30 saniyede bir sayfayı otomatik olarak yenile client.println(); client.println("");

client.println("");

// DHT22 sensöründen veri al

float h = dht.readHumidity(); float t = dht.readTemperature(); Seri.println(t); Seri.println(h);

// buradan web sayfasını oluşturmak için kendi HTML kodumuzu girebiliriz

client.print( Ofis Hava Durumu

Ofis sıcaklığı - );

client.print(t);

client.print( Santigrat derece

);

müşteri.baskı("

Nem - );

client.print(h);

client.print( yüzde

);

müşteri.baskı("

Sayfa her 30 saniyede bir yenilenir<

. );

kırmak;

} if (c == 'n') { // yeni bir satır başlatıyorsunuz currentLineIsBlank = true; } else if (c != 'r') { // geçerli satırda bir karakter aldınız currentLineIsBlank = false; } } } // web tarayıcısına veri gecikmesini alması için süre verin(1); // bağlantıyı kapat: client.stop(); Serial.println("istemci bağlantısı kesildi"); } }

Daha önce kullandığımız IDE'nin web sunucusu örnek taslağının birkaç değişiklikle değiştirilmiş halidir. İlk olarak, web sayfası her 30 saniyede bir otomatik olarak yenilenir – bu parametre satırda ayarlanır:

client.println("Yenile: 30"); // her 30 saniyede bir sayfayı otomatik olarak yenile

… ve web sayfamız için özel HTML satırın altında başlar:

// buradan web sayfasını oluşturmak için kendi HTML kodumuzu girebiliriz

Ardından, ihtiyacınız olan düzeni oluşturmak için gerekli HTML'yi client.print() fonksiyonlarının içine kolayca ekleyebilirsiniz. Son olarak – işte örnek çizimin örnek bir ekran görüntüsü.

İşte karşınızda, Arduino'nuzun dış dünyayla etkileşime girmesi için başka bir yararlı yol. Bu gönderi size pmdway.com tarafından getirildi - dünya çapında ücretsiz teslimat ile üreticiler ve elektronik meraklıları için her şey.

Önerilen: