WebDigitalPins 예제는 Arduino의 모든 디지털 핀을 제어하고 실시간으로 모니터링할 수 있는 웹 기반 인터페이스를 제공합니다. Arduino Uno R4 WiFi 및 DIYables STEM V4 IoT용으로 설계된 교육 플랫폼으로, 향상된 GPIO 기능, 확장된 핀 구성 및 디지털 전자공학 학습을 위한 내장 교육 기능을 갖추고 있습니다. 핀을 켜고 끄고, 상태를 실시간으로 모니터링하며, 직관적인 웹 인터페이스를 통해 일괄 작업도 수행할 수 있습니다.
특징
개별 핀 제어: 각 디지털 핀(0-13)을 개별적으로 제어
실시간 상태: 시각적 지표로 핀 상태를 모니터링
일괄 작업: 모든 핀을 한 번에 제어(모두 켜기, 모두 끄기, 모두 토글)
핀 구성: 웹 인터페이스를 통해 입력 또는 출력으로 핀 설정
시각적 피드백: 핀 상태를 표시하는 색상 코드 버튼(초록=켜짐, 빨강=꺼짐)
반응형 디자인: 데스크탑, 태블릿, 모바일 기기에서 작동
WebSocket 통신: 페이지 새로 고침 없이 즉시 업데이트
플랫폼 확장성: 현재 Arduino Uno R4 WiFi용으로 구현되었지만, 다른 하드웨어 플랫폼으로도 확장할 수 있습니다. 자세한 내용은 DIYables_WebApps_ESP32
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
설정 지침
빠른 단계
다음 지시를 단계별로 따라가세요:
이것이 Arduino Uno R4 WiFi/DIYables STEM V4 IoT를 처음 사용하는 경우, Arduino IDE에서 Arduino Uno R4 WiFi/DIYables STEM V4 IoT의 환경 설정에 대한 튜토리얼을 참조하십시오 아두이노 우노 R4 - 소프트웨어 설치.
USB 케이블을 사용하여 컴퓨터에 Arduino Uno R4/DIYables STEM V4 IoT 보드를 연결합니다.
컴퓨터에서 Arduino IDE를 실행합니다.
적절한 Arduino Uno R4 보드(예: Arduino Uno R4 WiFi)와 COM 포트를 선택합니다.
Arduino IDE의 왼쪽 바에 있는 Libraries 아이콘으로 이동합니다.
"DIYables WebApps"를 검색한 후, DIYables에서 제공하는 DIYables WebApps 라이브러리를 찾습니다.
라이브러리를 설치하려면 Install 버튼을 클릭합니다.
다른 라이브러리 의존성 설치를 요청받게 됩니다.
모든 라이브러리 의존성을 설치하려면 Install All 버튼을 클릭하세요.
Arduino IDE에서 File 예제 DIYables WebApps WebDigitalPins 예제로 이동하거나, 위의 코드를 복사하여 Arduino IDE의 에디터에 붙여넣으십시오
/* * DIYables WebApp Library - Web Digital Pins Example * * This example demonstrates the Web Digital Pins feature with automatic command handling: * - Control output pins 0-13 via web interface * - Monitor input pins 0-13 in real-time * - Individual pin ON/OFF control for outputs * - Real-time pin status feedback for inputs * - Bulk operations (All ON, All OFF, Toggle All) for outputs * * Hardware: Arduino Uno R4 WiFi or DIYables STEM V4 IoT * * Setup: * 1. Update WiFi credentials below * 2. Upload the sketch to your Arduino * 3. Open Serial Monitor to see the IP address * 4. Navigate to http://[IP_ADDRESS]/webdigitalpins */#include <DIYablesWebApps.h>// WiFi credentials - UPDATE THESE WITH YOUR NETWORKconstchar WIFI_SSID[] = "YOUR_WIFI_SSID";constchar WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD";// Create WebApp server and page instances using platform abstractionUnoR4ServerFactory serverFactory;DIYablesWebAppServerwebAppsServer(serverFactory, 80, 81);DIYablesHomePage homePage;DIYablesWebDigitalPinsPage webDigitalPinsPage;// Array to store the state of each digital pin (0-13). Index corresponds to pin number.int pinStates[16] = { 0 }; // Initialize all states to LOW (0)voidsetup() {Serial.begin(9600);delay(1000);Serial.println("DIYables WebApp - Web Digital Pins Example");// Add home and digital pins pageswebAppsServer.addApp(&homePage);webAppsServer.addApp(&webDigitalPinsPage);// Optional: Add 404 page for better user experiencewebAppsServer.setNotFoundPage(DIYablesNotFoundPage());// Pin Configuration Examples:// Method 1: Enable specific pins individually for output control webDigitalPinsPage.enablePin(0, WEB_PIN_OUTPUT); // Enable pin 0 (TX - use with caution) webDigitalPinsPage.enablePin(1, WEB_PIN_OUTPUT); // Enable pin 1 (RX - use with caution) webDigitalPinsPage.enablePin(2, WEB_PIN_OUTPUT); webDigitalPinsPage.enablePin(3, WEB_PIN_OUTPUT); webDigitalPinsPage.enablePin(4, WEB_PIN_OUTPUT);//webDigitalPinsPage.enablePin(5, WEB_PIN_OUTPUT); // Comment/uncomment to disable/enable//webDigitalPinsPage.enablePin(6, WEB_PIN_OUTPUT); // Comment/uncomment to disable/enable webDigitalPinsPage.enablePin(13, WEB_PIN_OUTPUT); // Enable pin 13 (built-in LED)// Method 2: Enable pins for input monitoring webDigitalPinsPage.enablePin(8, WEB_PIN_INPUT); webDigitalPinsPage.enablePin(9, WEB_PIN_INPUT);//webDigitalPinsPage.enablePin(10, WEB_PIN_INPUT); // Comment/uncomment to disable/enable//webDigitalPinsPage.enablePin(11, WEB_PIN_INPUT); // Comment/uncomment to disable/enable// Method 3: Enable all pins at once (uncomment to use)// for (int pin = 0; pin <= 13; pin++) {// webDigitalPinsPage.enablePin(pin, WEB_PIN_OUTPUT); // or WEB_PIN_INPUT as needed// }// Method 4: Enable pins in a range using for loop (uncomment to use)// for (int pin = 7; pin <= 11; pin++) {// webDigitalPinsPage.enablePin(pin, WEB_PIN_OUTPUT); // or WEB_PIN_INPUT as needed// }// Initialize enabled pinsint outputPins[] = { 0, 1, 2, 3, 4, 13 }; // Note: Pins 0,1 are TX/RX - use with cautionfor (int i = 0; i < 6; i++) {int pin = outputPins[i];pinMode(pin, OUTPUT);digitalWrite(pin, LOW); pinStates[pin] = LOW; }int inputPins[] = { 8, 9 };for (int i = 0; i < 2; i++) {int pin = inputPins[i];pinMode(pin, INPUT); // Use INPUT_PULLUP if needed pinStates[pin] = digitalRead(pin); }// Start the WebApp serverif (!webAppsServer.begin(WIFI_SSID, WIFI_PASSWORD)) {while (1) {Serial.println("Failed to start WebApp server!");delay(1000); } }// Return the current state to display on Web App webDigitalPinsPage.onPinRead([](int pin) {return pinStates[pin]; // Return the current state of the pin// You can implement custom read logic here if needed });// Handle the control request from Web App (for output pins) webDigitalPinsPage.onPinWrite([](int pin, int state) {digitalWrite(pin, state); pinStates[pin] = state;// You can implement custom control logic here if needed });// Handle pin mode change requests (optional) webDigitalPinsPage.onPinModeChange([](int pin, int mode) {if (mode == WEB_PIN_OUTPUT) {pinMode(pin, OUTPUT);digitalWrite(pin, LOW); pinStates[pin] = LOW; } elseif (mode == WEB_PIN_INPUT) {pinMode(pin, INPUT); // or INPUT_PULLUP as needed pinStates[pin] = digitalRead(pin); }// You can implement custom mode change logic here if needed });}voidloop() {// Handle WebApp server communicationswebAppsServer.loop();// Monitor input pins for real-time updatesstaticunsignedlong lastInputCheck = 0;if (millis() - lastInputCheck > 100) { // Check every 100ms lastInputCheck = millis();// Check input pins for changes and send real-time updatesint inputPins[] = { 8, 9 };for (int i = 0; i < 2; i++) {int pin = inputPins[i];int currentState = digitalRead(pin);if (currentState != pinStates[pin]) { pinStates[pin] = currentState;// Send real-time update to web clients webDigitalPinsPage.updatePinState(pin, currentState); } } }// Add your main application code heredelay(10);}
Arduino IDE에서 Upload 버튼을 클릭하여 Arduino UNO R4/DIYables STEM V4 IoT에 코드를 업로드합니다.
시리얼 모니터를 엽니다.
시리얼 모니터에서 결과를 확인하세요. 아래와 같이 보입니다.
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
WebSocket client connected from: 192.168.0.5
New WebSocket connection established
WebSocket message received: SLIDER:GET_VALUES
WebSocket client connected from: 192.168.0.5
New WebSocket connection established
WebSocket message received: SLIDER:64,128
DIYables WebApp - Web Digital Pins Example
INFO: Added app /
INFO: Added app /web-digital-pins
DEBUG: Enabling pin 0 with mode OUTPUT
DEBUG: Enabling pin 1 with mode OUTPUT
DEBUG: Enabling pin 2 with mode OUTPUT
DEBUG: Enabling pin 3 with mode OUTPUT
DEBUG: Enabling pin 4 with mode OUTPUT
DEBUG: Enabling pin 13 with mode OUTPUT
DEBUG: Enabling pin 8 with mode INPUT
DEBUG: Enabling pin 9 with mode INPUT
DIYables WebApp Library
Platform: Arduino Uno R4 WiFi
Network connected!
IP address: 192.168.0.2
HTTP server started on port 80
Configuring WebSocket server callbacks...
WebSocket server started on port 81
WebSocket URL: ws://192.168.0.2:81
WebSocket server started on port 81
==========================================
DIYables WebApp Ready!
==========================================
📱 Web Interface: http://192.168.0.2
🔗 WebSocket: ws://192.168.0.2:81
📋 Available Applications:
🏠 Home Page: http://192.168.0.2/
📟 Digital Pins: http://192.168.0.2/web-digital-pins
==========================================
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2
아무 것도 보이지 않으면 Arduino 보드를 재부팅하세요.
표시된 IP 주소를 메모해 두고, 이 주소를 스마트폰이나 PC의 웹 브라우저 주소 표시줄에 입력하세요.
예: http://192.168.0.2
아래 이미지와 같은 홈 페이지가 표시됩니다:
Web Digital Pins 링크를 클릭하면 아래와 같이 Web Digital Pins 앱의 UI가 표시됩니다:
또는 IP 주소 뒤에 /web-digital-pins를 붙여 페이지에 직접 접속할 수도 있습니다. 예시: http://192.168.0.2/web-digital-pins
핀 버튼을 클릭해 디지털 핀을 켜고 끄면서 내장 LED(핀 13)가 명령에 따라 반응하는지 확인해 보세요.
창의적 맞춤화 - 코드를 프로젝트에 맞게 조정하기
예제는 창의적인 프로젝트의 필요에 맞게 핀을 구성하는 다양한 방법을 보여줍니다:
2. 핀 설정 구성
예제는 핀을 구성하는 다양한 방법을 보여줍니다:
방법 1: 특정 핀 활성화
// Enable individual pins for output controlwebDigitalPinsPage.enablePin(2, WEB_PIN_OUTPUT); // Pin 2 as outputwebDigitalPinsPage.enablePin(3, WEB_PIN_OUTPUT); // Pin 3 as outputwebDigitalPinsPage.enablePin(4, WEB_PIN_INPUT); // Pin 4 as input
방법 2: 핀 범위 활성화
// Enable a range of pins for output controlwebDigitalPinsPage.enableOutputPins(2, 13); // Pins 2-13 as outputs
방법 3: 모든 핀 활성화
// Enable all pins 0-13 for control (use with caution for pins 0,1)webDigitalPinsPage.enableAllPins();
4. 스케치 업로드
Arduino 보드를 선택하세요: 도구 → 보드 → Arduino UNO R4 WiFi
올바른 포트를 선택하세요: 도구 → 포트 → [귀하의 Arduino 포트]
업로드 버튼을 클릭하세요
5. IP 주소 가져오기
열기 도구 → 직렬 모니터
전송 속도를 9600으로 설정
아두이노가 와이파이에 연결될 때까지 기다리기
표시된 IP 주소를 확인하기 (예: 192.168.1.100)
6. 디지털 핀 인터페이스에 접근하기
웹 브라우저를 열고 다음으로 이동하세요:
http://[ARDUINO_IP_ADDRESS]/digital-pins
예시: http://192.168.1.100/digital-pins
사용 방법
핀 제어 인터페이스
웹 인터페이스는 구성된 모든 핀을 다음과 같이 표시합니다:
핀 번호: 0-13 범위의 아두이노 핀을 표시합니다.
현재 상태: ON(녹색) 또는 OFF(빨간색) 표시합니다.
제어 버튼: 핀 상태를 토글하려면 클릭합니다.
핀 유형: 입력 또는 출력으로 구성되었는지 표시합니다.
개별 핀 제어
핀 켜기: OFF로 표시될 때 핀 버튼을 클릭합니다
핀 끄기: ON으로 표시될 때 핀 버튼을 클릭합니다
모니터 상태: 핀 버튼은 현재 상태를 자동으로 표시하도록 업데이트됩니다
일괄 작업
여러 핀을 한 번에 제어하려면 일괄 제어 버튼을 사용하십시오:
모두 켜짐
구성된 모든 출력 핀을 HIGH 상태로 설정합니다
입력 핀은 영향을 받지 않습니다
연결된 모든 장치를 테스트하는 데 유용합니다
모두 끄기
모든 구성된 출력 핀을 LOW 상태로 설정합니다
입력 핀은 영향을 받지 않습니다
모든 출력을 비활성화하는 안전한 방법
모두 토글
모든 출력 핀의 상태를 반전시킵니다.
ON 핀은 OFF가 되고, OFF 핀은 ON이 됩니다.
흥미로운 조명 효과를 만들어냅니다.
실시간 모니터링
핀 상태는 WebSocket을 통해 자동으로 업데이트됩니다
코드에서 이루어진 변경 사항이 웹 인터페이스에 반영됩니다
여러 사용자가 동일한 Arduino를 동시에 모니터링할 수 있습니다
하드웨어 연결
출력 핀 예시
LED 제어
Arduino Pin → LED (with resistor) → Ground
Pin 2 → LED Anode → 220Ω Resistor → Ground
Pin 3 → LED Anode → 220Ω Resistor → Ground
Sensor Signal → Arduino Pin
PIR Sensor → Pin 10
Ultrasonic → Pin 11 (Echo)
코드 커스터마이징
핀 상태 변화에 대한 콜백 추가
핀의 상태가 변경될 때 모니터링:
voidsetup() {// Set callback for pin state changes webDigitalPinsPage.onPinChange([](int pin, bool state) {Serial.print("Pin ");Serial.print(pin);Serial.print(" changed to: ");Serial.println(state ? "HIGH" : "LOW");// Add your custom logic hereif (pin == 13 && state == HIGH) {Serial.println("Built-in LED turned ON!"); } });}
사용자 정의 핀 초기화
시작 시 특정 핀을 원하는 상태로 설정:
voidsetup() {// Initialize pins to specific states webDigitalPinsPage.setPinState(2, HIGH); // Turn on pin 2 webDigitalPinsPage.setPinState(3, LOW); // Turn off pin 3// Configure pin modespinMode(4, INPUT_PULLUP); // Pin 4 as input with pull-uppinMode(5, OUTPUT); // Pin 5 as output}
voidsetup() { webDigitalPinsPage.enablePin(2, WEB_PIN_OUTPUT); // LED webDigitalPinsPage.enablePin(3, WEB_PIN_INPUT); // PIR sensorpinMode(3, INPUT);}voidloop() {if (digitalRead(3) == HIGH) { // Motion detected webDigitalPinsPage.setPinState(2, HIGH); // Turn on LEDdelay(5000); // Keep on for 5 seconds webDigitalPinsPage.setPinState(2, LOW); // Turn off LED }}
온도 제어 팬
voidloop() {float temperature = getTemperature(); // Your temperature reading functionif (temperature > 25.0) { webDigitalPinsPage.setPinState(4, HIGH); // Turn on fan } else { webDigitalPinsPage.setPinState(4, LOW); // Turn off fan }}