Arduino Ethernet Shield Tutorial

Arduino Ethernet Shield memungkinkan Anda untuk dengan mudah menghubungkan Arduino Anda ke internet. Perisai ini memungkinkan Arduino Anda untuk mengirim dan menerima data dari mana saja di dunia dengan koneksi internet. Anda dapat menggunakannya untuk melakukan hal-hal menyenangkan seperti robot kontrol dari jarak jauh dari sebuah situs web, atau membunyikan bel setiap kali Anda mendapatkan pesan twitter baru. Perisai ini membuka kemungkinan tanpa batas dengan memungkinkan Anda untuk menghubungkan proyek Anda ke internet dalam waktu yang singkat.

Langkah 1: Pengaturan

Menyiapkannya semudah memasukkan pin header dari pelindung ke Arduino Anda.

Perhatikan bahwa Ethernet Shield yang digunakan di sini dulu dijual di RadioShack. Namun, karena RadioShack tidak ada lagi, perisai lebih sulit didapat. Perisai ethernet generik yang tersedia di Amazon ini juga harus berfungsi. * Ini dimaksudkan untuk digunakan dengan papan Arduino Uno Rev. 3 (atau lebih baru). Memiliki terlalu banyak pin untuk dihubungkan ke papan Arduino versi sebelumnya.

* Saya belum mengkonfirmasi hal ini secara pribadi. Pembeli Waspadalah!

Langkah 2: Fitur Perisai

Ethernet Shield didasarkan pada chip W51000, yang memiliki buffer 16K internal. Ini memiliki kecepatan koneksi hingga 10 / 100Mb. Ini bukan koneksi tercepat, tetapi juga tidak ada artinya.

Itu bergantung pada pustaka Arduino Ethernet, yang dibundel dengan lingkungan pengembangan.

Ada juga slot micro SD on-board yang memungkinkan Anda untuk menyimpan banyak data, dan melayani seluruh situs web hanya dengan menggunakan Arduino Anda. Ini membutuhkan penggunaan perpustakaan SD eksternal, yang tidak dibundel dengan perangkat lunak. Menggunakan kartu SD tidak tercakup dalam Instruksi ini. Namun, hal ini tercakup dalam Langkah 8 pada kartu SD Nirkabel yang dapat diajari.

Papan juga memiliki ruang untuk penambahan modul Power over Ethernet (PoE), yang memungkinkan Anda untuk memberi daya pada Arduino Anda melalui koneksi Ethernet.

Untuk tinjauan umum teknis lengkap, lihat halaman Ethernet Shield resmi.

Langkah 3: Memulai

Colokkan Arduino ke port USB komputer Anda, dan perisai Ethernet ke router Anda (atau koneksi internet langsung).

Selanjutnya, buka lingkungan pengembangan Arduino. Saya sangat merekomendasikan untuk meningkatkan ke Arduino 1.0 atau yang lebih baru (jika Anda belum melakukannya). Versi perangkat lunak ini telah memiliki dukungan DHCP, dan tidak memerlukan konfigurasi alamat IP secara manual.

Untuk mengetahui apa alamat IP yang telah ditetapkan untuk papan Anda, buka sketsa DhcpAddressPrinter. Ini dapat ditemukan di:

File -> Contoh -> Ethernet -> DhcpAddressPrinter

Setelah terbuka, Anda mungkin perlu mengubah alamat Mac. Pada versi yang lebih baru dari pelindung Ethernet, Anda harus melihat alamat ini pada stiker yang terpasang pada papan. Jika Anda tidak memiliki stiker, cukup dengan membuat alamat mac yang unik akan berhasil. Jika Anda menggunakan banyak perisai, pastikan masing-masing memiliki alamat mac yang unik.

Setelah alamat mac dikonfigurasikan dengan benar, unggah sketsa ke Arduino Anda, dan buka monitor serial. Itu harus mencetak alamat IP yang digunakan.

Langkah 4: Server

Anda dapat menggunakan pelindung Arduino Ethernet sebagai server web untuk memuat halaman HTML atau berfungsi sebagai server obrolan. Anda juga dapat menguraikan permintaan yang dikirim oleh klien, seperti browser web. Dua contoh berikut menunjukkan cara menggunakannya untuk melayani halaman HTML, dan mengurai string URL.

Satu hal penting yang perlu diingat adalah bahwa Anda harus memasukkan alamat IP Arduino Anda dalam kedua contoh di bawah ini agar mereka dapat berfungsi.

Kode berikut mengubah halaman web yang dilayani berdasarkan tombol tekan:
 / * Demo Server Web dilempar bersama oleh Randy Sarafan Server web sederhana yang mengubah halaman yang disajikan, dipicu oleh tombol tekan. Sirkuit: * Perisai Ethernet yang terpasang pada pin 10, 11, 12, 13 * Hubungkan tombol antara Pin D2 dan 5V * Hubungkan resistor 10K antara Pin D2 dan ground Berbasis hampir seluruhnya pada Web Server oleh Tom Igoe dan David Mellis. Sunting sejarah: dibuat 18 Des 2009 oleh David A. Mellis dimodifikasi 4 Sep 2010 oleh Tom Igoe * / #include #include // Masukkan alamat MAC dan alamat IP untuk pengontrol Anda di bawah ini. // Alamat IP akan tergantung pada jaringan lokal Anda: byte mac [] = {0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02}; IPAddress ip (191, 11, 1, 1); // <<< MASUKKAN ALAMAT IP ANDA DI SINI !!! // Inisialisasi pustaka server Ethernet // dengan alamat IP dan port yang ingin Anda gunakan // (port 80 adalah default untuk HTTP): EthernetServer server (80); tombol intTekan = 1; void setup () {pinMode (2, INPUT); // mulai koneksi Ethernet dan server: Ethernet.begin (mac, ip); server.begin (); } void loop () {buttonPress = digitalRead (2); // dengarkan klien yang masuk EthernetClient client = server.available (); if (client) {// permintaan http berakhir dengan baris kosong boolean currentLineIsBlank = true; while (client.connected ()) {if (client.available ()) {char c = client.read (); // jika Anda telah sampai ke akhir baris (menerima baris baru // karakter) dan baris kosong, permintaan http telah berakhir, // sehingga Anda dapat mengirim balasan jika (c == '\ n' && currentLineIsBlank) {// kirim tajuk respons http standar client.println ("HTTP / 1.1 200 OK"); client.println ("Tipe-Konten: teks / html"); client.println (); // menyajikan versi situs web yang berbeda tergantung pada apakah tombol // terhubung ke pin 2 ditekan. if (buttonPress == 1) {client.println ("LIGHT!"); } lain jika (buttonPress == 0) {client.println ("DARK!"); } istirahat; } if (c == '\ n') {// Anda memulai baris baru currentLineIsBlank = true; } lain jika (c! = '\ r') {// Anda mendapatkan karakter di baris saat ini currentLineIsBlank = false; }}} // berikan waktu browser web untuk menerima keterlambatan data (1); // tutup koneksi: client.stop (); }} 

Untuk membuat contoh kode ini berfungsi, cukup lampirkan tombol antara pin D2 dan 5V, resistor 10K antara pin D2 dan ground, lalu muat alamat IP Arduino Anda ke browser web Anda. Halaman harus dimuat dengan latar belakang hitam. Tekan dan tahan tombol, dan kemudian segarkan halaman browser. Situs sekarang harus memuat dengan latar belakang putih.


Kode berikut menyala LED tergantung pada URL yang dikirim ke Arduino:
 / * Demo Server Web yang dilempar bersama oleh Randy Sarafan Memungkinkan Anda untuk menghidupkan dan mematikan LED dengan memasukkan url yang berbeda. Untuk mengaktifkannya: // alamat IP Anda / $ 1 Untuk mematikannya: // alamat IP Anda / $ 2 Sirkuit: * Perisai Ethernet terpasang ke pin 10, 11, 12, 13 * Sambungkan LED ke pin D2 dan memasukkannya ke dalam rangkaian dengan resistor 220 ohm ke ground Didasarkan hampir seluruhnya pada Web Server oleh Tom Igoe dan David Mellis Edit history: dibuat 18 Des 2009 oleh David A. Mellis dimodifikasi 4 Sep 2010 oleh Tom Igoe * / #include #include boolean masuk = 0; // Masukkan alamat MAC dan alamat IP untuk pengontrol Anda di bawah ini. // Alamat IP akan tergantung pada jaringan lokal Anda: byte mac [] = {0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02}; IPAddress ip (191, 11, 1, 1); // <<< MASUKKAN ALAMAT IP ANDA DI SINI !!! // Inisialisasi pustaka server Ethernet // dengan alamat IP dan port yang ingin Anda gunakan // (port 80 adalah default untuk HTTP): EthernetServer server (80); void setup () {pinMode (2, OUTPUT); // mulai koneksi Ethernet dan server: Ethernet.begin (mac, ip); server.begin (); Serial.begin (9600); } void loop () {// dengarkan klien yang masuk EthernetClient client = server.available (); if (client) {// permintaan http berakhir dengan baris kosong boolean currentLineIsBlank = true; while (client.connected ()) {if (client.available ()) {char c = client.read (); // jika Anda telah sampai ke akhir baris (menerima baris baru // karakter) dan baris kosong, permintaan http telah berakhir, // sehingga Anda dapat mengirim balasan // membaca string URL dari $ ke pertama ruang kosong if (incoming && c == '') {incoming = 0; } if (c == ' 

Untuk membuat pekerjaan ini hubungkan kabel positif LED ke pin D2, dan kabel negatif seri dengan resistor 220 ohm ke ground.

Untuk menyalakan LED, masukkan ini ke browser Anda:
// [ALAMAT IP ANDA DI SINI] / $ 1

Untuk mematikan LED, masukkan ini ke browser Anda:
// [ALAMAT IP ANDA DI SINI] / $ 2

Catatan: Anda jelas harus mengganti [ALAMAT IP ANDA DI SINI] dengan alamat IP Anda.) {Incoming = 1; } // Memeriksa string URL $ 1 atau $ 2 jika (masuk == 1) {Serial.println (c); if (c == '1') {Serial.println ("ON"); digitalWrite (2, HIGH); } if (c == '2') {Serial.println ("OFF"); digitalWrite (2, LOW); }}

if (c == '\ n') {// Anda memulai baris baru currentLineIsBlank = true; } lain jika (c! = '\ r') {// Anda mendapatkan karakter di baris saat ini currentLineIsBlank = false; }}} // berikan waktu browser web untuk menerima keterlambatan data (1); // tutup koneksi: client.stop (); }}

Untuk membuat pekerjaan ini hubungkan kabel positif LED ke pin D2, dan kabel negatif seri dengan resistor 220 ohm ke ground.

Untuk menyalakan LED, masukkan ini ke browser Anda:
// [ALAMAT IP ANDA DI SINI] / $ 1

Untuk mematikan LED, masukkan ini ke browser Anda:
// [ALAMAT IP ANDA DI SINI] / $ 2

Catatan: Anda jelas harus mengganti [ALAMAT IP ANDA DI SINI] dengan alamat IP Anda.

Langkah 5: Klien

Anda juga dapat menggunakan Ethernet Shield sebagai klien. Dengan kata lain, Anda dapat menggunakannya untuk membaca situs web seperti browser web.

Situs web memiliki banyak teks yang terlihat dan tersembunyi, yang membuat pemrograman di sisi klien sangat rumit. Membaca informasi dari situs web biasanya melibatkan parsing banyak string. Ini menjengkelkan, tetapi sepadan, jika itu yang ingin Anda lakukan.

Saya akan menulis beberapa kode untuk membaca pesan Twitter, tetapi kode seperti itu sudah ada sebagai contoh dalam programmer Arduino. Sebagai gantinya, saya hanya memodifikasinya sedikit untuk menyalakan LED jika pesan khusus dibaca.

Untuk membuat pekerjaan ini hubungkan kabel positif LED ke pin D2, dan kabel negatif seri dengan resistor 220 ohm ke ground.

Jangan lupa untuk memasukkan alamat IP Anda sendiri ke dalam kode di bawah ini, atau itu tidak akan berfungsi.

Ini kodenya:
 / * Klien Twitter dengan Strings Sketsa ini terhubung ke Twitter menggunakan perisai Ethernet. Ini mem-parsing XML yang dikembalikan, dan mencari ini adalah tweet. Anda dapat menggunakan perisai Arduino Ethernet, atau perisai Adafruit Ethernet, salah satu akan berfungsi, asalkan ada modul Wiznet Ethernet. Contoh ini menggunakan rutin DHCP di pustaka Ethernet yang merupakan bagian dari inti Arduino dari versi 1.0 beta 1 Contoh ini menggunakan pustaka String, yang merupakan bagian dari inti Arduino dari versi 0019. Sirkuit: * Perisai Ethernet terpasang pada pin 10, 11, 12, 13 dibuat 21 Mei 2011 oleh Tom Igoe Kode ini dalam domain publik. * / #include #include // Masukkan alamat MAC dan alamat IP untuk pengontrol Anda di bawah ini. // Alamat IP akan tergantung pada jaringan lokal Anda: byte mac [] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x01}; IPAddress ip (191, 11, 1, 1); // <<< MASUKKAN ALAMAT IP ANDA DI SINI !!! // inisialisasi instance perpustakaan: klien EthernetClient; const int requestInterval = 60000; // penundaan antara permintaan char serverName [] = "api.twitter.com"; // URL twitter boolean yang diminta; // apakah Anda telah membuat permintaan sejak menghubungkan long lasttttttime = 0; // terakhir kali Anda terhubung ke server, dalam String milidetik currentLine = ""; // string untuk menahan teks dari server String tweet = ""; // string untuk menahan tweet boolean readingTweet = false; // jika Anda sedang membaca tweet void setup () {pinMode (2, OUTPUT); // simpan ruang untuk string: currentLine.reserve (256); tweet.reserve (150); // inisialisasi serial: Serial.begin (9600); // coba koneksi DHCP: if (! Ethernet.begin (mac)) {// jika DHCP gagal, mulailah dengan alamat kode-keras: Ethernet.begin (mac, ip); } // terhubung ke Twitter: connectToServer (); } membatalkan loop () {if (client.connected ()) {if (client.available ()) {// membaca byte yang masuk: char inChar = client.read (); // tambahkan byte yang masuk ke akhir baris: currentLine + = inChar; // jika Anda mendapatkan baris baru, kosongkan baris: if (inChar == '\ n') {currentLine = ""; } // jika baris saat ini berakhir dengan, // akan diikuti oleh tweet: if (currentLine.endsWith ("")) {// tweet dimulai. Hapus string tweet: readingTweet = true; tweet = ""; } // jika saat ini Anda membaca byte dari sebuah tweet, // tambahkan mereka ke String tweet: if (readingTweet) {if (inChar! = '<') {tweet + = inChar; } else {// jika Anda mendapat "Hello Cruel World") {digitalWrite (2, HIGH); Serial.println ("LED ON!"); } if (tweet! = "> Hello Cruel World") {digitalWrite (2, LOW); Serial.println ("LED OFF!"); } // tutup koneksi ke server: client.stop (); }}}} jika if (millis () - lastAttemptTime> requestInterval) {// jika Anda tidak terhubung, dan dua menit telah berlalu sejak // koneksi terakhir Anda, maka cobalah untuk menghubungkan lagi: connectToServer (); }} membatalkan connectToServer () {// upaya untuk terhubung, dan tunggu satu milidetik: Serial.println ("menghubungkan ke server ..."); if (client.connect (serverName, 80)) {Serial.println ("membuat permintaan HTTP ..."); // buat permintaan GET HTTP ke twitter: client.println ("GET /1/statuses/user_timeline.xml?screen_name=RandyMcTester&count=1 HTTP / 1.1"); client.println ("HOST: api.twitter.com"); client.println (); } // perhatikan waktu upaya koneksi ini: lastAttemptTime = millis (); } 

Agaknya Anda akan ingin membaca sesuatu selain dari posting terbaru tentang umpan Twitter RandyMcTester.

Untuk membaca feed Twitter lainnya, ubah sedikit teks berikut:
client.println ("GET /1/statuses/user_timeline.xml?screen_name= [NAMA TWITTER BARU DI SINI] & hitung = 1 HTTP / 1.1");

Artikel Terkait