facebook pixel מדריך: ספריה - Ethernet - דוגמה - AdvancedChatServer - www.4project.co.il
Main logo www.4project.co.il
כל הרכיבים לפרוייקט שלכם
עגלת קניות

העגלה ריקה

לקוחות נכבדים, אלה שעות הפעילות של המחסן במהלך פסח 2024:
ערב חג וחג ראשון (22-23/04) - המחסן סגור
חול המועד (24-25/04) - המחסן יפעל בין 8:00 עד 15:00
ערב חג וחג שני (28-29/04) - המחסן סגור
נחזור לפעילות רגילה ביום שלישי 30/04
חג שמח!

ספריה - Ethernet - דוגמה - AdvancedChatServer


2023-06-26 15:03:51
AdvancedChatServer הוא שרת קצת יותר משוכלל שמעביר את כל הנתונים הנכנסים ללקוחות המחוברים, חוץ מזה ששולח אותם. כדי להשתמש בשרת, תפתחו Terminal שיכול להתחבר בפרוטוקול Telnet, תתחברו לכתובת ה-IP של השרת ותקלידו טקסט.

ציוד נדרש

כרטיס פיתוח Arduino.
מגן Ethernet

מעגל

מגן ה-Etheret מאפשר לכם לחבר את בקר ה-Ethernet של חברת WizNet לכרטיס ה-Arduino דרך ערוץ תקשורת SPI. המגן משתמש בקווים 10, 11, 12 ו-13 לתקשורת SPI עם בקר של WizNet. דגמים האחרונים של מגן ה-Ethernet כוללים גם חיבור לכרטיס זכרון microSD. בכרטיסים אלה קו מספר 4 משמש לבחירת הרכיב המתקשר על המגן (Slave Select).

מגן ה-Ethernet צריך להיות מורכב על כרטיס הארדואינו ומחובר לרשת ה-Ethernet. תצטרכו לשנות את הגדרות הרשת בתוכנה כדי להתאים אותם לרשת שלכם.

שרטוט

אין צורך בשרטוט לדוגמה זו.

קוד

קוד: בחר הכל
/*
Advanced Chat Server

A more advanced server that distributes any incoming messages
to all connected clients but the client the message comes from.
To use, telnet to your device's IP address and type.
You can see the client's input in the serial monitor as well.
Using an Arduino Wiznet Ethernet shield.

Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13

created 18 Dec 2009
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe
redesigned to make use of operator== 25 Nov 2013
by Norbert Truchsess

*/

#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network.
// gateway and subnet are optional:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 1, 177);
IPAddress myDns(192, 168, 1, 1);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 0, 0);


// telnet defaults to port 23
EthernetServer server(23);

EthernetClient clients[4];

void setup() {
  // initialize the Ethernet device
  Ethernet.begin(mac, ip, myDns, gateway, subnet);
  // start listening for clients
  server.begin();
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  Serial.print("Chat server address:");
  Serial.println(Ethernet.localIP());
}

void loop() {
  // wait for a new client:
  EthernetClient client = server.available();

  // when the client sends the first byte, say hello:
  if (client) {

    boolean newClient = true;
    for (byte i = 0; i < 4; i++) {
      //check whether this client refers to the same socket as one of the existing instances:
      if (clients == client) {
        newClient = false;
        break;
      }
    }

    if (newClient) {
      //check which of the existing clients can be overridden:
      for (byte i = 0; i < 4; i++) {
        if (!clients && clients != client) {
          clients = client;
          // clear out the input buffer:
          client.flush();
          Serial.println("We have a new client");
          client.print("Hello, client number: ");
          client.print(i);
          client.println();
          break;
        }
      }
    }

    if (client.available() > 0) {
      // read the bytes incoming from the client:
      char thisChar = client.read();
      // echo the bytes back to all other connected clients:
      for (byte i = 0; i < 4; i++) {
        if (clients && (clients != client)) {
          clients.write(thisChar);
        }
      }
      // echo the bytes to the server as well:
      Serial.write(thisChar);
    }
  }
  for (byte i = 0; i < 4; i++) {
    if (!(clients.connected())) {
      // client.stop() invalidates the internal socket-descriptor, so next use of == will allways return false;
      clients.stop();
    }
  }
}



ראו גם:

מדריך לתחילת העבודה עם מגן Ethernet (אנגלית) - TODO
ספריית Ethernet
ChatServer - יצירת שרת צ'ט פשוט
WebClient - שולח בקשות HTTP
WebClientRepeating - חוזר על שליחת בקשות HTTP
WebServer - שרת WEB פשוט שמציג עמוד HTML עם ערך של חיישן אנלוגי
BarometricSensorWebServer - מציג תוצאות של חיישן לחץ ברומטרי כעמוד WEB
UDPSendReceiveString - קבלה ומשלוח הודעות טקסט דרך UDP
UdpNtpClient - קבלת זמן משרת NTP (שרת Network Time Protocol)
DnsWebClient - צד ב-Client שמבוסס על DHCP ו-DNS
DhcpChatServer - שרת צ'ט פשוט שמבוסס על DHCP
DhcpAddressPrinter - מקבל כתובת דרך DHCP ומדפיס אותה
TelnetClient - צד ה-Client פשוט לחיבור ל-Telnet


פירוט שפת תכנות לסביבת Arduino


עמוד זה הוא תרגום של AdvancedChatServer לפי רישיון Creative Commons Attribution-ShareAlike 3.0.