ΠΠ°, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅Ρ Π½Π° Arduino Uno! ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Ethernet Shield ΠΈΠ»ΠΈ ESP8266 Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
ΠΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅Ρ Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ:
cpp
#include <SPI.h>
#include <Ethernet.h>
#include <avr/pgmspace.h>
// ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ΅ΡΠΈ
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192, 168, 1, 100);
EthernetServer server(80);
// Π¨Π°Π±Π»ΠΎΠ½Ρ ΡΡΡΠ°Π½ΠΈΡ (Π² PROGMEM)
const char index_html[] PROGMEM = R"=====(
<!DOCTYPE HTML>
<html>
<head>
<title>ARDUINOHACKS Server</title>
<style>
body { font-family: Arial; text-align: center; }
h1 { color: #2c3e50; }
.metric { display: inline-block; margin: 20px; padding: 20px; border: 1px solid #ddd; }
.value { font-size: 48px; color: #e74c3c; }
</style>
<script>
function update() {
fetch('/api/status')
.then(response => response.json())
.then(data => {
document.getElementById('temp').innerHTML = data.temperature + 'Β°C';
document.getElementById('humidity').innerHTML = data.humidity + '%';
document.getElementById('uptime').innerHTML = data.uptime + 's';
});
}
setInterval(update, 1000);
</script>
</head>
<body>
<h1>ARDUINOHACKS Server</h1>
<div class="metric">
<div>Π’Π΅ΠΌΠΏΠ΅ΡΠ°ΡΡΡΠ°</div>
<div class="value" id="temp">--</div>
</div>
<div class="metric">
<div>ΠΠ»Π°ΠΆΠ½ΠΎΡΡΡ</div>
<div class="value" id="humidity">--</div>
</div>
<div class="metric">
<div>ΠΠΏΡΠ°ΠΉΠΌ</div>
<div class="value" id="uptime">--</div>
</div>
</body>
</html>
)=====";
// ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° HTTP Π·Π°ΠΏΡΠΎΡΠΎΠ²
void handleRequest(EthernetClient client) {
String request = "";
while (client.connected()) {
if (client.available()) {
char c = client.read();
request += c;
if (c == '\n' && request.endsWith("\r\n\r\n")) {
break;
}
}
}
// ΠΠ°ΡΡΠΈΠΌ ΠΏΡΡΡ
String path = "/";
if (request.indexOf("GET ") == 0) {
path = request.substring(4, request.indexOf(" ", 4));
}
// ΠΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΎΡΠ²Π΅Ρ
if (path == "/") {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.print(F(index_html)); // ΠΠ· PROGMEM
}
else if (path == "/api/status") {
// JSON API
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: application/json");
client.println("Connection: close");
client.println();
client.print("{");
client.print("\"temperature\":");
client.print(analogRead(A0) / 10.24); // Π‘ΠΈΠΌΡΠ»ΡΡΠΈΡ
client.print(",\"humidity\":");
client.print(analogRead(A1) / 10.24);
client.print(",\"uptime\":");
client.print(millis() / 1000);
client.print("}");
}
else {
client.println("HTTP/1.1 404 Not Found");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<h1>404 - Π‘ΡΡΠ°Π½ΠΈΡΠ° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π°</h1>");
}
}
void setup() {
Ethernet.begin(mac, ip);
server.begin();
Serial.begin(115200);
Serial.print("Π‘Π΅ΡΠ²Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½ Π½Π° IP: ");
Serial.println(Ethernet.localIP());
}
void loop() {
EthernetClient client = server.available();
if (client) {
handleRequest(client);
delay(1);
client.stop();
}
}