V tomto projektu vytvoříme webový server na mikrokontroleru ESP32, pomocí kterého lze na dálku ovládat DC motor. Webová stránka bude obsahovat tlačítka pro otáčení motoru dopředu, dozadu nebo pro jeho zastavení. Motor bude připojen přes driver L298N a ESP32 bude naprogramováno pomocí Arduino IDE.
Přehled projektu
ESP32 vytvoří jednoduchý webový server. Po otevření IP adresy zařízení v prohlížeči se zobrazí webová stránka s ovládacími tlačítky.
Každé tlačítko odešle na ESP32 jiný HTTP požadavek:
- tlačítko Forward odešle požadavek na adresu
/forwarda motor se začne otáčet dopředu - tlačítko Backward odešle požadavek na
/backwarda motor se začne otáčet opačným směrem - tlačítko Stop odešle požadavek na
/stopa motor se zastaví
ESP32 podle přijaté URL zavolá odpovídající funkci pro řízení motoru.

Potřebné komponenty
Pro vytvoření projektu budeš potřebovat několik základních součástek:
- mikrokontroler ESP32
- DC motor
- motor driver L298N
- propojovací vodiče
- externí napájení pro motor (například 4 AA baterie nebo jiný zdroj)
Motor potřebuje vyšší proud než dokáže poskytnout ESP32, proto se používá motor driver a samostatné napájení.
Zapojení ESP32, L298N a motoru
Motor se připojuje k výstupu Motor A na modulu L298N.
Pin Input 1 na driveru L298N připojíme na GPIO 27 na ESP32.
Pin Input 2 na driveru připojíme na GPIO 26 na ESP32.
Pin Enable A připojíme na GPIO 14 na ESP32.
Pin GND na driveru musí být propojen se zemí ESP32.
Motor driver je napájen externím zdrojem, například bateriovým držákem. V tomto zapojení lze použít napětí přibližně 6 až 12 V podle typu motoru.
Doporučuje se také připájet 0,1 µF keramický kondenzátor mezi kontakty motoru, aby se omezily napěťové špičky vznikající při jeho chodu.

Instalace knihoven
Pro vytvoření webového serveru se používají dvě knihovny:
- ESPAsyncWebServer
- AsyncTCP
Tyto knihovny lze nainstalovat pomocí Library Manageru v Arduino IDE.
Po instalaci je možné vytvořit asynchronní webový server, který zvládne více klientů současně.


Program pro ESP32
Následující kód vytvoří webový server, který zobrazí stránku s tlačítky pro ovládání motoru.
1#include <Arduino.h>
2#include <WiFi.h>
3#include <AsyncTCP.h>
4#include <ESPAsyncWebServer.h>
5
6// piny motoru
7int motor1Pin1 = 27;
8int motor1Pin2 = 26;
9int enable1Pin = 14;
10
11// WiFi připojení
12const char* ssid = "NAZEV_WIFI";
13const char* password = "HESLO_WIFI";
14
15AsyncWebServer server(80);
16
17// HTML stránka
18const char index_html[] PROGMEM = R"rawliteral(
19<!DOCTYPE html>
20<html>
21<head>
22<meta name="viewport" content="width=device-width, initial-scale=1">
23<title>ESP32 Motor Control</title>
24</head>
25<body>
26<h2>Ovládání motoru</h2>
27<a href="/forward"><button>Dopředu</button></a>
28<a href="/backward"><button>Dozadu</button></a>
29<a href="/stop"><button>Stop</button></a>
30</body>
31</html>)rawliteral";
32
33void moveForward(){
34 digitalWrite(enable1Pin, HIGH);
35 digitalWrite(motor1Pin1, LOW);
36 digitalWrite(motor1Pin2, HIGH);
37}
38
39void moveBackward(){
40 digitalWrite(enable1Pin, HIGH);
41 digitalWrite(motor1Pin1, HIGH);
42 digitalWrite(motor1Pin2, LOW);
43}
44
45void stopMotor(){
46 digitalWrite(enable1Pin, LOW);
47 digitalWrite(motor1Pin1, LOW);
48 digitalWrite(motor1Pin2, LOW);
49}
50
51void initWiFi(){
52 WiFi.mode(WIFI_STA);
53 WiFi.begin(ssid, password);
54
55 while(WiFi.status() != WL_CONNECTED){
56 delay(1000);
57 }
58}
59
60void setup(){
61 Serial.begin(115200);
62
63 pinMode(motor1Pin1, OUTPUT);
64 pinMode(motor1Pin2, OUTPUT);
65 pinMode(enable1Pin, OUTPUT);
66
67 initWiFi();
68
69 server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
70 request->send(200, "text/html", index_html);
71 });
72
73 server.on("/forward", HTTP_GET, [](AsyncWebServerRequest *request){
74 moveForward();
75 request->send(200, "text/html", index_html);
76 });
77
78 server.on("/backward", HTTP_GET, [](AsyncWebServerRequest *request){
79 moveBackward();
80 request->send(200, "text/html", index_html);
81 });
82
83 server.on("/stop", HTTP_GET, [](AsyncWebServerRequest *request){
84 stopMotor();
85 request->send(200, "text/html", index_html);
86 });
87
88 server.begin();
89}
90
91void loop() {
92
93}Program vytvoří webovou stránku s tlačítky, která odesílají HTTP požadavky na ESP32. Podle požadavku ESP32 změní stav pinů a tím ovládá motor.
Spuštění projektu
Po nahrání programu do ESP32 otevři Serial Monitor s rychlostí 115200 baudů.
ESP32 po připojení k WiFi vypíše svou IP adresu. Tuto adresu zadej do webového prohlížeče na počítači nebo telefonu připojeném ke stejné síti.
Zobrazí se webová stránka s tlačítky pro ovládání motoru.
Kliknutím na tlačítka můžeš motor:
- roztočit dopředu
- roztočit dozadu
- zastavit
Server může obsluhovat více zařízení najednou, takže motor lze ovládat například z počítače i telefonu současně.
Možná rozšíření projektu
Tento projekt můžeš dále rozšířit například o:
- řízení rychlosti motoru pomocí PWM
- ovládání více motorů
- přidání senzorů a zobrazování dat na webu
- vytvoření dashboardu pro IoT zařízení
ESP32 díky WiFi umožňuje snadno vytvářet webové aplikace pro ovládání hardware v reálném čase.
