이 가이드에서는 Arduino UNO R4 WiFi를 웹 서버로 작동시키는 방법을 보여드립니다. 컴퓨터나 스마트폰의 웹 브라우저를 사용하여 Arduino UNO R4 웹 서버의 웹 페이지에 접속할 수 있습니다. 이를 통해 Arduino UNO R4의 값을 보고 변경할 수 있습니다. 이 목적을 위해 Arduino UNO R4 WiFi를 프로그래밍 하기 위한 다음 단계를 배우게 됩니다:
Arduino UNO R4 웹 서버 - 단일 페이지: 이것은 Arduino UNO R4의 센서 읽기를 웹 페이지에서 확인할 수 있도록 도와줍니다.
Arduino UNO R4 웹 서버 - 단일 페이지: 우리는 웹 브라우저로 Arduino UNO R4를 관리할 수 있도록 할 것입니다.
Arduino UNO R4 웹 서버 - 단일 페이지: Arduino IDE에서 HTML, CSS, JavaScript와 같은 HTML 요소를 다른 파일로 이동하는 방법을 배울 것입니다.
Arduino UNO R4 웹 서버 - 여러 페이지: index.html, temperature.html, led.html, error_404.html, error_405.html 등을 포함한 다양한 웹 페이지를 만들 것입니다.
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
Arduino UNO R4를 통해 웹에서 센서 값 읽기
Arduino UNO R4 코드가 수행하는 작업:
웹 브라우저에서 HTTP 요청을 받는 웹 서버 구축하기.
웹 브라우저가 요청을 보내면 Arduino UNO R4는 다음과 같이 응답합니다:
HTTP 헤더
HTTP 본문: 이것은 HTML 내용과 센서 데이터를 포함합니다.
다음은 위에서 언급한 작업을 수행하는 Arduino UNO R4 코드입니다:
/* * 이 아두이노 우노 R4 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 우노 R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-web-server */#include <UnoR4WiFi_WebServer.h>constchar HTML_CONTENT[] PROGMEM = R"rawliteral(<!DOCTYPE HTML><html><head><link rel="icon" href="data:,"></head><p>Temperature: <span style="color: red;">%TEMP_PLACE_HOLDER% °C</span></p></html>)rawliteral";// WiFi credentialsconstchar WIFI_SSID[] = "YOUR_WIFI_SSID"; // change your network SSID (name)constchar WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // change your network password// Create web server instanceUnoR4WiFi_WebServer server;floatgetTemperature() {return 26.9456;// YOUR SENSOR IMPLEMENTATION HERE// simulate the temperature valuefloat temp_x100 = random(0, 10000); // a ramdom value from 0 to 10000return temp_x100 / 100; // return the simulated temperature value from 0 to 100 in float}void handleHome(WiFiClient& client, constString& method, constString& request, const QueryParams& params, constString& jsonData) {float tempC = getTemperature();String response = HTML_CONTENT; response.replace("%TEMP_PLACE_HOLDER%", String(tempC, 1)); server.sendResponse(client, response.c_str());}voidsetup() {Serial.begin(9600);delay(1000);Serial.println("Arduino Uno R4 WiFi - Web Server");// Connect to WiFiSerial.print("Connecting to ");Serial.println(WIFI_SSID);WiFi.begin(WIFI_SSID, WIFI_PASSWORD);while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print("."); }Serial.println("connected!");Serial.print("IP address: ");Serial.println(WiFi.localIP());// Configure routes server.addRoute("/", handleHome);// Start server server.begin();Serial.println("\n=== Web Server Ready! ===");Serial.print("Visit: http://");Serial.println(WiFi.localIP());}voidloop() { server.handleClient();}
자세한 사용 방법
다음 지침을 단계별로 따르세요:
Arduino Uno R4 WiFi/DIYables STEM V4 IoT를 처음 사용하는 경우, 아두이노 우노 R4 - 소프트웨어 설치에 대한 튜토리얼을 참조하세요.
USB 케이블을 사용하여 Arduino Uno R4 보드를 컴퓨터에 연결합니다.
컴퓨터에서 Arduino IDE를 실행합니다.
적절한 Arduino Uno R4 보드(예: Arduino Uno R4 WiFi)와 COM 포트를 선택하세요.
Web Server for Arduino Uno R4 WiFi를 검색하고 DIYables의 Web Server를 찾습니다.
Install 버튼을 클릭하여 Web Server 라이브러리를 추가합니다.
코드를 복사하여 Arduino IDE에서 엽니다.
코드에서 WiFi 세부 정보(SSID 및 비밀번호)를 자신의 것으로 교체하세요.
Arduino IDE에서 Upload 버튼을 클릭하여 코드를 Arduino UNO R4에 업로드합니다.
시리얼 모니터를 엽니다.
시리얼 모니터에서 결과를 확인하세요.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
New Line
9600 baud
Arduino Uno R4 WiFi - Web Server
Connecting to YOUR_WIFI_SSID
connected!
IP address: 192.168.0.254
Starting web server on IP: 192.168.0.254
=== Web Server Ready! ===
Visit: http://192.168.0.254
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2
표시된 IP 주소를 보고 스마트폰이나 컴퓨터의 웹 브라우저 주소창에 입력하세요.
그러면 직렬 모니터에서 이 정보를 볼 수 있습니다.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
New Line
9600 baud
Arduino Uno R4 WiFi - Web Server
Connecting to YOUR_WIFI_SSID
connected!
IP address: 192.168.0.254
Starting web server on IP: 192.168.0.254
=== Web Server Ready! ===
Visit: http://192.168.0.254
Method: GET
Requested path: /
Client disconnected
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2
웹 브라우저에 IP 주소를 입력하면 Arduino UNO R4 보드에 대한 정보를 보여주는 간단한 웹페이지가 나타납니다. 페이지는 다음과 같이 나타납니다:
그래픽 사용자 인터페이스(UI)를 사용하여 멋진 웹 페이지를 만들려면 이 튜토리얼의 마지막 부분을 참조하세요.
웹을 통한 Arduino UNO R4 제어
Arduino UNO R4에 연결된 장치를 관리하는 것은 단순히 값을 확인하는 것보다 조금 더 복잡합니다. 이러한 복잡성은 웹 브라우저로부터 받은 명령을 해석하여 적절한 응답을 결정해야 하는 Arduino UNO R4 때문에 발생합니다. 다음은 Arduino UNO R4 코드가 이 상황을 처리하는 방법입니다:
웹 브라우저에서 HTTP 요청을 수신하는 웹 서버 구축.
브라우저로부터의 요청 처리:
HTTP 요청 헤더 읽기.
필요한 제어 명령어를 알아내기 위해 HTTP 요청 헤더 검토.
제어 명령어에 따라 Arduino UNO R4를 사용하여 연결된 장치나 항목 제어.
HTTP 응답 전송.
선택적으로, 제어 상태에 대한 세부 정보를 보여주기 위해 HTML 콘텐츠가 포함된 HTTP 응답 본문을 전송할 수도 있음 (필요한 경우).
콘텐츠가 몇 개만 포함된 기본 웹 페이지를 만들려면 이전에 언급한 대로 Arduino UNO R4 코드에 HTML을 포함할 수 있습니다.
더 복잡하고 인상적인 웹페이지를 많은 콘텐츠와 함께 만들고 싶다면, 모든 HTML, CSS, 그리고 JavaScript 코드를 Arduino UNO R4 코드에 직접 넣는 것은 쉽지 않습니다. 이 경우, 코드를 처리하는 다른 방법을 사용할 수 있습니다.
Arduino UNO R4 코드는 .ino라는 이름의 파일에 저장해야 합니다.
HTML, CSS, Javascript가 포함된 HTML 코드는 .h라는 다른 파일에 저장해야 합니다. 이렇게 하면 웹 페이지 콘텐츠를 Arduino UNO R4 코드와 분리하여 관리 및 변경이 더 간단해집니다.
우리는 두 가지 주요 단계를 밟아야 합니다:
HTML 콘텐츠 생성
아두이노 UNO R4 코딩
HTML 내용 준비하기
I. 컴퓨터에 HTML 파일을 만드세요. 이 파일에는 HTML, CSS, JavaScript를 사용하여 사용자 인터페이스 디자인을 포함해야 합니다.
I. HTML 파일에 Arduino UNO R4에서 받을 데이터를 표시할 자리 표시자를 넣으세요. 현재는 임의의 샘플 값을 사용하세요.
I. 파일의 디자인을 확인하고 만족할 때까지 조정하세요.
I. HTML 파일의 자리 표시자 값을 TEMPERATURE_MARKER와 같은 고유한 레이블로 교체하세요. 나중에 Arduino UNO R4 스크립트에서 String.replace("TEMPERATURE_MARKER", real_value); 명령을 사용하여 Arduino에서 실제 데이터를 표시할 것입니다.
I. 다음으로, 이 HTML 콘텐츠를 Arduino IDE 내의 .h 파일로 전송할 것입니다.
아두이노 UNO R4 프로그래밍
Arduino IDE를 시작하고 새 파일을 만드세요. 파일 이름을 다음과 같이 지정하세요: newbiely.com.ino.
아래에 제공된 코드를 가져와서 생성한 새 파일에 넣으세요.
/* * 이 아두이노 우노 R4 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 우노 R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-web-server */#include <UnoR4WiFi_WebServer.h>#include"index.h"constchar WIFI_SSID[] = "YOUR_WIFI_SSID"; // change your network SSID (name)constchar WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // change your network passwordUnoR4WiFi_WebServer server;floatgetTemperature() {return 26.9456;// YOUR SENSOR IMPLEMENTATION HERE// simulate the temperature valuefloat temp_x100 = random(0, 10000); // a ramdom value from 0 to 10000return temp_x100 / 100; // return the simulated temperature value from 0 to 100 in float}void handleHome(WiFiClient& client, constString& method, constString& request, const QueryParams& params, constString& jsonData) {float tempC = getTemperature();String response = HTML_CONTENT; response.replace("TEMPERATURE_MARKER", String(tempC, 1)); server.sendResponse(client, response.c_str());}voidsetup() {Serial.begin(9600);delay(1000);Serial.println("Arduino Uno R4 WiFi - Web Server");// Connect to WiFiSerial.print("Connecting to ");Serial.println(WIFI_SSID);WiFi.begin(WIFI_SSID, WIFI_PASSWORD);while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print("."); }Serial.println("connected!");Serial.print("IP address: ");Serial.println(WiFi.localIP());// Configure routes server.addRoute("/", handleHome);// Start server server.begin();Serial.println("\n=== Web Server Ready! ===");Serial.print("Visit: http://");Serial.println(WiFi.localIP());}voidloop() { server.handleClient();}
WiFi 세부 정보를 사용하여 코드 업데이트(SSID 및 비밀번호)
Arduino IDE에서 index.h라는 파일을 만드세요
시리얼 모니터 아이콘 아래의 버튼을 클릭하고 새 탭을 선택하거나 Ctrl+Shift+N을 누르세요.
파일 이름을 index.h로 지정하고 OK 버튼을 누르세요.
아래 코드를 복사하여 index.h라는 파일에 붙여넣으세요.
/* * 이 아두이노 우노 R4 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 우노 R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-web-server */constchar *HTML_CONTENT = R""""(REPLACE_YOUR_HTML_CONTENT_HERE)"""";
준비한 HTML 콘텐츠를 REPLACE_YOUR_HTML_CONTENT_HERE에 삽입하세요. 줄 바꿈 문자를 사용하는 것도 괜찮습니다. 다음은 index.h 파일의 예입니다:
/* * 이 아두이노 우노 R4 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 우노 R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-web-server */constchar *HTML_CONTENT = R""""(<!DOCTYPE html><html><head><title>Arduino Uno R4 - Web Temperature</title><meta name="viewport" content="width=device-width, initial-scale=0.7, maximum-scale=0.7"><meta charset="utf-8"><link rel="icon" href="https://diyables.io/images/page/diyables.svg"><style>body { font-family: "Georgia"; text-align: center; font-size: width/2pt;}h1 { font-weight: bold; font-size: width/2pt;}h2 { font-weight: bold; font-size: width/2pt;}button { font-weight: bold; font-size: width/2pt;}</style><script>var cvs_width = 200, cvs_height = 450;function init() { var canvas = document.getElementById("cvs"); canvas.width = cvs_width; canvas.height = cvs_height + 50; var ctx = canvas.getContext("2d"); ctx.translate(cvs_width/2, cvs_height - 80); update_view(TEMPERATURE_MARKER);}function update_view(temp) { var canvas = document.getElementById("cvs"); var ctx = canvas.getContext("2d"); var radius = 70; var offset = 5; var width = 45; var height = 330; ctx.clearRect(-cvs_width/2, -350, cvs_width, cvs_height); ctx.strokeStyle="blue"; ctx.fillStyle="blue";//5-step Degree var x = -width/2; ctx.lineWidth=2;for (var i = 0; i <= 100; i+=5) { var y = -(height - radius)*i/100 - radius - 5; ctx.beginPath(); ctx.lineTo(x, y); ctx.lineTo(x - 20, y); ctx.stroke(); }//20-step Degree ctx.lineWidth=5;for (var i = 0; i <= 100; i+=20) { var y = -(height - radius)*i/100 - radius - 5; ctx.beginPath(); ctx.lineTo(x, y); ctx.lineTo(x - 25, y); ctx.stroke(); ctx.font="20px Georgia"; ctx.textBaseline="middle"; ctx.textAlign="right"; ctx.fillText(i.toString(), x - 35, y); }// shape ctx.lineWidth=16; ctx.beginPath(); ctx.arc(0, 0, radius, 0, 2 * Math.PI); ctx.stroke(); ctx.beginPath(); ctx.rect(-width/2, -height, width, height); ctx.stroke(); ctx.beginPath(); ctx.arc(0, -height, width/2, 0, 2 * Math.PI); ctx.stroke(); ctx.fillStyle="#e6e6ff"; ctx.beginPath(); ctx.arc(0, 0, radius, 0, 2 * Math.PI); ctx.fill(); ctx.beginPath(); ctx.rect(-width/2, -height, width, height); ctx.fill(); ctx.beginPath(); ctx.arc(0, -height, width/2, 0, 2 * Math.PI); ctx.fill(); ctx.fillStyle="#ff1a1a"; ctx.beginPath(); ctx.arc(0, 0, radius - offset, 0, 2 * Math.PI); ctx.fill(); temp = Math.round(temp * 100) / 100; var y = (height - radius)*temp/100.0 + radius + 5; ctx.beginPath(); ctx.rect(-width/2 + offset, -y, width - 2*offset, y); ctx.fill(); ctx.fillStyle="red"; ctx.font="bold 34px Georgia"; ctx.textBaseline="middle"; ctx.textAlign="center"; ctx.fillText(temp.toString() + "°C", 0, 100);}window.onload = init;</script></head><body><h1>Arduino - Web Temperature</h1><canvas id="cvs"></canvas></body></html>)"""";
이제 코드가 두 개의 파일에 있습니다: newbiely.com.ino 및 index.h
Arduino IDE에서 Upload 버튼을 클릭하여 코드를 Arduino UNO R4로 전송하세요.
이전과 마찬가지로 웹 브라우저에서 Arduino UNO R4 보드의 웹 페이지를 엽니다. 다음과 같이 나타날 것입니다: