Πώς να χρησιμοποιήσετε ένα Arduino ως διακομιστή Web

CS50 Live, Episode 003 (Ιούνιος 2019).

$config[ads_text] not found
Anonim

Πώς να χρησιμοποιήσετε ένα Arduino ως διακομιστή Web


Χρησιμοποιώντας μια θύρα Ethernet, μπορείτε να χρησιμοποιήσετε ένα Arduino ως διακομιστή Web.

Με τον εξοπλισμό ενός Arduino με μια θωράκιση Ethernet μπορείτε να τον μετατρέψετε σε απλό διακομιστή ιστού και με πρόσβαση σε αυτόν τον διακομιστή με πρόγραμμα περιήγησης που εκτελείται σε οποιονδήποτε υπολογιστή συνδέεται στο ίδιο δίκτυο με το Arduino, μπορείτε:

  • Ελέγξτε το υλικό από την ιστοσελίδα (χρησιμοποιώντας κουμπιά Javascript).
  • Διαβάστε την κατάσταση ενός διακόπτη (χρησιμοποιώντας απλό κώδικα HTML).
  • Διαβάστε την αξία ενός αισθητήρα (χρησιμοποιώντας απλό κώδικα HTML).

Απαιτείται υλικό

Για να χρησιμοποιήσετε ένα Arduino ως διακομιστή Web, χρειάζεστε τα εξής:

  • Arduino Mega2560 (ή Arduino UNO)
  • Ασπίδα Ethernet
  • Ενσύρματη σύνδεση LAN με ταχύτητα 10 / 100Mb
Η ασπίδα Ethernet συνδέει το Arduino με το Διαδίκτυο. Η εγκατάσταση είναι πολύ απλή: συνδέστε απλώς τους ακροδέκτες κεφαλίδας της θωράκισης στο Arduino σας, στη συνέχεια συνδέστε ένα καλώδιο Ethernet στην θωράκιση. Η παρακάτω εικόνα δείχνει αυτήν τη ρύθμιση:

Πείραμα

Για να δείξουμε πώς να χρησιμοποιήσουμε το Arduino ως διακομιστή Web, θα διαβάσουμε την κατάσταση ενός διακόπτη.

Απαιτείται υλικό

  • 1 x καλώδιο Ethernet
  • 1 x δρομολογητής Wi-Fi
  • 1 χ Arduino Mega2560
  • 1 x θωράκιση Ethernet
  • 1 x Breadboard
  • 3 x Καλώδια Jumper
  • 1 x 10k αντίσταση
  • 2 x 9V προσαρμογέας
  • 1 κουμπιού

Διάγραμμα συνδεσμολογίας

Συνδέστε τα εξαρτήματα όπως φαίνεται παραπάνω. Ο ακροδέκτης 8 του Arduino συνδέεται με το κουμπί και διαμορφώνεται ως INPUT. Όταν πιέσετε το κουμπί, το Arduino θα διαβάσει μια τιμή LOW σε αυτήν την ακίδα. Το Arduino θα θέσει στη συνέχεια την κατάσταση του OUTPUT σε ON. Όταν απελευθερωθεί, η έξοδος θα είναι ρυθμισμένη στο OFF. Η κατάσταση του διακόπτη θα σταλεί στον διακομιστή Web.

Διαμόρφωση Ethernet

Για να ελέγξετε την θύρα Ethernet, χρησιμοποιείτε τη βιβλιοθήκη Ethernet.h.

Για την θωράκιση πρέπει να αντιστοιχιστεί μια διεύθυνση MAC και IP χρησιμοποιώντας τη συνάρτηση Ethernet.begin () . Για μια συγκεκριμένη συσκευή, μια διεύθυνση MAC είναι ένα παγκοσμίως μοναδικό αναγνωριστικό. Οι τρέχουσες ασπίδες Ethernet έρχονται με αυτοκόλλητο που υποδεικνύει τη διεύθυνση MAC. Για παλαιότερες ασπίδες, θα πρέπει να δουλέψει ένας τυχαίος, αλλά δεν πρέπει να χρησιμοποιούμε το ίδιο για πολλούς πίνακες. Η ισχύς των διευθύνσεων IP εξαρτάται από τη διαμόρφωση του δικτύου κάποιου. Εάν χρησιμοποιείται DHCP, μπορεί να εκχωρήσει δυναμικά ένα IP στην ασπίδα.

ΔΙΕΥΘΥΝΣΗ IP

Η διεύθυνση IP (διεύθυνση πρωτοκόλλου Internet) είναι μια αριθμητική ετικέτα που αντιστοιχεί σε κάθε συσκευή που συμμετέχει σε ένα δίκτυο υπολογιστών που χρησιμοποιεί το πρωτόκολλο Internet για επικοινωνία. Η διευκρίνιση της διεύθυνσης IP γίνεται γράφοντας τη γραμμή:

 byte ip () = {192, 168, 0, 112}. 

και να το αλλάξετε ώστε να ταιριάζει με μία ρύθμιση. Για παράδειγμα, για να αντιστοιχίσετε το IP της θύρας Ethernet σε 192.168.0.50, γράψτε τη γραμμή:

 byte ip () = {192, 168, 0, 50}. 

ΔΙΕΥΘΥΝΣΗ MAC

Η διεύθυνση MAC (διεύθυνση ελέγχου πρόσβασης πολυμέσων) είναι ένα μοναδικό αναγνωριστικό που αντιστοιχεί σε κάθε συσκευή που συμμετέχει σε ένα φυσικό δίκτυο. Κάθε κομμάτι του εξοπλισμού δικτύωσης έχει έναν μοναδικό αύξοντα αριθμό για να εντοπίσει τον εαυτό του σε ένα δίκτυο και αυτό είναι κανονικό σκληρό προγραμματισμένο στο υλικολογισμικό του εξοπλισμού. Ωστόσο, με τον Arduino, μπορούμε να καθορίσουμε τη διεύθυνση MAC μας.

 byte mac () = {0x90, 0xA2, 0xDA, 0x0D, 0x85, 0xD9}. 

Μπορείτε να ορίσετε το υποδίκτυο και την πύλη με τη βοήθεια των ακόλουθων εντολών:

 byte υποδίκτυο () = {255, 255, 255, 0}. // αναθέτοντας τη μάσκα υποδικτύου 
 byte gateway () = {192, 168, 0, 1}. // αναθέτοντας την πύλη 

Επομένως, για να ρυθμίσετε την ασπίδα Ethernet, το μπλοκ κώδικα δίνεται παρακάτω:

 / ******************** Ρυθμίσεις ETHERNET ******************** / 
byte mac () = {0x90, 0xA2, 0xDA, 0x0D, 0x85, 0xD9}. // αναθέτοντας διεύθυνση mac
byte ip () = {192, 168, 0, 112}. // ip σε lan
byte υποδίκτυο () = {255, 255, 255, 0}. // αναθέτοντας τη μάσκα υποδικτύου
byte gateway () = {192, 168, 0, 1}. // αναθέτοντας την προεπιλεγμένη πύλη

Παρακάτω είναι μια φωτογραφία του συστήματος, που δείχνει πώς συνδέεται το Arduino με το δρομολογητή Wi-Fi. Το καλώδιο Ethernet συνδέει την ασπίδα με το δρομολογητή και ο δρομολογητής συνδέεται στη συνέχεια ασύρματα με το φορητό υπολογιστή.

Πρόγραμμα

Παρακάτω είναι ένα πρόγραμμα που φορτώνει μια απλή ιστοσελίδα.

Κώδικας

 client.println(""); //web page is made using HTML client.println(""); client.println(""); client.println("Ethernet Tutorial"); client.println(""); client.println(""); client.println(""); client.println(" A Webserver Tutorial "); client.println(" Observing State Of Switch "); client.print(" Switch is: "); if (digitalRead(8)) { client.println(" ON "); } else { client.println(" OFF "); } client.println(""); client.println("");

client.println(""); //web page is made using HTML client.println(""); client.println(""); client.println("Ethernet Tutorial"); client.println(""); client.println(""); client.println(""); client.println(" A Webserver Tutorial "); client.println(" Observing State Of Switch "); client.print(" Switch is: "); if (digitalRead(8)) { client.println(" ON "); } else { client.println(" OFF "); } client.println(""); client.println("");

client.println(""); //web page is made using HTML client.println(""); client.println(""); client.println("Ethernet Tutorial"); client.println(""); client.println(""); client.println(""); client.println(" A Webserver Tutorial "); client.println(" Observing State Of Switch "); client.print(" Switch is: "); if (digitalRead(8)) { client.println(" ON "); } else { client.println(" OFF "); } client.println(""); client.println("");

client.println(""); //web page is made using HTML client.println(""); client.println(""); client.println("Ethernet Tutorial"); client.println(""); client.println(""); client.println(""); client.println(" A Webserver Tutorial "); client.println(" Observing State Of Switch "); client.print(" Switch is: "); if (digitalRead(8)) { client.println(" ON "); } else { client.println(" OFF "); } client.println(""); client.println("");

client.println(""); //web page is made using HTML client.println(""); client.println(""); client.println("Ethernet Tutorial"); client.println(""); client.println(""); client.println(""); client.println(" A Webserver Tutorial "); client.println(" Observing State Of Switch "); client.print(" Switch is: "); if (digitalRead(8)) { client.println(" ON "); } else { client.println(" OFF "); } client.println(""); client.println("");

client.println(""); //web page is made using HTML client.println(""); client.println(""); client.println("Ethernet Tutorial"); client.println(""); client.println(""); client.println(""); client.println(" A Webserver Tutorial "); client.println(" Observing State Of Switch "); client.print(" Switch is: "); if (digitalRead(8)) { client.println(" ON "); } else { client.println(" OFF "); } client.println(""); client.println("");

client.println(""); //web page is made using HTML client.println(""); client.println(""); client.println("Ethernet Tutorial"); client.println(""); client.println(""); client.println(""); client.println(" A Webserver Tutorial "); client.println(" Observing State Of Switch "); client.print(" Switch is: "); if (digitalRead(8)) { client.println(" ON "); } else { client.println(" OFF "); } client.println(""); client.println("");

client.println(""); //web page is made using HTML client.println(""); client.println(""); client.println("Ethernet Tutorial"); client.println(""); client.println(""); client.println(""); client.println(" A Webserver Tutorial "); client.println(" Observing State Of Switch "); client.print(" Switch is: "); if (digitalRead(8)) { client.println(" ON "); } else { client.println(" OFF "); } client.println(""); client.println("");

client.println(""); //web page is made using HTML client.println(""); client.println(""); client.println("Ethernet Tutorial"); client.println(""); client.println(""); client.println(""); client.println(" A Webserver Tutorial "); client.println(" Observing State Of Switch "); client.print(" Switch is: "); if (digitalRead(8)) { client.println(" ON "); } else { client.println(" OFF "); } client.println(""); client.println("");

client.println(""); //web page is made using HTML client.println(""); client.println(""); client.println("Ethernet Tutorial"); client.println(""); client.println(""); client.println(""); client.println(" A Webserver Tutorial "); client.println(" Observing State Of Switch "); client.print(" Switch is: "); if (digitalRead(8)) { client.println(" ON "); } else { client.println(" OFF "); } client.println(""); client.println("");

Λήψη κώδικα

Αυτό το πρόγραμμα θα εμφανίσει μια ιστοσελίδα σε ένα πρόγραμμα περιήγησης στο Web όταν έχει πρόσβαση στη διεύθυνση IP που έχει αντιστοιχιστεί στο Arduino. Η γραμμή:

 client.println(""); 

Δίνει εντολή στο πρόγραμμα περιήγησης να ανανεώσει τη σελίδα. Όταν ξαναρχίσει η πρόσβαση στη σελίδα, το Arduino θα ξαναδιαβάσει την κατάσταση του διακόπτη και θα το εμφανίσει.

Να θυμάστε ότι μπορείτε πάντα να δείτε την πηγή της εμφανιζόμενης ιστοσελίδας. Αφού πιέσετε το κουμπί, μπορείτε να παρατηρήσετε την αλλαγή της κατάστασης του διακόπτη, όπως φαίνεται στο demo βίντεο.

Μπορείτε επίσης να ρυθμίσετε αυτό το πρόγραμμα ώστε να εκτελείται χωρίς το δρομολογητή. Για να γίνει αυτό πρέπει να:

  1. Εκχωρήστε μια μη αυτόματη διεύθυνση IP στο Ethernet του Arduino, δηλ. 192.168.0.2 και η μάσκα υποδικτύου 255.255.255.0 default Gateway empty.
  2. Χρησιμοποιήστε ένα καλώδιο διασύνδεσης Ethernet για να συνδέσετε τα δύο (laptop και Arduino).
  3. Στη συνέχεια, θα πρέπει να μπορέσουμε να λάβουμε τον ιστότοπό σας Arduino στο //192.168.0.2 από το φορητό υπολογιστή.

Παρακάτω είναι ο κώδικας που θα φορτώσετε στο Arduino για να συνδεθείτε απευθείας στον υπολογιστή χωρίς το δρομολογητή:

Κώδικας

 #include#include/******************** ETHERNET SETTINGS ********************/ byte mac() = { 0x90, 0xA2, 0xDA, 0x0D, 0x85, 0xD9 }; //physical mac address byte ip() = { 192, 168, 0, 112 }; // ip in lan byte subnet() = { 255, 255, 255, 0 }; //subnet mask byte gateway() = { 192, 168, 0, 1 }; // default gateway EthernetServer server(80); //server port void setup() { Ethernet.begin(mac, ip, gateway, subnet); // initialize Ethernet device server.begin(); // start to listen for clients pinMode(8, INPUT); // input pin for switch } void loop() { EthernetClient client = server.available(); // look for the client // send a standard http response header client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connnection: close"); client.println(); /* This portion is the webpage which will be sent to client web browser one can use html, javascript and another web markup language to make particular layout */ client.println(""); //web page is made using html client.println(""); client.println(""); client.println("Ethernet Tutorial"); client.println(""); /* The above line is used to refresh the page in every 1 second This will be sent to the browser as the following HTML code:content = 1 sec ie assign time for refresh */ client.println(""); client.println(""); client.println("

Ένα σεμινάριο Webserver

"), client.println ("

Παρατηρητική κατάσταση του διακόπτη

"), client.print ("

Ο διακόπτης είναι: "), αν (digitalRead (8)) {client.println ("

ΕΠΙ

")} αλλιώς {client.println ("

ΜΑΚΡΙΑ ΑΠΟ

");} client.println (" "); client.println (" "); καθυστέρηση (1); // δίνοντας χρόνο για την λήψη των δεδομένων / * Η ακόλουθη γραμμή είναι σημαντική επειδή θα σταματήσει τον πελάτη νέα σύνδεση στην επόμενη επανάληψη δηλαδή EthernetClient client = server.available (); * / client.stop ();}

Λήψη κώδικα

Βίντεο

Δώστε αυτό το έργο μια δοκιμή για τον εαυτό σας! Αποκτήστε το BOM.