{"id":1424,"date":"2026-04-20T16:42:06","date_gmt":"2026-04-20T09:42:06","guid":{"rendered":"https:\/\/kru-nu.com\/?page_id=1424"},"modified":"2026-04-27T21:45:11","modified_gmt":"2026-04-27T14:45:11","slug":"local-network-control-network-layer","status":"publish","type":"page","link":"https:\/\/kru-nu.com\/index.php\/local-network-control-network-layer\/","title":{"rendered":"\u0e27\u0e31\u0e19\u0e17\u0e35\u0e48 2 \u0e23\u0e30\u0e1a\u0e1a\u0e04\u0e27\u0e1a\u0e04\u0e38\u0e21\u0e1c\u0e48\u0e32\u0e19\u0e40\u0e04\u0e23\u0e37\u0e2d\u0e02\u0e48\u0e32\u0e22\u0e20\u0e32\u0e22\u0e43\u0e19 (Local Network Control &amp; Network Layer)"},"content":{"rendered":"\n<p>\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e40\u0e23\u0e32\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e43\u0e2b\u0e49\u0e1a\u0e2d\u0e23\u0e4c\u0e14\u0e44\u0e21\u0e42\u0e04\u0e23\u0e04\u0e2d\u0e19\u0e42\u0e17\u0e23\u0e25\u0e40\u0e25\u0e2d\u0e23\u0e4c\u0e2d\u0e22\u0e48\u0e32\u0e07 <strong>ESP32<\/strong> \u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e2a\u0e31\u0e48\u0e07\u0e07\u0e32\u0e19\u0e1c\u0e48\u0e32\u0e19\u0e2d\u0e34\u0e19\u0e40\u0e17\u0e2d\u0e23\u0e4c\u0e40\u0e19\u0e47\u0e15\u0e2b\u0e23\u0e37\u0e2d\u0e14\u0e39\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e1c\u0e48\u0e32\u0e19\u0e2a\u0e21\u0e32\u0e23\u0e4c\u0e17\u0e42\u0e1f\u0e19\u0e44\u0e14\u0e49 \u0e2a\u0e34\u0e48\u0e07\u0e41\u0e23\u0e01\u0e17\u0e35\u0e48\u0e40\u0e23\u0e32\u0e15\u0e49\u0e2d\u0e07\u0e40\u0e02\u0e49\u0e32\u0e43\u0e08\u0e04\u0e37\u0e2d \u0e01\u0e32\u0e23\u0e17\u0e33\u0e43\u0e2b\u0e49\u0e1a\u0e2d\u0e23\u0e4c\u0e14\u0e23\u0e39\u0e49\u0e08\u0e31\u0e01\u0e01\u0e31\u0e1a\u0e40\u0e04\u0e23\u0e37\u0e2d\u0e02\u0e48\u0e32\u0e22 \u0e41\u0e25\u0e30\u0e20\u0e32\u0e29\u0e32\u0e17\u0e35\u0e48\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e43\u0e0a\u0e49\u0e04\u0e38\u0e22\u0e01\u0e31\u0e19<\/p>\n\n\n\n<h1 class=\"wp-block-heading has-text-align-center has-ast-global-color-7-background-color has-background has-large-font-size\"><strong>\u0e42\u0e2b\u0e21\u0e14\u0e01\u0e32\u0e23\u0e17\u0e33\u0e07\u0e32\u0e19\u0e02\u0e2d\u0e07 Wi-Fi \u0e1a\u0e19 ESP32<\/strong><\/h1>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"559\" src=\"https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/Gemini_Generated_Image_g9yyj9g9yyj9g9yy-1024x559.png\" alt=\"\" class=\"wp-image-1457\" style=\"aspect-ratio:1.8333731200763905;width:772px;height:auto\" srcset=\"https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/Gemini_Generated_Image_g9yyj9g9yyj9g9yy-1024x559.png 1024w, https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/Gemini_Generated_Image_g9yyj9g9yyj9g9yy-300x164.png 300w, https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/Gemini_Generated_Image_g9yyj9g9yyj9g9yy-768x419.png 768w, https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/Gemini_Generated_Image_g9yyj9g9yyj9g9yy-1536x838.png 1536w, https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/Gemini_Generated_Image_g9yyj9g9yyj9g9yy-2048x1117.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>ESP32 \u0e21\u0e35\u0e04\u0e27\u0e32\u0e21\u0e1e\u0e34\u0e40\u0e28\u0e29\u0e15\u0e23\u0e07\u0e17\u0e35\u0e48\u0e21\u0e35\u0e0a\u0e34\u0e1b Wi-Fi \u0e1d\u0e31\u0e07\u0e21\u0e32\u0e43\u0e19\u0e15\u0e31\u0e27 \u0e17\u0e33\u0e43\u0e2b\u0e49\u0e21\u0e31\u0e19\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e2a\u0e27\u0e21\u0e1a\u0e17\u0e1a\u0e32\u0e17\u0e43\u0e19\u0e40\u0e04\u0e23\u0e37\u0e2d\u0e02\u0e48\u0e32\u0e22\u0e44\u0e14\u0e49 2 \u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a\u0e2b\u0e25\u0e31\u0e01\u0e46 \u0e02\u0e36\u0e49\u0e19\u0e2d\u0e22\u0e39\u0e48\u0e01\u0e31\u0e1a\u0e2b\u0e19\u0e49\u0e32\u0e07\u0e32\u0e19\u0e17\u0e35\u0e48\u0e40\u0e23\u0e32\u0e44\u0e1b\u0e15\u0e34\u0e14\u0e15\u0e31\u0e49\u0e07<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\"><strong>1. Station Mode (STA) &#8211; \u0e42\u0e2b\u0e21\u0e14 \u0e25\u0e39\u0e01\u0e02\u0e48\u0e32\u0e22<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u0e2b\u0e25\u0e31\u0e01\u0e01\u0e32\u0e23\u0e17\u0e33\u0e07\u0e32\u0e19<\/strong> \u0e43\u0e19\u0e42\u0e2b\u0e21\u0e14\u0e19\u0e35\u0e49 ESP32 \u0e08\u0e30\u0e17\u0e33\u0e15\u0e31\u0e27\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e2a\u0e21\u0e32\u0e23\u0e4c\u0e17\u0e42\u0e1f\u0e19\u0e02\u0e2d\u0e07\u0e19\u0e31\u0e01\u0e28\u0e36\u0e01\u0e29\u0e32 \u0e04\u0e37\u0e2d\u0e21\u0e31\u0e19\u0e08\u0e30\u0e15\u0e49\u0e2d\u0e07<strong>\u0e27\u0e34\u0e48\u0e07\u0e44\u0e1b\u0e40\u0e01\u0e32\u0e30\u0e2a\u0e31\u0e0d\u0e0d\u0e32\u0e13 Wi-Fi \u0e08\u0e32\u0e01 Router<\/strong> \u0e17\u0e35\u0e48\u0e21\u0e35\u0e2d\u0e22\u0e39\u0e48\u0e41\u0e25\u0e49\u0e27\u0e43\u0e19\u0e1e\u0e37\u0e49\u0e19\u0e17\u0e35\u0e48<\/li>\n\n\n\n<li><strong>\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e44\u0e2b\u0e23\u0e48\u0e04\u0e27\u0e23\u0e43\u0e0a\u0e49<\/strong> \u0e43\u0e0a\u0e49\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e2a\u0e16\u0e32\u0e19\u0e17\u0e35\u0e48\u0e19\u0e31\u0e49\u0e19 \u0e40\u0e0a\u0e48\u0e19 \u0e1f\u0e32\u0e23\u0e4c\u0e21 \u0e42\u0e23\u0e07\u0e40\u0e23\u0e37\u0e2d\u0e19 \u0e1a\u0e49\u0e32\u0e19 \u0e21\u0e35 Router Wi-Fi \u0e41\u0e25\u0e30\u0e2d\u0e34\u0e19\u0e40\u0e17\u0e2d\u0e23\u0e4c\u0e40\u0e19\u0e47\u0e15\u0e2d\u0e22\u0e39\u0e48\u0e41\u0e25\u0e49\u0e27<\/li>\n\n\n\n<li><strong>\u0e02\u0e49\u0e2d\u0e14\u0e35<\/strong> \u0e40\u0e21\u0e37\u0e48\u0e2d ESP32 \u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d Router \u0e44\u0e14\u0e49 \u0e21\u0e31\u0e19\u0e08\u0e30\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e2a\u0e48\u0e07\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e02\u0e36\u0e49\u0e19 Cloud \u0e41\u0e25\u0e30\u0e40\u0e23\u0e32\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e2a\u0e31\u0e48\u0e07\u0e07\u0e32\u0e19\u0e08\u0e32\u0e01\u0e17\u0e35\u0e48\u0e44\u0e2b\u0e19\u0e01\u0e47\u0e44\u0e14\u0e49\u0e43\u0e19\u0e42\u0e25\u0e01\u0e1c\u0e48\u0e32\u0e19\u0e2d\u0e34\u0e19\u0e40\u0e17\u0e2d\u0e23\u0e4c\u0e40\u0e19\u0e47\u0e15<\/li>\n\n\n\n<li><strong>\u0e20\u0e32\u0e1e\u0e08\u0e33<\/strong> ESP32 = \u0e41\u0e02\u0e01\u0e17\u0e35\u0e48\u0e44\u0e1b\u0e23\u0e48\u0e27\u0e21\u0e07\u0e32\u0e19\u0e1b\u0e32\u0e23\u0e4c\u0e15\u0e35\u0e49 (\u0e15\u0e49\u0e2d\u0e07\u0e2d\u0e32\u0e28\u0e31\u0e22\u0e1a\u0e49\u0e32\u0e19\u0e04\u0e19\u0e2d\u0e37\u0e48\u0e19)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\"><strong>2. Access Point Mode (AP) &#8211; \u0e42\u0e2b\u0e21\u0e14 \u0e1b\u0e25\u0e48\u0e2d\u0e22\u0e2a\u0e31\u0e0d\u0e0d\u0e32\u0e13<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u0e2b\u0e25\u0e31\u0e01\u0e01\u0e32\u0e23\u0e17\u0e33\u0e07\u0e32\u0e19<\/strong> \u0e43\u0e19\u0e42\u0e2b\u0e21\u0e14\u0e19\u0e35\u0e49 ESP32 \u0e08\u0e30\u0e41\u0e1b\u0e25\u0e07\u0e23\u0e48\u0e32\u0e07\u0e15\u0e31\u0e27\u0e40\u0e2d\u0e07\u0e40\u0e1b\u0e47\u0e19 <strong>Router \u0e15\u0e31\u0e27\u0e08\u0e34\u0e4b\u0e27<\/strong> \u0e17\u0e35\u0e48\u0e04\u0e2d\u0e22\u0e1b\u0e25\u0e48\u0e2d\u0e22\u0e2a\u0e31\u0e0d\u0e0d\u0e32\u0e13 Wi-Fi \u0e2d\u0e2d\u0e01\u0e21\u0e32\u0e40\u0e2d\u0e07 (\u0e21\u0e35\u0e0a\u0e37\u0e48\u0e2d Wi-Fi \u0e2b\u0e23\u0e37\u0e2d SSID \u0e40\u0e1b\u0e47\u0e19\u0e02\u0e2d\u0e07\u0e15\u0e31\u0e27\u0e40\u0e2d\u0e07) \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e43\u0e2b\u0e49\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e2d\u0e37\u0e48\u0e19\u0e27\u0e34\u0e48\u0e07\u0e21\u0e32\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d<\/li>\n\n\n\n<li><strong>\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e44\u0e2b\u0e23\u0e48\u0e04\u0e27\u0e23\u0e43\u0e0a\u0e49<\/strong> \u0e43\u0e0a\u0e49\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e15\u0e49\u0e2d\u0e07\u0e19\u0e33 ESP32 \u0e44\u0e1b\u0e15\u0e34\u0e14\u0e15\u0e31\u0e49\u0e07\u0e43\u0e19<strong>\u0e1e\u0e37\u0e49\u0e19\u0e17\u0e35\u0e48\u0e2b\u0e48\u0e32\u0e07\u0e44\u0e01\u0e25<\/strong> \u0e40\u0e0a\u0e48\u0e19 \u0e01\u0e25\u0e32\u0e07\u0e17\u0e38\u0e48\u0e07\u0e19\u0e32 \u0e2a\u0e27\u0e19\u0e1b\u0e48\u0e32 \u0e08\u0e38\u0e14\u0e17\u0e35\u0e48\u0e44\u0e21\u0e48\u0e21\u0e35\u0e2a\u0e31\u0e0d\u0e0d\u0e32\u0e13\u0e2d\u0e34\u0e19\u0e40\u0e17\u0e2d\u0e23\u0e4c\u0e40\u0e19\u0e47\u0e15\u0e40\u0e02\u0e49\u0e32\u0e16\u0e36\u0e07<\/li>\n\n\n\n<li><strong>\u0e02\u0e49\u0e2d\u0e08\u0e33\u0e01\u0e31\u0e14<\/strong> \u0e40\u0e19\u0e37\u0e48\u0e2d\u0e07\u0e08\u0e32\u0e01\u0e21\u0e31\u0e19\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e15\u0e48\u0e2d\u0e2d\u0e34\u0e19\u0e40\u0e17\u0e2d\u0e23\u0e4c\u0e40\u0e19\u0e47\u0e15 \u0e01\u0e32\u0e23\u0e2a\u0e31\u0e48\u0e07\u0e07\u0e32\u0e19\u0e2b\u0e23\u0e37\u0e2d\u0e14\u0e39\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e08\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e17\u0e33\u0e43\u0e19\u0e23\u0e30\u0e22\u0e30\u0e43\u0e01\u0e25\u0e49\u0e46\u0e40\u0e17\u0e48\u0e32\u0e19\u0e31\u0e49\u0e19 (\u0e40\u0e14\u0e34\u0e19\u0e44\u0e1b\u0e43\u0e01\u0e25\u0e49\u0e46\u0e1a\u0e2d\u0e23\u0e4c\u0e14 \u0e40\u0e2d\u0e32\u0e2a\u0e21\u0e32\u0e23\u0e4c\u0e17\u0e42\u0e1f\u0e19\u0e15\u0e48\u0e2d Wi-Fi \u0e17\u0e35\u0e48 ESP32 \u0e1b\u0e25\u0e48\u0e2d\u0e22\u0e2d\u0e2d\u0e01\u0e21\u0e32 \u0e41\u0e25\u0e49\u0e27\u0e01\u0e14\u0e2a\u0e31\u0e48\u0e07\u0e07\u0e32\u0e19\u0e1c\u0e48\u0e32\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a)<\/li>\n\n\n\n<li><strong>\u0e20\u0e32\u0e1e\u0e08\u0e33<\/strong> ESP32 = \u0e40\u0e08\u0e49\u0e32\u0e20\u0e32\u0e1e\u0e08\u0e31\u0e14\u0e1b\u0e32\u0e23\u0e4c\u0e15\u0e35\u0e49 (\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e40\u0e04\u0e23\u0e37\u0e2d\u0e02\u0e48\u0e32\u0e22\u0e40\u0e25\u0e47\u0e01\u0e46\u0e02\u0e2d\u0e07\u0e15\u0e31\u0e27\u0e40\u0e2d\u0e07)<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>\ud83d\udca1 Note \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e19\u0e31\u0e01\u0e28\u0e36\u0e01\u0e29\u0e32<\/strong> \u0e43\u0e19\u0e01\u0e32\u0e23\u0e40\u0e02\u0e35\u0e22\u0e19\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21\u0e08\u0e23\u0e34\u0e07 \u0e40\u0e23\u0e32\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e2a\u0e31\u0e48\u0e07\u0e43\u0e2b\u0e49 ESP32 \u0e17\u0e33\u0e07\u0e32\u0e19\u0e41\u0e1a\u0e1a <strong>AP+STA (\u0e17\u0e33\u0e17\u0e31\u0e49\u0e07 2 \u0e42\u0e2b\u0e21\u0e14\u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e01\u0e31\u0e19)<\/strong> \u0e44\u0e14\u0e49 \u0e40\u0e0a\u0e48\u0e19 \u0e43\u0e2b\u0e49\u0e1a\u0e2d\u0e23\u0e4c\u0e14\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d Wi-Fi \u0e1a\u0e49\u0e32\u0e19\u0e14\u0e49\u0e27\u0e22 \u0e41\u0e25\u0e30\u0e1b\u0e25\u0e48\u0e2d\u0e22 Wi-Fi \u0e15\u0e31\u0e27\u0e40\u0e2d\u0e07\u0e40\u0e1c\u0e37\u0e48\u0e2d\u0e44\u0e27\u0e49\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e09\u0e38\u0e01\u0e40\u0e09\u0e34\u0e19\u0e14\u0e49\u0e27\u0e22<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading has-text-align-center has-ast-global-color-7-background-color has-background has-large-font-size\"><strong>\u0e1e\u0e37\u0e49\u0e19\u0e10\u0e32\u0e19 HTTP Protocol (\u0e20\u0e32\u0e29\u0e32\u0e17\u0e35\u0e48\u0e40\u0e27\u0e47\u0e1a\u0e43\u0e0a\u0e49\u0e04\u0e38\u0e22\u0e01\u0e31\u0e19)<\/strong><\/h1>\n\n\n\n<p>\u0e40\u0e21\u0e37\u0e48\u0e2d ESP32 \u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d\u0e01\u0e31\u0e1a\u0e40\u0e04\u0e23\u0e37\u0e2d\u0e02\u0e48\u0e32\u0e22\u0e44\u0e14\u0e49\u0e41\u0e25\u0e49\u0e27 \u0e02\u0e31\u0e49\u0e19\u0e15\u0e2d\u0e19\u0e15\u0e48\u0e2d\u0e44\u0e1b \u0e04\u0e37\u0e2d \u0e01\u0e32\u0e23\u0e2a\u0e37\u0e48\u0e2d\u0e2a\u0e32\u0e23\u0e23\u0e30\u0e2b\u0e27\u0e48\u0e32\u0e07\u0e01\u0e31\u0e19<\/p>\n\n\n\n<p><strong>\u0e42\u0e1b\u0e23\u0e42\u0e15\u0e04\u0e2d\u0e25 (Protocol)<\/strong> \u0e2b\u0e21\u0e32\u0e22\u0e16\u0e36\u0e07 <strong>\u0e02\u0e49\u0e2d\u0e15\u0e01\u0e25\u0e07<\/strong> \u0e2b\u0e23\u0e37\u0e2d <strong>\u0e01\u0e0e\u0e23\u0e30\u0e40\u0e1a\u0e35\u0e22\u0e1a\u0e21\u0e32\u0e15\u0e23\u0e10\u0e32\u0e19<\/strong> \u0e17\u0e35\u0e48\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e15\u0e48\u0e32\u0e07\u0e46\u0e43\u0e0a\u0e49\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e2a\u0e37\u0e48\u0e2d\u0e2a\u0e32\u0e23\u0e41\u0e25\u0e30\u0e41\u0e25\u0e01\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e01\u0e31\u0e19\u0e43\u0e2b\u0e49\u0e40\u0e02\u0e49\u0e32\u0e43\u0e08\u0e15\u0e23\u0e07\u0e01\u0e31\u0e19 \u0e0b\u0e36\u0e48\u0e07\u0e42\u0e1b\u0e23\u0e42\u0e15\u0e04\u0e2d\u0e25\u0e17\u0e35\u0e48\u0e40\u0e1b\u0e47\u0e19\u0e21\u0e32\u0e15\u0e23\u0e10\u0e32\u0e19\u0e17\u0e35\u0e48\u0e2a\u0e38\u0e14\u0e43\u0e19\u0e01\u0e32\u0e23\u0e2a\u0e31\u0e48\u0e07\u0e07\u0e32\u0e19\u0e1c\u0e48\u0e32\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a \u0e04\u0e37\u0e2d <strong>HTTP (Hypertext Transfer Protocol)<\/strong> \u0e01\u0e32\u0e23\u0e2a\u0e37\u0e48\u0e2d\u0e2a\u0e32\u0e23\u0e43\u0e19\u0e23\u0e30\u0e1a\u0e1a\u0e40\u0e04\u0e23\u0e37\u0e2d\u0e02\u0e48\u0e32\u0e22\u0e21\u0e31\u0e01\u0e08\u0e30\u0e41\u0e1a\u0e48\u0e07\u0e1a\u0e17\u0e1a\u0e32\u0e17\u0e1c\u0e39\u0e49\u0e40\u0e25\u0e48\u0e19\u0e40\u0e1b\u0e47\u0e19 2 \u0e1d\u0e31\u0e48\u0e07\u0e40\u0e2a\u0e21\u0e2d<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Client (\u0e1c\u0e39\u0e49\u0e23\u0e49\u0e2d\u0e07\u0e02\u0e2d)<\/strong> \u0e04\u0e37\u0e2d \u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e02\u0e2d\u0e07\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49 \u0e40\u0e0a\u0e48\u0e19 \u0e2a\u0e21\u0e32\u0e23\u0e4c\u0e17\u0e42\u0e1f\u0e19 \u0e04\u0e2d\u0e21\u0e1e\u0e34\u0e27\u0e40\u0e15\u0e2d\u0e23\u0e4c \u0e21\u0e35\u0e2b\u0e19\u0e49\u0e32\u0e17\u0e35\u0e48\u0e2b\u0e25\u0e31\u0e01\u0e43\u0e19\u0e01\u0e32\u0e23 <strong>\u0e2a\u0e48\u0e07\u0e04\u0e33\u0e02\u0e2d (Request)<\/strong> \u0e44\u0e1b\u0e2b\u0e32\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22<\/li>\n\n\n\n<li><strong>Server (\u0e1c\u0e39\u0e49\u0e43\u0e2b\u0e49\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23)<\/strong> \u0e43\u0e19\u0e42\u0e1b\u0e23\u0e40\u0e08\u0e01\u0e15\u0e4c\u0e02\u0e2d\u0e07\u0e40\u0e23\u0e32 <strong>ESP32 \u0e08\u0e30\u0e23\u0e31\u0e1a\u0e1a\u0e17\u0e40\u0e1b\u0e47\u0e19 Server<\/strong> \u0e21\u0e35\u0e2b\u0e19\u0e49\u0e32\u0e17\u0e35\u0e48\u0e2b\u0e25\u0e31\u0e01\u0e43\u0e19\u0e01\u0e32\u0e23\u0e23\u0e2d\u0e1f\u0e31\u0e07\u0e04\u0e33\u0e02\u0e2d \u0e40\u0e21\u0e37\u0e48\u0e2d Client \u0e2a\u0e31\u0e48\u0e07\u0e2d\u0e30\u0e44\u0e23\u0e21\u0e32 ESP32 \u0e01\u0e47\u0e08\u0e30\u0e1b\u0e23\u0e30\u0e21\u0e27\u0e25\u0e1c\u0e25 \u0e41\u0e25\u0e49\u0e27 <strong>\u0e2a\u0e48\u0e07\u0e04\u0e33\u0e15\u0e2d\u0e1a\u0e01\u0e25\u0e31\u0e1a\u0e44\u0e1b (Response)<\/strong><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\"><strong>\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e40\u0e2b\u0e15\u0e38\u0e01\u0e32\u0e23\u0e13\u0e4c<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Client (\u0e21\u0e37\u0e2d\u0e16\u0e37\u0e2d)<\/strong> &#8220;\u0e19\u0e35\u0e48 ESP32 \u0e02\u0e2d\u0e14\u0e39\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a\u0e04\u0e27\u0e1a\u0e04\u0e38\u0e21\u0e1f\u0e32\u0e23\u0e4c\u0e21\u0e2b\u0e19\u0e48\u0e2d\u0e22\u0e2a\u0e34!&#8221; (\u0e2a\u0e48\u0e07 Request)<\/li>\n\n\n\n<li><strong>Server (ESP32)<\/strong> &#8220;\u0e44\u0e14\u0e49\u0e40\u0e25\u0e22 \u0e19\u0e35\u0e48\u0e42\u0e04\u0e49\u0e14\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a\u0e04\u0e27\u0e1a\u0e04\u0e38\u0e21\u0e1f\u0e32\u0e23\u0e4c\u0e21 \u0e40\u0e2d\u0e32\u0e44\u0e1b\u0e41\u0e2a\u0e14\u0e07\u0e1c\u0e25\u0e1a\u0e19\u0e08\u0e2d\u0e40\u0e25\u0e22&#8221; (\u0e2a\u0e48\u0e07 Response)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\"><strong>\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a\u0e01\u0e32\u0e23\u0e2a\u0e48\u0e07\u0e04\u0e33\u0e02\u0e2d (Request Methods)<\/strong><\/h2>\n\n\n\n<p>\u0e40\u0e27\u0e25\u0e32 Client \u0e2a\u0e48\u0e07\u0e04\u0e33\u0e02\u0e2d (Request) \u0e44\u0e1b\u0e2b\u0e32 Server \u0e21\u0e31\u0e19\u0e08\u0e30\u0e21\u0e35\u0e08\u0e38\u0e14\u0e1b\u0e23\u0e30\u0e2a\u0e07\u0e04\u0e4c\u0e17\u0e35\u0e48\u0e15\u0e48\u0e32\u0e07\u0e01\u0e31\u0e19\u0e2d\u0e2d\u0e01\u0e44\u0e1b \u0e17\u0e35\u0e48\u0e19\u0e34\u0e22\u0e21\u0e43\u0e0a\u0e49\u0e21\u0e32\u0e01\u0e17\u0e35\u0e48\u0e2a\u0e38\u0e14\u0e21\u0e35 2 \u0e41\u0e1a\u0e1a \u0e04\u0e37\u0e2d GET \u0e41\u0e25\u0e30 POST<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-ast-global-color-6-background-color has-background has-medium-font-size\"><strong>\u2705 GET (\u0e01\u0e32\u0e23\u0e02\u0e2d\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25)<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u0e08\u0e38\u0e14\u0e1b\u0e23\u0e30\u0e2a\u0e07\u0e04\u0e4c<\/strong> \u0e43\u0e0a\u0e49\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23<strong>\u0e14\u0e36\u0e07\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25<\/strong>\u0e2b\u0e23\u0e37\u0e2d<strong>\u0e2d\u0e48\u0e32\u0e19<\/strong>\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e08\u0e32\u0e01 Server \u0e42\u0e14\u0e22\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e44\u0e1b\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e41\u0e1b\u0e25\u0e07\u0e04\u0e48\u0e32\u0e2d\u0e30\u0e44\u0e23\u0e17\u0e35\u0e48\u0e2a\u0e33\u0e04\u0e31\u0e0d<\/li>\n\n\n\n<li><strong>\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e43\u0e19\u0e1f\u0e32\u0e23\u0e4c\u0e21<\/strong>\n<ul class=\"wp-block-list\">\n<li>Client \u0e2a\u0e31\u0e48\u0e07 GET \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e02\u0e2d\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a HTML \u0e21\u0e32\u0e41\u0e2a\u0e14\u0e07\u0e1c\u0e25\u0e1a\u0e19\u0e21\u0e37\u0e2d\u0e16\u0e37\u0e2d<\/li>\n\n\n\n<li>Client \u0e2a\u0e31\u0e48\u0e07 GET \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e16\u0e32\u0e21 ESP32 \u0e27\u0e48\u0e32 <em>&#8220;\u0e15\u0e2d\u0e19\u0e19\u0e35\u0e49\u0e40\u0e0b\u0e19\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e2d\u0e38\u0e13\u0e2b\u0e20\u0e39\u0e21\u0e34\u0e01\u0e35\u0e48\u0e2d\u0e07\u0e28\u0e32\u0e41\u0e25\u0e49\u0e27?&#8221;<\/em><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading has-ast-global-color-6-background-color has-background has-medium-font-size\"><strong>\u2705 POST (\u0e01\u0e32\u0e23\u0e2a\u0e48\u0e07\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e2b\u0e23\u0e37\u0e2d\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07)<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u0e08\u0e38\u0e14\u0e1b\u0e23\u0e30\u0e2a\u0e07\u0e04\u0e4c<\/strong> \u0e43\u0e0a\u0e49\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23<strong>\u0e2a\u0e48\u0e07\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25<\/strong>\u0e43\u0e2b\u0e49 Server \u0e19\u0e33\u0e44\u0e1b\u0e1b\u0e23\u0e30\u0e21\u0e27\u0e25\u0e1c\u0e25 \u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e41\u0e1b\u0e25\u0e07\u0e2a\u0e16\u0e32\u0e19\u0e30\u0e2b\u0e23\u0e37\u0e2d\u0e2d\u0e31\u0e1b\u0e40\u0e14\u0e15\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25<\/li>\n\n\n\n<li><strong>\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e43\u0e19\u0e1f\u0e32\u0e23\u0e4c\u0e21<\/strong>\n<ul class=\"wp-block-list\">\n<li>Client \u0e2a\u0e31\u0e48\u0e07 POST \u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e41\u0e19\u0e1a\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07\u0e44\u0e1b\u0e1a\u0e2d\u0e01 ESP32 \u0e27\u0e48\u0e32 <em>&#8220;\u0e40\u0e1b\u0e34\u0e14\u0e1b\u0e31\u0e4a\u0e21\u0e19\u0e49\u0e33\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e17\u0e35\u0e48 1 \u0e40\u0e14\u0e35\u0e4b\u0e22\u0e27\u0e19\u0e35\u0e49!&#8221;<\/em><\/li>\n\n\n\n<li>Client \u0e2a\u0e31\u0e48\u0e07 POST \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e2a\u0e48\u0e07\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19 Wi-Fi \u0e23\u0e2b\u0e31\u0e2a\u0e43\u0e2b\u0e21\u0e48\u0e44\u0e1b\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01\u0e25\u0e07\u0e43\u0e19 ESP32<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><strong>\ud83c\udfaf \u0e2a\u0e23\u0e38\u0e1b<\/strong> \u0e01\u0e32\u0e23\u0e17\u0e33\u0e42\u0e1b\u0e23\u0e40\u0e08\u0e01\u0e15\u0e4c IoT \u0e14\u0e49\u0e27\u0e22 ESP32 \u0e04\u0e37\u0e2d\u0e01\u0e32\u0e23\u0e17\u0e33\u0e43\u0e2b\u0e49\u0e1a\u0e2d\u0e23\u0e4c\u0e14\u0e40\u0e02\u0e49\u0e32\u0e27\u0e07\u0e41\u0e25\u0e19\u0e44\u0e14\u0e49 (\u0e1c\u0e48\u0e32\u0e19 STA \u0e2b\u0e23\u0e37\u0e2d AP) \u0e08\u0e32\u0e01\u0e19\u0e31\u0e49\u0e19\u0e40\u0e02\u0e35\u0e22\u0e19\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21\u0e43\u0e2b\u0e49\u0e1a\u0e2d\u0e23\u0e4c\u0e14\u0e17\u0e33\u0e2b\u0e19\u0e49\u0e32\u0e17\u0e35\u0e48\u0e40\u0e1b\u0e47\u0e19 <strong>Server<\/strong> \u0e17\u0e35\u0e48\u0e04\u0e2d\u0e22\u0e23\u0e31\u0e1a\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07\u0e1c\u0e48\u0e32\u0e19 <strong>HTTP Protocol<\/strong> \u0e42\u0e14\u0e22\u0e43\u0e0a\u0e49 <strong>GET<\/strong> \u0e43\u0e19\u0e01\u0e32\u0e23\u0e02\u0e2d\u0e14\u0e39\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e40\u0e0b\u0e19\u0e40\u0e0b\u0e2d\u0e23\u0e4c \u0e41\u0e25\u0e30\u0e43\u0e0a\u0e49 <strong>POST<\/strong> \u0e43\u0e19\u0e01\u0e32\u0e23\u0e2a\u0e31\u0e48\u0e07\u0e40\u0e1b\u0e34\u0e14-\u0e1b\u0e34\u0e14\u0e23\u0e35\u0e40\u0e25\u0e22\u0e4c\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e44\u0e1f\u0e1f\u0e49\u0e32\u0e19\u0e31\u0e48\u0e19\u0e40\u0e2d\u0e07<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading has-text-align-center has-ast-global-color-7-background-color has-background has-large-font-size\"><strong><strong>\u0e04\u0e33\u0e28\u0e31\u0e1e\u0e17\u0e4c\u0e40\u0e04\u0e23\u0e37\u0e2d\u0e02\u0e48\u0e32\u0e22 \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e1a\u0e2d\u0e23\u0e4c\u0e14 ESP32<\/strong><\/strong><\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>\u0e04\u0e33\u0e28\u0e31\u0e1e\u0e17\u0e4c<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>\u0e04\u0e27\u0e32\u0e21\u0e2b\u0e21\u0e32\u0e22\u0e41\u0e25\u0e30\u0e2b\u0e19\u0e49\u0e32\u0e17\u0e35\u0e48\u0e01\u0e32\u0e23\u0e17\u0e33\u0e07\u0e32\u0e19<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>\u0e40\u0e1b\u0e23\u0e35\u0e22\u0e1a\u0e40\u0e17\u0e35\u0e22\u0e1a\u0e43\u0e2b\u0e49\u0e40\u0e2b\u0e47\u0e19\u0e20\u0e32\u0e1e<\/strong><\/td><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>SSID<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e0a\u0e37\u0e48\u0e2d\u0e02\u0e2d\u0e07\u0e40\u0e04\u0e23\u0e37\u0e2d\u0e02\u0e48\u0e32\u0e22 Wi-Fi \u0e17\u0e35\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e43\u0e2b\u0e49\u0e1a\u0e2d\u0e23\u0e4c\u0e14\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e1b\u0e49\u0e32\u0e22\u0e0a\u0e37\u0e48\u0e2d\u0e2b\u0e19\u0e49\u0e32\u0e1a\u0e49\u0e32\u0e19<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Password<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e02\u0e2d\u0e2d\u0e19\u0e38\u0e0d\u0e32\u0e15\u0e40\u0e02\u0e49\u0e32\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19 Wi-Fi \u0e19\u0e31\u0e49\u0e19<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e01\u0e38\u0e0d\u0e41\u0e08\u0e40\u0e02\u0e49\u0e32\u0e1a\u0e49\u0e32\u0e19<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>IP Address<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e2b\u0e21\u0e32\u0e22\u0e40\u0e25\u0e02\u0e1b\u0e23\u0e30\u0e08\u0e33\u0e15\u0e31\u0e27\u0e02\u0e2d\u0e07\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e43\u0e19\u0e23\u0e30\u0e1a\u0e1a\u0e40\u0e04\u0e23\u0e37\u0e2d\u0e02\u0e48\u0e32\u0e22<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e1a\u0e49\u0e32\u0e19\u0e40\u0e25\u0e02\u0e17\u0e35\u0e48\u0e02\u0e2d\u0e07 ESP32<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>MAC Address<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e23\u0e2b\u0e31\u0e2a\u0e1b\u0e23\u0e30\u0e08\u0e33\u0e15\u0e31\u0e27\u0e0a\u0e34\u0e1b Wi-Fi \u0e17\u0e35\u0e48\u0e1d\u0e31\u0e07\u0e21\u0e32\u0e08\u0e32\u0e01\u0e42\u0e23\u0e07\u0e07\u0e32\u0e19 (\u0e44\u0e21\u0e48\u0e0b\u0e49\u0e33\u0e43\u0e04\u0e23)<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e40\u0e25\u0e02\u0e1a\u0e31\u0e15\u0e23\u0e1b\u0e23\u0e30\u0e0a\u0e32\u0e0a\u0e19\u0e02\u0e2d\u0e07\u0e0a\u0e34\u0e1b<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Local IP<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e2b\u0e21\u0e32\u0e22\u0e40\u0e25\u0e02 IP \u0e17\u0e35\u0e48\u0e15\u0e34\u0e14\u0e15\u0e48\u0e2d\u0e01\u0e31\u0e19\u0e44\u0e14\u0e49\u0e40\u0e09\u0e1e\u0e32\u0e30\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e43\u0e19\u0e27\u0e07\u0e41\u0e25\u0e19\u0e40\u0e14\u0e35\u0e22\u0e27\u0e01\u0e31\u0e19<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e40\u0e1a\u0e2d\u0e23\u0e4c\u0e42\u0e17\u0e23\u0e28\u0e31\u0e1e\u0e17\u0e4c\u0e20\u0e32\u0e22\u0e43\u0e19 (\u0e40\u0e1a\u0e2d\u0e23\u0e4c\u0e15\u0e48\u0e2d)<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>DHCP<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e23\u0e30\u0e1a\u0e1a\u0e02\u0e2d\u0e07 Router \u0e17\u0e35\u0e48\u0e2a\u0e38\u0e48\u0e21\u0e41\u0e08\u0e01 IP Address \u0e43\u0e2b\u0e49\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e40\u0e08\u0e49\u0e32\u0e2b\u0e19\u0e49\u0e32\u0e17\u0e35\u0e48\u0e2a\u0e38\u0e48\u0e21\u0e41\u0e08\u0e01\u0e1a\u0e49\u0e32\u0e19\u0e40\u0e25\u0e02\u0e17\u0e35\u0e48<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Static IP<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e01\u0e32\u0e23\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e25\u0e47\u0e2d\u0e01 IP Address \u0e43\u0e2b\u0e49\u0e1a\u0e2d\u0e23\u0e4c\u0e14\u0e43\u0e0a\u0e49\u0e40\u0e25\u0e02\u0e40\u0e14\u0e34\u0e21\u0e15\u0e25\u0e2d\u0e14\u0e44\u0e1b<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e01\u0e32\u0e23\u0e0b\u0e37\u0e49\u0e2d\u0e1a\u0e49\u0e32\u0e19\u0e40\u0e25\u0e02\u0e17\u0e35\u0e48\u0e16\u0e32\u0e27\u0e23 (\u0e08\u0e33\u0e07\u0e48\u0e32\u0e22)<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Port<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e0a\u0e48\u0e2d\u0e07\u0e17\u0e32\u0e07\u0e17\u0e35\u0e48\u0e40\u0e1b\u0e34\u0e14\u0e23\u0e31\u0e1a\u0e2a\u0e48\u0e07\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e40\u0e09\u0e1e\u0e32\u0e30\u0e1b\u0e23\u0e30\u0e40\u0e20\u0e17 \u0e40\u0e0a\u0e48\u0e19 \u0e40\u0e27\u0e47\u0e1a\u0e1e\u0e2d\u0e23\u0e4c\u0e15 80<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e2b\u0e21\u0e32\u0e22\u0e40\u0e25\u0e02\u0e1b\u0e23\u0e30\u0e15\u0e39\u0e1a\u0e49\u0e32\u0e19\u0e41\u0e15\u0e48\u0e25\u0e30\u0e1a\u0e32\u0e19<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Path<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e40\u0e2a\u0e49\u0e19\u0e17\u0e32\u0e07\u0e2b\u0e23\u0e37\u0e2d\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07\u0e22\u0e48\u0e2d\u0e22\u0e17\u0e35\u0e48\u0e15\u0e48\u0e2d\u0e17\u0e49\u0e32\u0e22 IP \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e23\u0e30\u0e1a\u0e38\u0e01\u0e32\u0e23\u0e17\u0e33\u0e07\u0e32\u0e19<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07\u0e27\u0e48\u0e32\u0e40\u0e02\u0e49\u0e32\u0e1b\u0e23\u0e30\u0e15\u0e39\u0e44\u0e1b\u0e41\u0e25\u0e49\u0e27\u0e43\u0e2b\u0e49\u0e17\u0e33\u0e2d\u0e30\u0e44\u0e23<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h1 class=\"wp-block-heading has-text-align-center has-luminous-vivid-orange-background-color has-background has-large-font-size\">Lab 3 \u0e01\u0e32\u0e23\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d Wi-Fi \u0e1a\u0e19 ESP32<\/h1>\n\n\n\n<p>\u0e40\u0e23\u0e32\u0e08\u0e30\u0e43\u0e0a\u0e49 Library <code>WiFi.h<\/code> \u0e0b\u0e36\u0e48\u0e07\u0e40\u0e1b\u0e47\u0e19\u0e21\u0e32\u0e15\u0e23\u0e10\u0e32\u0e19\u0e02\u0e2d\u0e07 ESP32<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\"><strong>\u0e42\u0e04\u0e49\u0e14\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07<\/strong><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;WiFi.h&gt;\n\nconst char* ssid = \"\u0e0a\u0e37\u0e48\u0e2dWiFi_\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\";     \/\/ \u0e0a\u0e37\u0e48\u0e2d WiFi\nconst char* password = \"\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19_\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\"; \/\/ \u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19\n\nvoid setup() {\n  Serial.begin(115200);\n  Serial.println();                    \/\/ \u0e02\u0e36\u0e49\u0e19\u0e1a\u0e23\u0e23\u0e17\u0e31\u0e14\u0e43\u0e2b\u0e21\u0e48\u0e23\u0e2d\u0e44\u0e27\u0e49\n  Serial.print(\"Connecting to \");\n  Serial.println(ssid);\n\n  \/\/ \u0e40\u0e23\u0e34\u0e48\u0e21\u0e01\u0e32\u0e23\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d\n  WiFi.begin(ssid, password);\n\n  \/\/ \u0e23\u0e2d\u0e08\u0e19\u0e01\u0e27\u0e48\u0e32\u0e08\u0e30\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d\u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08\n  while (WiFi.status() != WL_CONNECTED) {\n    delay(500);\n    Serial.print(\".\");\n  }\n\n  Serial.println(\"\");\n  Serial.println(\"WiFi connected!\");\n  Serial.print(\"IP address \");\n  Serial.println(WiFi.localIP()); \/\/ \u0e41\u0e2a\u0e14\u0e07\u0e2b\u0e21\u0e32\u0e22\u0e40\u0e25\u0e02 IP \u0e02\u0e2d\u0e07\u0e1a\u0e2d\u0e23\u0e4c\u0e14\n}\n\nvoid loop() {\n  \/\/ \u0e44\u0e21\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e43\u0e2a\u0e48\u0e2d\u0e30\u0e44\u0e23\u0e43\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e19\u0e35\u0e49\n}<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading has-text-align-center has-luminous-vivid-orange-background-color has-background has-large-font-size\">Lab 4 Hello Web Server<\/h1>\n\n\n\n<p><strong>\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22<\/strong> \u0e40\u0e02\u0e35\u0e22\u0e19\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21\u0e43\u0e2b\u0e49 ESP32 \u0e17\u0e33\u0e2b\u0e19\u0e49\u0e32\u0e17\u0e35\u0e48\u0e40\u0e1b\u0e47\u0e19 Web Server \u0e41\u0e25\u0e30\u0e15\u0e2d\u0e1a\u0e01\u0e25\u0e31\u0e1a\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21 &#8220;Welcome to My Smart Farm&#8221; \u0e40\u0e21\u0e37\u0e48\u0e2d\u0e21\u0e35\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e2d\u0e37\u0e48\u0e19\u0e40\u0e23\u0e35\u0e22\u0e01\u0e40\u0e02\u0e49\u0e32\u0e21\u0e32\u0e17\u0e35\u0e48\u0e2b\u0e21\u0e32\u0e22\u0e40\u0e25\u0e02 IP \u0e02\u0e2d\u0e07\u0e1a\u0e2d\u0e23\u0e4c\u0e14<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\">\u0e41\u0e19\u0e27\u0e04\u0e34\u0e14\u0e1e\u0e37\u0e49\u0e19\u0e10\u0e32\u0e19 (The HTTP Concept)<\/h2>\n\n\n\n<p>\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e40\u0e23\u0e32\u0e19\u0e33\u0e2b\u0e21\u0e32\u0e22\u0e40\u0e25\u0e02 IP \u0e02\u0e2d\u0e07 ESP32 \u0e44\u0e1b\u0e01\u0e23\u0e2d\u0e01\u0e43\u0e19 Browser<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Client (\u0e21\u0e37\u0e2d\u0e16\u0e37\u0e2d\/\u0e04\u0e2d\u0e21)<\/strong> \u0e2a\u0e48\u0e07\u0e04\u0e33\u0e02\u0e2d (HTTP Request) \u0e44\u0e1b\u0e17\u0e35\u0e48 ESP32<\/li>\n\n\n\n<li><strong>Server (ESP32)<\/strong> \u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e04\u0e33\u0e02\u0e2d\u0e41\u0e25\u0e49\u0e27\u0e1b\u0e23\u0e30\u0e21\u0e27\u0e25\u0e1c\u0e25\u0e15\u0e32\u0e21\u0e42\u0e04\u0e49\u0e14\u0e17\u0e35\u0e48\u0e40\u0e23\u0e32\u0e40\u0e02\u0e35\u0e22\u0e19<\/li>\n\n\n\n<li><strong>Response<\/strong> ESP32 \u0e2a\u0e48\u0e07\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21 HTML \u0e01\u0e25\u0e31\u0e1a\u0e21\u0e32\u0e41\u0e2a\u0e14\u0e07\u0e1c\u0e25\u0e1a\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e08\u0e2d<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\"><strong>\u0e42\u0e04\u0e49\u0e14\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07<\/strong><\/h2>\n\n\n\n<p>\u0e43\u0e2b\u0e49\u0e19\u0e31\u0e01\u0e28\u0e36\u0e01\u0e29\u0e32\u0e43\u0e0a\u0e49 Library \u0e21\u0e32\u0e15\u0e23\u0e10\u0e32\u0e19\u0e0a\u0e37\u0e48\u0e2d <code><strong>WebServer.h<\/strong><\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;WiFi.h&gt;\n#include &lt;WebServer.h&gt;\n\n\/\/ --- \u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32 WiFi ---\nconst char* ssid = \"\u0e0a\u0e37\u0e48\u0e2dWiFi_\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\";\nconst char* password = \"\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19_\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\";\n\n\/\/ \u0e2a\u0e23\u0e49\u0e32\u0e07\u0e2d\u0e2d\u0e1a\u0e40\u0e08\u0e01\u0e15\u0e4c server \u0e17\u0e35\u0e48\u0e1e\u0e2d\u0e23\u0e4c\u0e15 80 (\u0e1e\u0e2d\u0e23\u0e4c\u0e15\u0e21\u0e32\u0e15\u0e23\u0e10\u0e32\u0e19\u0e02\u0e2d\u0e07\u0e40\u0e27\u0e47\u0e1a)\nWebServer server(80);\n\n\/\/ \u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19\u0e17\u0e35\u0e48\u0e08\u0e30\u0e17\u0e33\u0e07\u0e32\u0e19\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e21\u0e35\u0e04\u0e19\u0e40\u0e02\u0e49\u0e32\u0e21\u0e32\u0e17\u0e35\u0e48\u0e2b\u0e19\u0e49\u0e32\u0e41\u0e23\u0e01 (\/)\nvoid handleRoot() {\n  \/\/ \u0e2a\u0e48\u0e07\u0e2a\u0e16\u0e32\u0e19\u0e30 200 (Success), \u0e0a\u0e19\u0e34\u0e14\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e40\u0e1b\u0e47\u0e19 text\/plain \u0e41\u0e25\u0e30\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\n  server.send(200, \"text\/plain\", \"Welcome to My Smart Farm\");\n}\n\nvoid setup() {\n  Serial.begin(115200);\n  \n  \/\/ 1. \u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d WiFi\n  WiFi.begin(ssid, password);\n  while (WiFi.status() != WL_CONNECTED) {\n    delay(500);\n    Serial.print(\".\");\n  }\n  \n  Serial.println(\"\\nWiFi connected!\");\n  Serial.print(\"IP address \");\n  Serial.println(WiFi.localIP()); \/\/ *** \u0e2a\u0e33\u0e04\u0e31\u0e0d \u0e08\u0e14\u0e2b\u0e21\u0e32\u0e22\u0e40\u0e25\u0e02\u0e19\u0e35\u0e49\u0e44\u0e27\u0e49 ***\n\n  \/\/ 2. \u0e01\u0e33\u0e2b\u0e19\u0e14\u0e40\u0e2a\u0e49\u0e19\u0e17\u0e32\u0e07 (Route)\n  server.on(\"\/\", handleRoot); \/\/ \u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22 \/ \u0e15\u0e31\u0e27\u0e40\u0e14\u0e35\u0e22\u0e27\u0e42\u0e14\u0e14\u0e46 \u0e2b\u0e21\u0e32\u0e22\u0e16\u0e36\u0e07 \u0e44\u0e1b\u0e22\u0e31\u0e07\u0e2b\u0e19\u0e49\u0e32\u0e42\u0e2e\u0e21\u0e40\u0e1e\u0e08\n\n  \/\/ 3. \u0e40\u0e23\u0e34\u0e48\u0e21\u0e15\u0e49\u0e19\u0e01\u0e32\u0e23\u0e17\u0e33\u0e07\u0e32\u0e19\u0e02\u0e2d\u0e07 Server\n  server.begin();\n  Serial.println(\"HTTP server started\");\n}\n\nvoid loop() {\n  \/\/ \u0e2a\u0e31\u0e48\u0e07\u0e43\u0e2b\u0e49 Server \u0e23\u0e2d\u0e23\u0e31\u0e1a\u0e04\u0e33\u0e02\u0e2d\u0e2d\u0e22\u0e39\u0e48\u0e15\u0e25\u0e2d\u0e14\u0e40\u0e27\u0e25\u0e32\n  server.handleClient();\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\">\u0e02\u0e31\u0e49\u0e19\u0e15\u0e2d\u0e19\u0e01\u0e32\u0e23\u0e17\u0e14\u0e25\u0e2d\u0e07<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Upload \u0e42\u0e04\u0e49\u0e14<\/strong> \u0e40\u0e21\u0e37\u0e48\u0e2d\u0e2d\u0e31\u0e1b\u0e42\u0e2b\u0e25\u0e14\u0e40\u0e2a\u0e23\u0e47\u0e08 \u0e43\u0e2b\u0e49\u0e40\u0e1b\u0e34\u0e14 <strong>Serial Monitor<\/strong> \u0e14\u0e39\u0e2b\u0e21\u0e32\u0e22\u0e40\u0e25\u0e02 IP Address \u0e40\u0e0a\u0e48\u0e19 <code>192.168.1.45<\/code><\/li>\n\n\n\n<li><strong>\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d <\/strong><strong>WiFi \u0e40\u0e14\u0e35\u0e22\u0e27\u0e01\u0e31\u0e19<\/strong> \u0e21\u0e31\u0e48\u0e19\u0e43\u0e08\u0e27\u0e48\u0e32\u0e21\u0e37\u0e2d\u0e16\u0e37\u0e2d\u0e2b\u0e23\u0e37\u0e2d\u0e04\u0e2d\u0e21\u0e1e\u0e34\u0e27\u0e40\u0e15\u0e2d\u0e23\u0e4c\u0e02\u0e2d\u0e07\u0e19\u0e31\u0e01\u0e28\u0e36\u0e01\u0e29\u0e32 <strong>\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d <\/strong><strong>WiFi \u0e0a\u0e37\u0e48\u0e2d\u0e40\u0e14\u0e35\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e17\u0e35\u0e48\u0e15\u0e31\u0e49\u0e07\u0e44\u0e27\u0e49\u0e43\u0e19\u0e42\u0e04\u0e49\u0e14<\/strong><\/li>\n\n\n\n<li><strong>\u0e40\u0e1b\u0e34\u0e14 <\/strong><strong>Browser<\/strong> \u0e1e\u0e34\u0e21\u0e1e\u0e4c\u0e2b\u0e21\u0e32\u0e22\u0e40\u0e25\u0e02 IP \u0e17\u0e35\u0e48\u0e44\u0e14\u0e49\u0e25\u0e07\u0e43\u0e19\u0e0a\u0e48\u0e2d\u0e07 URL \u0e02\u0e2d\u0e07 Chrome \u0e2b\u0e23\u0e37\u0e2d Safari \u0e41\u0e25\u0e49\u0e27\u0e01\u0e14 Enter<\/li>\n\n\n\n<li><strong>\u0e14\u0e39\u0e1c\u0e25\u0e25\u0e31\u0e1e\u0e18\u0e4c<\/strong> \u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21 <strong>&#8220;Welcome to My Smart Farm&#8221;<\/strong> \u0e08\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e1b\u0e23\u0e32\u0e01\u0e0f\u0e02\u0e36\u0e49\u0e19\u0e1a\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e08\u0e2d<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\">\u0e0a\u0e19\u0e34\u0e14\u0e02\u0e2d\u0e07\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25<\/h2>\n\n\n\n<p>\ud83d\udcdd <strong><code>text\/plain<\/code><\/strong>  \u0e2a\u0e48\u0e07\u0e44\u0e1b\u0e40\u0e1b\u0e47\u0e19\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e17\u0e37\u0e48\u0e2d\u0e46\u0e18\u0e23\u0e23\u0e21\u0e14\u0e32 \u0e40\u0e0a\u0e48\u0e19 \u0e2a\u0e48\u0e07\u0e04\u0e33\u0e27\u0e48\u0e32 &#8220;OK&#8221; \u0e2b\u0e23\u0e37\u0e2d \u0e04\u0e48\u0e32\u0e2d\u0e38\u0e13\u0e2b\u0e20\u0e39\u0e21\u0e34 &#8220;35.5&#8221;<\/p>\n\n\n\n<p>\ud83c\udf10 <strong><code>text\/html<\/code><\/strong> \u0e2a\u0e48\u0e07\u0e44\u0e1b\u0e40\u0e1b\u0e47\u0e19\u0e42\u0e04\u0e49\u0e14\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e40\u0e27\u0e47\u0e1a \u0e21\u0e37\u0e2d\u0e16\u0e37\u0e2d\u0e23\u0e31\u0e1a\u0e44\u0e1b\u0e41\u0e25\u0e49\u0e27\u0e08\u0e30\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e40\u0e1b\u0e47\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a\u0e2a\u0e27\u0e22\u0e07\u0e32\u0e21 \u0e21\u0e35\u0e1b\u0e38\u0e48\u0e21\u0e01\u0e14 \u0e21\u0e35\u0e2a\u0e35\u0e2a\u0e31\u0e19<\/p>\n\n\n\n<p>\ud83d\udce6 <strong><code>application\/json<\/code><\/strong> \u0e2a\u0e48\u0e07\u0e44\u0e1b\u0e40\u0e1b\u0e47\u0e19\u0e41\u0e1e\u0e47\u0e01\u0e40\u0e01\u0e08\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e17\u0e35\u0e48\u0e40\u0e1b\u0e47\u0e19\u0e23\u0e30\u0e40\u0e1a\u0e35\u0e22\u0e1a \u0e40\u0e2b\u0e21\u0e32\u0e30\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e2a\u0e48\u0e07\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e2b\u0e25\u0e32\u0e22\u0e46\u0e04\u0e48\u0e32\u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e01\u0e31\u0e19 \u0e40\u0e0a\u0e48\u0e19 \u0e2d\u0e38\u0e13\u0e2b\u0e20\u0e39\u0e21\u0e34 \u0e04\u0e27\u0e32\u0e21\u0e0a\u0e37\u0e49\u0e19 \u0e41\u0e25\u0e30\u0e2a\u0e16\u0e32\u0e19\u0e30\u0e1b\u0e31\u0e4a\u0e21\u0e19\u0e49\u0e33 \u0e43\u0e2b\u0e49\u0e41\u0e2d\u0e1b\u0e1e\u0e25\u0e34\u0e40\u0e04\u0e0a\u0e31\u0e19\u0e40\u0e2d\u0e32\u0e44\u0e1b\u0e41\u0e22\u0e01\u0e2a\u0e48\u0e27\u0e19\u0e15\u0e48\u0e2d\u0e44\u0e14\u0e49\u0e07\u0e48\u0e32\u0e22<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\">\u0e04\u0e33\u0e2d\u0e18\u0e34\u0e1a\u0e32\u0e22\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Port 80<\/strong> \u0e04\u0e37\u0e2d \u0e1e\u0e2d\u0e23\u0e4c\u0e15\u0e21\u0e32\u0e15\u0e23\u0e10\u0e32\u0e19\u0e17\u0e35\u0e48\u0e43\u0e0a\u0e49\u0e2a\u0e37\u0e48\u0e2d\u0e2a\u0e32\u0e23\u0e1c\u0e48\u0e32\u0e19 HTTP \u0e17\u0e31\u0e48\u0e27\u0e42\u0e25\u0e01<\/li>\n\n\n\n<li><strong>HTTP 200 OK<\/strong> \u0e04\u0e37\u0e2d \u0e23\u0e2b\u0e31\u0e2a\u0e2a\u0e16\u0e32\u0e19\u0e30\u0e17\u0e35\u0e48\u0e1a\u0e2d\u0e01\u0e27\u0e48\u0e32 &#8220;\u0e01\u0e32\u0e23\u0e2a\u0e37\u0e48\u0e2d\u0e2a\u0e32\u0e23\u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08\u0e44\u0e21\u0e48\u0e21\u0e35\u0e02\u0e49\u0e2d\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14&#8221; (\u0e16\u0e49\u0e32\u0e2b\u0e32\u0e2b\u0e19\u0e49\u0e32\u0e44\u0e21\u0e48\u0e40\u0e08\u0e2d\u0e08\u0e30\u0e40\u0e1b\u0e47\u0e19 404 Not Found)<\/li>\n\n\n\n<li><strong>Local Network<\/strong> \u0e43\u0e19 Lab \u0e19\u0e35\u0e49 \u0e1a\u0e2d\u0e23\u0e4c\u0e14\u0e08\u0e30\u0e17\u0e33\u0e07\u0e32\u0e19\u0e44\u0e14\u0e49\u0e40\u0e09\u0e1e\u0e32\u0e30\u0e43\u0e19\u0e27\u0e07 WiFi \u0e40\u0e14\u0e35\u0e22\u0e27\u0e01\u0e31\u0e19\u0e40\u0e17\u0e48\u0e32\u0e19\u0e31\u0e49\u0e19 \u0e2b\u0e32\u0e01\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e2a\u0e31\u0e48\u0e07\u0e07\u0e32\u0e19\u0e02\u0e49\u0e32\u0e21\u0e08\u0e31\u0e07\u0e2b\u0e27\u0e31\u0e14 \u0e40\u0e23\u0e32\u0e08\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e02\u0e22\u0e31\u0e1a\u0e44\u0e1b\u0e43\u0e0a\u0e49\u0e23\u0e30\u0e1a\u0e1a <strong>Cloud (Blynk\/MQTT)<\/strong><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\"><strong>\u0e42\u0e08\u0e17\u0e22\u0e4c\u0e17\u0e49\u0e32\u0e17\u0e32\u0e22<\/strong><\/h2>\n\n\n\n<p>\u0e43\u0e2b\u0e49\u0e19\u0e31\u0e01\u0e28\u0e36\u0e01\u0e29\u0e32\u0e25\u0e2d\u0e07\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e08\u0e32\u0e01 <code>text\/plain<\/code> \u0e40\u0e1b\u0e47\u0e19 <code>text\/html<\/code> \u0e41\u0e25\u0e49\u0e27\u0e43\u0e2a\u0e48 Code HTML \u0e40\u0e0a\u0e48\u0e19 <code>&lt;h1&gt;Welcome to My Smart Farm&lt;\/h1&gt;<\/code> \u0e14\u0e39\u0e04\u0e23\u0e31\u0e1a\u0e27\u0e48\u0e32\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23\u0e1a\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e08\u0e2d\u0e21\u0e37\u0e2d\u0e16\u0e37\u0e2d\u0e08\u0e30\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e44\u0e1b\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e44\u0e23<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading has-text-align-center has-luminous-vivid-orange-background-color has-background has-large-font-size\">Lab 4.1 \u0e23\u0e30\u0e1a\u0e1a\u0e40\u0e1d\u0e49\u0e32\u0e23\u0e30\u0e27\u0e31\u0e07\u0e42\u0e23\u0e07\u0e40\u0e23\u0e37\u0e2d\u0e19\u0e1c\u0e48\u0e32\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a (Live Web Monitor)<\/h1>\n\n\n\n<p><strong>\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22<\/strong> \u0e43\u0e2b\u0e49\u0e19\u0e31\u0e01\u0e28\u0e36\u0e01\u0e29\u0e32\u0e19\u0e33\u0e04\u0e48\u0e32\u0e08\u0e32\u0e01 DHT22 \u0e21\u0e32\u0e41\u0e2a\u0e14\u0e07\u0e1c\u0e25\u0e1a\u0e19 Browser \u0e41\u0e25\u0e30\u0e17\u0e33\u0e43\u0e2b\u0e49\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a\u0e23\u0e35\u0e40\u0e1f\u0e23\u0e0a\u0e15\u0e31\u0e27\u0e40\u0e2d\u0e07\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34\u0e17\u0e38\u0e01\u0e46 5 \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\">\u0e01\u0e32\u0e23\u0e15\u0e48\u0e2d\u0e27\u0e07\u0e08\u0e23<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>DHT22<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>ESP32<\/strong><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">VCC<\/td><td class=\"has-text-align-center\" data-align=\"center\">3.3V<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">GND<\/td><td class=\"has-text-align-center\" data-align=\"center\">GND<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">DATA<\/td><td class=\"has-text-align-center\" data-align=\"center\">GPIO 4 (D4)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\"><strong>\u0e42\u0e04\u0e49\u0e14\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07<\/strong><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;WiFi.h&gt;\n#include &lt;WebServer.h&gt;\n#include &lt;DHT.h&gt;\n\n\/\/ --- \u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32 WiFi ---\nconst char* ssid = \"\u0e0a\u0e37\u0e48\u0e2dWiFi_\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\";\nconst char* password = \"\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19_\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\";\n\n\/\/ --- \u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32 DHT22 ---\n#define DHTPIN 4\n#define DHTTYPE DHT22\nDHT dht(DHTPIN, DHTTYPE);\n\nWebServer server(80);\n\n\/\/ \u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a HTML\nvoid handleRoot() {\n  \/\/ \u0e2d\u0e48\u0e32\u0e19\u0e04\u0e48\u0e32\u0e08\u0e32\u0e01\u0e40\u0e0b\u0e19\u0e40\u0e0b\u0e2d\u0e23\u0e4c\n  float h = dht.readHumidity();\n  float t = dht.readTemperature();\n\n  \/\/ \u0e15\u0e23\u0e27\u0e08\u0e2a\u0e2d\u0e1a\u0e04\u0e27\u0e32\u0e21\u0e16\u0e39\u0e01\u0e15\u0e49\u0e2d\u0e07\u0e02\u0e2d\u0e07\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\n  if (isnan(h) || isnan(t)) {\n    server.send(500, \"text\/plain\", \"Error \u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e2d\u0e48\u0e32\u0e19\u0e04\u0e48\u0e32\u0e08\u0e32\u0e01\u0e40\u0e0b\u0e19\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e44\u0e14\u0e49\");\n    return;\n  }\n\n  \/\/ \u0e2a\u0e23\u0e49\u0e32\u0e07\u0e2b\u0e19\u0e49\u0e32\u0e08\u0e2d UI \u0e14\u0e49\u0e27\u0e22 HTML \u0e41\u0e25\u0e30 CSS\n  String html = \"&lt;!DOCTYPE html&gt;&lt;html&gt;\";\n  html += \"&lt;head&gt;&lt;meta charset='UTF-8'&gt;\";\n  html += \"&lt;meta name='viewport' content='width=device-width, initial-scale=1'&gt;\";\n  \/\/ \u0e2b\u0e31\u0e27\u0e43\u0e08\u0e2a\u0e33\u0e04\u0e31\u0e0d \u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07\u0e43\u0e2b\u0e49\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a\u0e23\u0e35\u0e40\u0e1f\u0e23\u0e0a\u0e15\u0e31\u0e27\u0e40\u0e2d\u0e07\u0e17\u0e38\u0e01 5 \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35\n  html += \"&lt;meta http-equiv='refresh' content='5'&gt;\"; \n  html += \"&lt;title&gt;Smart Farm Monitor&lt;\/title&gt;\";\n  \n  \/\/ \u0e41\u0e01\u0e49\u0e44\u0e02: \u0e40\u0e15\u0e34\u0e21\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22\u0e42\u0e04\u0e25\u0e2d\u0e19 (:) \u0e43\u0e19 CSS \u0e43\u0e2b\u0e49\u0e16\u0e39\u0e01\u0e15\u0e49\u0e2d\u0e07\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14\n  html += \"&lt;style&gt;\";\n  html += \"body { font-family: 'Segoe UI', Arial; text-align: center; background-color: #eef2f3; margin-top: 50px; }\";\n  html += \".container { background: white; padding: 30px; border-radius: 15px; display: inline-block; box-shadow: 0 10px 20px rgba(0,0,0,0.1); }\";\n  html += \"h1 { color: #2c3e50; }\";\n  html += \".data-box { font-size: 2.5rem; font-weight: bold; margin: 20px 0; }\";\n  html += \".temp { color: #e74c3c; }\";\n  html += \".humi { color: #3498db; }\";\n  html += \".footer { font-size: 0.8rem; color: #7f8c8d; }\";\n  html += \"&lt;\/style&gt;&lt;\/head&gt;\";\n  \n  html += \"&lt;body&gt;&lt;div class='container'&gt;\";\n  html += \"&lt;h1&gt;\ud83c\udf3f Smart Farm Monitor&lt;\/h1&gt;\";\n  html += \"&lt;hr&gt;\";\n  html += \"&lt;div class='data-box temp'&gt;\ud83c\udf21\ufe0f \" + String(t, 1) + \" &amp;deg;C&lt;\/div&gt;\";\n  html += \"&lt;div class='data-box humi'&gt;\ud83d\udca7 \" + String(h, 0) + \" %&lt;\/div&gt;\";\n  html += \"&lt;p class='footer'&gt;\u0e2d\u0e31\u0e1b\u0e40\u0e14\u0e15\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34\u0e17\u0e38\u0e01 5 \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35&lt;\/p&gt;\";\n  html += \"&lt;\/div&gt;&lt;\/body&gt;&lt;\/html&gt;\";\n\n  server.send(200, \"text\/html\", html); \/\/ \u0e2a\u0e48\u0e07\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a\u0e2d\u0e2d\u0e01\u0e44\u0e1b\n}\n\nvoid setup() {\n  Serial.begin(115200);\n  dht.begin();\n\n  WiFi.begin(ssid, password);\n  Serial.print(\"Connecting to WiFi\");\n  while (WiFi.status() != WL_CONNECTED) {\n    delay(500);\n    Serial.print(\".\");\n  }\n  \n  Serial.println(\"\\nWiFi connected!\");\n  Serial.print(\"IP Address: \"); \/\/ \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22 : \u0e43\u0e2b\u0e49\u0e2d\u0e48\u0e32\u0e19\u0e04\u0e48\u0e32 IP \u0e43\u0e19 Serial Monitor \u0e44\u0e14\u0e49\u0e0a\u0e31\u0e14\u0e40\u0e08\u0e19\u0e02\u0e36\u0e49\u0e19\n  Serial.println(WiFi.localIP());\n\n  server.on(\"\/\", handleRoot); \/\/ \u0e01\u0e33\u0e2b\u0e19\u0e14\u0e27\u0e48\u0e32\u0e2b\u0e19\u0e49\u0e32\u0e41\u0e23\u0e01\u0e43\u0e2b\u0e49\u0e23\u0e31\u0e19\u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19 handleRoot\n  server.begin();\n}\n\nvoid loop() {\n  server.handleClient(); \/\/ \u0e23\u0e2d\u0e23\u0e31\u0e1a\u0e04\u0e33\u0e02\u0e2d\u0e08\u0e32\u0e01 Browser\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\"><strong>\u0e2d\u0e18\u0e34\u0e1a\u0e32\u0e22\u0e01\u0e32\u0e23\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e2b\u0e19\u0e49\u0e32\u0e08\u0e2d <\/strong><strong>UI<\/strong><\/h2>\n\n\n\n<p>\u0e01\u0e32\u0e23\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e2b\u0e19\u0e49\u0e32\u0e08\u0e2d UI \u0e43\u0e19\u0e42\u0e04\u0e49\u0e14 <strong>Live Web Monitor<\/strong> \u0e1a\u0e19 ESP32 \u0e04\u0e37\u0e2d \u0e01\u0e32\u0e23\u0e40\u0e02\u0e35\u0e22\u0e19\u0e20\u0e32\u0e29\u0e32 HTML \u0e41\u0e25\u0e30 CSS \u0e0b\u0e49\u0e2d\u0e19\u0e25\u0e07\u0e44\u0e1b\u0e43\u0e19\u0e20\u0e32\u0e29\u0e32 C++ \u0e02\u0e2d\u0e07 Arduino \u0e42\u0e14\u0e22\u0e40\u0e23\u0e32\u0e43\u0e0a\u0e49\u0e15\u0e31\u0e27\u0e41\u0e1b\u0e23 <code>String<\/code> \u0e21\u0e32\u0e17\u0e33\u0e2b\u0e19\u0e49\u0e32\u0e17\u0e35\u0e48\u0e40\u0e1b\u0e47\u0e19 &#8220;\u0e16\u0e31\u0e07\u0e40\u0e01\u0e47\u0e1a\u0e42\u0e04\u0e49\u0e14\u0e40\u0e27\u0e47\u0e1a&#8221; \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e2a\u0e48\u0e07\u0e44\u0e1b\u0e43\u0e2b\u0e49 Browser \u0e41\u0e2a\u0e14\u0e07\u0e1c\u0e25<\/p>\n\n\n\n<p>\u0e2d\u0e18\u0e34\u0e1a\u0e32\u0e22\u0e40\u0e1b\u0e47\u0e19 3 \u0e2a\u0e48\u0e27\u0e19\u0e2b\u0e25\u0e31\u0e01 \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e43\u0e2b\u0e49\u0e19\u0e31\u0e01\u0e28\u0e36\u0e01\u0e29\u0e32\u0e40\u0e02\u0e49\u0e32\u0e43\u0e08\u0e42\u0e04\u0e23\u0e07\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e02\u0e2d\u0e07\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a\u0e19\u0e35\u0e49<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-ast-global-color-6-background-color has-background has-medium-font-size\">1. \u0e2a\u0e48\u0e27\u0e19\u0e2b\u0e31\u0e27\u0e43\u0e08 (Meta Tags \u0e43\u0e19 <code>&lt;head&gt;<\/code>)<\/h3>\n\n\n\n<p>\u0e2a\u0e48\u0e27\u0e19\u0e19\u0e35\u0e49\u0e2d\u0e22\u0e39\u0e48\u0e20\u0e32\u0e22\u0e43\u0e15\u0e49\u0e41\u0e17\u0e47\u0e01 <code>&lt;head&gt;<\/code> \u0e0b\u0e36\u0e48\u0e07\u0e40\u0e1b\u0e47\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e17\u0e35\u0e48\u0e1c\u0e39\u0e49\u0e0a\u0e21\u0e44\u0e21\u0e48\u0e40\u0e2b\u0e47\u0e19\u0e1a\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e08\u0e2d \u0e41\u0e15\u0e48\u0e40\u0e1b\u0e47\u0e19\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07\u0e04\u0e27\u0e1a\u0e04\u0e38\u0e21\u0e01\u0e32\u0e23\u0e17\u0e33\u0e07\u0e32\u0e19\u0e02\u0e2d\u0e07 Browser<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code><strong>&lt;meta charset='UTF-8'&gt;<\/strong><\/code> \u0e2a\u0e31\u0e48\u0e07\u0e43\u0e2b\u0e49 Browser \u0e23\u0e2d\u0e07\u0e23\u0e31\u0e1a\u0e20\u0e32\u0e29\u0e32\u0e44\u0e17\u0e22\u0e41\u0e25\u0e30\u0e2d\u0e31\u0e01\u0e02\u0e23\u0e30\u0e1e\u0e34\u0e40\u0e28\u0e29<\/li>\n\n\n\n<li><code><strong>&lt;meta name='viewport' ...&gt;<\/strong><\/code> \u0e2a\u0e31\u0e48\u0e07\u0e43\u0e2b\u0e49\u0e2b\u0e19\u0e49\u0e32\u0e08\u0e2d <strong>Responsive<\/strong> \u0e1b\u0e23\u0e31\u0e1a\u0e02\u0e19\u0e32\u0e14\u0e43\u0e2b\u0e49\u0e1e\u0e2d\u0e14\u0e35\u0e01\u0e31\u0e1a\u0e2b\u0e19\u0e49\u0e32\u0e08\u0e2d\u0e21\u0e37\u0e2d\u0e16\u0e37\u0e2d\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34<\/li>\n\n\n\n<li><code><strong>&lt;meta http-equiv='refresh' content='5'&gt;<\/strong><\/code> \u0e40\u0e1b\u0e47\u0e19\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07\u0e1a\u0e2d\u0e01 Browser \u0e27\u0e48\u0e32 &#8220;\u0e40\u0e2e\u0e49! \u0e17\u0e38\u0e01 \u0e46 5 \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35 \u0e43\u0e2b\u0e49\u0e0a\u0e48\u0e27\u0e22\u0e01\u0e14 Refresh \u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a\u0e19\u0e35\u0e49\u0e43\u0e2b\u0e49\u0e17\u0e35\u0e19\u0e30&#8221; \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e43\u0e2b\u0e49\u0e04\u0e48\u0e32\u0e40\u0e0b\u0e19\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e17\u0e35\u0e48\u0e2a\u0e48\u0e07\u0e21\u0e32\u0e08\u0e32\u0e01 ESP32 \u0e40\u0e1b\u0e47\u0e19\u0e04\u0e48\u0e32\u0e1b\u0e31\u0e08\u0e08\u0e38\u0e1a\u0e31\u0e19\u0e40\u0e2a\u0e21\u0e2d<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading has-ast-global-color-6-background-color has-background has-medium-font-size\">2. \u0e2a\u0e48\u0e27\u0e19\u0e01\u0e32\u0e23\u0e15\u0e01\u0e41\u0e15\u0e48\u0e07 (CSS \u0e43\u0e19 <code>&lt;style&gt;<\/code>)<\/h3>\n\n\n\n<p>CSS \u0e04\u0e37\u0e2d \u0e01\u0e32\u0e23\u0e41\u0e15\u0e48\u0e07\u0e2b\u0e19\u0e49\u0e32\u0e17\u0e32\u0e1b\u0e32\u0e01\u0e43\u0e2b\u0e49\u0e40\u0e27\u0e47\u0e1a\u0e14\u0e39\u0e2a\u0e27\u0e22\u0e07\u0e32\u0e21 \u0e40\u0e23\u0e32\u0e40\u0e02\u0e35\u0e22\u0e19\u0e44\u0e27\u0e49\u0e43\u0e19\u0e41\u0e17\u0e47\u0e01 <code>&lt;style&gt;<\/code><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code><strong>.container<\/strong><\/code> \u0e2a\u0e23\u0e49\u0e32\u0e07 &#8220;\u0e01\u0e25\u0e48\u0e2d\u0e07\u0e02\u0e32\u0e27&#8221; (Card) \u0e15\u0e23\u0e07\u0e01\u0e25\u0e32\u0e07\u0e2b\u0e19\u0e49\u0e32\u0e08\u0e2d \u0e43\u0e2a\u0e48 <code>box-shadow<\/code> \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e43\u0e2b\u0e49\u0e14\u0e39\u0e21\u0e35\u0e21\u0e34\u0e15\u0e34\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e41\u0e2d\u0e1b\u0e21\u0e37\u0e2d\u0e16\u0e37\u0e2d\u0e2a\u0e21\u0e31\u0e22\u0e43\u0e2b\u0e21\u0e48<\/li>\n\n\n\n<li><code><strong>.temp { color #e74c3c; }<\/strong><\/code> \u0e01\u0e33\u0e2b\u0e19\u0e14\u0e43\u0e2b\u0e49\u0e15\u0e31\u0e27\u0e40\u0e25\u0e02\u0e2d\u0e38\u0e13\u0e2b\u0e20\u0e39\u0e21\u0e34\u0e40\u0e1b\u0e47\u0e19 <strong>\u0e2a\u0e35\u0e41\u0e14\u0e07<\/strong> (\u0e2a\u0e37\u0e48\u0e2d\u0e16\u0e36\u0e07\u0e04\u0e27\u0e32\u0e21\u0e23\u0e49\u0e2d\u0e19)<\/li>\n\n\n\n<li><code><strong>.humi { color #3498db; }<\/strong><\/code> \u0e01\u0e33\u0e2b\u0e19\u0e14\u0e43\u0e2b\u0e49\u0e15\u0e31\u0e27\u0e40\u0e25\u0e02\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e37\u0e49\u0e19\u0e40\u0e1b\u0e47\u0e19 <strong>\u0e2a\u0e35\u0e1f\u0e49\u0e32<\/strong> (\u0e2a\u0e37\u0e48\u0e2d\u0e16\u0e36\u0e07\u0e19\u0e49\u0e33)<\/li>\n\n\n\n<li><code><strong>font-family 'Segoe UI'<\/strong><\/code> \u0e40\u0e25\u0e37\u0e2d\u0e01\u0e43\u0e0a\u0e49\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23\u0e17\u0e35\u0e48\u0e14\u0e39\u0e2a\u0e30\u0e2d\u0e32\u0e14\u0e15\u0e32\u0e41\u0e25\u0e30\u0e17\u0e31\u0e19\u0e2a\u0e21\u0e31\u0e22<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading has-ast-global-color-6-background-color has-background has-medium-font-size\">3. \u0e2a\u0e48\u0e27\u0e19\u0e01\u0e32\u0e23\u0e41\u0e2a\u0e14\u0e07\u0e1c\u0e25\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25 (Body &amp; Data Injection)<\/h3>\n\n\n\n<p>\u0e2a\u0e48\u0e27\u0e19\u0e19\u0e35\u0e49\u0e04\u0e37\u0e2d\u0e2a\u0e34\u0e48\u0e07\u0e17\u0e35\u0e48\u0e08\u0e30\u0e1b\u0e23\u0e32\u0e01\u0e0f\u0e1a\u0e19\u0e08\u0e2d \u0e41\u0e25\u0e30\u0e40\u0e1b\u0e47\u0e19\u0e08\u0e38\u0e14\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d\u0e23\u0e30\u0e2b\u0e27\u0e48\u0e32\u0e07<strong>\u0e40\u0e0b\u0e19\u0e40\u0e0b\u0e2d\u0e23\u0e4c<\/strong>\u0e01\u0e31\u0e1a<strong>\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code><strong>String(t, 1)<\/strong><\/code> \u0e40\u0e1b\u0e47\u0e19\u0e40\u0e17\u0e04\u0e19\u0e34\u0e04\u0e2a\u0e33\u0e04\u0e31\u0e0d \u0e40\u0e23\u0e32\u0e40\u0e2d\u0e32\u0e04\u0e48\u0e32\u0e15\u0e31\u0e27\u0e41\u0e1b\u0e23 <code>t<\/code> (\u0e2d\u0e38\u0e13\u0e2b\u0e20\u0e39\u0e21\u0e34) \u0e08\u0e32\u0e01 DHT22 \u0e21\u0e32\u0e41\u0e1b\u0e25\u0e07\u0e40\u0e1b\u0e47\u0e19\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21 (String) \u0e42\u0e14\u0e22\u0e40\u0e2d\u0e32\u0e17\u0e28\u0e19\u0e34\u0e22\u0e21 1 \u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07 \u0e41\u0e25\u0e49\u0e27\u0e40\u0e2d\u0e32\u0e21\u0e32\u0e15\u0e48\u0e2d\u0e40\u0e02\u0e49\u0e32\u0e01\u0e31\u0e1a\u0e23\u0e2b\u0e31\u0e2a HTML<\/li>\n\n\n\n<li><code><strong>&amp;deg;C<\/strong><\/code> \u0e40\u0e1b\u0e47\u0e19\u0e23\u0e2b\u0e31\u0e2a\u0e17\u0e35\u0e48\u0e43\u0e0a\u0e49\u0e41\u0e2a\u0e14\u0e07\u0e1c\u0e25\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c <strong>\u0e2d\u0e07\u0e28\u0e32\u0e40\u0e0b\u0e25\u0e40\u0e0b\u0e35\u0e22\u0e2a<\/strong> \u00b0C \u0e1a\u0e19 Browser \u0e04\u0e33\u0e27\u0e48\u0e32 deg \u0e22\u0e48\u0e2d\u0e21\u0e32\u0e08\u0e32\u0e01\u0e04\u0e33\u0e27\u0e48\u0e32 <strong>Degree (\u0e2d\u0e07\u0e28\u0e32)<\/strong><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center has-luminous-vivid-orange-background-color has-background has-large-font-size\">Lab 4.2 \u0e23\u0e30\u0e1a\u0e1a\u0e04\u0e27\u0e1a\u0e04\u0e38\u0e21\u0e1b\u0e31\u0e4a\u0e21\u0e19\u0e49\u0e33\u0e1c\u0e48\u0e32\u0e19\u0e21\u0e37\u0e2d\u0e16\u0e37\u0e2d (Remote Web Control)<\/h2>\n\n\n\n<p><strong>\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22<\/strong> \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e1b\u0e38\u0e48\u0e21\u0e40\u0e1b\u0e34\u0e14\u0e1b\u0e31\u0e4a\u0e21\u0e41\u0e25\u0e30\u0e1b\u0e34\u0e14\u0e1b\u0e31\u0e4a\u0e21\u0e1a\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a \u0e40\u0e21\u0e37\u0e48\u0e2d\u0e01\u0e14\u0e1b\u0e38\u0e48\u0e21\u0e1a\u0e19\u0e21\u0e37\u0e2d\u0e16\u0e37\u0e2d \u0e43\u0e2b\u0e49\u0e1a\u0e2d\u0e23\u0e4c\u0e14 ESP32 \u0e2a\u0e31\u0e48\u0e07\u0e07\u0e32\u0e19 Relay \u0e17\u0e31\u0e19\u0e17\u0e35 \u0e41\u0e25\u0e30\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a\u0e15\u0e49\u0e2d\u0e07\u0e41\u0e2a\u0e14\u0e07\u0e2a\u0e16\u0e32\u0e19\u0e30\u0e1b\u0e31\u0e08\u0e08\u0e38\u0e1a\u0e31\u0e19\u0e27\u0e48\u0e32\u0e15\u0e2d\u0e19\u0e19\u0e35\u0e49\u0e1b\u0e31\u0e4a\u0e21\u0e40\u0e1b\u0e34\u0e14\u0e2b\u0e23\u0e37\u0e2d \u0e1b\u0e34\u0e14\u0e2d\u0e22\u0e39\u0e48<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\">\u0e01\u0e32\u0e23\u0e15\u0e48\u0e2d\u0e27\u0e07\u0e08\u0e23 (Wiring)<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Relay Module<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>ESP32<\/strong><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">VCC<\/td><td class=\"has-text-align-center\" data-align=\"center\">VIN (5V)<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">GND<\/td><td class=\"has-text-align-center\" data-align=\"center\">GND<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">IN<\/td><td class=\"has-text-align-center\" data-align=\"center\">GPIO 2 (D2)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\"><strong>\u0e42\u0e04\u0e49\u0e14\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07<\/strong><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;WiFi.h&gt;\n#include &lt;WebServer.h&gt;\n\n\/\/ --- \u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32 WiFi ---\nconst char* ssid = \"\u0e0a\u0e37\u0e48\u0e2dWiFi_\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\";\nconst char* password = \"\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19_\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\";\n\n\/\/ \u0e01\u0e33\u0e2b\u0e19\u0e14\u0e02\u0e32 Relay\nconst int relayPin = 2;\n\n\/\/ \u0e15\u0e31\u0e27\u0e41\u0e1b\u0e23\u0e40\u0e01\u0e47\u0e1a\u0e2a\u0e16\u0e32\u0e19\u0e30\u0e1b\u0e31\u0e4a\u0e21 (0 = \u0e1b\u0e34\u0e14, 1 = \u0e40\u0e1b\u0e34\u0e14)\nbool pumpStatus = false; \/\/ \u0e15\u0e31\u0e27\u0e41\u0e1b\u0e23\u0e1b\u0e23\u0e30\u0e40\u0e20\u0e17 Boolean \u0e43\u0e0a\u0e49\u0e40\u0e01\u0e47\u0e1a\u0e2a\u0e16\u0e32\u0e19\u0e30 2 \u0e04\u0e48\u0e32\u0e40\u0e17\u0e48\u0e32\u0e19\u0e31\u0e49\u0e19 \u0e04\u0e37\u0e2d \u0e43\u0e0a\u0e48\/\u0e44\u0e21\u0e48\u0e43\u0e0a\u0e48 \u0e2b\u0e23\u0e37\u0e2d \u0e40\u0e1b\u0e34\u0e14\/\u0e1b\u0e34\u0e14\n\nWebServer server(80);\n\n\/\/ \u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a\u0e2b\u0e25\u0e31\u0e01\u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e1b\u0e38\u0e48\u0e21\u0e01\u0e14\nvoid handleRoot() {\n  String html = \"&lt;!DOCTYPE html&gt;&lt;html&gt;\";\n  html += \"&lt;head&gt;&lt;meta charset='UTF-8'&gt;\";\n  html += \"&lt;meta name='viewport' content='width=device-width, initial-scale=1'&gt;\";\n  html += \"&lt;title&gt;Smart Farm Control&lt;\/title&gt;\";\n  html += \"&lt;style&gt;\";\n  \/\/ \u0e41\u0e01\u0e49\u0e44\u0e02: \u0e40\u0e15\u0e34\u0e21\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22 : \u0e43\u0e19 CSS \u0e43\u0e2b\u0e49\u0e16\u0e39\u0e01\u0e15\u0e49\u0e2d\u0e07\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14\n  html += \"body { font-family: Arial; text-align: center; background-color: #f4f4f4; padding-top: 50px; }\";\n  html += \".btn { display: inline-block; padding: 20px 40px; font-size: 20px; color: white; border: none; border-radius: 10px; cursor: pointer; text-decoration: none; margin: 10px; }\";\n  html += \".btn-on { background-color: #2ecc71; }\";\n  html += \".btn-off { background-color: #e74c3c; }\";\n  html += \".status { font-size: 24px; font-weight: bold; margin-bottom: 30px; }\";\n  html += \".on { color: #2ecc71; } .off { color: #e74c3c; }\";\n  html += \"&lt;\/style&gt;&lt;\/head&gt;\";\n  \n  html += \"&lt;body&gt;\";\n  html += \"&lt;h1&gt;\ud83d\ude9c Pump Control Panel&lt;\/h1&gt;\";\n  \n  \/\/ \u0e41\u0e2a\u0e14\u0e07\u0e2a\u0e16\u0e32\u0e19\u0e30\u0e1b\u0e31\u0e08\u0e08\u0e38\u0e1a\u0e31\u0e19\n  html += \"&lt;div class='status'&gt;\u0e2a\u0e16\u0e32\u0e19\u0e30\u0e1b\u0e31\u0e4a\u0e21\u0e15\u0e2d\u0e19\u0e19\u0e35\u0e49: \";\n  if(pumpStatus) html += \"&lt;span class='on'&gt;\u0e01\u0e33\u0e25\u0e31\u0e07\u0e17\u0e33\u0e07\u0e32\u0e19 (ON)&lt;\/span&gt;\";\n  else html += \"&lt;span class='off'&gt;\u0e2b\u0e22\u0e38\u0e14\u0e17\u0e33\u0e07\u0e32\u0e19 (OFF)&lt;\/span&gt;\";\n  html += \"&lt;\/div&gt;\";\n\n  \/\/ \u0e1b\u0e38\u0e48\u0e21\u0e04\u0e27\u0e1a\u0e04\u0e38\u0e21\n  html += \"&lt;a href='\/pumpOn' class='btn btn-on'&gt;\u0e40\u0e1b\u0e34\u0e14\u0e1b\u0e31\u0e4a\u0e21\u0e19\u0e49\u0e33&lt;\/a&gt;\";\n  html += \"&lt;a href='\/pumpOff' class='btn btn-off'&gt;\u0e1b\u0e34\u0e14\u0e1b\u0e31\u0e4a\u0e21\u0e19\u0e49\u0e33&lt;\/a&gt;\";\n  \n  html += \"&lt;\/body&gt;&lt;\/html&gt;\";\n\n  server.send(200, \"text\/html\", html);\n}\n\n\/\/ \u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19\u0e17\u0e33\u0e07\u0e32\u0e19\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e01\u0e14 \"\u0e40\u0e1b\u0e34\u0e14\u0e1b\u0e31\u0e4a\u0e21\"\nvoid handlePumpOn() {\n  digitalWrite(relayPin, HIGH);\n  pumpStatus = true;\n  Serial.println(\"Pump turned ON\");\n  \/\/ \u0e2b\u0e25\u0e31\u0e07\u0e08\u0e32\u0e01\u0e2a\u0e31\u0e48\u0e07\u0e07\u0e32\u0e19\u0e40\u0e2a\u0e23\u0e47\u0e08 \u0e43\u0e2b\u0e49\u0e01\u0e23\u0e30\u0e42\u0e14\u0e14\u0e01\u0e25\u0e31\u0e1a\u0e44\u0e1b\u0e2b\u0e19\u0e49\u0e32\u0e2b\u0e25\u0e31\u0e01 (\/) \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e14\u0e39\u0e2a\u0e16\u0e32\u0e19\u0e30\u0e2d\u0e31\u0e1b\u0e40\u0e14\u0e15\n  server.sendHeader(\"Location\", \"\/\");\n  server.send(303); \/\/ \u0e2a\u0e31\u0e48\u0e07\u0e43\u0e2b\u0e49\u0e44\u0e1b\u0e40\u0e1b\u0e34\u0e14\u0e2b\u0e19\u0e49\u0e32\u0e15\u0e32\u0e21 Location \u0e17\u0e35\u0e48\u0e23\u0e30\u0e1a\u0e38\n}\n\n\/\/ \u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19\u0e17\u0e33\u0e07\u0e32\u0e19\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e01\u0e14 \"\u0e1b\u0e34\u0e14\u0e1b\u0e31\u0e4a\u0e21\"\nvoid handlePumpOff() {\n  digitalWrite(relayPin, LOW);\n  pumpStatus = false;\n  Serial.println(\"Pump turned OFF\");\n  \/\/ \u0e2b\u0e25\u0e31\u0e07\u0e08\u0e32\u0e01\u0e2a\u0e31\u0e48\u0e07\u0e07\u0e32\u0e19\u0e40\u0e2a\u0e23\u0e47\u0e08 \u0e43\u0e2b\u0e49\u0e01\u0e23\u0e30\u0e42\u0e14\u0e14\u0e01\u0e25\u0e31\u0e1a\u0e44\u0e1b\u0e2b\u0e19\u0e49\u0e32\u0e2b\u0e25\u0e31\u0e01 (\/)\n  server.sendHeader(\"Location\", \"\/\");\n  server.send(303); \/\/ \u0e2a\u0e31\u0e48\u0e07\u0e43\u0e2b\u0e49\u0e44\u0e1b\u0e40\u0e1b\u0e34\u0e14\u0e2b\u0e19\u0e49\u0e32\u0e15\u0e32\u0e21 Location \u0e17\u0e35\u0e48\u0e23\u0e30\u0e1a\u0e38\n}\n\nvoid setup() {\n  Serial.begin(115200);\n  pinMode(relayPin, OUTPUT);\n  digitalWrite(relayPin, LOW); \/\/ \u0e40\u0e23\u0e34\u0e48\u0e21\u0e15\u0e49\u0e19\u0e43\u0e2b\u0e49\u0e1b\u0e31\u0e4a\u0e21\u0e1b\u0e34\u0e14\u0e01\u0e48\u0e2d\u0e19\n\n  WiFi.begin(ssid, password);\n  while (WiFi.status() != WL_CONNECTED) {\n    delay(500);\n    Serial.print(\".\");\n  }\n  \n  Serial.println(\"\\nWiFi Connected!\");\n  Serial.println(WiFi.localIP());\n\n  \/\/ \u0e01\u0e33\u0e2b\u0e19\u0e14\u0e40\u0e2a\u0e49\u0e19\u0e17\u0e32\u0e07 (Routes) \u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e40\u0e23\u0e35\u0e22\u0e01\u0e40\u0e02\u0e49\u0e32 Path \u0e44\u0e2b\u0e19 \u0e08\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e2a\u0e48\u0e07\u0e40\u0e02\u0e32\u0e44\u0e1b\u0e2b\u0e32\u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19\u0e2d\u0e30\u0e44\u0e23\n  server.on(\"\/\", handleRoot);\n  server.on(\"\/pumpOn\", handlePumpOn);\n  server.on(\"\/pumpOff\", handlePumpOff);\n\n  server.begin();\n}\n\nvoid loop() {\n  server.handleClient();\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\">\u0e2d\u0e18\u0e34\u0e1a\u0e32\u0e22\u0e2b\u0e31\u0e27\u0e43\u0e08\u0e2a\u0e33\u0e04\u0e31\u0e0d (Teacher&#8217;s Guide)<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Hyperlinks as Commands<\/strong> \u0e1b\u0e38\u0e48\u0e21\u0e01\u0e14\u0e17\u0e35\u0e48\u0e40\u0e23\u0e32\u0e40\u0e2b\u0e47\u0e19 \u0e08\u0e23\u0e34\u0e07\u0e46\u0e41\u0e25\u0e49\u0e27\u0e21\u0e31\u0e19\u0e04\u0e37\u0e2d\u0e25\u0e34\u0e07\u0e01\u0e4c <code>&lt;a href='\/pumpOn'&gt;<\/code> \u0e40\u0e21\u0e37\u0e48\u0e2d\u0e40\u0e23\u0e32\u0e01\u0e14\u0e1b\u0e38\u0e48\u0e21 Browser \u0e08\u0e30\u0e41\u0e2d\u0e1a\u0e27\u0e34\u0e48\u0e07\u0e44\u0e1b\u0e17\u0e35\u0e48\u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48 <code>IP_\u0e02\u0e2d\u0e07\u0e1a\u0e2d\u0e23\u0e4c\u0e14\/pumpOn<\/code> \u0e0b\u0e36\u0e48\u0e07\u0e08\u0e30\u0e44\u0e1b\u0e1a\u0e2d\u0e01\u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19 <code>handlePumpOn<\/code> \u0e43\u0e19 ESP32 \u0e43\u0e2b\u0e49\u0e17\u0e33\u0e07\u0e32\u0e19<\/li>\n\n\n\n<li><code><strong>href<\/strong><\/code> &#8220;\u0e40\u0e2e\u0e0a-\u0e40\u0e23\u0e1f&#8221; \u0e22\u0e48\u0e2d\u0e21\u0e32\u0e08\u0e32\u0e01 <strong>Hypertext Reference<\/strong> \u0e43\u0e19\u0e20\u0e32\u0e29\u0e32 HTML \u0e17\u0e35\u0e48\u0e43\u0e0a\u0e49\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a<strong>\u0e23\u0e30\u0e1a\u0e38\u0e17\u0e35\u0e48\u0e2b\u0e21\u0e32\u0e22<\/strong><\/li>\n\n\n\n<li><strong>HTTP Redirect (Status 303)<\/strong> \u0e43\u0e19\u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19 <code>handlePumpOn<\/code> \u0e40\u0e23\u0e32\u0e43\u0e0a\u0e49\u0e01\u0e32\u0e23\u0e2a\u0e48\u0e07 Header &#8220;Location \/&#8221; \u0e01\u0e25\u0e31\u0e1a\u0e44\u0e1b \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e1a\u0e2d\u0e01 Browser \u0e27\u0e48\u0e32 &#8220;\u0e2a\u0e31\u0e48\u0e07\u0e07\u0e32\u0e19\u0e40\u0e2a\u0e23\u0e47\u0e08\u0e41\u0e25\u0e49\u0e27\u0e19\u0e30 \u0e43\u0e2b\u0e49\u0e01\u0e25\u0e31\u0e1a\u0e44\u0e1b\u0e17\u0e35\u0e48\u0e2b\u0e19\u0e49\u0e32\u0e41\u0e23\u0e01\u0e17\u0e31\u0e19\u0e17\u0e35&#8221; \u0e19\u0e31\u0e01\u0e28\u0e36\u0e01\u0e29\u0e32\u0e08\u0e30\u0e40\u0e2b\u0e47\u0e19\u0e2a\u0e16\u0e32\u0e19\u0e30\u0e1a\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e08\u0e2d\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e08\u0e32\u0e01 OFF \u0e40\u0e1b\u0e47\u0e19 ON \u0e17\u0e31\u0e19\u0e17\u0e35\u0e17\u0e35\u0e48\u0e01\u0e14\u0e1b\u0e38\u0e48\u0e21<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\">\ud83d\udca1 \u0e42\u0e08\u0e17\u0e22\u0e4c\u0e17\u0e49\u0e32\u0e17\u0e32\u0e22 (The Pro Challenge)<\/h2>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"860\" height=\"510\" src=\"https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/image-6.png\" alt=\"\" class=\"wp-image-1472\" style=\"aspect-ratio:1.6863801381894836;width:528px;height:auto\" srcset=\"https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/image-6.png 860w, https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/image-6-300x178.png 300w, https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/image-6-768x455.png 768w\" sizes=\"auto, (max-width: 860px) 100vw, 860px\" \/><\/figure>\n\n\n\n<p>\u0e2a\u0e23\u0e49\u0e32\u0e07<strong>\u0e23\u0e30\u0e1a\u0e1a\u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19\u0e01\u0e32\u0e23\u0e17\u0e33\u0e07\u0e32\u0e19\u0e0b\u0e49\u0e33\u0e0b\u0e49\u0e2d\u0e19<\/strong> \u0e42\u0e14\u0e22\u0e43\u0e2b\u0e49\u0e23\u0e27\u0e21\u0e42\u0e04\u0e49\u0e14 Lab 4.1 \u0e41\u0e25\u0e30 4.2 \u0e40\u0e02\u0e49\u0e32\u0e14\u0e49\u0e27\u0e22\u0e01\u0e31\u0e19 \u0e42\u0e14\u0e22\u0e21\u0e35\u0e40\u0e07\u0e37\u0e48\u0e2d\u0e19\u0e44\u0e02\u0e27\u0e48\u0e32 <strong>&#8220;\u0e16\u0e49\u0e32\u0e04\u0e48\u0e32\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e37\u0e49\u0e19\u0e14\u0e34\u0e19\u0e40\u0e01\u0e34\u0e19 90% (\u0e40\u0e1b\u0e35\u0e22\u0e01\u0e21\u0e32\u0e01) \u0e41\u0e21\u0e49\u0e08\u0e30\u0e01\u0e14\u0e1b\u0e38\u0e48\u0e21\u0e40\u0e1b\u0e34\u0e14\u0e1b\u0e31\u0e4a\u0e21\u0e1a\u0e19\u0e21\u0e37\u0e2d\u0e16\u0e37\u0e2d \u0e1b\u0e31\u0e4a\u0e21\u0e01\u0e47\u0e08\u0e30\u0e44\u0e21\u0e48\u0e17\u0e33\u0e07\u0e32\u0e19 \u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e2a\u0e48\u0e07\u0e01\u0e32\u0e23\u0e41\u0e08\u0e49\u0e07\u0e40\u0e15\u0e37\u0e2d\u0e19&#8221;<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-6-background-color has-background has-medium-font-size\">\u0e42\u0e04\u0e49\u0e14\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;WiFi.h&gt;\n#include &lt;WebServer.h&gt;\n\n\/\/ --- \u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32 WiFi ---\nconst char* ssid = \"\u0e0a\u0e37\u0e48\u0e2dWiFi_\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\";\nconst char* password = \"\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19_\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\";\n\n\/\/ --- \u0e01\u0e33\u0e2b\u0e19\u0e14\u0e02\u0e32\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c ---\nconst int relayPin = 2;   \/\/ \u0e02\u0e32\u0e04\u0e27\u0e1a\u0e04\u0e38\u0e21\u0e1b\u0e31\u0e4a\u0e21\u0e19\u0e49\u0e33\nconst int soilPin = 34;   \/\/ \u0e02\u0e32\u0e2d\u0e48\u0e32\u0e19\u0e04\u0e48\u0e32\u0e40\u0e0b\u0e19\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e37\u0e49\u0e19\u0e14\u0e34\u0e19 (Analog)\n\n\/\/ --- \u0e15\u0e31\u0e27\u0e41\u0e1b\u0e23\u0e23\u0e30\u0e1a\u0e1a ---\nbool pumpStatus = false;  \/\/ \u0e2a\u0e16\u0e32\u0e19\u0e30\u0e1b\u0e31\u0e4a\u0e21\nString alertMsg = \"\";     \/\/ \u0e15\u0e31\u0e27\u0e41\u0e1b\u0e23\u0e40\u0e01\u0e47\u0e1a\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e41\u0e08\u0e49\u0e07\u0e40\u0e15\u0e37\u0e2d\u0e19\u0e1a\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a\n\nWebServer server(80);\n\n\/\/ \u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19\u0e2d\u0e48\u0e32\u0e19\u0e04\u0e48\u0e32\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e37\u0e49\u0e19\u0e14\u0e34\u0e19 (\u0e08\u0e33\u0e25\u0e2d\u0e07\u0e08\u0e32\u0e01 Lab \u0e01\u0e48\u0e2d\u0e19\u0e2b\u0e19\u0e49\u0e32)\nint getSoilMoisture() {\n  int analogValue = analogRead(soilPin);\n  \/\/ \u0e41\u0e1b\u0e25\u0e07\u0e04\u0e48\u0e32 Analog \u0e0a\u0e48\u0e27\u0e07 0-4095 \u0e40\u0e1b\u0e47\u0e19\u0e40\u0e1b\u0e2d\u0e23\u0e4c\u0e40\u0e0b\u0e47\u0e19\u0e15\u0e4c 0-100%\n  \/\/ \u0e04\u0e48\u0e32\u0e19\u0e35\u0e49\u0e15\u0e49\u0e2d\u0e07\u0e1b\u0e23\u0e31\u0e1a\u0e43\u0e2b\u0e49\u0e15\u0e23\u0e07\u0e01\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e43\u0e19 Lab \u0e02\u0e2d\u0e07\u0e19\u0e31\u0e01\u0e28\u0e36\u0e01\u0e29\u0e32\n  int moisturePercent = map(analogValue, 4095, 0, 0, 100); \n  \n  if(moisturePercent &gt; 100) moisturePercent = 100;\n  if(moisturePercent &lt; 0) moisturePercent = 0;\n  \n  return moisturePercent;\n}\n\n\/\/ \u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a\u0e2b\u0e25\u0e31\u0e01\nvoid handleRoot() {\n  int currentMoisture = getSoilMoisture(); \/\/ \u0e2d\u0e48\u0e32\u0e19\u0e04\u0e48\u0e32\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e37\u0e49\u0e19\u0e1b\u0e31\u0e08\u0e08\u0e38\u0e1a\u0e31\u0e19\n  \n  String html = \"&lt;!DOCTYPE html&gt;&lt;html&gt;\";\n  html += \"&lt;head&gt;&lt;meta charset='UTF-8'&gt;\";\n  html += \"&lt;meta name='viewport' content='width=device-width, initial-scale=1'&gt;\";\n  html += \"&lt;meta http-equiv='refresh' content='5'&gt;\";\n  html += \"&lt;title&gt;Smart Farm Control&lt;\/title&gt;\";\n  html += \"&lt;style&gt;\";\n  html += \"body { font-family: 'Segoe UI', Arial; text-align: center; background-color: #f4f4f4; padding-top: 50px; }\";\n  html += \".btn { display: inline-block; padding: 20px 40px; font-size: 20px; color: white; border: none; border-radius: 10px; cursor: pointer; text-decoration: none; margin: 10px; }\";\n  html += \".btn-on { background-color: #2ecc71; }\";\n  html += \".btn-off { background-color: #e74c3c; }\";\n  html += \".status { font-size: 24px; font-weight: bold; margin-bottom: 10px; }\";\n  html += \".alert { background-color: #f39c12; color: white; padding: 15px; border-radius: 8px; margin: 20px auto; width: 80%; max-width: 400px; font-weight: bold; }\";\n  html += \".on { color: #2ecc71; } .off { color: #e74c3c; }\";\n  html += \"&lt;\/style&gt;&lt;\/head&gt;\";\n  \n  html += \"&lt;body&gt;\";\n  html += \"&lt;h1&gt;\u0e23\u0e30\u0e1a\u0e1a\u0e04\u0e27\u0e1a\u0e04\u0e38\u0e21\u0e1f\u0e32\u0e23\u0e4c\u0e21\u0e2d\u0e31\u0e08\u0e09\u0e23\u0e34\u0e22\u0e30&lt;\/h1&gt;\";\n  \n  \/\/ \u0e42\u0e0a\u0e27\u0e4c\u0e04\u0e48\u0e32\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e37\u0e49\u0e19\u0e14\u0e34\u0e19\n  html += \"&lt;h2&gt;\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e37\u0e49\u0e19\u0e14\u0e34\u0e19\u0e1b\u0e31\u0e08\u0e08\u0e38\u0e1a\u0e31\u0e19: \" + String(currentMoisture) + \"%&lt;\/h2&gt;\";\n\n  \/\/ \u0e40\u0e0a\u0e47\u0e04\u0e27\u0e48\u0e32\u0e21\u0e35\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e41\u0e08\u0e49\u0e07\u0e40\u0e15\u0e37\u0e2d\u0e19\u0e44\u0e2b\u0e21 \u0e16\u0e49\u0e32\u0e21\u0e35\u0e43\u0e2b\u0e49\u0e41\u0e2a\u0e14\u0e07\u0e01\u0e25\u0e48\u0e2d\u0e07 Alert\n  if (alertMsg != \"\") {\n    html += \"&lt;div class='alert'&gt;\u26a0\ufe0f \" + alertMsg + \"&lt;\/div&gt;\";\n  }\n  \n  \/\/ \u0e41\u0e2a\u0e14\u0e07\u0e2a\u0e16\u0e32\u0e19\u0e30\u0e1b\u0e31\u0e4a\u0e21\u0e1b\u0e31\u0e08\u0e08\u0e38\u0e1a\u0e31\u0e19\n  html += \"&lt;div class='status'&gt;\u0e2a\u0e16\u0e32\u0e19\u0e30\u0e1b\u0e31\u0e4a\u0e21\u0e15\u0e2d\u0e19\u0e19\u0e35\u0e49: \";\n  if(pumpStatus) html += \"&lt;span class='on'&gt;\u0e01\u0e33\u0e25\u0e31\u0e07\u0e17\u0e33\u0e07\u0e32\u0e19 (ON)&lt;\/span&gt;\";\n  else html += \"&lt;span class='off'&gt;\u0e2b\u0e22\u0e38\u0e14\u0e17\u0e33\u0e07\u0e32\u0e19 (OFF)&lt;\/span&gt;\";\n  html += \"&lt;\/div&gt;\";\n\n  \/\/ \u0e1b\u0e38\u0e48\u0e21\u0e04\u0e27\u0e1a\u0e04\u0e38\u0e21\n  html += \"&lt;a href='\/pumpOn' class='btn btn-on'&gt;\u0e40\u0e1b\u0e34\u0e14\u0e1b\u0e31\u0e4a\u0e21\u0e19\u0e49\u0e33&lt;\/a&gt;\";\n  html += \"&lt;a href='\/pumpOff' class='btn btn-off'&gt;\u0e1b\u0e34\u0e14\u0e1b\u0e31\u0e4a\u0e21\u0e19\u0e49\u0e33&lt;\/a&gt;\";\n  \n  html += \"&lt;\/body&gt;&lt;\/html&gt;\";\n\n  server.send(200, \"text\/html\", html);\n}\n\n\/\/ \u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19\u0e17\u0e33\u0e07\u0e32\u0e19\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49\u0e01\u0e14 \"\u0e40\u0e1b\u0e34\u0e14\u0e1b\u0e31\u0e4a\u0e21\"\nvoid handlePumpOn() {\n  int currentMoisture = getSoilMoisture(); \/\/ \u0e40\u0e0a\u0e47\u0e04\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e37\u0e49\u0e19\u0e14\u0e34\u0e19 \u0e13 \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35\u0e17\u0e35\u0e48\u0e01\u0e14\u0e1b\u0e38\u0e48\u0e21\n  \n  \/\/ \u0e40\u0e07\u0e37\u0e48\u0e2d\u0e19\u0e44\u0e02\u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19\u0e01\u0e32\u0e23\u0e17\u0e33\u0e07\u0e32\u0e19\u0e0b\u0e49\u0e33\u0e0b\u0e49\u0e2d\u0e19\n  if (currentMoisture &gt; 90) {\n    \/\/ \u0e01\u0e23\u0e13\u0e35\u0e14\u0e34\u0e19\u0e40\u0e1b\u0e35\u0e22\u0e01\u0e21\u0e32\u0e01 \u0e43\u0e2b\u0e49\u0e1b\u0e34\u0e14\u0e01\u0e31\u0e49\u0e19\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07\u0e44\u0e27\u0e49\u0e41\u0e25\u0e30\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e41\u0e08\u0e49\u0e07\u0e40\u0e15\u0e37\u0e2d\u0e19\n    alertMsg = \"\u0e44\u0e21\u0e48\u0e2d\u0e19\u0e38\u0e0d\u0e32\u0e15\u0e43\u0e2b\u0e49\u0e40\u0e1b\u0e34\u0e14\u0e1b\u0e31\u0e4a\u0e21 \u0e40\u0e19\u0e37\u0e48\u0e2d\u0e07\u0e08\u0e32\u0e01\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e37\u0e49\u0e19\u0e14\u0e34\u0e19\u0e2a\u0e39\u0e07\u0e40\u0e01\u0e34\u0e19 90% !\";\n    Serial.println(\"Action Blocked: Soil is too wet.\");\n  } else {\n    \/\/ \u0e01\u0e23\u0e13\u0e35\u0e1b\u0e01\u0e15\u0e34 \u0e2a\u0e31\u0e48\u0e07\u0e40\u0e1b\u0e34\u0e14\u0e1b\u0e31\u0e4a\u0e21\u0e19\u0e49\u0e33 \u0e41\u0e25\u0e30\u0e25\u0e49\u0e32\u0e07\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e41\u0e08\u0e49\u0e07\u0e40\u0e15\u0e37\u0e2d\u0e19\u0e17\u0e34\u0e49\u0e07\n    digitalWrite(relayPin, HIGH);\n    pumpStatus = true;\n    alertMsg = \"\"; \n    Serial.println(\"Pump turned ON\");\n  }\n  \n  server.sendHeader(\"Location\", \"\/\");\n  server.send(303);\n}\n\n\/\/ \u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19\u0e17\u0e33\u0e07\u0e32\u0e19\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49\u0e01\u0e14 \"\u0e1b\u0e34\u0e14\u0e1b\u0e31\u0e4a\u0e21\"\nvoid handlePumpOff() {\n  digitalWrite(relayPin, LOW);\n  pumpStatus = false;\n  alertMsg = \"\"; \/\/ \u0e25\u0e49\u0e32\u0e07\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e41\u0e08\u0e49\u0e07\u0e40\u0e15\u0e37\u0e2d\u0e19\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e2a\u0e31\u0e48\u0e07\u0e1b\u0e34\u0e14\u0e1b\u0e01\u0e15\u0e34\n  Serial.println(\"Pump turned OFF\");\n  \n  server.sendHeader(\"Location\", \"\/\");\n  server.send(303);\n}\n\nvoid setup() {\n  Serial.begin(115200);\n  pinMode(relayPin, OUTPUT);\n  digitalWrite(relayPin, LOW);\n\n  WiFi.begin(ssid, password);\n  Serial.print(\"Connecting to WiFi\");\n  while (WiFi.status() != WL_CONNECTED) {\n    delay(500);\n    Serial.print(\".\");\n  }\n  \n  Serial.println(\"\\nWiFi Connected!\");\n  Serial.print(\"IP address: \");\n  Serial.println(WiFi.localIP());\n\n  server.on(\"\/\", handleRoot);\n  server.on(\"\/pumpOn\", handlePumpOn);\n  server.on(\"\/pumpOff\", handlePumpOff);\n\n  server.begin();\n}\n\nvoid loop() {\n  server.handleClient();\n}<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading has-text-align-center has-vivid-green-cyan-background-color has-background has-large-font-size\">Project 2 \u0e2a\u0e23\u0e49\u0e32\u0e07\u0e2b\u0e19\u0e49\u0e32 Dashboard \u0e04\u0e27\u0e1a\u0e04\u0e38\u0e21\u0e1f\u0e32\u0e23\u0e4c\u0e21 (Web Dashboard Control Panel)<\/h1>\n\n\n\n<p><strong>\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22<\/strong> \u0e2a\u0e23\u0e49\u0e32\u0e07\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a\u0e2a\u0e48\u0e27\u0e19\u0e15\u0e31\u0e27\u0e1a\u0e19 ESP32 \u0e17\u0e35\u0e48\u0e21\u0e35\u0e1b\u0e38\u0e48\u0e21\u0e01\u0e14\u0e04\u0e27\u0e1a\u0e04\u0e38\u0e21\u0e1b\u0e31\u0e4a\u0e21\u0e19\u0e49\u0e33 \u0e41\u0e25\u0e30\u0e41\u0e2a\u0e14\u0e07\u0e04\u0e48\u0e32\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e37\u0e49\u0e19\u0e14\u0e34\u0e19\u0e41\u0e1a\u0e1a Real-time \u0e42\u0e14\u0e22\u0e43\u0e0a\u0e49\u0e40\u0e17\u0e04\u0e19\u0e34\u0e04\u0e01\u0e32\u0e23 Redirect \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e43\u0e2b\u0e49\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a\u0e2d\u0e31\u0e1b\u0e40\u0e14\u0e15\u0e2a\u0e16\u0e32\u0e19\u0e30\u0e17\u0e31\u0e19\u0e17\u0e35\u0e17\u0e35\u0e48\u0e01\u0e14\u0e1b\u0e38\u0e48\u0e21<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"742\" src=\"https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/image-7-1024x742.png\" alt=\"\" class=\"wp-image-1473\" style=\"width:742px;height:auto\" srcset=\"https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/image-7-1024x742.png 1024w, https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/image-7-300x217.png 300w, https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/image-7-768x557.png 768w, https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/image-7.png 1127w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\">\u0e42\u0e04\u0e23\u0e07\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e40\u0e2a\u0e49\u0e19\u0e17\u0e32\u0e07 (Routes Map)<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>http\/\/[IP-Address]\/<\/code>&nbsp; \u0e40\u0e23\u0e35\u0e22\u0e01\u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19 <code>handleRoot<\/code> (\u0e42\u0e0a\u0e27\u0e4c\u0e2b\u0e19\u0e49\u0e32\u0e2b\u0e25\u0e31\u0e01)<\/li>\n\n\n\n<li><code>http\/\/[IP-Address]\/on<\/code>&nbsp; \u0e40\u0e23\u0e35\u0e22\u0e01\u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19 <code>handlePumpOn<\/code> (\u0e2a\u0e31\u0e48\u0e07\u0e40\u0e1b\u0e34\u0e14)<\/li>\n\n\n\n<li><code>http\/\/[IP-Address]\/off<\/code>&nbsp; \u0e40\u0e23\u0e35\u0e22\u0e01\u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19 <code>handlePumpOff<\/code> (\u0e2a\u0e31\u0e48\u0e07\u0e1b\u0e34\u0e14)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\"><strong>\u0e15\u0e32\u0e23\u0e32\u0e07\u0e01\u0e32\u0e23\u0e15\u0e48\u0e2d\u0e27\u0e07\u0e08\u0e23 (<\/strong><strong>Wiring Table)<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>\u0e02\u0e32\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>\u0e15\u0e48\u0e2d\u0e40\u0e02\u0e49\u0e32\u0e01\u0e31\u0e1a <\/strong><strong>ESP32<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>\u0e2b\u0e19\u0e49\u0e32\u0e17\u0e35\u0e48<\/strong><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">\u0e40\u0e0b\u0e19\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e14\u0e34\u0e19 (Soil)<\/td><td class=\"has-text-align-center\" data-align=\"center\">VCC<\/td><td class=\"has-text-align-center\" data-align=\"center\">3.3V<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e08\u0e48\u0e32\u0e22\u0e44\u0e1f\u0e40\u0e25\u0e35\u0e49\u0e22\u0e07\u0e40\u0e0b\u0e19\u0e40\u0e0b\u0e2d\u0e23\u0e4c<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><\/td><td class=\"has-text-align-center\" data-align=\"center\">GND<\/td><td class=\"has-text-align-center\" data-align=\"center\">GND<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e15\u0e48\u0e2d\u0e2a\u0e32\u0e22\u0e14\u0e34\u0e19<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><\/td><td class=\"has-text-align-center\" data-align=\"center\">AO (Analog Out)<\/td><td class=\"has-text-align-center\" data-align=\"center\">GPIO 34 (D34)<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e2a\u0e48\u0e07\u0e04\u0e48\u0e32\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e37\u0e49\u0e19\u0e41\u0e1a\u0e1a Analog<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">\u0e23\u0e35\u0e40\u0e25\u0e22\u0e4c (Relay)<\/td><td class=\"has-text-align-center\" data-align=\"center\">VCC<\/td><td class=\"has-text-align-center\" data-align=\"center\">VIN (5V)<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e08\u0e48\u0e32\u0e22\u0e44\u0e1f\u0e43\u0e2b\u0e49\u0e02\u0e14\u0e25\u0e27\u0e14\u0e23\u0e35\u0e40\u0e25\u0e22\u0e4c<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><\/td><td class=\"has-text-align-center\" data-align=\"center\">GND<\/td><td class=\"has-text-align-center\" data-align=\"center\">GND<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e15\u0e48\u0e2d\u0e2a\u0e32\u0e22\u0e14\u0e34\u0e19<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><\/td><td class=\"has-text-align-center\" data-align=\"center\">IN<\/td><td class=\"has-text-align-center\" data-align=\"center\">GPIO 2 (D2)<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e23\u0e31\u0e1a\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07 \u0e40\u0e1b\u0e34\u0e14\/\u0e1b\u0e34\u0e14 \u0e08\u0e32\u0e01\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\">\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e42\u0e04\u0e49\u0e14<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;WiFi.h&gt;\n#include &lt;WebServer.h&gt;\n\n\/\/ --- 1. \u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32 WiFi \u0e41\u0e25\u0e30\u0e02\u0e32\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c ---\nconst char* ssid = \"\u0e0a\u0e37\u0e48\u0e2dWiFi_\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\";\nconst char* password = \"\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19_\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\";\n\nconst int relayPin = 2;   \/\/ \u0e02\u0e32 Relay\nconst int soilPin = 34;   \/\/ \u0e02\u0e32\u0e40\u0e0b\u0e19\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e14\u0e34\u0e19\nbool pumpStatus = false;  \/\/ \u0e15\u0e31\u0e27\u0e41\u0e1b\u0e23\u0e40\u0e01\u0e47\u0e1a\u0e2a\u0e16\u0e32\u0e19\u0e30\u0e40\u0e1b\u0e34\u0e14\/\u0e1b\u0e34\u0e14\n\nWebServer server(80);\n\n\/\/ --- 2. \u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e2b\u0e25\u0e31\u0e01 (\/) ---\nvoid handleRoot() {\n  int rawSoil = analogRead(soilPin);\n  int percent = map(rawSoil, 4095, 0, 0, 100);\n  \n  \/\/ \u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19\u0e04\u0e48\u0e32\u0e40\u0e1b\u0e2d\u0e23\u0e4c\u0e40\u0e0b\u0e47\u0e19\u0e15\u0e4c\u0e15\u0e34\u0e14\u0e25\u0e1a\u0e2b\u0e23\u0e37\u0e2d\u0e40\u0e01\u0e34\u0e19 100\n  if (percent &lt; 0) percent = 0;\n  if (percent &gt; 100) percent = 100;\n\n  String html = \"&lt;!DOCTYPE html&gt;&lt;html lang='th'&gt;\";\n  html += \"&lt;head&gt;&lt;meta charset='UTF-8'&gt;\";\n  html += \"&lt;meta name='viewport' content='width=device-width, initial-scale=1'&gt;\";\n  html += \"&lt;title&gt;Smart Farm Dashboard&lt;\/title&gt;\";\n  html += \"&lt;style&gt;\";\n  \/\/ \u0e15\u0e01\u0e41\u0e15\u0e48\u0e07\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07\u0e41\u0e25\u0e30\u0e08\u0e31\u0e14\u0e01\u0e36\u0e48\u0e07\u0e01\u0e25\u0e32\u0e07\n  html += \"body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background: linear-gradient(135deg, #e0c3fc 0%, #8ec5fc 100%); margin: 0; display: flex; justify-content: center; align-items: center; min-height: 100vh; color: #333; }\";\n  \/\/ \u0e15\u0e01\u0e41\u0e15\u0e48\u0e07\u0e01\u0e32\u0e23\u0e4c\u0e14\n  html += \".card { background: #ffffff; padding: 40px 30px; border-radius: 20px; box-shadow: 0 10px 30px rgba(0,0,0,0.15); text-align: center; max-width: 400px; width: 90%; }\";\n  html += \"h1 { margin-top: 0; color: #2c3e50; font-size: 26px; margin-bottom: 25px; }\";\n  \/\/ \u0e27\u0e07\u0e01\u0e25\u0e21\u0e41\u0e2a\u0e14\u0e07\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e37\u0e49\u0e19\n  html += \".moisture-circle { width: 140px; height: 140px; border-radius: 50%; border: 8px solid #007bff; display: flex; flex-direction: column; justify-content: center; align-items: center; margin: 0 auto 25px auto; box-shadow: 0 4px 15px rgba(0,123,255,0.2); }\";\n  html += \".moisture-val { font-size: 38px; font-weight: bold; color: #007bff; }\";\n  html += \".moisture-label { font-size: 14px; color: #666; }\";\n  \/\/ \u0e1b\u0e49\u0e32\u0e22\u0e2a\u0e16\u0e32\u0e19\u0e30\u0e1b\u0e31\u0e4a\u0e21\n  html += \".status-box { padding: 12px; border-radius: 10px; background: #f8f9fa; margin-bottom: 25px; font-size: 16px; font-weight: bold; }\";\n  html += \".on { color: #28a745; } .off { color: #dc3545; }\";\n  \/\/ \u0e1b\u0e38\u0e48\u0e21\u0e01\u0e14\n  html += \".btn-group { display: flex; gap: 15px; }\";\n  html += \".btn { flex: 1; padding: 15px; font-size: 16px; font-weight: bold; color: white; border-radius: 12px; text-decoration: none; transition: all 0.2s; border: none; cursor: pointer; display: flex; justify-content: center; align-items: center; gap: 8px; }\";\n  html += \".btn:hover { transform: translateY(-3px); box-shadow: 0 6px 15px rgba(0,0,0,0.2); }\";\n  html += \".btn-on { background: #28a745; } .btn-off { background: #dc3545; }\";\n  \/\/ \u0e1b\u0e38\u0e48\u0e21\u0e23\u0e35\u0e40\u0e1f\u0e23\u0e0a\n  html += \".refresh-link { display: inline-block; margin-top: 25px; color: #6c757d; text-decoration: none; font-size: 14px; transition: color 0.2s; }\";\n  html += \".refresh-link:hover { color: #343a40; text-decoration: underline; }\";\n  html += \"&lt;\/style&gt;&lt;\/head&gt;&lt;body&gt;\";\n\n  html += \"&lt;div class='card'&gt;\";\n  html += \"&lt;h1&gt;\ud83c\udf31 Farm Dashboard&lt;\/h1&gt;\";\n  \n  \/\/ \u0e41\u0e2a\u0e14\u0e07\u0e04\u0e48\u0e32\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e37\u0e49\u0e19\u0e43\u0e19\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a\u0e27\u0e07\u0e01\u0e25\u0e21\n  html += \"&lt;div class='moisture-circle'&gt;\";\n  html += \"&lt;span class='moisture-val'&gt;\" + String(percent) + \"%&lt;\/span&gt;\";\n  html += \"&lt;span class='moisture-label'&gt;\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e37\u0e49\u0e19\u0e14\u0e34\u0e19&lt;\/span&gt;\";\n  html += \"&lt;\/div&gt;\";\n  \n  \/\/ \u0e1b\u0e49\u0e32\u0e22\u0e41\u0e2a\u0e14\u0e07\u0e2a\u0e16\u0e32\u0e19\u0e30\n  html += \"&lt;div class='status-box'&gt;\u0e2a\u0e16\u0e32\u0e19\u0e30\u0e1b\u0e31\u0e4a\u0e21\u0e19\u0e49\u0e33: \";\n  if(pumpStatus) {\n    html += \"&lt;span class='on'&gt;\ud83d\udfe2 \u0e01\u0e33\u0e25\u0e31\u0e07\u0e17\u0e33\u0e07\u0e32\u0e19&lt;\/span&gt;\";\n  } else {\n    html += \"&lt;span class='off'&gt;\ud83d\udd34 \u0e2b\u0e22\u0e38\u0e14\u0e17\u0e33\u0e07\u0e32\u0e19&lt;\/span&gt;\";\n  }\n  html += \"&lt;\/div&gt;\";\n  \n  \/\/ \u0e1b\u0e38\u0e48\u0e21\u0e01\u0e14\u0e0b\u0e49\u0e32\u0e22-\u0e02\u0e27\u0e32\n  html += \"&lt;div class='btn-group'&gt;\";\n  html += \"&lt;a href='\/on' class='btn btn-on'&gt;\ud83d\udca7 \u0e40\u0e1b\u0e34\u0e14\u0e1b\u0e31\u0e4a\u0e21&lt;\/a&gt;\";\n  html += \"&lt;a href='\/off' class='btn btn-off'&gt;\ud83d\uded1 \u0e1b\u0e34\u0e14\u0e1b\u0e31\u0e4a\u0e21&lt;\/a&gt;\";\n  html += \"&lt;\/div&gt;\";\n  \n  html += \"&lt;a href='\/' class='refresh-link'&gt;\ud83d\udd04 \u0e01\u0e14\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e2d\u0e31\u0e1b\u0e40\u0e14\u0e15\u0e04\u0e48\u0e32\u0e25\u0e48\u0e32\u0e2a\u0e38\u0e14&lt;\/a&gt;\";\n  \n  html += \"&lt;\/div&gt;&lt;\/body&gt;&lt;\/html&gt;\";\n\n  server.send(200, \"text\/html\", html);\n}\n\n\/\/ --- 3. \u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19\u0e40\u0e2a\u0e49\u0e19\u0e17\u0e32\u0e07 \/on ---\nvoid handlePumpOn() {\n  digitalWrite(relayPin, HIGH);\n  pumpStatus = true;\n  server.sendHeader(\"Location\", \"\/\");\n  server.send(303); \n}\n\n\/\/ --- 4. \u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19\u0e40\u0e2a\u0e49\u0e19\u0e17\u0e32\u0e07 \/off ---\nvoid handlePumpOff() {\n  digitalWrite(relayPin, LOW);\n  pumpStatus = false;\n  server.sendHeader(\"Location\", \"\/\");\n  server.send(303);\n}\n\nvoid setup() {\n  Serial.begin(115200);\n  pinMode(relayPin, OUTPUT);\n  digitalWrite(relayPin, LOW);\n\n  WiFi.begin(ssid, password);\n  while (WiFi.status() != WL_CONNECTED) { \n    delay(500); \n    Serial.print(\".\"); \n  }\n  \n  Serial.println(\"\\nReady! IP \" + WiFi.localIP().toString());\n\n  \/\/ \u0e01\u0e32\u0e23\u0e1c\u0e39\u0e01 URL \u0e01\u0e31\u0e1a \u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19 (Routing)\n  server.on(\"\/\", handleRoot);\n  server.on(\"\/on\", handlePumpOn);\n  server.on(\"\/off\", handlePumpOff);\n\n  server.begin();\n}\n\nvoid loop() {\n  server.handleClient();\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\"><strong>\u0e40\u0e08\u0e32\u0e30\u0e25\u0e36\u0e01\u0e42\u0e04\u0e49\u0e14 CSS : \u0e40\u0e2a\u0e01\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a Smart Farm \u0e43\u0e2b\u0e49\u0e2a\u0e27\u0e22\u0e23\u0e30\u0e14\u0e31\u0e1a\u0e21\u0e37\u0e2d\u0e42\u0e1b\u0e23<\/strong><\/h2>\n\n\n\n<p>\u0e19\u0e31\u0e01\u0e28\u0e36\u0e01\u0e29\u0e32\u0e04\u0e07\u0e40\u0e04\u0e22\u0e40\u0e2b\u0e47\u0e19\u0e40\u0e27\u0e47\u0e1a\u0e44\u0e0b\u0e15\u0e4c\u0e17\u0e35\u0e48\u0e2b\u0e19\u0e49\u0e32\u0e15\u0e32\u0e42\u0e1a\u0e23\u0e32\u0e13\u0e46 \u0e21\u0e35\u0e41\u0e15\u0e48\u0e15\u0e31\u0e27\u0e2b\u0e19\u0e31\u0e07\u0e2a\u0e37\u0e2d\u0e2a\u0e35\u0e14\u0e33\u0e1a\u0e19\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07\u0e2a\u0e35\u0e02\u0e32\u0e27\u0e43\u0e0a\u0e48\u0e44\u0e2b\u0e21 \u0e19\u0e31\u0e48\u0e19\u0e04\u0e37\u0e2d\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a\u0e17\u0e35\u0e48\u0e21\u0e35\u0e41\u0e15\u0e48 <strong>HTML<\/strong><\/p>\n\n\n\n<p>\u0e41\u0e15\u0e48\u0e2a\u0e34\u0e48\u0e07\u0e17\u0e35\u0e48\u0e08\u0e30\u0e17\u0e33\u0e43\u0e2b\u0e49\u0e1a\u0e49\u0e32\u0e19\u0e02\u0e2d\u0e07\u0e40\u0e23\u0e32\u0e19\u0e48\u0e32\u0e2d\u0e22\u0e39\u0e48 \u0e17\u0e32\u0e2a\u0e35\u0e2a\u0e27\u0e22\u0e07\u0e32\u0e21 \u0e21\u0e35\u0e42\u0e0b\u0e1f\u0e32\u0e19\u0e38\u0e48\u0e21\u0e46 \u0e01\u0e47\u0e04\u0e37\u0e2d <strong>CSS (Cascading Style Sheets)<\/strong> \u0e43\u0e19\u0e42\u0e04\u0e49\u0e14 ESP32 \u0e02\u0e2d\u0e07\u0e40\u0e23\u0e32 CSS \u0e08\u0e30\u0e16\u0e39\u0e01\u0e40\u0e02\u0e35\u0e22\u0e19\u0e0b\u0e48\u0e2d\u0e19\u0e2d\u0e22\u0e39\u0e48\u0e23\u0e30\u0e2b\u0e27\u0e48\u0e32\u0e07\u0e41\u0e17\u0e47\u0e01 <code>&lt;style&gt; ... &lt;\/style&gt;<\/code> \u0e19\u0e31\u0e48\u0e19\u0e40\u0e2d\u0e07<\/p>\n\n\n\n<p>\u0e21\u0e32\u0e14\u0e39\u0e01\u0e31\u0e19\u0e27\u0e48\u0e32\u0e42\u0e04\u0e49\u0e14\u0e41\u0e15\u0e48\u0e25\u0e30\u0e1a\u0e23\u0e23\u0e17\u0e31\u0e14\u0e17\u0e33\u0e2b\u0e19\u0e49\u0e32\u0e17\u0e35\u0e48\u0e2d\u0e30\u0e44\u0e23\u0e1a\u0e49\u0e32\u0e07 \u0e41\u0e25\u0e30\u0e40\u0e23\u0e32\u0e08\u0e30\u0e1b\u0e23\u0e31\u0e1a\u0e41\u0e15\u0e48\u0e07\u0e21\u0e31\u0e19\u0e44\u0e14\u0e49\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e44\u0e23<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-ast-global-color-6-background-color has-background has-medium-font-size\"><strong>\u0e01\u0e32\u0e23\u0e15\u0e31\u0e49\u0e07\u0e01\u0e0e CSS<\/strong><\/h3>\n\n\n\n<p>\u0e01\u0e48\u0e2d\u0e19\u0e08\u0e30\u0e41\u0e15\u0e48\u0e07\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a \u0e40\u0e23\u0e32\u0e15\u0e49\u0e2d\u0e07\u0e23\u0e39\u0e49\u0e08\u0e31\u0e01\u0e27\u0e34\u0e18\u0e35\u0e40\u0e23\u0e35\u0e22\u0e01\u0e0a\u0e37\u0e48\u0e2d\u0e2a\u0e34\u0e48\u0e07\u0e17\u0e35\u0e48\u0e40\u0e23\u0e32\u0e08\u0e30\u0e15\u0e01\u0e41\u0e15\u0e48\u0e07\u0e01\u0e48\u0e2d\u0e19<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u0e16\u0e49\u0e32\u0e44\u0e21\u0e48\u0e21\u0e35\u0e08\u0e38\u0e14\u0e19\u0e33\u0e2b\u0e19\u0e49\u0e32<\/strong> \u0e40\u0e0a\u0e48\u0e19 <code>body<\/code>, <code>h1<\/code> \u0e2b\u0e21\u0e32\u0e22\u0e16\u0e36\u0e07 \u0e01\u0e32\u0e23\u0e2a\u0e31\u0e48\u0e07\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a\u0e02\u0e2d\u0e07 &#8220;\u0e41\u0e17\u0e47\u0e01 HTML&#8221; \u0e19\u0e31\u0e49\u0e19\u0e46 \u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14\u0e43\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a<\/li>\n\n\n\n<li><strong>\u0e16\u0e49\u0e32\u0e21\u0e35\u0e08\u0e38\u0e14\u0e19\u0e33\u0e2b\u0e19\u0e49\u0e32<\/strong> \u0e40\u0e0a\u0e48\u0e19 <code>.card<\/code>, <code>.btn<\/code> \u0e2b\u0e21\u0e32\u0e22\u0e16\u0e36\u0e07 \u0e01\u0e32\u0e23\u0e40\u0e23\u0e35\u0e22\u0e01 <strong>Class (\u0e04\u0e25\u0e32\u0e2a)<\/strong> \u0e0b\u0e36\u0e48\u0e07\u0e40\u0e1b\u0e23\u0e35\u0e22\u0e1a\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19 &#8220;\u0e1b\u0e49\u0e32\u0e22\u0e0a\u0e37\u0e48\u0e2d&#8221; \u0e17\u0e35\u0e48\u0e40\u0e23\u0e32\u0e40\u0e2d\u0e32\u0e44\u0e1b\u0e41\u0e1b\u0e30\u0e44\u0e27\u0e49\u0e17\u0e35\u0e48\u0e41\u0e17\u0e47\u0e01\u0e44\u0e2b\u0e19\u0e01\u0e47\u0e44\u0e14\u0e49 \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e43\u0e2b\u0e49\u0e15\u0e01\u0e41\u0e15\u0e48\u0e07\u0e44\u0e14\u0e49\u0e40\u0e09\u0e1e\u0e32\u0e30\u0e40\u0e08\u0e32\u0e30\u0e08\u0e07\u0e21\u0e32\u0e01\u0e02\u0e36\u0e49\u0e19<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading has-ast-global-color-6-background-color has-background has-medium-font-size\">\ud83d\udd8c\ufe0f <strong>\u0e2a\u0e48\u0e27\u0e19\u0e17\u0e35\u0e48 1 \u0e15\u0e01\u0e41\u0e15\u0e48\u0e07\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07\u0e2b\u0e19\u0e49\u0e32\u0e08\u0e2d (<code>body<\/code>)<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>body { \n  font-family: 'Segoe UI', Tahoma, sans-serif; \n  background: linear-gradient(135deg, #e0c3fc 0%, #8ec5fc 100%); \n  display: flex; justify-content: center; align-items: center; min-height: 100vh;\n}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>font-family<\/code><\/strong> \u0e2a\u0e31\u0e48\u0e07\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e1f\u0e2d\u0e19\u0e15\u0e4c\u0e15\u0e31\u0e27\u0e2b\u0e19\u0e31\u0e07\u0e2a\u0e37\u0e2d\u0e43\u0e2b\u0e49\u0e14\u0e39\u0e17\u0e31\u0e19\u0e2a\u0e21\u0e31\u0e22\u0e02\u0e36\u0e49\u0e19<\/li>\n\n\n\n<li><strong><code>background: linear-gradient(...)<\/code><\/strong> \u0e40\u0e1b\u0e47\u0e19\u0e01\u0e32\u0e23\u0e2a\u0e31\u0e48\u0e07\u0e43\u0e2b\u0e49<strong>\u0e44\u0e25\u0e48\u0e2a\u0e35\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07<\/strong> \u0e08\u0e32\u0e01\u0e2a\u0e35\u0e21\u0e48\u0e27\u0e07\u0e1e\u0e32\u0e2a\u0e40\u0e17\u0e25 (<code>#e0c3fc<\/code>) \u0e44\u0e1b\u0e2b\u0e32\u0e2a\u0e35\u0e1f\u0e49\u0e32 (<code>#8ec5fc<\/code>) \u0e43\u0e19\u0e21\u0e38\u0e21\u0e40\u0e09\u0e35\u0e22\u0e07 135 \u0e2d\u0e07\u0e28\u0e32 \u0e16\u0e49\u0e32\u0e19\u0e31\u0e01\u0e28\u0e36\u0e01\u0e29\u0e32\u0e2d\u0e22\u0e32\u0e01\u0e44\u0e14\u0e49\u0e2a\u0e35\u0e2d\u0e37\u0e48\u0e19 \u0e43\u0e2b\u0e49\u0e19\u0e33\u0e23\u0e2b\u0e31\u0e2a\u0e2a\u0e35 HEX Code \u0e08\u0e32\u0e01 Google \u0e21\u0e32\u0e41\u0e1b\u0e30\u0e41\u0e17\u0e19\u0e44\u0e14\u0e49\u0e40\u0e25\u0e22 ..\u0e25\u0e2d\u0e07\u0e17\u0e33\u0e14\u0e39<\/li>\n\n\n\n<li><strong><code>display: flex; justify-content: center; align-items: center;<\/code><\/strong> 3 \u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07\u0e19\u0e35\u0e49\u0e17\u0e33\u0e07\u0e32\u0e19\u0e23\u0e48\u0e27\u0e21\u0e01\u0e31\u0e19 \u0e40\u0e1b\u0e23\u0e35\u0e22\u0e1a\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19 \u0e41\u0e21\u0e48\u0e40\u0e2b\u0e25\u0e47\u0e01\u0e17\u0e35\u0e48\u0e04\u0e2d\u0e22\u0e14\u0e39\u0e14\u0e43\u0e2b\u0e49\u0e40\u0e19\u0e37\u0e49\u0e2d\u0e2b\u0e32\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14<strong>\u0e43\u0e2b\u0e49\u0e2d\u0e22\u0e39\u0e48\u0e01\u0e36\u0e48\u0e07\u0e01\u0e25\u0e32\u0e07\u0e2b\u0e19\u0e49\u0e32\u0e08\u0e2d\u0e1e\u0e2d\u0e14\u0e35<\/strong> \u0e44\u0e21\u0e48\u0e27\u0e48\u0e32\u0e08\u0e30\u0e40\u0e1b\u0e34\u0e14\u0e1a\u0e19\u0e21\u0e37\u0e2d\u0e16\u0e37\u0e2d\u0e2b\u0e23\u0e37\u0e2d\u0e08\u0e2d\u0e04\u0e2d\u0e21\u0e17\u0e35\u0e48\u0e01\u0e27\u0e49\u0e32\u0e07\u0e41\u0e04\u0e48\u0e44\u0e2b\u0e19\u0e01\u0e47\u0e15\u0e32\u0e21<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading has-ast-global-color-6-background-color has-background has-medium-font-size\">\ud83d\udce6 <strong>\u0e2a\u0e48\u0e27\u0e19\u0e17\u0e35\u0e48 2 \u0e01\u0e25\u0e48\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e4c\u0e14\u0e2a\u0e35\u0e02\u0e32\u0e27 (<code>.card<\/code>)<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>.card { \n  background: #ffffff; \n  border-radius: 20px; \n  box-shadow: 0 10px 30px rgba(0,0,0,0.15); \n}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>border-radius: 20px;<\/code><\/strong> \u0e2a\u0e31\u0e48\u0e07\u0e43\u0e2b\u0e49<strong>\u0e21\u0e38\u0e21\u0e02\u0e2d\u0e07\u0e01\u0e25\u0e48\u0e2d\u0e07\u0e21\u0e35\u0e04\u0e27\u0e32\u0e21\u0e42\u0e04\u0e49\u0e07\u0e21\u0e19<\/strong> (\u0e22\u0e34\u0e48\u0e07\u0e15\u0e31\u0e27\u0e40\u0e25\u0e02\u0e40\u0e22\u0e2d\u0e30 \u0e22\u0e34\u0e48\u0e07\u0e42\u0e04\u0e49\u0e07\u0e21\u0e32\u0e01)<\/li>\n\n\n\n<li><strong><code>box-shadow: ...<\/code><\/strong>: \u0e2a\u0e31\u0e48\u0e07\u0e2a\u0e23\u0e49\u0e32\u0e07<strong>\u0e21\u0e34\u0e15\u0e34\u0e40\u0e07\u0e32<\/strong>\u0e43\u0e2b\u0e49\u0e01\u0e31\u0e1a\u0e01\u0e25\u0e48\u0e2d\u0e07 \u0e04\u0e48\u0e32\u0e41\u0e15\u0e48\u0e25\u0e30\u0e2a\u0e48\u0e27\u0e19 \u0e2b\u0e21\u0e32\u0e22\u0e16\u0e36\u0e07 X, Y, Blur (\u0e04\u0e27\u0e32\u0e21\u0e1f\u0e38\u0e49\u0e07) \u0e17\u0e33\u0e43\u0e2b\u0e49\u0e01\u0e32\u0e23\u0e4c\u0e14\u0e14\u0e39\u0e25\u0e2d\u0e22\u0e02\u0e36\u0e49\u0e19\u0e21\u0e32\u0e08\u0e32\u0e01\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07<\/li>\n\n\n\n<li><strong><code>rgba<\/code><\/strong> \u0e22\u0e48\u0e2d\u0e21\u0e32\u0e08\u0e32\u0e01 <strong>Red, Green, Blue, Alpha<\/strong> (\u0e04\u0e27\u0e32\u0e21\u0e42\u0e1b\u0e23\u0e48\u0e07\u0e43\u0e2a \u0e42\u0e14\u0e22 0 \u0e04\u0e37\u0e2d\u0e44\u0e21\u0e48\u0e21\u0e35\u0e40\u0e07\u0e32 \u0e41\u0e25\u0e30 1 \u0e04\u0e37\u0e2d\u0e14\u0e33\u0e21\u0e37\u0e14)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading has-ast-global-color-6-background-color has-background has-medium-font-size\">\ud83d\udd35 <strong>\u0e2a\u0e48\u0e27\u0e19\u0e17\u0e35\u0e48 3 \u0e27\u0e07\u0e01\u0e25\u0e21\u0e40\u0e01\u0e08\u0e27\u0e31\u0e14\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e37\u0e49\u0e19 (<code>.moisture-circle<\/code>)<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>.moisture-circle { \n  width: 140px; height: 140px; \n  border-radius: 50%; \n  border: 8px solid #007bff; \n}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u0e17\u0e33\u0e44\u0e21\u0e16\u0e36\u0e07\u0e40\u0e1b\u0e47\u0e19\u0e27\u0e07\u0e01\u0e25\u0e21<\/strong> \u0e40\u0e04\u0e25\u0e47\u0e14\u0e25\u0e31\u0e1a\u0e04\u0e37\u0e2d\u0e01\u0e32\u0e23\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e01\u0e23\u0e2d\u0e1a\u0e2a\u0e35\u0e48\u0e40\u0e2b\u0e25\u0e35\u0e48\u0e22\u0e21\u0e08\u0e31\u0e15\u0e38\u0e23\u0e31\u0e2a (\u0e01\u0e27\u0e49\u0e32\u0e07 140 \u0e2a\u0e39\u0e07 140) \u0e41\u0e25\u0e49\u0e27\u0e2a\u0e31\u0e48\u0e07 <code>border-radius: 50%;<\/code> \u0e02\u0e2d\u0e1a\u0e21\u0e31\u0e19\u0e08\u0e30\u0e42\u0e04\u0e49\u0e07\u0e40\u0e02\u0e49\u0e32\u0e2b\u0e32\u0e01\u0e31\u0e19\u0e08\u0e19\u0e01\u0e25\u0e32\u0e22\u0e40\u0e1b\u0e47\u0e19\u0e27\u0e07\u0e01\u0e25\u0e21\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e2a\u0e21\u0e1a\u0e39\u0e23\u0e13\u0e4c<\/li>\n\n\n\n<li><strong><code>border: 8px solid #007bff;<\/code><\/strong> \u0e2a\u0e23\u0e49\u0e32\u0e07<strong>\u0e40\u0e2a\u0e49\u0e19\u0e02\u0e2d\u0e1a\u0e04\u0e27\u0e32\u0e21\u0e2b\u0e19\u0e32 8 \u0e1e\u0e34\u0e01\u0e40\u0e0b\u0e25<\/strong> \u0e40\u0e1b\u0e47\u0e19\u0e40\u0e2a\u0e49\u0e19\u0e17\u0e36\u0e1a\u0e2a\u0e35\u0e19\u0e49\u0e33\u0e40\u0e07\u0e34\u0e19<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading has-ast-global-color-6-background-color has-background has-medium-font-size\">\ud83d\uddb1\ufe0f <strong>\u0e2a\u0e48\u0e27\u0e19\u0e17\u0e35\u0e48 4 \u0e1b\u0e38\u0e48\u0e21\u0e01\u0e14\u0e25\u0e49\u0e33\u0e46 (<code>.btn<\/code> \u0e41\u0e25\u0e30 <code>.btn:hover<\/code>)<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>.btn { \n  border-radius: 12px; \n  transition: all 0.2s; \n}\n.btn:hover { \n  transform: translateY(-3px); \n  box-shadow: 0 6px 15px rgba(0,0,0,0.2); \n}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>transition: all 0.2s;<\/code><\/strong> \u0e2a\u0e31\u0e48\u0e07\u0e43\u0e2b\u0e49\u0e1b\u0e38\u0e48\u0e21\u0e21\u0e35<strong>\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e21\u0e39\u0e17 (Animation)<\/strong> \u0e40\u0e27\u0e25\u0e32\u0e40\u0e01\u0e34\u0e14\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e41\u0e1b\u0e25\u0e07\u0e43\u0e14\u0e46 \u0e42\u0e14\u0e22\u0e43\u0e0a\u0e49\u0e40\u0e27\u0e25\u0e32 0.2 \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35<\/li>\n\n\n\n<li><strong><code>:hover<\/code><\/strong> \u0e04\u0e37\u0e2d \u0e40\u0e2b\u0e15\u0e38\u0e01\u0e32\u0e23\u0e13\u0e4c<strong>\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e40\u0e2d\u0e32\u0e40\u0e21\u0e32\u0e2a\u0e4c\u0e44\u0e1b\u0e0a\u0e35\u0e49\u0e17\u0e35\u0e48\u0e1b\u0e38\u0e48\u0e21<\/strong> \u0e2b\u0e23\u0e37\u0e2d\u0e40\u0e2d\u0e32\u0e19\u0e34\u0e49\u0e27\u0e41\u0e15\u0e30\u0e04\u0e49\u0e32\u0e07<\/li>\n\n\n\n<li><strong><code>transform: translateY(-3px);<\/code><\/strong> \u0e40\u0e21\u0e37\u0e48\u0e2d\u0e40\u0e2d\u0e32\u0e40\u0e21\u0e32\u0e2a\u0e4c\u0e0a\u0e35\u0e49\u0e1b\u0e38\u0e48\u0e21\u0e08\u0e30<strong>\u0e25\u0e2d\u0e22\u0e02\u0e22\u0e31\u0e1a\u0e02\u0e36\u0e49\u0e19\u0e44\u0e1b\u0e14\u0e49\u0e32\u0e19\u0e1a\u0e19 3 \u0e1e\u0e34\u0e01\u0e40\u0e0b\u0e25<\/strong> \u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e01\u0e31\u0e1a\u0e21\u0e35\u0e40\u0e07\u0e32\u0e42\u0e1c\u0e25\u0e48\u0e02\u0e36\u0e49\u0e19\u0e21\u0e32 \u0e17\u0e33\u0e43\u0e2b\u0e49\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49\u0e23\u0e39\u0e49\u0e2a\u0e36\u0e01\u0e27\u0e48\u0e32\u0e1b\u0e38\u0e48\u0e21\u0e19\u0e35\u0e49\u0e01\u0e14\u0e44\u0e14\u0e49\u0e08\u0e23\u0e34\u0e07\u0e41\u0e25\u0e30\u0e14\u0e39\u0e21\u0e35\u0e0a\u0e35\u0e27\u0e34\u0e15\u0e0a\u0e35\u0e27\u0e32<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\"><strong>\u0e20\u0e32\u0e23\u0e01\u0e34\u0e08\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e19\u0e31\u0e01\u0e28\u0e36\u0e01\u0e29\u0e32<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading has-ast-global-color-6-background-color has-background has-medium-font-size\">\ud83d\ude80 <strong>\u0e20\u0e32\u0e23\u0e01\u0e34\u0e08\u0e17\u0e35\u0e48 1 \u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e18\u0e35\u0e21\u0e1f\u0e32\u0e23\u0e4c\u0e21 (Color Challenge)<\/strong><\/h3>\n\n\n\n<p>\u0e43\u0e2b\u0e49\u0e19\u0e31\u0e01\u0e28\u0e36\u0e01\u0e29\u0e32\u0e25\u0e2d\u0e07\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e2a\u0e35\u0e2a\u0e31\u0e19\u0e02\u0e2d\u0e07\u0e2b\u0e19\u0e49\u0e32 Dashboard \u0e08\u0e32\u0e01\u0e2a\u0e35\u0e40\u0e14\u0e34\u0e21 \u0e43\u0e2b\u0e49\u0e01\u0e25\u0e32\u0e22\u0e40\u0e1b\u0e47\u0e19\u0e18\u0e35\u0e21\u0e43\u0e2b\u0e21\u0e48\u0e15\u0e32\u0e21\u0e17\u0e35\u0e48\u0e0a\u0e2d\u0e1a \u0e40\u0e0a\u0e48\u0e19 \u0e18\u0e35\u0e21\u0e2a\u0e27\u0e19\u0e17\u0e38\u0e40\u0e23\u0e35\u0e22\u0e19 (\u0e40\u0e19\u0e49\u0e19\u0e40\u0e02\u0e35\u0e22\u0e27-\u0e40\u0e2b\u0e25\u0e37\u0e2d\u0e07) \u0e18\u0e35\u0e21\u0e1f\u0e32\u0e23\u0e4c\u0e21\u0e15\u0e2d\u0e19\u0e01\u0e25\u0e32\u0e07\u0e04\u0e37\u0e19 \u0e40\u0e19\u0e49\u0e19\u0e19\u0e49\u0e33\u0e40\u0e07\u0e34\u0e19\u0e40\u0e02\u0e49\u0e21<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u0e42\u0e08\u0e17\u0e22\u0e4c<\/strong> \u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e2a\u0e35\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07 (<code>background<\/code>) \u0e41\u0e25\u0e30\u0e2a\u0e35\u0e27\u0e07\u0e01\u0e25\u0e21\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e37\u0e49\u0e19 (<code>moisture-circle<\/code>)<\/li>\n\n\n\n<li><strong>\u0e2a\u0e34\u0e48\u0e07\u0e17\u0e35\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e17\u0e33<\/strong> \u0e44\u0e1b\u0e17\u0e35\u0e48 Google \u0e41\u0e25\u0e49\u0e27\u0e04\u0e49\u0e19\u0e2b\u0e32\u0e04\u0e33\u0e27\u0e48\u0e32 <strong>HTML Color Picker<\/strong> \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e2a\u0e35\u0e17\u0e35\u0e48\u0e0a\u0e2d\u0e1a \u0e41\u0e25\u0e49\u0e27\u0e19\u0e33\u0e23\u0e2b\u0e31\u0e2a\u0e2a\u0e35 \u0e40\u0e0a\u0e48\u0e19 <code>#2d5a27<\/code> \u0e21\u0e32\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e43\u0e19\u0e42\u0e04\u0e49\u0e14<\/li>\n\n\n\n<li><strong>\u0e08\u0e38\u0e14\u0e17\u0e35\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e41\u0e01\u0e49<\/strong> \u0e43\u0e19\u0e2a\u0e48\u0e27\u0e19 <code>body { background: ... }<\/code> \u0e41\u0e25\u0e30 <code>.moisture-circle { border: ... }<\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading has-ast-global-color-6-background-color has-background has-medium-font-size\">\ud83d\ude80 <strong>\u0e20\u0e32\u0e23\u0e01\u0e34\u0e08\u0e17\u0e35\u0e48 2 \u0e2a\u0e23\u0e49\u0e32\u0e07\u0e40\u0e2d\u0e1f\u0e40\u0e1f\u0e01\u0e15\u0e4c\u0e01\u0e32\u0e23\u0e4c\u0e14\u0e25\u0e2d\u0e22\u0e44\u0e14\u0e49 (Shadow Master)<\/strong><\/h3>\n\n\n\n<p>\u0e2a\u0e2d\u0e19\u0e43\u0e2b\u0e49\u0e19\u0e31\u0e01\u0e28\u0e36\u0e01\u0e29\u0e32\u0e23\u0e39\u0e49\u0e08\u0e31\u0e01\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e41\u0e2a\u0e07\u0e41\u0e25\u0e30\u0e40\u0e07\u0e32 \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e17\u0e33\u0e43\u0e2b\u0e49\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a\u0e14\u0e39\u0e21\u0e35\u0e04\u0e27\u0e32\u0e21\u0e25\u0e36\u0e01\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e41\u0e2d\u0e1b\u0e1e\u0e25\u0e34\u0e40\u0e04\u0e0a\u0e31\u0e19\u0e23\u0e32\u0e04\u0e32\u0e41\u0e1e\u0e07<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u0e42\u0e08\u0e17\u0e22\u0e4c<\/strong> \u0e1b\u0e23\u0e31\u0e1a\u0e04\u0e48\u0e32 <code>box-shadow<\/code> \u0e02\u0e2d\u0e07\u0e04\u0e25\u0e32\u0e2a <code>.card<\/code> \u0e43\u0e2b\u0e49\u0e14\u0e39\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e27\u0e48\u0e32\u0e01\u0e32\u0e23\u0e4c\u0e14\u0e01\u0e33\u0e25\u0e31\u0e07\u0e25\u0e2d\u0e22\u0e2a\u0e39\u0e07\u0e02\u0e36\u0e49\u0e19\u0e21\u0e32\u0e08\u0e32\u0e01\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07\u0e08\u0e23\u0e34\u0e07\u0e46<\/li>\n\n\n\n<li><strong>\u0e04\u0e33\u0e43\u0e1a\u0e49<\/strong> \u0e25\u0e2d\u0e07\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e08\u0e32\u0e01 <code>0 10px 30px<\/code> \u0e40\u0e1b\u0e47\u0e19\u0e04\u0e48\u0e32\u0e17\u0e35\u0e48\u0e1f\u0e38\u0e49\u0e07\u0e01\u0e27\u0e48\u0e32\u0e40\u0e14\u0e34\u0e21 \u0e40\u0e0a\u0e48\u0e19 <code>0 25px 60px<\/code> \u0e41\u0e25\u0e30\u0e25\u0e2d\u0e07\u0e1b\u0e23\u0e31\u0e1a\u0e04\u0e48\u0e32 <code>rgba<\/code> \u0e15\u0e31\u0e27\u0e2a\u0e38\u0e14\u0e17\u0e49\u0e32\u0e22 (\u0e04\u0e27\u0e32\u0e21\u0e40\u0e02\u0e49\u0e21\u0e40\u0e07\u0e32) \u0e08\u0e32\u0e01 <code>0.15<\/code> \u0e40\u0e1b\u0e47\u0e19 <code>0.25<\/code><\/li>\n\n\n\n<li><strong>\u0e1c\u0e25\u0e25\u0e31\u0e1e\u0e18\u0e4c<\/strong> \u0e19\u0e31\u0e01\u0e28\u0e36\u0e01\u0e29\u0e32\u0e08\u0e30\u0e40\u0e2b\u0e47\u0e19\u0e27\u0e48\u0e32\u0e01\u0e32\u0e23\u0e4c\u0e14\u0e14\u0e39\u0e21\u0e35\u0e21\u0e34\u0e15\u0e34\u0e41\u0e25\u0e30\u0e40\u0e14\u0e48\u0e19\u0e02\u0e36\u0e49\u0e19\u0e21\u0e32\u0e17\u0e31\u0e19\u0e17\u0e35<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading has-ast-global-color-6-background-color has-background has-medium-font-size\">\ud83d\ude80 <strong>\u0e20\u0e32\u0e23\u0e01\u0e34\u0e08\u0e17\u0e35\u0e48 3 \u0e1b\u0e38\u0e48\u0e21\u0e01\u0e14\u0e21\u0e35\u0e0a\u0e35\u0e27\u0e34\u0e15 (Hover Animation)<\/strong><\/h3>\n\n\n\n<p>\u0e20\u0e32\u0e23\u0e01\u0e34\u0e08\u0e19\u0e35\u0e49\u0e08\u0e30\u0e17\u0e33\u0e43\u0e2b\u0e49\u0e19\u0e31\u0e01\u0e28\u0e36\u0e01\u0e29\u0e32\u0e15\u0e37\u0e48\u0e19\u0e40\u0e15\u0e49\u0e19\u0e21\u0e32\u0e01 \u0e40\u0e1e\u0e23\u0e32\u0e30\u0e40\u0e23\u0e32\u0e08\u0e30\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e1b\u0e38\u0e48\u0e21\u0e19\u0e34\u0e48\u0e07\u0e46\u0e43\u0e2b\u0e49\u0e02\u0e22\u0e31\u0e1a\u0e44\u0e14\u0e49 \u0e40\u0e21\u0e37\u0e48\u0e2d\u0e40\u0e2d\u0e32\u0e40\u0e21\u0e32\u0e2a\u0e4c\u0e44\u0e1b\u0e0a\u0e35\u0e49 (Hover)<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u0e42\u0e08\u0e17\u0e22\u0e4c<\/strong> \u0e40\u0e21\u0e37\u0e48\u0e2d\u0e40\u0e2d\u0e32\u0e40\u0e21\u0e32\u0e2a\u0e4c\u0e44\u0e1b\u0e0a\u0e35\u0e49\u0e17\u0e35\u0e48\u0e1b\u0e38\u0e48\u0e21 &#8220;\u0e40\u0e1b\u0e34\u0e14\u0e1b\u0e31\u0e4a\u0e21&#8221; \u0e43\u0e2b\u0e49\u0e1b\u0e38\u0e48\u0e21\u0e02\u0e22\u0e32\u0e22\u0e43\u0e2b\u0e0d\u0e48\u0e02\u0e36\u0e49\u0e19 (Scale Up) \u0e41\u0e25\u0e30\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e2a\u0e35\u0e40\u0e1b\u0e47\u0e19\u0e2a\u0e35\u0e40\u0e02\u0e35\u0e22\u0e27\u0e2a\u0e27\u0e48\u0e32\u0e07<\/li>\n\n\n\n<li><strong>\u0e2a\u0e34\u0e48\u0e07\u0e17\u0e35\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e40\u0e15\u0e34\u0e21\u0e25\u0e07\u0e43\u0e19 CSS <\/strong><code>.btn:hover { transform: scale(1.1) translateY(-5px); \/* \u0e02\u0e22\u0e32\u0e22\u0e43\u0e2b\u0e0d\u0e48\u0e02\u0e36\u0e49\u0e19 10% \u0e41\u0e25\u0e30\u0e25\u0e2d\u0e22\u0e02\u0e36\u0e49\u0e19 5px *\/ filter: brightness(1.2); \/* \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e27\u0e48\u0e32\u0e07\u0e43\u0e2b\u0e49\u0e2a\u0e35\u0e1b\u0e38\u0e48\u0e21 *\/ }<\/code><\/li>\n\n\n\n<li><strong>\u0e04\u0e27\u0e32\u0e21\u0e23\u0e39\u0e49\u0e17\u0e35\u0e48\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a<\/strong> \u0e19\u0e31\u0e01\u0e28\u0e36\u0e01\u0e29\u0e32\u0e08\u0e30\u0e44\u0e14\u0e49\u0e40\u0e02\u0e49\u0e32\u0e43\u0e08\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07 <code>transition<\/code> \u0e41\u0e25\u0e30\u0e01\u0e32\u0e23\u0e15\u0e2d\u0e1a\u0e2a\u0e19\u0e2d\u0e07\u0e02\u0e2d\u0e07\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19 (User Experience)<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading has-text-align-center has-ast-global-color-7-background-color has-background has-large-font-size\"><strong>AJAX<\/strong> \u0e40\u0e17\u0e04\u0e19\u0e34\u0e04\u0e01\u0e32\u0e23\u0e2a\u0e48\u0e07\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e42\u0e14\u0e22\u0e44\u0e21\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e23\u0e35\u0e40\u0e1f\u0e23\u0e0a\u0e2b\u0e19\u0e49\u0e32\u0e43\u0e2b\u0e21\u0e48<\/h1>\n\n\n\n<p>\u0e08\u0e32\u0e01 Project \u0e01\u0e48\u0e2d\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e19\u0e35\u0e49 \u0e19\u0e31\u0e01\u0e28\u0e36\u0e01\u0e29\u0e32\u0e08\u0e30\u0e40\u0e2b\u0e47\u0e19\u0e27\u0e48\u0e32 \u0e40\u0e23\u0e32\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e14\u0e1b\u0e38\u0e48\u0e21\u0e2d\u0e31\u0e1b\u0e40\u0e14\u0e15\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e40\u0e2d\u0e07 \u0e08\u0e36\u0e07\u0e08\u0e30\u0e40\u0e2b\u0e47\u0e19\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e41\u0e1b\u0e25\u0e07\u0e02\u0e2d\u0e07\u0e04\u0e48\u0e32\u0e15\u0e48\u0e32\u0e07\u0e46<\/p>\n\n\n\n<p>\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e43\u0e2b\u0e49\u0e2b\u0e19\u0e49\u0e32\u0e08\u0e2d <strong>Dashboard<\/strong> \u0e2d\u0e31\u0e1b\u0e40\u0e14\u0e15\u0e04\u0e48\u0e32\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e37\u0e49\u0e19\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34\u0e42\u0e14\u0e22\u0e17\u0e35\u0e48\u0e19\u0e31\u0e01\u0e28\u0e36\u0e01\u0e29\u0e32\u0e44\u0e21\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e14 Refresh \u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a\u0e40\u0e2d\u0e07\u0e19\u0e31\u0e49\u0e19\u0e21\u0e35 2 \u0e27\u0e34\u0e18\u0e35\u0e2b\u0e25\u0e31\u0e01\u0e46 \u0e41\u0e15\u0e48\u0e27\u0e34\u0e18\u0e35\u0e17\u0e35\u0e48\u0e14\u0e39\u0e40\u0e1b\u0e47\u0e19\u0e21\u0e37\u0e2d\u0e2d\u0e32\u0e0a\u0e35\u0e1e\u0e41\u0e25\u0e30\u0e19\u0e34\u0e22\u0e21\u0e17\u0e35\u0e48\u0e2a\u0e38\u0e14\u0e43\u0e19\u0e2a\u0e32\u0e22\u0e07\u0e32\u0e19\u0e44\u0e2d\u0e17\u0e35 \u0e04\u0e37\u0e2d\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49 <strong>AJAX <\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\"><strong>\u0e40\u0e1b\u0e23\u0e35\u0e22\u0e1a\u0e40\u0e17\u0e35\u0e22\u0e1a <\/strong><strong>Meta Refresh vs AJAX<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"2112\" height=\"1152\" src=\"https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/Meta-Refresh-vs-AJAX.jpg\" alt=\"\u0e01\u0e32\u0e23\u0e17\u0e33\u0e07\u0e32\u0e19\u0e02\u0e2d\u0e07 Meta Refresh \u0e41\u0e25\u0e30 AJAX\/Fetch \u0e21\u0e35\u0e04\u0e27\u0e32\u0e21\u0e41\u0e15\u0e01\u0e15\u0e48\u0e32\u0e07\u0e01\u0e31\u0e19\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e0a\u0e31\u0e14\u0e40\u0e08\u0e19\u0e17\u0e31\u0e49\u0e07\u0e43\u0e19\u0e14\u0e49\u0e32\u0e19\u0e1b\u0e23\u0e30\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e20\u0e32\u0e1e\u0e41\u0e25\u0e30\u0e1b\u0e23\u0e30\u0e2a\u0e1a\u0e01\u0e32\u0e23\u0e13\u0e4c\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49 \u0e42\u0e14\u0e22 Meta Refresh \u0e40\u0e1b\u0e47\u0e19\u0e27\u0e34\u0e18\u0e35\u0e41\u0e1a\u0e1a\u0e14\u0e31\u0e49\u0e07\u0e40\u0e14\u0e34\u0e21\u0e17\u0e35\u0e48\u0e40\u0e02\u0e35\u0e22\u0e19\u0e07\u0e48\u0e32\u0e22\u0e40\u0e1e\u0e35\u0e22\u0e07\u0e1a\u0e23\u0e23\u0e17\u0e31\u0e14\u0e40\u0e14\u0e35\u0e22\u0e27 \u0e40\u0e2b\u0e21\u0e32\u0e30\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e07\u0e32\u0e19\u0e23\u0e30\u0e14\u0e31\u0e1a\u0e40\u0e1a\u0e37\u0e49\u0e2d\u0e07\u0e15\u0e49\u0e19 \u0e41\u0e15\u0e48\u0e21\u0e35\u0e02\u0e49\u0e2d\u0e40\u0e2a\u0e35\u0e22\u0e04\u0e37\u0e2d\u0e15\u0e49\u0e2d\u0e07\u0e42\u0e2b\u0e25\u0e14\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a\u0e23\u0e27\u0e21\u0e16\u0e36\u0e07\u0e44\u0e1f\u0e25\u0e4c\u0e17\u0e23\u0e31\u0e1e\u0e22\u0e32\u0e01\u0e23\u0e15\u0e48\u0e32\u0e07\u0e46 \u0e43\u0e2b\u0e21\u0e48\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14\u0e17\u0e38\u0e01\u0e04\u0e23\u0e31\u0e49\u0e07\u0e17\u0e35\u0e48\u0e15\u0e31\u0e49\u0e07\u0e40\u0e27\u0e25\u0e32\u0e44\u0e27\u0e49 \u0e2a\u0e48\u0e07\u0e1c\u0e25\u0e43\u0e2b\u0e49\u0e2b\u0e19\u0e49\u0e32\u0e08\u0e2d\u0e01\u0e23\u0e30\u0e1e\u0e23\u0e34\u0e1a\u0e41\u0e25\u0e30\u0e2a\u0e34\u0e49\u0e19\u0e40\u0e1b\u0e25\u0e37\u0e2d\u0e07\u0e1b\u0e23\u0e34\u0e21\u0e32\u0e13\u0e2d\u0e34\u0e19\u0e40\u0e17\u0e2d\u0e23\u0e4c\u0e40\u0e19\u0e47\u0e15 \u0e43\u0e19\u0e17\u0e32\u0e07\u0e15\u0e23\u0e07\u0e01\u0e31\u0e19\u0e02\u0e49\u0e32\u0e21 AJAX \u0e2b\u0e23\u0e37\u0e2d Fetch \u0e0b\u0e36\u0e48\u0e07\u0e40\u0e1b\u0e47\u0e19\u0e21\u0e32\u0e15\u0e23\u0e10\u0e32\u0e19\u0e02\u0e2d\u0e07\u0e2d\u0e38\u0e15\u0e2a\u0e32\u0e2b\u0e01\u0e23\u0e23\u0e21\u0e44\u0e2d\u0e17\u0e35\u0e43\u0e19\u0e1b\u0e31\u0e08\u0e08\u0e38\u0e1a\u0e31\u0e19 \u0e41\u0e21\u0e49\u0e08\u0e30\u0e21\u0e35\u0e04\u0e27\u0e32\u0e21\u0e0b\u0e31\u0e1a\u0e0b\u0e49\u0e2d\u0e19\u0e43\u0e19\u0e01\u0e32\u0e23\u0e40\u0e02\u0e35\u0e22\u0e19\u0e42\u0e04\u0e49\u0e14\u0e21\u0e32\u0e01\u0e02\u0e36\u0e49\u0e19\u0e40\u0e1e\u0e23\u0e32\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e43\u0e0a\u0e49 JavaScript \u0e41\u0e15\u0e48\u0e01\u0e47\u0e0a\u0e48\u0e27\u0e22\u0e41\u0e01\u0e49\u0e1b\u0e31\u0e0d\u0e2b\u0e32\u0e14\u0e31\u0e07\u0e01\u0e25\u0e48\u0e32\u0e27\u0e44\u0e14\u0e49\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e2a\u0e21\u0e1a\u0e39\u0e23\u0e13\u0e4c\u0e41\u0e1a\u0e1a \u0e42\u0e14\u0e22\u0e23\u0e30\u0e1a\u0e1a\u0e08\u0e30\u0e42\u0e2b\u0e25\u0e14\u0e41\u0e25\u0e30\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e04\u0e48\u0e32\u0e40\u0e09\u0e1e\u0e32\u0e30\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e17\u0e35\u0e48\u0e08\u0e33\u0e40\u0e1b\u0e47\u0e19\u0e15\u0e49\u0e2d\u0e07\u0e2d\u0e31\u0e1b\u0e40\u0e14\u0e15\u0e40\u0e17\u0e48\u0e32\u0e19\u0e31\u0e49\u0e19 \u0e17\u0e33\u0e43\u0e2b\u0e49\u0e01\u0e32\u0e23\u0e41\u0e2a\u0e14\u0e07\u0e1c\u0e25\u0e21\u0e35\u0e04\u0e27\u0e32\u0e21\u0e25\u0e37\u0e48\u0e19\u0e44\u0e2b\u0e25 \u0e1b\u0e23\u0e30\u0e2b\u0e22\u0e31\u0e14\u0e2d\u0e34\u0e19\u0e40\u0e17\u0e2d\u0e23\u0e4c\u0e40\u0e19\u0e47\u0e15 \u0e41\u0e25\u0e30\u0e44\u0e21\u0e48\u0e21\u0e35\u0e2d\u0e32\u0e01\u0e32\u0e23\u0e2b\u0e19\u0e49\u0e32\u0e08\u0e2d\u0e01\u0e23\u0e30\u0e1e\u0e23\u0e34\u0e1a\u0e21\u0e32\u0e01\u0e27\u0e19\u0e43\u0e08\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\" class=\"wp-image-1490\" style=\"aspect-ratio:1.8333731200763905;width:1048px;height:auto\" srcset=\"https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/Meta-Refresh-vs-AJAX.jpg 2112w, https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/Meta-Refresh-vs-AJAX-300x164.jpg 300w, https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/Meta-Refresh-vs-AJAX-1024x559.jpg 1024w, https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/Meta-Refresh-vs-AJAX-768x419.jpg 768w, https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/Meta-Refresh-vs-AJAX-1536x838.jpg 1536w, https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/Meta-Refresh-vs-AJAX-2048x1117.jpg 2048w\" sizes=\"auto, (max-width: 2112px) 100vw, 2112px\" \/><\/figure>\n\n\n\n<p><strong>AJAX<\/strong> (\u0e40\u0e2d-\u0e41\u0e08\u0e47\u0e01\u0e0b\u0e4c) \u0e22\u0e48\u0e2d\u0e21\u0e32\u0e08\u0e32\u0e01 <strong>Asynchronous JavaScript and XML<\/strong> \u0e04\u0e37\u0e2d <strong>\u0e40\u0e17\u0e04\u0e19\u0e34\u0e04\u0e01\u0e32\u0e23\u0e41\u0e2d\u0e1a\u0e2a\u0e48\u0e07\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e44\u0e1b\u0e21\u0e32\u0e2b\u0e25\u0e31\u0e07\u0e1a\u0e49\u0e32\u0e19 \u0e42\u0e14\u0e22\u0e17\u0e35\u0e48\u0e44\u0e21\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e23\u0e35\u0e40\u0e1f\u0e23\u0e0a\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a\u0e43\u0e2b\u0e21\u0e48\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e19\u0e49\u0e32<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\">\u0e2a\u0e34\u0e48\u0e07\u0e17\u0e35\u0e48\u0e1b\u0e23\u0e31\u0e1a\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e43\u0e19\u0e42\u0e04\u0e49\u0e14<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u0e2a\u0e23\u0e49\u0e32\u0e07\u0e40\u0e2a\u0e49\u0e19\u0e17\u0e32\u0e07 (<\/strong><strong>Route) \u0e43\u0e2b\u0e21\u0e48 <code>\/data<\/code><\/strong> \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e2a\u0e48\u0e07\u0e41\u0e04\u0e48\u0e15\u0e31\u0e27\u0e40\u0e25\u0e02\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e37\u0e49\u0e19\u0e2d\u0e2d\u0e01\u0e44\u0e1b (\u0e44\u0e21\u0e48\u0e2a\u0e48\u0e07\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e19\u0e49\u0e32)<\/li>\n\n\n\n<li><strong>\u0e40\u0e1e\u0e34\u0e48\u0e21 <\/strong><strong>JavaScript \u0e43\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a<\/strong> \u0e2a\u0e31\u0e48\u0e07\u0e43\u0e2b\u0e49 Browser \u0e44\u0e1b\u0e14\u0e36\u0e07\u0e04\u0e48\u0e32\u0e08\u0e32\u0e01 <code>\/data<\/code> \u0e17\u0e38\u0e01\u0e46 2 \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\">\u0e42\u0e04\u0e49\u0e14\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;WiFi.h&gt;\n#include &lt;WebServer.h&gt;\n\n\/\/ --- 1. \u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32 WiFi \u0e41\u0e25\u0e30\u0e02\u0e32\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c ---\nconst char* ssid = \"\u0e0a\u0e37\u0e48\u0e2dWiFi_\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\";\nconst char* password = \"\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19_\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\";\n\nconst int relayPin = 2;   \/\/ \u0e02\u0e32 Relay\nconst int soilPin = 34;   \/\/ \u0e02\u0e32\u0e40\u0e0b\u0e19\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e14\u0e34\u0e19\nbool pumpStatus = false;  \/\/ \u0e15\u0e31\u0e27\u0e41\u0e1b\u0e23\u0e40\u0e01\u0e47\u0e1a\u0e2a\u0e16\u0e32\u0e19\u0e30\u0e40\u0e1b\u0e34\u0e14\/\u0e1b\u0e34\u0e14\n\nWebServer server(80);\n\n\/\/ --- \u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19\u0e22\u0e48\u0e2d\u0e22\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e2d\u0e48\u0e32\u0e19\u0e04\u0e48\u0e32\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e37\u0e49\u0e19 \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e44\u0e21\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e40\u0e02\u0e35\u0e22\u0e19\u0e42\u0e04\u0e49\u0e14\u0e0b\u0e49\u0e33 ---\nint getMoisturePercent() {\n  int rawSoil = analogRead(soilPin);\n  int percent = map(rawSoil, 4095, 0, 0, 100);\n  if (percent &lt; 0) percent = 0;\n  if (percent &gt; 100) percent = 100;\n  return percent;\n}\n\n\/\/ --- \ud83c\udf1f 2. \u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19 API \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e15\u0e2d\u0e1a\u0e04\u0e48\u0e32\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e37\u0e49\u0e19\u0e01\u0e25\u0e31\u0e1a\u0e44\u0e1b\u0e43\u0e2b\u0e49 AJAX ---\nvoid handleGetMoisture() {\n  int currentMoisture = getMoisturePercent();\n  \/\/ \u0e2a\u0e48\u0e07\u0e04\u0e48\u0e32\u0e01\u0e25\u0e31\u0e1a\u0e44\u0e1b\u0e40\u0e1b\u0e47\u0e19 \"\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e18\u0e23\u0e23\u0e21\u0e14\u0e32\" (text\/plain) \u0e21\u0e35\u0e41\u0e04\u0e48\u0e15\u0e31\u0e27\u0e40\u0e25\u0e02\u0e40\u0e1e\u0e35\u0e22\u0e27\u0e46\n  server.send(200, \"text\/plain\", String(currentMoisture));\n}\n\n\/\/ --- 3. \u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e2b\u0e25\u0e31\u0e01 (\/) ---\nvoid handleRoot() {\n  int initialMoisture = getMoisturePercent();\n\n  String html = \"&lt;!DOCTYPE html&gt;&lt;html lang='th'&gt;\";\n  html += \"&lt;head&gt;&lt;meta charset='UTF-8'&gt;\";\n  html += \"&lt;meta name='viewport' content='width=device-width, initial-scale=1'&gt;\";\n  html += \"&lt;title&gt;Smart Farm Dashboard&lt;\/title&gt;\";\n  html += \"&lt;style&gt;\";\n  \/\/ \u0e15\u0e01\u0e41\u0e15\u0e48\u0e07\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07\u0e41\u0e25\u0e30\u0e01\u0e32\u0e23\u0e4c\u0e14\n  html += \"body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background: linear-gradient(135deg, #e0c3fc 0%, #8ec5fc 100%); margin: 0; display: flex; justify-content: center; align-items: center; min-height: 100vh; color: #333; }\";\n  html += \".card { background: #ffffff; padding: 40px 30px; border-radius: 20px; box-shadow: 0 10px 30px rgba(0,0,0,0.15); text-align: center; max-width: 400px; width: 90%; }\";\n  html += \"h1 { margin-top: 0; color: #2c3e50; font-size: 26px; margin-bottom: 25px; }\";\n  html += \".moisture-circle { width: 140px; height: 140px; border-radius: 50%; border: 8px solid #007bff; display: flex; flex-direction: column; justify-content: center; align-items: center; margin: 0 auto 25px auto; box-shadow: 0 4px 15px rgba(0,123,255,0.2); }\";\n  html += \".moisture-val { font-size: 38px; font-weight: bold; color: #007bff; }\";\n  html += \".moisture-label { font-size: 14px; color: #666; }\";\n  html += \".status-box { padding: 12px; border-radius: 10px; background: #f8f9fa; margin-bottom: 25px; font-size: 16px; font-weight: bold; }\";\n  html += \".on { color: #28a745; } .off { color: #dc3545; }\";\n  html += \".btn-group { display: flex; gap: 15px; }\";\n  html += \".btn { flex: 1; padding: 15px; font-size: 16px; font-weight: bold; color: white; border-radius: 12px; text-decoration: none; transition: all 0.2s; border: none; cursor: pointer; display: flex; justify-content: center; align-items: center; gap: 8px; }\";\n  html += \".btn:hover { transform: translateY(-3px); box-shadow: 0 6px 15px rgba(0,0,0,0.2); }\";\n  html += \".btn-on { background: #28a745; } .btn-off { background: #dc3545; }\";\n  html += \"&lt;\/style&gt;&lt;\/head&gt;&lt;body&gt;\";\n\n  html += \"&lt;div class='card'&gt;\";\n  html += \"&lt;h1&gt;\ud83c\udf31 Farm Dashboard&lt;\/h1&gt;\";\n  \n  \/\/ \ud83c\udf1f \u0e08\u0e38\u0e14\u0e2a\u0e33\u0e04\u0e31\u0e0d\u0e17\u0e35\u0e48 1 \u0e40\u0e15\u0e34\u0e21 id='moistureValue' \u0e40\u0e02\u0e49\u0e32\u0e44\u0e1b \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e43\u0e2b\u0e49 JavaScript \u0e2b\u0e32\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07\u0e40\u0e08\u0e2d\n  html += \"&lt;div class='moisture-circle'&gt;\";\n  html += \"&lt;span class='moisture-val' id='moistureValue'&gt;\" + String(initialMoisture) + \"%&lt;\/span&gt;\";\n  html += \"&lt;span class='moisture-label'&gt;\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e37\u0e49\u0e19\u0e14\u0e34\u0e19&lt;\/span&gt;\";\n  html += \"&lt;\/div&gt;\";\n  \n  html += \"&lt;div class='status-box'&gt;\u0e2a\u0e16\u0e32\u0e19\u0e30\u0e1b\u0e31\u0e4a\u0e21\u0e19\u0e49\u0e33: \";\n  if(pumpStatus) {\n    html += \"&lt;span class='on'&gt;\ud83d\udfe2 \u0e01\u0e33\u0e25\u0e31\u0e07\u0e17\u0e33\u0e07\u0e32\u0e19&lt;\/span&gt;\";\n  } else {\n    html += \"&lt;span class='off'&gt;\ud83d\udd34 \u0e2b\u0e22\u0e38\u0e14\u0e17\u0e33\u0e07\u0e32\u0e19&lt;\/span&gt;\";\n  }\n  html += \"&lt;\/div&gt;\";\n  \n  html += \"&lt;div class='btn-group'&gt;\";\n  html += \"&lt;a href='\/on' class='btn btn-on'&gt;\ud83d\udca7 \u0e40\u0e1b\u0e34\u0e14\u0e1b\u0e31\u0e4a\u0e21&lt;\/a&gt;\";\n  html += \"&lt;a href='\/off' class='btn btn-off'&gt;\ud83d\uded1 \u0e1b\u0e34\u0e14\u0e1b\u0e31\u0e4a\u0e21&lt;\/a&gt;\";\n  html += \"&lt;\/div&gt;\";\n  \n  html += \"&lt;\/div&gt;\";\n\n  \/\/ \ud83c\udf1f \u0e08\u0e38\u0e14\u0e2a\u0e33\u0e04\u0e31\u0e0d\u0e17\u0e35\u0e48 2: \u0e1d\u0e31\u0e07\u0e42\u0e04\u0e49\u0e14 JavaScript (AJAX) \u0e25\u0e07\u0e44\u0e1b\u0e17\u0e49\u0e32\u0e22\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a\n  html += \"&lt;script&gt;\";\n  html += \"setInterval(function() {\";\n  html += \"  fetch('\/getMoisture')\";                 \/\/ \u0e2a\u0e31\u0e48\u0e07\u0e43\u0e2b\u0e49\u0e44\u0e1b\u0e14\u0e36\u0e07\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e08\u0e32\u0e01\u0e40\u0e2a\u0e49\u0e19\u0e17\u0e32\u0e07 \/getMoisture\n  html += \"    .then(response =&gt; response.text())\";  \/\/ \u0e40\u0e21\u0e37\u0e48\u0e2d\u0e44\u0e14\u0e49\u0e04\u0e33\u0e15\u0e2d\u0e1a\u0e21\u0e32 \u0e43\u0e2b\u0e49\u0e41\u0e1b\u0e25\u0e07\u0e40\u0e1b\u0e47\u0e19\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e18\u0e23\u0e23\u0e21\u0e14\u0e32\n  html += \"    .then(data =&gt; {\";\n  html += \"      document.getElementById('moistureValue').innerText = data + '%';\"; \/\/ \u0e40\u0e2d\u0e32\u0e15\u0e31\u0e27\u0e40\u0e25\u0e02\u0e43\u0e2b\u0e21\u0e48\u0e44\u0e1b\u0e41\u0e1b\u0e30\u0e17\u0e31\u0e1a\u0e17\u0e35\u0e48 id=moistureValue\n  html += \"    });\";\n  html += \"}, 2000);\";                               \/\/ \u0e27\u0e19\u0e25\u0e39\u0e1b\u0e17\u0e33\u0e0b\u0e49\u0e33\u0e17\u0e38\u0e01\u0e46 2000 \u0e21\u0e34\u0e25\u0e25\u0e34\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35 (2 \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35)\n  html += \"&lt;\/script&gt;\";\n\n  html += \"&lt;\/body&gt;&lt;\/html&gt;\";\n\n  server.send(200, \"text\/html\", html);\n}\n\n\/\/ --- 4. \u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19\u0e40\u0e2a\u0e49\u0e19\u0e17\u0e32\u0e07 \/on ---\nvoid handlePumpOn() {\n  digitalWrite(relayPin, HIGH);\n  pumpStatus = true;\n  server.sendHeader(\"Location\", \"\/\");\n  server.send(303); \n}\n\n\/\/ --- 5. \u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19\u0e40\u0e2a\u0e49\u0e19\u0e17\u0e32\u0e07 \/off ---\nvoid handlePumpOff() {\n  digitalWrite(relayPin, LOW);\n  pumpStatus = false;\n  server.sendHeader(\"Location\", \"\/\");\n  server.send(303);\n}\n\nvoid setup() {\n  Serial.begin(115200);\n  pinMode(relayPin, OUTPUT);\n  digitalWrite(relayPin, LOW);\n\n  WiFi.begin(ssid, password);\n  while (WiFi.status() != WL_CONNECTED) { \n    delay(500); \n    Serial.print(\".\"); \n  }\n  \n  Serial.println(\"\\nReady! IP \" + WiFi.localIP().toString());\n\n  \/\/ \u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19 (Routing)\n  server.on(\"\/\", handleRoot);\n  server.on(\"\/on\", handlePumpOn);\n  server.on(\"\/off\", handlePumpOff);\n  \/\/ \ud83c\udf1f \u0e08\u0e38\u0e14\u0e2a\u0e33\u0e04\u0e31\u0e0d\u0e17\u0e35\u0e48 3 \u0e40\u0e1b\u0e34\u0e14\u0e40\u0e2a\u0e49\u0e19\u0e17\u0e32\u0e07\u0e43\u0e2b\u0e21\u0e48\u0e43\u0e2b\u0e49 JavaScript \u0e27\u0e34\u0e48\u0e07\u0e40\u0e02\u0e49\u0e32\u0e21\u0e32\u0e02\u0e2d\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e44\u0e14\u0e49\n  server.on(\"\/getMoisture\", handleGetMoisture);\n\n  server.begin();\n}\n\nvoid loop() {\n  server.handleClient();\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\"><strong>\ud83d\udca1 \u0e08\u0e38\u0e14\u0e17\u0e35\u0e48\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e02\u0e49\u0e32\u0e21\u0e32<\/strong><\/h2>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>\u0e40\u0e2d\u0e32\u0e1b\u0e38\u0e48\u0e21 &#8220;\u0e01\u0e14\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e2d\u0e31\u0e1b\u0e40\u0e14\u0e15&#8221; \u0e2d\u0e2d\u0e01\u0e44\u0e1b\u0e41\u0e25\u0e49\u0e27<\/strong> \u0e40\u0e1e\u0e23\u0e32\u0e30\u0e15\u0e2d\u0e19\u0e19\u0e35\u0e49\u0e40\u0e23\u0e32\u0e43\u0e0a\u0e49 JavaScript (AJAX) \u0e17\u0e33\u0e07\u0e32\u0e19\u0e41\u0e17\u0e19\u0e40\u0e23\u0e32\u0e17\u0e38\u0e01\u0e46 2 \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35\u0e41\u0e1a\u0e1a\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34 \u0e2b\u0e19\u0e49\u0e32\u0e08\u0e2d\u0e08\u0e30\u0e44\u0e21\u0e48\u0e01\u0e23\u0e30\u0e1e\u0e23\u0e34\u0e1a\u0e2d\u0e35\u0e01\u0e15\u0e48\u0e2d\u0e44\u0e1b<\/li>\n\n\n\n<li><strong>\u0e01\u0e32\u0e23\u0e15\u0e31\u0e49\u0e07\u0e0a\u0e37\u0e48\u0e2d\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22 (<code>id='moistureValue'<\/code>)<\/strong> \u0e43\u0e19\u0e20\u0e32\u0e29\u0e32 HTML \u0e16\u0e49\u0e32\u0e40\u0e23\u0e32\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e43\u0e2b\u0e49 JavaScript \u0e21\u0e32\u0e17\u0e33\u0e07\u0e32\u0e19\u0e01\u0e31\u0e1a\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e15\u0e23\u0e07\u0e44\u0e2b\u0e19 \u0e40\u0e23\u0e32\u0e15\u0e49\u0e2d\u0e07\u0e15\u0e34\u0e14\u0e1b\u0e49\u0e32\u0e22\u0e0a\u0e37\u0e48\u0e2d (<code>id<\/code>) \u0e44\u0e27\u0e49\u0e15\u0e23\u0e07\u0e19\u0e31\u0e49\u0e19\u0e01\u0e48\u0e2d\u0e19 \u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e40\u0e1b\u0e47\u0e19\u0e01\u0e32\u0e23\u0e1a\u0e2d\u0e01\u0e1e\u0e34\u0e01\u0e31\u0e14\u0e43\u0e2b\u0e49 JavaScript \u0e23\u0e39\u0e49\u0e27\u0e48\u0e32\u0e15\u0e49\u0e2d\u0e07\u0e40\u0e2d\u0e32\u0e15\u0e31\u0e27\u0e40\u0e25\u0e02\u0e43\u0e2b\u0e21\u0e48\u0e44\u0e1b\u0e17\u0e31\u0e1a\u0e15\u0e23\u0e07\u0e08\u0e38\u0e14\u0e44\u0e2b\u0e19<\/li>\n\n\n\n<li><strong>\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07 <code>fetch(...)<\/code><\/strong> \u0e40\u0e1b\u0e47\u0e19\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07 JavaScript \u0e2a\u0e21\u0e31\u0e22\u0e43\u0e2b\u0e21\u0e48\u0e17\u0e35\u0e48\u0e43\u0e0a\u0e49\u0e17\u0e33 AJAX \u0e21\u0e31\u0e19\u0e08\u0e30\u0e44\u0e1b\u0e40\u0e23\u0e35\u0e22\u0e01\u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19 <code>handleGetMoisture<\/code> \u0e17\u0e35\u0e48\u0e1a\u0e2d\u0e23\u0e4c\u0e14 ESP32 \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e02\u0e2d\u0e23\u0e31\u0e1a\u0e40\u0e09\u0e1e\u0e32\u0e30\u0e04\u0e48\u0e32\u0e15\u0e31\u0e27\u0e40\u0e25\u0e02\u0e01\u0e25\u0e31\u0e1a\u0e21\u0e32\u0e41\u0e2a\u0e14\u0e07\u0e1c\u0e25<\/li>\n<\/ol>\n\n\n\n<h1 class=\"wp-block-heading has-text-align-center has-ast-global-color-7-background-color has-background has-large-font-size\">\u0e2d\u0e31\u0e1b\u0e40\u0e01\u0e23\u0e14 Web Dashboard \u0e43\u0e2b\u0e49\u0e40\u0e02\u0e49\u0e32\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e07\u0e48\u0e32\u0e22\u0e02\u0e36\u0e49\u0e19 \u0e14\u0e49\u0e27\u0e22 Static IP \u0e41\u0e25\u0e30 mDNS<\/h1>\n\n\n\n<p>\u0e15\u0e2d\u0e19\u0e19\u0e35\u0e49\u0e19\u0e31\u0e01\u0e28\u0e36\u0e01\u0e29\u0e32\u0e17\u0e33\u0e23\u0e30\u0e1a\u0e1a Smart Farm \u0e17\u0e35\u0e48\u0e21\u0e35\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a\u0e2a\u0e27\u0e22\u0e07\u0e32\u0e21\u0e41\u0e25\u0e30\u0e2a\u0e31\u0e48\u0e07\u0e07\u0e32\u0e19\u0e1c\u0e48\u0e32\u0e19\u0e21\u0e37\u0e2d\u0e16\u0e37\u0e2d\u0e44\u0e14\u0e49\u0e41\u0e25\u0e49\u0e27 \u0e41\u0e15\u0e48\u0e43\u0e19\u0e42\u0e25\u0e01\u0e02\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e17\u0e33\u0e07\u0e32\u0e19\u0e08\u0e23\u0e34\u0e07 \u0e2b\u0e32\u0e01\u0e15\u0e49\u0e2d\u0e07\u0e21\u0e32\u0e40\u0e1b\u0e34\u0e14\u0e04\u0e2d\u0e21\u0e1e\u0e34\u0e27\u0e40\u0e15\u0e2d\u0e23\u0e4c\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e14\u0e39\u0e2b\u0e19\u0e49\u0e32\u0e08\u0e2d Serial Monitor \u0e27\u0e48\u0e32 <strong>&#8220;\u0e27\u0e31\u0e19\u0e19\u0e35\u0e49\u0e1a\u0e2d\u0e23\u0e4c\u0e14 ESP32 \u0e44\u0e14\u0e49 IP \u0e2d\u0e30\u0e44\u0e23\u0e44\u0e1b\u0e19\u0e30&#8221;<\/strong> \u0e16\u0e37\u0e2d\u0e40\u0e1b\u0e47\u0e19\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e17\u0e35\u0e48\u0e1b\u0e27\u0e14\u0e2b\u0e31\u0e27\u0e21\u0e32\u0e01<\/p>\n\n\n\n<p>\u0e40\u0e23\u0e32\u0e08\u0e30\u0e21\u0e32\u0e1b\u0e25\u0e14\u0e25\u0e47\u0e2d\u0e01 <strong>\u0e40\u0e17\u0e04\u0e19\u0e34\u0e04\u0e23\u0e30\u0e14\u0e31\u0e1a\u0e42\u0e1b\u0e23<\/strong> \u0e17\u0e35\u0e48\u0e08\u0e30\u0e17\u0e33\u0e43\u0e2b\u0e49\u0e42\u0e1b\u0e23\u0e40\u0e08\u0e01\u0e15\u0e4c\u0e02\u0e2d\u0e07\u0e40\u0e23\u0e32\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e07\u0e48\u0e32\u0e22\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e2a\u0e21\u0e32\u0e23\u0e4c\u0e17\u0e42\u0e2e\u0e21\u0e23\u0e32\u0e04\u0e32\u0e41\u0e1e\u0e07\u0e01\u0e31\u0e19<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\">\ud83c\udd70\ufe0f \u0e40\u0e17\u0e04\u0e19\u0e34\u0e04\u0e17\u0e35\u0e48 1 Static IP (\u0e01\u0e32\u0e23\u0e25\u0e47\u0e2d\u0e04\u0e40\u0e25\u0e02 IP \u0e43\u0e2b\u0e49\u0e16\u0e32\u0e27\u0e23)<\/h2>\n\n\n\n<p>\u0e42\u0e14\u0e22\u0e1b\u0e01\u0e15\u0e34\u0e41\u0e25\u0e49\u0e27 Router \u0e2d\u0e34\u0e19\u0e40\u0e17\u0e2d\u0e23\u0e4c\u0e40\u0e19\u0e47\u0e15\u0e17\u0e35\u0e48\u0e1a\u0e49\u0e32\u0e19\u0e40\u0e23\u0e32\u0e08\u0e30\u0e21\u0e35\u0e23\u0e30\u0e1a\u0e1a\u0e17\u0e35\u0e48\u0e40\u0e23\u0e35\u0e22\u0e01\u0e27\u0e48\u0e32 <strong>DHCP<\/strong> \u0e0b\u0e36\u0e48\u0e07\u0e17\u0e33\u0e2b\u0e19\u0e49\u0e32\u0e17\u0e35\u0e48\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e1e\u0e19\u0e31\u0e01\u0e07\u0e32\u0e19\u0e15\u0e49\u0e2d\u0e19\u0e23\u0e31\u0e1a\u0e17\u0e35\u0e48\u0e04\u0e2d\u0e22\u0e41\u0e08\u0e01\u0e1b\u0e49\u0e32\u0e22\u0e40\u0e25\u0e02\u0e17\u0e35\u0e48 (IP Address) \u0e43\u0e2b\u0e21\u0e48\u0e43\u0e2b\u0e49\u0e01\u0e31\u0e1a\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e17\u0e38\u0e01\u0e15\u0e31\u0e27\u0e17\u0e35\u0e48\u0e40\u0e1e\u0e34\u0e48\u0e07\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d\u0e40\u0e02\u0e49\u0e32\u0e21\u0e32 \u0e19\u0e31\u0e48\u0e19\u0e41\u0e1b\u0e25\u0e27\u0e48\u0e32&#8230; \u0e16\u0e49\u0e32\u0e27\u0e31\u0e19\u0e19\u0e35\u0e49\u0e1a\u0e49\u0e32\u0e19\u0e40\u0e23\u0e32\u0e44\u0e1f\u0e14\u0e31\u0e1a \u0e2b\u0e23\u0e37\u0e2d\u0e40\u0e23\u0e32\u0e16\u0e2d\u0e14\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e1a\u0e2d\u0e23\u0e4c\u0e14 ESP32 \u0e41\u0e25\u0e49\u0e27\u0e40\u0e2a\u0e35\u0e22\u0e1a\u0e43\u0e2b\u0e21\u0e48 \u0e1a\u0e2d\u0e23\u0e4c\u0e14\u0e02\u0e2d\u0e07\u0e40\u0e23\u0e32\u0e2d\u0e32\u0e08\u0e08\u0e30\u0e42\u0e14\u0e19\u0e22\u0e49\u0e32\u0e22\u0e44\u0e1b\u0e2d\u0e22\u0e39\u0e48\u0e40\u0e25\u0e02\u0e17\u0e35\u0e48\u0e43\u0e2b\u0e21\u0e48\u0e41\u0e17\u0e19 \u0e17\u0e33\u0e43\u0e2b\u0e49\u0e40\u0e23\u0e32\u0e40\u0e02\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a\u0e1c\u0e48\u0e32\u0e19\u0e40\u0e25\u0e02\u0e40\u0e14\u0e34\u0e21\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49<\/p>\n\n\n\n<p><strong>\u0e41\u0e01\u0e49\u0e14\u0e49\u0e27\u0e22 (Static IP)<\/strong> \u0e40\u0e23\u0e32\u0e08\u0e30\u0e40\u0e02\u0e35\u0e22\u0e19\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07\u0e1a\u0e2d\u0e01 Router \u0e44\u0e1b\u0e40\u0e25\u0e22\u0e27\u0e48\u0e32 &#8220;\u0e09\u0e31\u0e19\u0e02\u0e2d\u0e08\u0e2d\u0e07\u0e40\u0e25\u0e02\u0e19\u0e35\u0e49 \u0e2b\u0e49\u0e32\u0e21\u0e40\u0e2d\u0e32\u0e44\u0e1b\u0e41\u0e08\u0e01\u0e43\u0e2b\u0e49\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e2d\u0e37\u0e48\u0e19&#8221; \u0e17\u0e33\u0e43\u0e2b\u0e49\u0e40\u0e23\u0e32\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e1e\u0e34\u0e21\u0e1e\u0e4c\u0e40\u0e25\u0e02\u0e40\u0e14\u0e34\u0e21 \u0e40\u0e0a\u0e48\u0e19 <code>192.168.1.100<\/code> \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e40\u0e02\u0e49\u0e32\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a\u0e1f\u0e32\u0e23\u0e4c\u0e21\u0e02\u0e2d\u0e07\u0e40\u0e23\u0e32\u0e44\u0e14\u0e49\u0e15\u0e25\u0e2d\u0e14<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-ast-global-color-6-background-color has-background has-medium-font-size\">\ud83d\udee0\ufe0f \u0e27\u0e34\u0e18\u0e35\u0e01\u0e32\u0e23\u0e40\u0e02\u0e35\u0e22\u0e19\u0e42\u0e04\u0e49\u0e14<\/h3>\n\n\n\n<p>\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07\u0e19\u0e35\u0e49\u0e43\u0e2b\u0e49\u0e19\u0e33\u0e44\u0e1b\u0e27\u0e32\u0e07\u0e44\u0e27\u0e49\u0e01\u0e48\u0e2d\u0e19 <span style=\"background-color: initial; text-align: initial; font-weight: inherit;\"><strong>void setup()<\/strong><\/span><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u0e01\u0e33\u0e2b\u0e19\u0e14\u0e40\u0e25\u0e02 IP \u0e17\u0e35\u0e48\u0e40\u0e23\u0e32\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e25\u0e47\u0e2d\u0e04 \u0e40\u0e0a\u0e48\u0e19 .100\nIPAddress local_IP(192, 168, 1, 100); \n\n\/\/ \u0e01\u0e33\u0e2b\u0e19\u0e14 IP \u0e02\u0e2d\u0e07 Router \u0e21\u0e31\u0e01\u0e08\u0e30\u0e25\u0e07\u0e17\u0e49\u0e32\u0e22\u0e14\u0e49\u0e27\u0e22 .1 \u0e2b\u0e23\u0e37\u0e2d .254\nIPAddress gateway(192, 168, 1, 1);     \nIPAddress subnet(255, 255, 255, 0);<\/code><\/pre>\n\n\n\n<p>\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07\u0e19\u0e35\u0e49\u0e43\u0e2b\u0e49\u0e40\u0e2d\u0e32\u0e44\u0e1b\u0e43\u0e2a\u0e48\u0e43\u0e19<strong> void setup()<\/strong> \u0e01\u0e48\u0e2d\u0e19\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07 <strong>WiFi.begin()<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>WiFi.config(local_IP, gateway, subnet); <\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\">\ud83c\udd71\ufe0f \u0e40\u0e17\u0e04\u0e19\u0e34\u0e04\u0e17\u0e35\u0e48 2 mDNS (\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e15\u0e31\u0e27\u0e40\u0e25\u0e02 \u0e40\u0e1b\u0e47\u0e19\u0e0a\u0e37\u0e48\u0e2d\u0e17\u0e35\u0e48\u0e08\u0e33\u0e07\u0e48\u0e32\u0e22)<\/h2>\n\n\n\n<p>\u0e15\u0e48\u0e2d\u0e43\u0e2b\u0e49\u0e40\u0e23\u0e32\u0e25\u0e47\u0e2d\u0e04\u0e40\u0e25\u0e02 IP \u0e44\u0e27\u0e49\u0e17\u0e35\u0e48 <code>192.168.1.100<\/code> \u0e44\u0e14\u0e49\u0e41\u0e25\u0e49\u0e27 \u0e41\u0e15\u0e48\u0e01\u0e32\u0e23\u0e08\u0e30\u0e1a\u0e2d\u0e01\u0e43\u0e2b\u0e49\u0e04\u0e19\u0e07\u0e32\u0e19\u0e43\u0e19\u0e1f\u0e32\u0e23\u0e4c\u0e21 \u0e21\u0e32\u0e19\u0e31\u0e48\u0e07\u0e1e\u0e34\u0e21\u0e1e\u0e4c\u0e0a\u0e38\u0e14\u0e15\u0e31\u0e27\u0e40\u0e25\u0e02\u0e22\u0e32\u0e27\u0e46\u0e43\u0e19\u0e21\u0e37\u0e2d\u0e16\u0e37\u0e2d\u0e17\u0e38\u0e01\u0e04\u0e23\u0e31\u0e49\u0e07 \u0e01\u0e47\u0e22\u0e31\u0e07\u0e14\u0e39\u0e44\u0e21\u0e48\u0e40\u0e1b\u0e47\u0e19\u0e21\u0e34\u0e15\u0e23\u0e01\u0e31\u0e1a\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19 (User Friendly) \u0e40\u0e17\u0e48\u0e32\u0e44\u0e2b\u0e23\u0e48\u0e43\u0e0a\u0e48\u0e44\u0e2b\u0e21 \u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e40\u0e27\u0e25\u0e32\u0e40\u0e23\u0e32\u0e42\u0e17\u0e23\u0e2b\u0e32\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e19 \u0e40\u0e23\u0e32\u0e22\u0e31\u0e07\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01\u0e40\u0e1a\u0e2d\u0e23\u0e4c\u0e40\u0e1b\u0e47\u0e19\u0e0a\u0e37\u0e48\u0e2d\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e19 \u0e41\u0e17\u0e19\u0e01\u0e32\u0e23\u0e08\u0e33\u0e40\u0e25\u0e02 10 \u0e2b\u0e25\u0e31\u0e01<\/p>\n\n\n\n<p><strong>\u0e41\u0e01\u0e49\u0e14\u0e49\u0e27\u0e22 mDNS<\/strong><strong> (Multicast DNS)<\/strong> \u0e04\u0e37\u0e2d \u0e23\u0e30\u0e1a\u0e1a\u0e17\u0e35\u0e48\u0e40\u0e23\u0e32\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e15\u0e31\u0e49\u0e07\u0e0a\u0e37\u0e48\u0e2d\u0e40\u0e25\u0e48\u0e19 (Hostname) \u0e43\u0e2b\u0e49\u0e01\u0e31\u0e1a\u0e1a\u0e2d\u0e23\u0e4c\u0e14 ESP32 \u0e02\u0e2d\u0e07\u0e40\u0e23\u0e32\u0e44\u0e14\u0e49 \u0e40\u0e0a\u0e48\u0e19 \u0e16\u0e49\u0e32\u0e40\u0e23\u0e32\u0e15\u0e31\u0e49\u0e07\u0e0a\u0e37\u0e48\u0e2d\u0e27\u0e48\u0e32 <strong><code>krunu-farm<\/code><\/strong> \u0e40\u0e27\u0e25\u0e32\u0e08\u0e30\u0e40\u0e02\u0e49\u0e32\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19 \u0e40\u0e23\u0e32\u0e01\u0e47\u0e41\u0e04\u0e48\u0e1e\u0e34\u0e21\u0e1e\u0e4c\u0e43\u0e19\u0e0a\u0e48\u0e2d\u0e07\u0e04\u0e49\u0e19\u0e2b\u0e32\u0e40\u0e27\u0e47\u0e1a\u0e27\u0e48\u0e32 <strong><code>http:\/\/krunu-farm.local<\/code><\/strong> \u0e23\u0e30\u0e1a\u0e1a\u0e08\u0e30\u0e17\u0e33\u0e01\u0e32\u0e23\u0e41\u0e1b\u0e25\u0e07\u0e0a\u0e37\u0e48\u0e2d\u0e19\u0e35\u0e49\u0e01\u0e25\u0e31\u0e1a\u0e44\u0e1b\u0e40\u0e1b\u0e47\u0e19\u0e40\u0e25\u0e02 IP \u0e43\u0e2b\u0e49\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34 \u0e07\u0e48\u0e32\u0e22\u0e2a\u0e38\u0e14\u0e46 \u0e44\u0e1b\u0e40\u0e25\u0e22<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-ast-global-color-6-background-color has-background has-medium-font-size\">\ud83d\udee0\ufe0f \u0e27\u0e34\u0e18\u0e35\u0e01\u0e32\u0e23\u0e40\u0e02\u0e35\u0e22\u0e19\u0e42\u0e04\u0e49\u0e14<\/h3>\n\n\n\n<p>\u0e40\u0e1e\u0e34\u0e48\u0e21 <strong>Library <\/strong>\u0e44\u0e27\u0e49\u0e1a\u0e19\u0e2a\u0e38\u0e14\u0e02\u0e2d\u0e07\u0e42\u0e04\u0e49\u0e14<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;ESPmDNS.h&gt; \/\/ \u0e40\u0e23\u0e35\u0e22\u0e01\u0e43\u0e0a\u0e49\u0e44\u0e25\u0e1a\u0e23\u0e32\u0e23\u0e35\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e17\u0e33\u0e0a\u0e37\u0e48\u0e2d\u0e40\u0e25\u0e48\u0e19\n<\/code><\/pre>\n\n\n\n<p>\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07\u0e40\u0e1b\u0e34\u0e14\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19 \u0e43\u0e19 <strong><code>void setup()<\/code> <\/strong>\u0e43\u0e2a\u0e48\u0e15\u0e48\u0e2d\u0e17\u0e49\u0e32\u0e22\u0e2b\u0e25\u0e31\u0e07\u0e08\u0e32\u0e01\u0e15\u0e48\u0e2d WiFi \u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08\u0e41\u0e25\u0e49\u0e27<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  \/\/ \u0e40\u0e23\u0e34\u0e48\u0e21\u0e01\u0e32\u0e23\u0e17\u0e33\u0e07\u0e32\u0e19 mDNS \u0e41\u0e25\u0e30\u0e15\u0e31\u0e49\u0e07\u0e0a\u0e37\u0e48\u0e2d\u0e17\u0e35\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23 (\u0e2b\u0e49\u0e32\u0e21\u0e40\u0e27\u0e49\u0e19\u0e27\u0e23\u0e23\u0e04)\n  if (MDNS.begin(\"krunu-farm\")) { \n    Serial.println(\"mDNS responder started\");\n    Serial.println(\"\u0e40\u0e02\u0e49\u0e32\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e40\u0e27\u0e47\u0e1a\u0e44\u0e14\u0e49\u0e17\u0e35\u0e48: http:\/\/krunu-farm.local\");\n  }\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\">\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e23\u0e23\u0e39\u0e49\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07 mDNS<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e02\u0e2d\u0e07 Apple (iPhone, iPad, Mac)<\/strong> \u0e23\u0e2d\u0e07\u0e23\u0e31\u0e1a\u0e23\u0e30\u0e1a\u0e1a\u0e19\u0e35\u0e49 100% <\/li>\n\n\n\n<li><strong>\u0e04\u0e2d\u0e21\u0e1e\u0e34\u0e27\u0e40\u0e15\u0e2d\u0e23\u0e4c Windows<\/strong> \u0e23\u0e2d\u0e07\u0e23\u0e31\u0e1a\u0e1c\u0e48\u0e32\u0e19\u0e1a\u0e23\u0e32\u0e27\u0e40\u0e0b\u0e2d\u0e23\u0e4c Chrome \u0e2b\u0e23\u0e37\u0e2d Edge \u0e40\u0e27\u0e2d\u0e23\u0e4c\u0e0a\u0e31\u0e48\u0e19\u0e43\u0e2b\u0e21\u0e48\u0e46<\/li>\n\n\n\n<li><strong>\u0e21\u0e37\u0e2d\u0e16\u0e37\u0e2d Android<\/strong> \u0e1a\u0e32\u0e07\u0e23\u0e38\u0e48\u0e19\/\u0e1a\u0e32\u0e07\u0e1a\u0e23\u0e32\u0e27\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e2d\u0e32\u0e08\u0e08\u0e30\u0e22\u0e31\u0e07\u0e44\u0e21\u0e48\u0e23\u0e2d\u0e07\u0e23\u0e31\u0e1a 100% \u0e16\u0e49\u0e32\u0e1e\u0e34\u0e21\u0e1e\u0e4c\u0e41\u0e25\u0e49\u0e27\u0e44\u0e21\u0e48\u0e02\u0e36\u0e49\u0e19 \u0e43\u0e2b\u0e49\u0e01\u0e25\u0e31\u0e1a\u0e44\u0e1b\u0e43\u0e0a\u0e49\u0e40\u0e25\u0e02 IP \u0e1b\u0e01\u0e15\u0e34<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center has-vivid-green-cyan-background-color has-background has-large-font-size\">Project 2.2 \u0e23\u0e30\u0e1a\u0e1a\u0e27\u0e31\u0e14\u0e23\u0e30\u0e14\u0e31\u0e1a\u0e19\u0e49\u0e33\u0e2d\u0e31\u0e08\u0e09\u0e23\u0e34\u0e22\u0e30 (Smart Water Level Monitor)<\/h2>\n\n\n\n<p>\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a <strong>Project 2.2<\/strong> \u0e19\u0e35\u0e49 \u0e08\u0e30\u0e40\u0e1b\u0e47\u0e19\u0e23\u0e30\u0e1a\u0e1a\u0e17\u0e35\u0e48\u0e0a\u0e48\u0e27\u0e22\u0e41\u0e01\u0e49\u0e1b\u0e31\u0e0d\u0e2b\u0e32\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e19\u0e49\u0e33\u0e2b\u0e21\u0e14\u0e16\u0e31\u0e07\u0e2b\u0e23\u0e37\u0e2d\u0e19\u0e49\u0e33\u0e25\u0e49\u0e19\u0e44\u0e14\u0e49\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e41\u0e21\u0e48\u0e19\u0e22\u0e33 \u0e42\u0e14\u0e22\u0e40\u0e23\u0e32\u0e08\u0e30\u0e43\u0e0a\u0e49 <strong>Ultrasonic Sensor (HC-SR04)<\/strong> \u0e21\u0e32\u0e17\u0e33\u0e2b\u0e19\u0e49\u0e32\u0e17\u0e35\u0e48\u0e40\u0e1b\u0e47\u0e19\u0e44\u0e21\u0e49\u0e1a\u0e23\u0e23\u0e17\u0e31\u0e14\u0e14\u0e34\u0e08\u0e34\u0e17\u0e31\u0e25\u0e04\u0e2d\u0e22\u0e27\u0e31\u0e14\u0e23\u0e30\u0e14\u0e31\u0e1a\u0e19\u0e49\u0e33\u0e08\u0e32\u0e01\u0e1b\u0e32\u0e01\u0e16\u0e31\u0e07\u0e25\u0e07\u0e44\u0e1b<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/image-11-1024x1024.png\" alt=\"Ultrasonic Sensor (HC-SR04)\" class=\"wp-image-1671\" style=\"width:242px;height:auto\" srcset=\"https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/image-11-1024x1024.png 1024w, https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/image-11-300x300.png 300w, https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/image-11-150x150.png 150w, https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/image-11-768x768.png 768w, https:\/\/kru-nu.com\/wp-content\/uploads\/2026\/04\/image-11.png 1500w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u0e42\u0e1b\u0e23\u0e40\u0e08\u0e04\u0e19\u0e35\u0e49\u0e08\u0e30\u0e40\u0e19\u0e49\u0e19\u0e01\u0e32\u0e23\u0e40\u0e23\u0e35\u0e22\u0e19\u0e23\u0e39\u0e49\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e04\u0e33\u0e19\u0e27\u0e13\u0e23\u0e30\u0e22\u0e30\u0e17\u0e32\u0e07\u0e08\u0e32\u0e01\u0e04\u0e25\u0e37\u0e48\u0e19\u0e40\u0e2a\u0e35\u0e22\u0e07\u0e41\u0e25\u0e30\u0e01\u0e32\u0e23\u0e19\u0e33\u0e04\u0e48\u0e32\u0e17\u0e35\u0e48\u0e44\u0e14\u0e49\u0e44\u0e1b\u0e2a\u0e31\u0e48\u0e07\u0e07\u0e32\u0e19\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c\u0e08\u0e23\u0e34\u0e07\u0e1c\u0e48\u0e32\u0e19 Serial Monitor<\/p>\n\n\n\n<p><strong>\u0e41\u0e19\u0e27\u0e04\u0e34\u0e14<\/strong> \u0e15\u0e34\u0e14\u0e15\u0e31\u0e49\u0e07\u0e40\u0e0b\u0e19\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e44\u0e27\u0e49\u0e17\u0e35\u0e48\u0e1d\u0e32\u0e16\u0e31\u0e07\u0e19\u0e49\u0e33 \u0e40\u0e21\u0e37\u0e48\u0e2d\u0e19\u0e49\u0e33\u0e19\u0e49\u0e2d\u0e22\u0e01\u0e27\u0e48\u0e32\u0e40\u0e01\u0e13\u0e11\u0e4c\u0e17\u0e35\u0e48\u0e01\u0e33\u0e2b\u0e19\u0e14 \u0e43\u0e2b\u0e49\u0e23\u0e35\u0e40\u0e25\u0e22\u0e4c\u0e2a\u0e31\u0e48\u0e07\u0e40\u0e1b\u0e34\u0e14\u0e1b\u0e31\u0e4a\u0e21\u0e19\u0e49\u0e33 \u0e41\u0e25\u0e30\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e19\u0e49\u0e33\u0e40\u0e15\u0e47\u0e21\u0e43\u0e2b\u0e49\u0e2a\u0e31\u0e48\u0e07\u0e1b\u0e34\u0e14 \u0e1e\u0e23\u0e49\u0e2d\u0e21\u0e21\u0e35\u0e40\u0e2a\u0e35\u0e22\u0e07\u0e40\u0e15\u0e37\u0e2d\u0e19\u0e1c\u0e48\u0e32\u0e19 Buzzer \u0e04\u0e23\u0e31\u0e1a<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\"><strong>\u0e01\u0e32\u0e23\u0e15\u0e48\u0e2d\u0e27\u0e07\u0e08\u0e23 (Wiring)<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>\u0e02\u0e32\u0e40\u0e0b\u0e19\u0e40\u0e0b\u0e2d\u0e23\u0e4c<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>\u0e15\u0e48\u0e2d\u0e40\u0e02\u0e49\u0e32\u0e01\u0e31\u0e1a ESP32<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>\u0e2b\u0e19\u0e49\u0e32\u0e17\u0e35\u0e48<\/strong><\/td><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Ultrasonic<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>VCC<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>5V (VIN)<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e08\u0e48\u0e32\u0e22\u0e44\u0e1f\u0e40\u0e25\u0e35\u0e49\u0e22\u0e07 (\u0e40\u0e0b\u0e19\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e23\u0e38\u0e48\u0e19\u0e19\u0e35\u0e49\u0e43\u0e0a\u0e49 5V)<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>GND<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>GND<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e15\u0e48\u0e2d\u0e2a\u0e32\u0e22\u0e14\u0e34\u0e19<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>Trig<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>GPIO 5<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e2a\u0e48\u0e07\u0e2a\u0e31\u0e0d\u0e0d\u0e32\u0e13\u0e40\u0e2a\u0e35\u0e22\u0e07\u0e2d\u0e2d\u0e01\u0e44\u0e1b<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>Echo<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>GPIO 18<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e23\u0e31\u0e1a\u0e2a\u0e31\u0e0d\u0e0d\u0e32\u0e13\u0e40\u0e2a\u0e35\u0e22\u0e07\u0e2a\u0e30\u0e17\u0e49\u0e2d\u0e19\u0e01\u0e25\u0e31\u0e1a<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Relay<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>IN<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>GPIO 2<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e2a\u0e31\u0e48\u0e07\u0e07\u0e32\u0e19\u0e1b\u0e31\u0e4a\u0e21\u0e19\u0e49\u0e33<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Buzzer<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>+<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>GPIO 19<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">\u0e2a\u0e48\u0e07\u0e40\u0e2a\u0e35\u0e22\u0e07\u0e40\u0e15\u0e37\u0e2d\u0e19\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e19\u0e49\u0e33\u0e27\u0e34\u0e01\u0e24\u0e15<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\"><strong>2. \u0e42\u0e04\u0e49\u0e14\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21\u0e41\u0e1a\u0e1a\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14<\/strong><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ --- \u0e01\u0e33\u0e2b\u0e19\u0e14\u0e02\u0e32\u0e2d\u0e38\u0e1b\u0e01\u0e23\u0e13\u0e4c ---\nconst int trigPin = 5;\nconst int echoPin = 18;\nconst int relayPin = 2;\nconst int buzzerPin = 19;\n\n\/\/ --- \u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e02\u0e19\u0e32\u0e14\u0e16\u0e31\u0e07 (\u0e2b\u0e19\u0e48\u0e27\u0e22\u0e40\u0e0b\u0e19\u0e15\u0e34\u0e40\u0e21\u0e15\u0e23) ---\nconst int tankHeight = 20;   \/\/ \u0e04\u0e27\u0e32\u0e21\u0e2a\u0e39\u0e07\u0e02\u0e2d\u0e07\u0e16\u0e31\u0e07\u0e19\u0e49\u0e33\nconst int lowWaterGap = 15;  \/\/ \u0e23\u0e30\u0e22\u0e30\u0e2b\u0e48\u0e32\u0e07\u0e17\u0e35\u0e48\u0e16\u0e37\u0e2d\u0e27\u0e48\u0e32\u0e19\u0e49\u0e33\u0e19\u0e49\u0e2d\u0e22 (\u0e40\u0e1b\u0e34\u0e14\u0e1b\u0e31\u0e4a\u0e21)\nconst int fullWaterGap = 5;  \/\/ \u0e23\u0e30\u0e22\u0e30\u0e2b\u0e48\u0e32\u0e07\u0e17\u0e35\u0e48\u0e16\u0e37\u0e2d\u0e27\u0e48\u0e32\u0e19\u0e49\u0e33\u0e40\u0e15\u0e47\u0e21 (\u0e1b\u0e34\u0e14\u0e1b\u0e31\u0e4a\u0e21)\n\nvoid setup() {\n  Serial.begin(115200);\n  pinMode(trigPin, OUTPUT);\n  pinMode(echoPin, INPUT);\n  pinMode(relayPin, OUTPUT);\n  pinMode(buzzerPin, OUTPUT);\n  \n  digitalWrite(relayPin, LOW); \n  Serial.println(\"--- \u0e23\u0e30\u0e1a\u0e1a\u0e27\u0e31\u0e14\u0e23\u0e30\u0e14\u0e31\u0e1a\u0e19\u0e49\u0e33 \u0e40\u0e23\u0e34\u0e48\u0e21\u0e17\u0e33\u0e07\u0e32\u0e19 ---\");\n}\n\nvoid loop() {\n  \/\/ 1. \u0e2d\u0e48\u0e32\u0e19\u0e04\u0e48\u0e32\u0e23\u0e30\u0e22\u0e30\u0e17\u0e32\u0e07\u0e41\u0e1a\u0e1a\u0e2b\u0e32\u0e04\u0e48\u0e32\u0e40\u0e09\u0e25\u0e35\u0e48\u0e22 5 \u0e04\u0e23\u0e31\u0e49\u0e07\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e19\u0e34\u0e48\u0e07\n  long totalDuration = 0;\n  int validCount = 0;\n\n  for(int i = 0; i &lt; 5; i++) {\n    digitalWrite(trigPin, LOW);\n    delayMicroseconds(2);\n    digitalWrite(trigPin, HIGH);\n    delayMicroseconds(10);\n    digitalWrite(trigPin, LOW);\n\n    \/\/ \u0e43\u0e2a\u0e48 Timeout 25000us \u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19\u0e04\u0e48\u0e32\u0e04\u0e49\u0e32\u0e07\u0e17\u0e35\u0e48 799 cm\n    long duration = pulseIn(echoPin, HIGH, 25000); \n    \n    if (duration > 0) {\n      totalDuration += duration;\n      validCount++;\n    }\n    delay(10);\n  }\n\n  \/\/ 2. \u0e04\u0e33\u0e19\u0e27\u0e13\u0e04\u0e48\u0e32\u0e40\u0e09\u0e25\u0e35\u0e48\u0e22\u0e41\u0e25\u0e30\u0e23\u0e30\u0e22\u0e30\u0e17\u0e32\u0e07\n  long avgDuration = (validCount > 0) ? (totalDuration \/ validCount) : 0;\n  int distance = avgDuration * 0.034 \/ 2;\n\n  \/\/ 3. \u0e04\u0e33\u0e19\u0e27\u0e13\u0e04\u0e27\u0e32\u0e21\u0e25\u0e36\u0e01\u0e19\u0e49\u0e33\n  int waterDepth = tankHeight - distance;\n  if (waterDepth &lt; 0 || avgDuration == 0) waterDepth = 0; \n  if (distance > tankHeight) waterDepth = 0;\n\n  \/\/ 4. \u0e41\u0e2a\u0e14\u0e07\u0e1c\u0e25\u0e1a\u0e19 Serial Monitor\n  Serial.print(\"\u0e40\u0e27\u0e25\u0e32\u0e2a\u0e30\u0e17\u0e49\u0e2d\u0e19 : \"); Serial.print(avgDuration);\n  Serial.print(\" us (\u0e44\u0e21\u0e42\u0e04\u0e23\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35) | \u0e23\u0e30\u0e22\u0e30\u0e2b\u0e48\u0e32\u0e07 : \"); Serial.print(distance);\n  Serial.print(\" \u0e0b\u0e21. | \u0e04\u0e27\u0e32\u0e21\u0e25\u0e36\u0e01\u0e19\u0e49\u0e33 : \"); Serial.print(waterDepth);\n  Serial.println(\" \u0e0b\u0e21.\");\n\n  \/\/ 5. \u0e23\u0e30\u0e1a\u0e1a\u0e04\u0e27\u0e1a\u0e04\u0e38\u0e21\u0e41\u0e25\u0e30\u0e41\u0e08\u0e49\u0e07\u0e40\u0e15\u0e37\u0e2d\u0e19 (Logic)\n  if (avgDuration == 0) {\n    Serial.println(\">> &#91;\u0e02\u0e49\u0e2d\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14] : \u0e15\u0e23\u0e27\u0e08\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e40\u0e0b\u0e19\u0e40\u0e0b\u0e2d\u0e23\u0e4c \/ \u0e2d\u0e22\u0e39\u0e48\u0e19\u0e2d\u0e01\u0e23\u0e30\u0e22\u0e30!\");\n  } \n  else if (distance >= lowWaterGap) {\n    digitalWrite(relayPin, HIGH); \/\/ \u0e40\u0e1b\u0e34\u0e14\u0e1b\u0e31\u0e4a\u0e21\n    Serial.println(\">> &#91;\u0e2a\u0e16\u0e32\u0e19\u0e30] : \u0e19\u0e49\u0e33\u0e19\u0e49\u0e2d\u0e22 - \u0e01\u0e33\u0e25\u0e31\u0e07\u0e40\u0e1b\u0e34\u0e14\u0e1b\u0e31\u0e4a\u0e21\u0e19\u0e49\u0e33...\");\n    \n    \/\/ \u0e40\u0e2a\u0e35\u0e22\u0e07\u0e40\u0e15\u0e37\u0e2d\u0e19\u0e2a\u0e31\u0e49\u0e19\u0e46\n    digitalWrite(buzzerPin, HIGH); delay(100); digitalWrite(buzzerPin, LOW);\n  } \n  else if (distance &lt;= fullWaterGap) {\n    digitalWrite(relayPin, LOW); \/\/ \u0e1b\u0e34\u0e14\u0e1b\u0e31\u0e4a\u0e21\n    Serial.println(\">> &#91;\u0e2a\u0e16\u0e32\u0e19\u0e30] : \u0e19\u0e49\u0e33\u0e40\u0e15\u0e47\u0e21\u0e16\u0e31\u0e07 - \u0e1b\u0e34\u0e14\u0e1b\u0e31\u0e4a\u0e21\u0e19\u0e49\u0e33\u0e40\u0e23\u0e35\u0e22\u0e1a\u0e23\u0e49\u0e2d\u0e22\");\n  }\n\n  Serial.println(\"---------------------------------------\");\n  delay(1500); \n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading has-ast-global-color-4-background-color has-background has-medium-font-size\"><strong>\u0e08\u0e38\u0e14\u0e17\u0e35\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e40\u0e19\u0e49\u0e19 (Computing &amp; Technology)<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>The Math of Sound<\/strong> \u0e04\u0e2d\u0e21\u0e1e\u0e34\u0e27\u0e40\u0e15\u0e2d\u0e23\u0e4c\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e40\u0e2b\u0e47\u0e19\u0e23\u0e30\u0e22\u0e30\u0e17\u0e32\u0e07 \u0e41\u0e15\u0e48\u0e43\u0e0a\u0e49\u0e01\u0e32\u0e23\u0e19\u0e31\u0e1a\u0e40\u0e27\u0e25\u0e32\u0e43\u0e19\u0e01\u0e32\u0e23\u0e2a\u0e30\u0e17\u0e49\u0e2d\u0e19\u0e04\u0e25\u0e37\u0e48\u0e19\u0e44\u0e1b\u0e41\u0e25\u0e30\u0e01\u0e25\u0e31\u0e1a \u0e0b\u0e36\u0e48\u0e07\u0e15\u0e31\u0e27\u0e40\u0e25\u0e02 <code>0.034<\/code> \u0e21\u0e32\u0e08\u0e32\u0e01\u0e04\u0e27\u0e32\u0e21\u0e40\u0e23\u0e47\u0e27\u0e40\u0e2a\u0e35\u0e22\u0e07\u0e43\u0e19\u0e2d\u0e32\u0e01\u0e32\u0e28\u0e1b\u0e23\u0e30\u0e21\u0e32\u0e13 340 \u0e40\u0e21\u0e15\u0e23\/\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35 \u0e41\u0e1b\u0e25\u0e07\u0e40\u0e1b\u0e47\u0e19\u0e2b\u0e19\u0e48\u0e27\u0e22\u0e40\u0e0b\u0e19\u0e15\u0e34\u0e40\u0e21\u0e15\u0e23\u0e15\u0e48\u0e2d\u0e44\u0e21\u0e42\u0e04\u0e23\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35\u0e19\u0e31\u0e48\u0e19\u0e40\u0e2d\u0e07<\/li>\n\n\n\n<li><strong>Logic Mapping<\/strong> \u0e43\u0e2b\u0e49\u0e19\u0e31\u0e01\u0e28\u0e36\u0e01\u0e29\u0e32\u0e04\u0e34\u0e14\u0e41\u0e1a\u0e1a\u0e22\u0e49\u0e2d\u0e19\u0e01\u0e25\u0e31\u0e1a \u0e23\u0e30\u0e22\u0e30\u0e17\u0e32\u0e07\u0e17\u0e35\u0e48\u0e40\u0e0b\u0e19\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e27\u0e31\u0e14\u0e44\u0e14\u0e49<strong>\u0e22\u0e34\u0e48\u0e07\u0e19\u0e49\u0e2d\u0e22<\/strong> \u0e2b\u0e21\u0e32\u0e22\u0e04\u0e27\u0e32\u0e21\u0e27\u0e48\u0e32\u0e19\u0e49\u0e33<strong>\u0e22\u0e34\u0e48\u0e07\u0e40\u0e15\u0e47\u0e21<\/strong><\/li>\n\n\n\n<li><strong>Real-world Physics<\/strong> \u0e23\u0e30\u0e22\u0e30\u0e2b\u0e48\u0e32\u0e07\u0e08\u0e32\u0e01\u0e40\u0e0b\u0e19\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e16\u0e36\u0e07\u0e19\u0e49\u0e33 \u0e44\u0e21\u0e48\u0e04\u0e27\u0e23\u0e43\u0e2b\u0e49\u0e42\u0e14\u0e19\u0e19\u0e49\u0e33\u0e42\u0e14\u0e22\u0e15\u0e23\u0e07 \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e37\u0e49\u0e19\u0e40\u0e02\u0e49\u0e32\u0e17\u0e33\u0e25\u0e32\u0e22\u0e41\u0e1c\u0e07\u0e27\u0e07\u0e08\u0e23<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>\u0e2a\u0e2d\u0e19\u0e42\u0e14\u0e22<\/strong>&nbsp;\u0e2d\u0e32\u0e08\u0e32\u0e23\u0e22\u0e4c\u0e19\u0e38\/\u0e04\u0e23\u0e39\u0e19\u0e38 (\u0e20\u0e32\u0e19\u0e38\u0e1e\u0e07\u0e28\u0e4c \u0e2a\u0e30\u0e41\u0e25\u0e30\u0e2b\u0e21\u0e31\u0e14)<\/p>\n\n\n\n<p><strong>\u0e15\u0e34\u0e14\u0e15\u0e48\u0e2d<\/strong>&nbsp;Line ID : salae44476<\/p>\n<\/blockquote>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e40\u0e23\u0e32\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e43\u0e2b\u0e49\u0e1a\u0e2d\u0e23\u0e4c\u0e14\u0e44\u0e21\u0e42\u0e04\u0e23\u0e04\u0e2d\u0e19\u0e42\u0e17\u0e23\u0e25\u0e40\u0e25\u0e2d\u0e23\u0e4c\u0e2d\u0e22\u0e48\u0e32\u0e07 ESP32 \u0e2a\u0e32\u0e21 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-1424","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/kru-nu.com\/index.php\/wp-json\/wp\/v2\/pages\/1424","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kru-nu.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/kru-nu.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/kru-nu.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kru-nu.com\/index.php\/wp-json\/wp\/v2\/comments?post=1424"}],"version-history":[{"count":51,"href":"https:\/\/kru-nu.com\/index.php\/wp-json\/wp\/v2\/pages\/1424\/revisions"}],"predecessor-version":[{"id":1678,"href":"https:\/\/kru-nu.com\/index.php\/wp-json\/wp\/v2\/pages\/1424\/revisions\/1678"}],"wp:attachment":[{"href":"https:\/\/kru-nu.com\/index.php\/wp-json\/wp\/v2\/media?parent=1424"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}