Arduino Ethernet Kalkanı Eğitimi

Arduino Ethernet Shield, Arduino'nuzu kolayca internete bağlamanızı sağlar. Bu kalkan, Arduino'nuzun internet bağlantısı ile dünyanın herhangi bir yerinden veri gönderip almasını sağlar. Bir web sitesinden robotları uzaktan kontrol etmek gibi eğlenceli şeyler yapmak için kullanabilir veya her yeni mesaj aldığınızda bir zil çalabilirsiniz. Bu kalkan, projenizi anında internete bağlamanıza izin vererek sonsuz miktarda olasılık açar.

Adım 1: Kurulum

Ayarlamak, başlık pimlerini kalkandan Arduino'nuza takmak kadar basittir.

Burada kullanılan Ethernet Kalkanının RadioShack'te satıldığını unutmayın. Ancak, RadioShack artık olmadığından, kalkanın gelmesi daha zordur. Amazon'da bulunan bu genel ethernet kalkanı da çalışmalıdır. * Arduino Uno Rev. 3 panoları (veya üstü) ile kullanılması amaçlanmıştır. Arduino'nun önceki sürümlerine takmak için çok fazla pim var.

* Bunu bizzat onaylamadım. Alıcı dikkat!

Adım 2: Kalkan Özellikleri

Ethernet Kalkanı, dahili bir 16K tamponu olan W51000 yongasını temel alır. 10 / 100Mb'ye kadar bağlantı hızına sahiptir. Bu, etraftaki en hızlı bağlantı değil, aynı zamanda burnunuzu açacak bir şey değil.

Geliştirme ortamıyla birlikte gelen Arduino Ethernet kütüphanesine dayanır.

Ayrıca bir sürü veri depolamanızı ve sadece Arduino'nuzu kullanarak tüm web sitelerini sunmanızı sağlayan yerleşik bir mikro SD yuvası da vardır. Bu, yazılımla birlikte verilmeyen harici bir SD kitaplığının kullanılmasını gerektirir. SD kartın kullanılması bu Talimat'ın kapsamında değildir. Ancak, kablosuz SD kart talimatı 8. Adımında ele alınmıştır.

Kartta ayrıca Arduino'nuzu bir Ethernet bağlantısı üzerinden çalıştırmanızı sağlayan bir Ethernet Üzerinden Güç (PoE) modülü eklenmesi için de alan vardır.

Tam teknik genel bakış için resmi Ethernet Kalkanı sayfasına bakın.

3. Adım: Başlayın

Arduino'yu bilgisayarınızın USB bağlantı noktasına ve Ethernet korumasını yönlendiricinize (veya doğrudan internet bağlantısına) takın.

Ardından, Arduino geliştirme ortamını açın. Arduino 1.0 veya sonrasına yükseltmenizi tavsiye ederim (eğer henüz yapmadıysanız). Yazılımın bu sürümü yerleşik DHCP desteğine sahiptir ve bir IP adresinin manuel olarak yapılandırılmasını gerektirmez.

Anakartınıza hangi IP adresinin atandığını bulmak için DhcpAddressPrinter çizimini açın. Bunu şu adreste bulabilirsiniz:

Dosya -> Örnekler -> Ethernet -> DhcpAddressPrinter

Açıldıktan sonra Mac adresini değiştirmeniz gerekebilir. Ethernet kalkanının daha yeni sürümlerinde, bu adresi panoya yapıştırılmış bir çıkartmada görmelisiniz. Bir çıkartma eksikse, benzersiz bir mac adresi oluşturmak işe yarayacaktır. Birden fazla kalkan kullanıyorsanız, her birinin benzersiz bir mac adresi olduğundan emin olun.

Mac adresi düzgün bir şekilde yapılandırıldıktan sonra, çizimi Arduino'nuza yükleyin ve seri monitörü açın. Kullanılan IP adresini yazdırmalıdır.

4. Adım: Sunucu

HTML sayfası veya sohbet sunucusu olarak işlev yüklemek için Arduino Ethernet kalkanını web sunucusu olarak kullanabilirsiniz. Web tarayıcısı gibi bir istemci tarafından gönderilen istekleri de ayrıştırabilirsiniz. Aşağıdaki iki örnek, HTML sayfalarını sunmak ve URL dizelerini ayrıştırmak için nasıl kullanılacağını gösterir.

Akılda tutulması gereken önemli bir nokta, çalışması için Arduino'nuzun IP adresini aşağıdaki örneklerin her ikisine de girmeniz gerekeceğidir.

Aşağıdaki kod, bir düğmeye basılarak sunulan web sayfasını değiştirir:
 / * Randy Sarafan tarafından bir araya getirilen Web Sunucusu Demosu Sunulan sayfayı değiştiren basit bir web sunucusu, bir tuşa basılarak tetiklenir. Devre: * 10, 11, 12, 13 pinlerine bağlı Ethernet kalkanı * Pin D2 ve 5V arasında bir düğme bağlayın * Pin D2 ile toprak arasında 10K direnç bağlayın Neredeyse tamamen Tom Igoe ve David Mellis tarafından Web Sunucusuna dayanarak Düzenleme tarihi: oluşturuldu 18 Aralık 2009 by David A. Mellis 4 Eylül 2010 tarihinde Tom Igoe tarafından değiştirildi * / #include #include // Denetleyiciniz için aşağıya bir MAC adresi ve IP adresi girin. // IP adresi yerel ağınıza bağlı olacaktır: bayt mac [] = {0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02}; IP Adresi ip (191, 11, 1, 1); // <<< IP ADRESİNİZİ BURAYA GİRİN !!! // Ethernet sunucusu kitaplığını başlatın // kullanmak istediğiniz IP adresi ve bağlantı noktasıyla // (bağlantı noktası 80 HTTP için varsayılan): EthernetServer sunucusu (80); int düğmesiBasın = 1; void setup () {pinMode (2, INPUT); // Ethernet bağlantısını ve sunucuyu başlatın: Ethernet.begin (mac, ip); ) (Server.begin; } void loop () {buttonPress = digitalRead (2); // gelen istemcileri dinle EthernetClient client = server.available (); if (client) {// bir http isteği boş bir satırla bitiyor boolean currentLineIsBlank = true; while (client.connected ()) {if (client.available ()) {char c = client.read (); // satırın sonuna geldiyseniz (bir satırsonu // karakteri aldıysanız ve satır boşsa, http isteği sona erdi, // öyleyse (c == '\ n' && currentLineIsBlank) {// standart bir http yanıt başlığı client.println ("HTTP / 1.1 200 OK") gönder; client.println ("İçerik Tipi: metin / html"); ) (Client.println; // pin 2'ye bağlı düğmeye // basılmasına bağlı olarak bir web sitesinin farklı bir sürümünü sunar. if (buttonPress == 1) {client.println ("LIGHT!"); } else if (buttonPress == 0) {client.println ("KOYU!"); } ara; } if (c == '\ n') {// yeni bir satıra başlıyorsanız currentLineIsBlank = true; } else eğer (c! = '\ r') {// geçerli satırda bir karakter aldıysanız currentLineIsBlank = false; }}} // web tarayıcıya veri gecikmesini alması için zaman tanıyın (1); // bağlantıyı kapatın: client.stop (); }} 

Bu örnek kodun çalışması için, D2 ve 5V pimleri arasına, D2 pimi ile toprak arasında 10K direnç arasına bir düğme takın ve ardından Arduino'nuzun IP adresini web tarayıcınıza yükleyin. Sayfa siyah bir arka planla yüklenmelidir. Düğmeyi basılı tutun ve ardından tarayıcı sayfasını yenileyin. Site şimdi beyaz bir arka planla yüklenmelidir.


Arduino'ya gönderilen URL'ye bağlı olarak aşağıdaki kod bir LED'i yakar:
 / * Randy Sarafan tarafından bir araya getirilen Web Sunucusu Demosu Farklı URL'ler girerek bir LED'i açıp kapatmanızı sağlar. Açmak için: // IP adresiniz / $ 1 Kapatmak için: // IP adresiniz / $ 2 Devre: * 10, 11, 12, 13 pinlerine bağlı Ethernet kalkanı * D2 pinine bir LED bağlayın ve 220 ohm direnç ile seri olarak toprağa yerleştirin Tom Igoe ve David Mellis tarafından neredeyse tamamen Web Sunucusuna dayanarak Düzenleme tarihi: 18 Aralık 2009 tarihinde David A. Mellis tarafından düzenlendi 4 Eylül 2010 tarihinde Tom Igoe tarafından değiştirildi * / #include #include boolean gelen = 0; // Denetleyiciniz için aşağıya bir MAC adresi ve IP adresi girin. // IP adresi yerel ağınıza bağlı olacaktır: bayt mac [] = {0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02}; IP Adresi ip (191, 11, 1, 1); // <<< IP ADRESİNİZİ BURAYA GİRİN !!! // Ethernet sunucusu kitaplığını başlatın // kullanmak istediğiniz IP adresi ve bağlantı noktasıyla // (bağlantı noktası 80 HTTP için varsayılan): EthernetServer sunucusu (80); void setup () {pinMode (2, ÇIKIŞ); // Ethernet bağlantısını ve sunucuyu başlatın: Ethernet.begin (mac, ip); ) (Server.begin; Serial.begin (9600); } void loop () {// gelen istemcileri dinle EthernetClient client = server.available (); if (client) {// bir http isteği boş bir satırla bitiyor boolean currentLineIsBlank = true; while (client.connected ()) {if (client.available ()) {char c = client.read (); // satırın sonuna geldiyseniz (bir satırsonu // karakteri aldıysanız ve satır boşsa, http isteği sona erdi, // böylece bir yanıt gönderebilirsiniz // URL dizesini $ 'dan ilke doğru okur boşluk (eğer gelen && c == '') {gelen = 0; } eğer (c == ' 

Bu işi yapmak için pozitif ucu bir LED'i D2 pimine ve negatif ucu 220 ohm direnç ile seri olarak toprağa bağlayın.

LED'i açmak için bunu tarayıcınıza girin:
// [BURADAN IP ADRESİNİZ] / 1 $

LED'i kapatmak için bunu tarayıcınıza girin:
// [BURADAKİ IP ADRESİNİZ] / 2 $

Not: Açıkça [BURADAN IP ADRESİNİZİ] IP adresinizle değiştirmeniz gerekir.) {İncoming = 1; } // Eğer (gelen == 1) {Serial.println (c); $ 1 veya $ 2 URL dizesini kontrol eder; if (c == '1') {Seri.println ("AÇIK"); digitalWrite (2, YÜKSEK); } if (c == '2') {Seri.println ("KAPALI"); digitalWrite (2, DÜŞÜK); }}

if (c == '\ n') {// yeni bir satıra başlıyorsanız currentLineIsBlank = true; } else eğer (c! = '\ r') {// geçerli satırda bir karakter aldıysanız currentLineIsBlank = false; }}} // web tarayıcıya veri gecikmesini alması için zaman tanıyın (1); // bağlantıyı kapatın: client.stop (); }}

Bu işi yapmak için pozitif ucu bir LED'i D2 pimine ve negatif ucu 220 ohm direnç ile seri olarak toprağa bağlayın.

LED'i açmak için bunu tarayıcınıza girin:
// [BURADAN IP ADRESİNİZ] / 1 $

LED'i kapatmak için bunu tarayıcınıza girin:
// [BURADAKİ IP ADRESİNİZ] / 2 $

Not: Açıkça [BURADAN IP ADRESİNİZ] IP adresinizle değiştirilmelidir.

5. Adım: Müşteri

Ethernet Kalkanı'nı istemci olarak da kullanabilirsiniz. Başka bir deyişle, web tarayıcısı gibi web sitelerini okumak için kullanabilirsiniz.

Web sitelerinin hem görünür hem de gizli birçok metni vardır, bu da istemci tarafında programlamayı çok zorlaştırır. Web sitelerinden bilgi okumak genellikle çok sayıda dizeyi ayrıştırmayı içerir. Bu sinir bozucu, ama buna değer, eğer yapmak istediğiniz şey buysa.

Twitter mesajlarını okumak için bir kod yazacaktım, ancak böyle bir kod Arduino programcısı içinde zaten bir örnek olarak var. Bunun yerine, özel bir mesaj okunduğunda bir LED'i açmak için hafifçe değiştirdim.

Bu işi yapmak için pozitif ucu bir LED'i D2 pimine ve negatif ucu 220 ohm direnç ile seri olarak toprağa bağlayın.

Aşağıdaki koda kendi IP adresinizi girmeyi unutmayın, aksi takdirde çalışmaz.

İşte kod:
 / * Dizeli Twitter İstemcisi Bu çizim bir Ethernet kalkanı kullanarak Twitter'a bağlanır. Döndürülen XML'yi ayrıştırır ve bunun bir tweet olduğunu arar Arduino Ethernet kalkanını veya Adafruit Ethernet kalkanını kullanabilirsiniz, bunlardan birinde Wiznet Ethernet modülü olduğu sürece çalışır. Bu örnek, sürüm 1.0 beta 1'deki Arduino çekirdeğinin bir parçası olan Ethernet kütüphanesindeki DHCP rutinlerini kullanır. Bu örnek, 0019 sürümündeki Arduino çekirdeğinin bir parçası olan String kütüphanesini kullanır. Devre: * 10 pinlerine bağlı Ethernet kalkanı, 11, 12, 13 21 Mayıs 2011 tarafından oluşturuldu Tom Igoe Bu kod kamu malıdır. * / #include #include // Denetleyiciniz için aşağıya bir MAC adresi ve IP adresi girin. // IP adresi yerel ağınıza bağlı olacaktır: bayt mac [] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x01}; IP Adresi ip (191, 11, 1, 1); // <<< IP ADRESİNİZİ BURAYA GİRİN !!! // kütüphane örneğini başlat: EthernetClient istemcisi; const int requestInterval = 60000; // istekler arasında gecikme char serverName [] = "api.twitter.com"; // twitter URL boolean istendi; // uzun lastAttemptTime = 0 bağlandıktan sonra istekte bulunup bulunmadığınız; // sunucuya en son bağlandığınızda, milisaniye cinsinden String currentLine = ""; // metni sunucudan tutmak için string String tweet = ""; // tweet boolean'ı tutmak için dize readingTweet = false; // şu anda tweet geçersiz kurulumunu okuyorsanız () {pinMode (2, OUTPUT); // dizeler için yer ayırır: currentLine.reserve (256); tweet.reserve (150); // seriyi başlat: Serial.begin (9600); // bir DHCP bağlantısı kurmaya çalışın: if (! Ethernet.begin (mac)) {// DHCP başarısız olursa, sabit kodlu bir adresle başlayın: Ethernet.begin (mac, ip); } // Twitter'a bağlan: connectToServer (); } void loop () {if (client.connected ()) {if (client.available ()) {// gelen baytları oku: char inChar = client.read (); // satır sonuna gelen bayt ekle: currentLine + = inChar; // yeni satır alırsanız satırı temizleyin: if (inChar == '\ n') {currentLine = ""; } // geçerli satırla bitiyorsa, bunu // takip edecek tweet: if (currentLine.endsWith ("")) {// tweet başlıyor. Tweet dizesini temizleyin: readingTweet = true; tweet = ""; } // şu anda bir tweet'in baytlarını okuyorsanız, // bunları tweet'e ekleyin String: if (readingTweet) {if (inChar! = '<') {tweet + = inChar; } else {// bir "Merhaba Zalim Dünya" varsa) {digitalWrite (2, HIGH); Serial.println ("LED AÇIK!"); } if (tweet! = "> Merhaba Zalim Dünya") {digitalWrite (2, LOW); Serial.println ("LED KAPALI!"); } // sunucuya olan bağlantıyı kapatın: client.stop (); }}}} else if (millis () - lastAttemptTime> requestInterval) {// bağlı değilseniz ve // ​​son bağlantınızdan bu yana iki dakika geçtiğinde, tekrar bağlanmayı deneyin: connectToServer (); }} void connectToServer () {// bağlanmaya çalışın ve bir milisaniye bekleyin: Serial.println ("sunucuya bağlanıyor ..."); if (client.connect (serverName, 80)) {Serial.println ("HTTP isteği yapılıyor ..."); // twitter için HTTP GET isteğinde bulunun: client.println ("GET /1/statuses/user_timeline.xml?screen_name=RandyMcTester&count=1 HTTP / 1.1"); client.println ("HOST: api.twitter.com"); ) (Client.println; } // bu bağlantı girişiminin zamanını not edin: lastAttemptTime = millis (); } 

Muhtemelen RandyMcTester Twitter özet akışındaki son gönderiden başka bir şey okumak isteyeceksiniz.

Diğer Twitter yayınlarını okumak için aşağıdaki metin bitini değiştirin:
client.println ("GET /1/statuses/user_timeline.xml?screen_name= [BURADA YENİ TWITTER ADI] & count = 1 HTTP / 1.1");

İlgi̇li̇ Makaleler