Ví dụ ESP32 WebDigitalPins – Hướng dẫn Giao diện Điều khiển Chân số

Tổng quan

Ví dụ WebDigitalPins cung cấp một giao diện dựa trên web để điều khiển và giám sát tất cả các chân số trên Arduino của bạn. Dành cho nền tảng giáo dục ESP32 với khả năng GPIO được cải tiến, cấu hình chân mở rộng và các tính năng giáo dục tích hợp để học điện tử kỹ thuật số. Bạn có thể bật/tắt các chân số, theo dõi trạng thái của chúng theo thời gian thực, và thực hiện các thao tác hàng loạt thông qua một giao diện web trực quan.

ví dụ Arduino webdigitalpins - hướng dẫn giao diện Điều khiển chân số kỹ thuật số

Các tính năng

  • Điều khiển từng chân kỹ thuật số: Điều khiển mỗi chân kỹ thuật số (0-13) riêng biệt
  • Trạng thái theo thời gian thực: Giám sát trạng thái các chân bằng các chỉ báo trực quan
  • Thao tác hàng loạt: Điều khiển tất cả các chân cùng một lúc (Tất cả BẬT, Tất cả TẮT, Chuyển đổi Tất cả)
  • Cấu hình các chân: Thiết lập các chân ở chế độ đầu vào hoặc đầu ra thông qua giao diện web
  • Phản hồi trực quan: Nút được mã màu hiển thị trạng thái chân (xanh=ON, đỏ=OFF)
  • Thiết kế đáp ứng: Hoạt động trên máy tính để bàn, máy tính bảng và thiết bị di động
  • Giao tiếp WebSocket: Cập nhật tức thì mà không cần làm mới trang

Phần cứng cần chuẩn bị

1×mô-đun phát triển ESP-WROOM-32
1×Alternatively, ESP32 Uno-form board
1×Alternatively, ESP32 S3 Uno-form board
1×USB Cable Type-A to Type-C (for USB-A PC)
1×USB Cable Type-C to Type-C (for USB-C PC)
1×(Khuyến nghị) Screw Terminal Expansion Board for ESP32
1×(Khuyến nghị) Breakout Expansion Board for ESP32
1×(Khuyến nghị) Power Splitter for ESP32

Or you can buy the following kits:

1×DIYables ESP32 Starter Kit (ESP32 included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Hướng dẫn thiết lập

Các bước nhanh

Hãy làm theo các chỉ dẫn này từng bước một:

  • Nếu đây là lần đầu tiên bạn sử dụng ESP32, hãy tham khảo hướng dẫn ESP32 - Cài Đặt Phần Mềm.
  • Kết nối bo mạch ESP32 với máy tính của bạn bằng cáp USB.
  • Mở Arduino IDE trên máy tính của bạn.
  • Chọn bo mạch ESP32 phù hợp (ví dụ ESP32 Dev Module) và cổng COM.
  • Đi tới biểu tượng Thư viện ở thanh bên trái của Arduino IDE.
  • Tìm kiếm "DIYables ESP32 WebApps", sau đó tìm thư viện DIYables ESP32 WebApps do DIYables phát hành.
  • Nhấn nút Cài đặt để cài đặt thư viện.
thư viện ESP32 webapps của diyables
  • Bạn sẽ được yêu cầu cài đặt một số phụ thuộc thư viện khác
  • Nhấn nút Install All để cài đặt tất cả các phụ thuộc thư viện.
phụ thuộc diyables ESP32 webapps
  • Trên Arduino IDE, hãy đi tới File Examples DIYables ESP32 WebApps WebDigitalPins ví dụ, hoặc sao chép mã ở trên và dán nó vào trình biên tập của 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: ESP32 Boards * * 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 <DIYables_ESP32_Platform.h> #include <DIYablesWebApps.h> // WiFi credentials - UPDATE THESE WITH YOUR NETWORK const char WIFI_SSID[] = "YOUR_WIFI_SSID"; const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // Create WebApp server and page instances using platform abstraction ESP32ServerFactory serverFactory; DIYablesWebAppServer webAppsServer(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) void setup() { Serial.begin(9600); delay(1000); Serial.println("DIYables ESP32 WebApp - Web Digital Pins Example"); // Add home and digital pins pages webAppsServer.addApp(&homePage); webAppsServer.addApp(&webDigitalPinsPage); // Optional: Add 404 page for better user experience webAppsServer.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 pins int outputPins[] = { 0, 1, 2, 3, 4, 13 }; // Note: Pins 0,1 are TX/RX - use with caution for (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 server if (!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; } else if (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 }); } void loop() { // Handle WebApp server communications webAppsServer.loop(); // Monitor input pins for real-time updates static unsigned long lastInputCheck = 0; if (millis() - lastInputCheck > 100) { // Check every 100ms lastInputCheck = millis(); // Check input pins for changes and send real-time updates int 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 here delay(10); }
  • Cấu hình thông tin xác thực WiFi trong mã nguồn bằng cách cập nhật các dòng này:
const char WIFI_SSID[] = "YOUR_WIFI_NETWORK"; const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD";
  • Nhấn nút Tải lên trên Arduino IDE để tải mã lên ESP32
  • Mở Serial Monitor
  • Kiểm tra kết quả trên Serial Monitor. Nó trông như hình dưới đây
COM6
Send
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: ESP32 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 ==========================================
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Nếu bạn không thấy gì, hãy khởi động lại bộ mạch ESP32.
  • Ghi lại địa chỉ IP được hiển thị và nhập địa chỉ này vào thanh địa chỉ của trình duyệt trên điện thoại thông minh hoặc máy tính của bạn.
  • Ví dụ: http://192.168.0.2
  • Bạn sẽ thấy trang chủ như hình dưới đây:
trang chủ webapp ESP32 diyables với ứng dụng web digital pins.
  • Nhấp vào liên kết Web Digital Pins, bạn sẽ thấy giao diện người dùng của ứng dụng Web Digital Pins như dưới đây:
ESP32 diyables Ứng dụng web cho web digital pins
  • Hoặc bạn cũng có thể truy cập trang web này trực tiếp bằng địa chỉ IP kèm theo /web-digital-pins. Ví dụ: http://192.168.0.2/web-digital-pins
  • Hãy thử điều khiển các chân số kỹ thuật số bằng cách nhấp vào các nút chân để BẬT/TẮT chúng và quan sát đèn LED tích hợp (chân 13) phản hồi theo lệnh của bạn.

Tùy biến sáng tạo - Điều chỉnh mã để phù hợp với dự án của bạn

Ví dụ cho thấy nhiều cách khác nhau để cấu hình các chân sao cho phù hợp với nhu cầu của dự án sáng tạo của bạn:

2. Cấu hình cài đặt pin

Ví dụ cho thấy các cách khác nhau để cấu hình các chân:

Phương pháp 1: Bật các chân cụ thể

// Enable individual pins for output control webDigitalPinsPage.enablePin(2, WEB_PIN_OUTPUT); // Pin 2 as output webDigitalPinsPage.enablePin(3, WEB_PIN_OUTPUT); // Pin 3 as output webDigitalPinsPage.enablePin(4, WEB_PIN_INPUT); // Pin 4 as input

Phương pháp 2: Kích hoạt phạm vi các chân

// Enable a range of pins for output control webDigitalPinsPage.enableOutputPins(2, 13); // Pins 2-13 as outputs

Phương pháp 3: Kích hoạt tất cả các chân

// Enable all pins 0-13 for control (use with caution for pins 0,1) webDigitalPinsPage.enableAllPins();

4. Tải lên bản phác thảo

  1. Chọn bộ mạch ESP32 của bạn: Tools → Board → ESP32
  2. Chọn cổng đúng: Tools → Port → [Cổng ESP32 của bạn]
  3. Nhấn nút Tải lên

5. Lấy địa chỉ IP

  1. Mở Công cụ → Serial Monitor
  2. Đặt tốc độ baud là 9600
  3. Chờ ESP32 kết nối Wi-Fi
  4. Ghi chú địa chỉ IP được hiển thị (ví dụ: 192.168.1.100)

6. Truy cập Giao diện Chân Số

Mở trình duyệt web của bạn và điều hướng đến:

http://[ARDUINO_IP_ADDRESS]/digital-pins

Ví dụ: http://192.168.1.100/digital-pins

Cách sử dụng

Giao diện điều khiển các chân

Giao diện web hiển thị tất cả các chân đã được cấu hình với:

  • Số chân: Hiển thị chân ESP32 nào (0-13)
  • Trạng thái hiện tại: chỉ báo BẬT (màu xanh lá cây) hoặc TẮT (màu đỏ)
  • Nút điều khiển: Nhấn để chuyển đổi trạng thái chân
  • Kiểu chân: Hiển thị chân được cấu hình là Nhập hay Đầu ra

Điều khiển từng chân

  1. Bật PIN: Nhấn nút PIN khi nó hiển thị "OFF"
  2. Tắt PIN: Nhấn nút PIN khi nó hiển thị "ON"
  3. Trạng thái giám sát: Các nút PIN tự động cập nhật để hiển thị trạng thái hiện tại

Các thao tác hàng loạt

Sử dụng các nút điều khiển hàng loạt để điều khiển nhiều chân cùng lúc:

Tất cả BẬT

  • Đưa tất cả các chân đầu ra được cấu hình lên mức HIGH
  • Các chân đầu vào không bị ảnh hưởng
  • Hữu ích cho việc kiểm tra tất cả các thiết bị được kết nối

Tất cả đều tắt

  • Chuyển tất cả các chân đầu ra được cấu hình sang trạng thái LOW
  • Các chân đầu vào không bị ảnh hưởng
  • Cách an toàn để vô hiệu hóa tất cả các đầu ra

Bật/Tắt tất cả

  • Đảo ngược trạng thái của tất cả các chân đầu ra
  • Các chân bật trở thành tắt, các chân tắt trở thành bật
  • Tạo ra những hiệu ứng chiếu sáng thú vị

Giám sát thời gian thực

  • Các trạng thái của các chân pin được tự động cập nhật thông qua WebSocket.
  • Các thay đổi trong mã được phản ánh trên giao diện web.
  • Nhiều người dùng có thể theo dõi cùng một ESP32 đồng thời.

Kết nối phần cứng

Ví dụ về Chân Đầu Ra

Điều khiển LED

Arduino Pin → LED (with resistor) → Ground Pin 2 → LED Anode → 220Ω Resistor → Ground Pin 3 → LED Anode → 220Ω Resistor → Ground

Điều khiển rơ le

Arduino Pin → Relay Input Pin 4 → Relay IN1 Pin 5 → Relay IN2

Điều khiển động cơ (thông qua bộ điều khiển động cơ)

Arduino Pin → Motor Driver Input Pin 6 → Motor Driver IN1 Pin 7 → Motor Driver IN2 Pin 9 → Motor Driver ENA (PWM)

Các ví dụ về chân đầu vào

Chuyển đổi đầu vào

Switch → ESP32 Pin (with pull-up resistor) Switch → Pin 8 → 10kΩ resistor → 5V → GND

Đầu vào cảm biến

Sensor Signal → ESP32 Pin PIR Sensor → Pin 10 Ultrasonic → Pin 11 (Echo)

Tùy biến mã nguồn

Thêm các hàm gọi lại khi chân thay đổi

Giám sát khi các chân thay đổi trạng thái:

void setup() { // 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 here if (pin == 13 && state == HIGH) { Serial.println("Built-in LED turned ON!"); } }); }

Khởi tạo chân tùy chỉnh

Đặt các chân cụ thể vào trạng thái mong muốn khi khởi động:

void setup() { // Initialize pins to specific states webDigitalPinsPage.setPinState(2, HIGH); // Turn on pin 2 webDigitalPinsPage.setPinState(3, LOW); // Turn off pin 3 // Configure pin modes pinMode(4, INPUT_PULLUP); // Pin 4 as input with pull-up pinMode(5, OUTPUT); // Pin 5 as output }

Đọc các chân ngõ vào

Giám sát các chân đầu vào trong vòng lặp chính của bạn:

void loop() { static unsigned long lastRead = 0; if (millis() - lastRead > 1000) { // Read every second // Read input pins and update web interface for (int pin = 0; pin <= 13; pin++) { if (webDigitalPinsPage.isPinEnabled(pin) && webDigitalPinsPage.getPinMode(pin) == WEB_PIN_INPUT) { bool currentState = digitalRead(pin); webDigitalPinsPage.updatePinState(pin, currentState); } } lastRead = millis(); } }

Các tính năng nâng cao

Các nhóm pin

Tạo các nhóm chân hợp lý cho các chức năng liên quan:

// Define pin groups const int LED_PINS[] = {2, 3, 4, 5}; const int RELAY_PINS[] = {6, 7, 8, 9}; void controlLEDGroup(bool state) { for (int pin : LED_PINS) { webDigitalPinsPage.setPinState(pin, state); } } void controlRelayGroup(bool state) { for (int pin : RELAY_PINS) { webDigitalPinsPage.setPinState(pin, state); } }

Tạo mẫu

Tạo mẫu ánh sáng hoặc chuỗi ánh sáng:

void runLightPattern() { static unsigned long lastChange = 0; static int currentPin = 2; if (millis() - lastChange > 500) { // Change every 500ms // Turn off all pins for (int pin = 2; pin <= 13; pin++) { webDigitalPinsPage.setPinState(pin, LOW); } // Turn on current pin webDigitalPinsPage.setPinState(currentPin, HIGH); // Move to next pin currentPin++; if (currentPin > 13) currentPin = 2; lastChange = millis(); } }

Tích hợp điều khiển PWM

Kết hợp với điều khiển tương tự để có các tính năng nâng cao:

void setup() { // Enable digital pins for on/off control webDigitalPinsPage.enablePin(9, WEB_PIN_OUTPUT); webDigitalPinsPage.enablePin(10, WEB_PIN_OUTPUT); // Set PWM pins for brightness control analogWrite(9, 128); // 50% brightness analogWrite(10, 255); // 100% brightness }

Các lưu ý về an toàn

Hướng dẫn sử dụng pin

Các chân 0 và 1 (TX/RX)

  • Được dùng cho giao tiếp nối tiếp
  • Tránh sử dụng trừ khi thực sự cần thiết
  • Có thể can thiệp vào quá trình lập trình và gỡ lỗi

Pin 13 (LED tích hợp)

  • An toàn để sử dụng cho thử nghiệm
  • Đèn LED tích hợp cung cấp phản hồi trực quan
  • Tốt cho thử nghiệm ban đầu

Các chân 2–12

  • An toàn cho I/O số thông dụng
  • Được khuyến nghị cho hầu hết các ứng dụng
  • Không có lưu ý đặc biệt

Các hạn chế hiện tại

Dòng điện tối đa trên mỗi chân: 40 mA

  • Sử dụng điện trở giới hạn dòng cho đèn LED
  • Sử dụng transistor hoặc rơ-le cho các tải có dòng điện lớn
  • Xem xét tổng tiêu thụ dòng điện

Mức điện áp: logic 3.3V

  • ESP32 sử dụng logic 3,3V
  • Đảm bảo các thiết bị được kết nối tương thích
  • Sử dụng bộ chuyển đổi mức cho các thiết bị 5V nếu cần

Khắc phục sự cố

Các vấn đề thường gặp

1. pin không phản hồi

  • Kiểm tra xem chân có được bật trong mã hay không
  • Xác nhận kết nối phần cứng
  • Kiểm tra ngắn mạch
  • Xác nhận chế độ của chân (INPUT/OUTPUT)
  1. Giao diện web không cập nhật
  • Kiểm tra trạng thái kết nối WebSocket
  • Tải lại trang trình duyệt
  • Kiểm tra kết nối mạng
  • Kiểm tra Serial Monitor để xem có lỗi
  1. Các thao tác hàng loạt không hoạt động
  • Đảm bảo các chân được cấu hình làm đầu ra
  • Kiểm tra các giới hạn phần cứng
  • Xác nhận công suất của nguồn cấp điện
  • Giám sát tình trạng quá dòng

4. Các chân đầu vào hiển thị trạng thái sai

  • Kiểm tra điện trở kéo lên và kéo xuống phù hợp
  • Xác nhận mức tín hiệu đầu vào
  • Kiểm tra nhiễu điện từ
  • Xác nhận cấu hình chân

Mẹo Gỡ Lỗi

Bật đầu ra gỡ lỗi:

void debugPinStates() { Serial.println("=== Pin States ==="); for (int pin = 0; pin <= 13; pin++) { if (webDigitalPinsPage.isPinEnabled(pin)) { Serial.print("Pin "); Serial.print(pin); Serial.print(": "); Serial.print(digitalRead(pin) ? "HIGH" : "LOW"); Serial.print(" ("); Serial.print(webDigitalPinsPage.getPinMode(pin) == WEB_PIN_OUTPUT ? "OUTPUT" : "INPUT"); Serial.println(")"); } } Serial.println("=================="); }

Ý tưởng dự án

Tự động hóa gia đình

  • Điều khiển ánh sáng phòng điều khiển
  • Điều khiển rèm cửa
  • Điều khiển hệ thống sưởi ấm và làm mát
  • Tích hợp hệ thống an ninh

Tự động hóa vườn

  • Điều khiển hệ thống tưới nước
  • Quản lý đèn chiếu sáng cho cây trồng
  • Điều chỉnh nhiệt độ
  • Điều khiển độ ẩm

Kiểm soát xưởng

  • Điều khiển nguồn công cụ
  • Quản lý chiếu sáng
  • Hệ thống thông gió
  • Các liên động an toàn

Các dự án giáo dục

  • Trình diễn các cổng logic
  • Mô phỏng đèn giao thông
  • Các dự án hệ thống báo động
  • Các thí nghiệm điều khiển từ xa

Ví dụ về tích hợp

Chiếu sáng kích hoạt bằng chuyển động

void setup() { webDigitalPinsPage.enablePin(2, WEB_PIN_OUTPUT); // LED webDigitalPinsPage.enablePin(3, WEB_PIN_INPUT); // PIR sensor pinMode(3, INPUT); } void loop() { if (digitalRead(3) == HIGH) { // Motion detected webDigitalPinsPage.setPinState(2, HIGH); // Turn on LED delay(5000); // Keep on for 5 seconds webDigitalPinsPage.setPinState(2, LOW); // Turn off LED } }

Quạt Điều Khiển Theo Nhiệt Độ

void loop() { float temperature = getTemperature(); // Your temperature reading function if (temperature > 25.0) { webDigitalPinsPage.setPinState(4, HIGH); // Turn on fan } else { webDigitalPinsPage.setPinState(4, LOW); // Turn off fan } }

Các bước tiếp theo

Sau khi nắm vững ví dụ WebDigitalPins, hãy thử:

  1. WebSlider - Dành cho PWM và điều khiển tín hiệu tương tự
  2. WebJoystick - Dành cho điều khiển theo hướng
  3. WebMonitor - Dành cho gỡ lỗi và giám sát
  4. MultipleWebApps - Kết hợp tất cả các tính năng