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을 이용한 유선이더넷의 웹서버 테스트
반응형