본문 바로가기

ESPRESSIF/ESP32

[ESP32 xBee EVM] W5500 웹서버 테스트

 

ESP32에서 유선 랜을 사용하기 위해 W5500 모듈을 테스트 해 보았다.

는 WiFi 가 기본적으로 내장되어 있는 칩 이라 

 

기존에 Arduino에서 테스트 했던 W5500 테스트 코드를 구동하려고 했는데 컴파일 에러가 발생 한다.


WebServer_temp:40:16: error: cannot declare variable 'server' to be of abstract type 'EthernetServer'

 EthernetServer server(80);

                ^~~~~~

In file included from C:\Users\nexp7\OneDrive\\Arduino\libraries\Ethernet2\src/Ethernet2.h:17,


C:\Users\nexp7\OneDrive\\Arduino\libraries\Ethernet2\src/EthernetServer.h:8:7: note:   because the following virtual functions are pure within 'EthernetServer':

 class EthernetServer :

       ^~~~~~~~~~~~~~

In file included from C:\Users\nexp7\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.2\cores\esp32/Arduino.h:165,

                 from sketch\WebServer_temp.ino.cpp:1:

C:\Users\nexp7\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.2\cores\esp32/Server.h:28:18: note:  'virtual void Server::begin(uint16_t)'

     virtual void begin(uint16_t port=0) =0;

                  ^~~~~

exit status 1

cannot declare variable 'server' to be of abstract type 'EthernetServer'

 

 

ESP32는 WiFi가 디폴트로 사용을 하고 있기 때문에 server의 bign 함수에서 에러가 발생하는데 이부분을 수정하면 문제 없이 컴파일 된다.

(다만 이렇게 되면 기존 WiFi 예제에는 문제가 발생 할 수 있다. 유선과 무선을 동시에 사용하려면 라이브러리 수정이 필요 할것 같다.)

 

\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.2\cores\esp32\Server.h
class Server: public Print
{
public:
    //virtual void begin(uint16_t port=0) =0;
	virtual void begin() = 0;
};

ESP32 xBee EVM 보드의 IO13에 연결되어 있는 W5500을 이용하여 MAX31856 써모커플 온도 센서 테스트 했던 온도 값을 웹페이지에 출력하는 테스트를 진행해 보자

#include <SPI.h>
#include <Ethernet2.h>
#include <Adafruit_MAX31856.h>

Adafruit_MAX31856 maxthermo = Adafruit_MAX31856(13);

int32_t get_temperature(void) 
{ 
    int32_t temp =25; 
	temp = maxthermo.readThermocoupleTemperature();
    return temp;  
} 


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

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer w5500_server(80);

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  Serial.print("server is at ");
  
  if (!maxthermo.begin()) {
    Serial.println("Could not initialize thermocouple.");
    while (1) delay(10);
  }

  maxthermo.setThermocoupleType(MAX31856_TCTYPE_K);
  
  // start the Ethernet connection and the server:
  Ethernet.w5500_cspin = 13;

  Ethernet.begin(mac, ip);
  w5500_server.begin();
  
  Serial.println(Ethernet.localIP());
}


void loop() {
  // listen for incoming clients
  EthernetClient client = w5500_server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
          client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html><center>");
          client.print("<h1>");
          client.print("ESP32 W5500 Temperature : ");

          int sensorReading = get_temperature();
          client.print(sensorReading);

          client.println("<br /></center></h1>");
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disconnected");
  }
}
 

 

 

ESP32에서 W5500을 이용한 유선이더넷의 웹서버 테스트

반응형