Görseldeki Wi-Fi kontrollü araba uygulamasında NodeMCU acces point (AP) modunda çalışmaktadır. NodeMCU’ya bağlanmak için kablosuz ağlardan “Robot” seçilir. Şifre “12345678” girilir. Bilgisayar veya akıllı telefondan tarayıcı (Chrome vb.) açılarak adres satırına 192.168.4.1 girilerek NodeMCU içindeki web server sayfasından araç kontrol edilir.


/* NodeMCU Access Point (AP) modunda çalışmaktadır.
Kablosuz ağlardan "Robot"a bağlanın. Şifre: 12345678
Tarayıcıdan 192.168.4.1 adresine girin.
*/
#include <ESP8266WiFi.h> // NodeMCU kurulumuyla gelir.
#include <WiFiClient.h> // NodeMCU kurulumuyla gelir.
#include <ESP8266WebServer.h> // NodeMCU kurulumuyla gelir.
#include <WebSocketsServer.h> // WebSockets v2.3.6
#include <Hash.h> // NodeMCU kurulumuyla gelir.
const char* ssid = "Robot";
const char* password = "12345678"; // Şifre en az sekiz haneli olmalı.
const byte IN1 = D0, IN2 = D1, IN3 = D2, IN4 = D3; // PWM pinleri. (enA ve enB'de jumper takılı).
int hiz = 150;
char karakter;
static const char PROGMEM INDEX_HTML[] = R"rawliteral(
<!DOCTYPE html>
<html>
<head>
<meta name = "viewport" content = "width = device-width, initial-scale = 1.0, maximum-scale = 1.0, user-scalable=0">
<title>Wifi Robot</title>
<style>
"body { background-color: #808080; font-family: Arial, Helvetica, Sans-Serif; Color: #000000; }"
#JD {
text-align: center;
}
#JD {
text-align: center;
font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;
font-size: 24px;
}
.foot {
text-align: center;
font-family: "Comic Sans MS", cursive;
font-size: 30px;
color: #F00;
}
.button {
border: none;
color: white;
padding: 17px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
margin: 4px 2px;
cursor: pointer;
border-radius: 12px;
width: 100%;
}
.red {background-color: #F00;}
.green {background-color: #090;}
.yellow {background-color:#F90;}
.blue {background-color:#03C;}
</style>
<script>
var websock;
function start() {
websock = new WebSocket('ws://' + window.location.hostname + ':81/');
websock.onopen = function(evt) { console.log('websock open'); };
websock.onclose = function(evt) { console.log('websock close'); };
websock.onerror = function(evt) { console.log(evt); };
websock.onmessage = function(evt) {
console.log(evt);
var e = document.getElementById('ledstatus');
if (evt.karakter === 'ledon') {
e.style.color = 'red';
}
else if (evt.karakter === 'ledoff') {
e.style.color = 'black';
}
else {
console.log('unknown event');
}
};
}
function buttonclick(e) {
websock.send(e.id);
}
</script>
</head>
<body onload="javascript:start();">
<table width="100%" border="0">
<tr>
<td bgcolor="#FFFFFF" id="JD">Wifi Robot </td>
</tr>
</table>
<table width="100" height="249" border="0" align="center">
<td> </td>
<td align="center" valign="middle"><form name="form1" method="post" action="">
<label>
<button id="a" type="button" onclick="buttonclick(this);" class="button green">ileri</button>
</label>
</form></td>
<td> </td>
</tr>
<td align="center" valign="middle"><form name="form1" method="post" action="">
<label>
<button id="c" type="button" onclick="buttonclick(this);" class="button green">Sol </button>
</label>
</form></td>
<td align="center" valign="middle"><form name="form1" method="post" action="">
<label>
<button id="e" type="button" onclick="buttonclick(this);" class="button red">Dur </button>
</label>
</form></td>
<td align="center" valign="middle"><form name="form1" method="post" action="">
<label>
<button id="d" type="button" onclick="buttonclick(this);" class="button green">Sag </button>
</label>
</form></td>
</tr>
<td> </td>
<td align="center" valign="middle"><form name="form1" method="post" action="">
<label>
<button id="b" type="button" onclick="buttonclick(this);" class="button green">Geri </button>
</label>
</form></td>
<td> </td>
</tr>
</table>
</body>
</html>
)rawliteral";
WebSocketsServer webSocket = WebSocketsServer(81);
ESP8266WebServer server(80);
void setup() {
Serial.begin(9600);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
WiFi.mode(WIFI_AP); // Access point modunda.
WiFi.softAP(ssid, password); // Kablosuz ağı başlat.
IPAddress IP = WiFi.softAPIP();
server.on("/", [](){
server.send(200, "text/html", INDEX_HTML);
});
server.begin();
webSocket.begin();
webSocket.onEvent(webSocketFonksiyonu);
}
void loop() {
if (karakter == 'a') { // ileri.
analogWrite(IN1, hiz);
analogWrite(IN2, 0);
analogWrite(IN3, hiz);
analogWrite(IN4, 0);
} else if (karakter == 'b') { // Geri.
analogWrite(IN1, 0);
analogWrite(IN2, hiz);
analogWrite(IN3, 0);
analogWrite(IN4, hiz);
} else if (karakter == 'c') { // Sol.
analogWrite(IN1, hiz);
analogWrite(IN2, 0);
analogWrite(IN3, 0);
analogWrite(IN4, hiz);
} else if (karakter == 'd') { // Sağ.
analogWrite(IN1, 0);
analogWrite(IN2, hiz);
analogWrite(IN3, hiz);
analogWrite(IN4, 0);
} else if (karakter == 'e') { // Dur.
analogWrite(IN1, 0);
analogWrite(IN2, 0);
analogWrite(IN3, 0);
analogWrite(IN4, 0);
}
webSocket.loop();
server.handleClient();
}
void webSocketFonksiyonu(byte sayi, WStype_t type,byte * veri, size_t length){
switch(type) {
case WStype_DISCONNECTED:
break;
case WStype_CONNECTED:
{IPAddress ip = webSocket.remoteIP(sayi);}
break;
case WStype_TEXT:
karakter = veri[0];
Serial.println(karakter);
webSocket.broadcastTXT(veri, length);
break;
case WStype_BIN:
hexdump(veri, length);
webSocket.sendBIN(sayi, veri, length);
break;
default:
break;
}
}
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
/* Put your SSID & Password */
const char* ssid = "NodeMCU"; // Enter SSID here
const char* password = "12345678"; //Enter Password here
/* Put IP Address details */
IPAddress local_ip(192,168,1,1);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);
ESP8266WebServer server(80);
uint8_t LED1pin = D7;
bool LED1status = LOW;
uint8_t LED2pin = D6;
bool LED2status = LOW;
void setup() {
Serial.begin(9600);
pinMode(LED1pin, OUTPUT);
pinMode(LED2pin, OUTPUT);
WiFi.softAP(ssid, password);
WiFi.softAPConfig(local_ip, gateway, subnet);
delay(100);
server.on("/", handle_OnConnect);
server.on("/led1on", handle_led1on);
server.on("/led1off", handle_led1off);
server.on("/led2on", handle_led2on);
server.on("/led2off", handle_led2off);
server.onNotFound(handle_NotFound);
server.begin();
Serial.println("HTTP server started");
}
void loop() {
server.handleClient();
if(LED1status)
{digitalWrite(LED1pin, HIGH);}
else
{digitalWrite(LED1pin, LOW);}
if(LED2status)
{digitalWrite(LED2pin, HIGH);}
else
{digitalWrite(LED2pin, LOW);}
}
void handle_OnConnect() {
LED1status = LOW;
LED2status = LOW;
Serial.println("GPIO7 Status: OFF | GPIO6 Status: OFF");
server.send(200, "text/html", SendHTML(LED1status,LED2status));
}
void handle_led1on() {
LED1status = HIGH;
Serial.println("GPIO7 Status: ON");
server.send(200, "text/html", SendHTML(true,LED2status));
}
void handle_led1off() {
LED1status = LOW;
Serial.println("GPIO7 Status: OFF");
server.send(200, "text/html", SendHTML(false,LED2status));
}
void handle_led2on() {
LED2status = HIGH;
Serial.println("GPIO6 Status: ON");
server.send(200, "text/html", SendHTML(LED1status,true));
}
void handle_led2off() {
LED2status = LOW;
Serial.println("GPIO6 Status: OFF");
server.send(200, "text/html", SendHTML(LED1status,false));
}
void handle_NotFound(){
server.send(404, "text/plain", "Not found");
}
String SendHTML(uint8_t led1stat,uint8_t led2stat){
String ptr = "<!DOCTYPE html> <html>\n";
ptr +="<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
ptr +="<title>LED Control</title>\n";
ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
ptr +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;} h3 {color: #444444;margin-bottom: 50px;}\n";
ptr +=".button {display: block;width: 80px;background-color: #1abc9c;border: none;color: white;padding: 13px 30px;text-decoration: none;font-size: 25px;margin: 0px auto 35px;cursor: pointer;border-radius: 4px;}\n";
ptr +=".button-on {background-color: #1abc9c;}\n";
ptr +=".button-on:active {background-color: #16a085;}\n";
ptr +=".button-off {background-color: #34495e;}\n";
ptr +=".button-off:active {background-color: #2c3e50;}\n";
ptr +="p {font-size: 14px;color: #888;margin-bottom: 10px;}\n";
ptr +="</style>\n";
ptr +="</head>\n";
ptr +="<body>\n";
ptr +="<h1>ESP8266 Web Server</h1>\n";
ptr +="<h3>Using Access Point(AP) Mode</h3>\n";
if(led1stat)
{ptr +="<p>LED1 Status: ON</p><a class=\"button button-off\" href=\"/led1off\">OFF</a>\n";}
else
{ptr +="<p>LED1 Status: OFF</p><a class=\"button button-on\" href=\"/led1on\">ON</a>\n";}
if(led2stat)
{ptr +="<p>LED2 Status: ON</p><a class=\"button button-off\" href=\"/led2off\">OFF</a>\n";}
else
{ptr +="<p>LED2 Status: OFF</p><a class=\"button button-on\" href=\"/led2on\">ON</a>\n";}
ptr +="</body>\n";
ptr +="</html>\n";
return ptr;
}
ESP32 kodu
/* ESP32 Access Point modunda calismaktadir.
"Robot" agina baglanin. Sifre: 12345678
Tarayici: 192.168.4.1
*/
#include <WiFi.h> // ESP32 wifi
#include <WebServer.h> // ESP32 websuncusu
#include <WebSocketsServer.h> // WebSockets v2.3.6
const char* ssid = "Robot";
const char* password = "12345678";
const byte IN1 = 16, IN2 = 17, IN3 = 18, IN4 = 19; // ESP32 pinleri
int hiz = 150;
char karakter;
WebServer server(80);
WebSocketsServer webSocket(81);
// PWM kanallari
int ch1=0, ch2=1, ch3=2, ch4=3;
static const char PROGMEM INDEX_HTML[] = R"rawliteral(
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1.0,user-scalable=0">
<title>Wifi Robot</title>
<style>
body{background:#808080;font-family:Arial;}
.button{border:none;color:white;padding:17px;width:100%;font-size:16px;margin:4px;border-radius:12px;}
.green{background:#090;} .red{background:#F00;}
</style>
<script>
var w;
function start(){
w=new WebSocket('ws://'+location.hostname+':81/');
}
function gonder(e){ w.send(e.id); }
</script>
</head>
<body onload="start()">
<table width="100%"><tr><td bgcolor="#FFF" align="center">Wifi Robot</td></tr></table>
<table width="100" align="center">
<tr><td></td><td><button id="a" onclick="gonder(this)" class="button green">ileri</button></td><td></td></tr>
<tr>
<td><button id="c" onclick="gonder(this)" class="button green">Sol</button></td>
<td><button id="e" onclick="gonder(this)" class="button red">Dur</button></td>
<td><button id="d" onclick="gonder(this)" class="button green">Sag</button></td>
</tr>
<tr><td></td><td><button id="b" onclick="gonder(this)" class="button green">Geri</button></td><td></td></tr>
</table>
</body>
</html>
)rawliteral";
void setup() {
Serial.begin(9600);
// PWM kanallarini baslat
ledcSetup(ch1, 500, 8); ledcAttachPin(IN1, ch1);
ledcSetup(ch2, 500, 8); ledcAttachPin(IN2, ch2);
ledcSetup(ch3, 500, 8); ledcAttachPin(IN3, ch3);
ledcSetup(ch4, 500, 8); ledcAttachPin(IN4, ch4);
WiFi.softAP(ssid, password); // AP baslat
server.on("/", [](){ server.send(200,"text/html",INDEX_HTML); });
server.begin();
webSocket.begin();
webSocket.onEvent(webSocketFonksiyonu);
}
void loop() {
// ileri
if (karakter=='a'){
ledcWrite(ch1,hiz); ledcWrite(ch2,0);
ledcWrite(ch3,hiz); ledcWrite(ch4,0);
}
// geri
else if (karakter=='b'){
ledcWrite(ch1,0); ledcWrite(ch2,hiz);
ledcWrite(ch3,0); ledcWrite(ch4,hiz);
}
// sol
else if (karakter=='c'){
ledcWrite(ch1,hiz); ledcWrite(ch2,0);
ledcWrite(ch3,0); ledcWrite(ch4,hiz);
}
// sag
else if (karakter=='d'){
ledcWrite(ch1,0); ledcWrite(ch2,hiz);
ledcWrite(ch3,hiz); ledcWrite(ch4,0);
}
// dur
else if (karakter=='e'){
ledcWrite(ch1,0); ledcWrite(ch2,0);
ledcWrite(ch3,0); ledcWrite(ch4,0);
}
webSocket.loop();
server.handleClient();
}
void webSocketFonksiyonu(byte s, WStype_t t, byte* v, size_t l){
if(t==WStype_TEXT){
karakter = v[0]; // gelen komut
Serial.println(karakter);
webSocket.broadcastTXT(v, l);
}
}
/* ESP32 Wifi Robot - Modern SPA + Mobil Panel
AP: "Robot" Sifre: "12345678"
Tarayici: http://192.168.4.1
*/
#include <WiFi.h> // ESP32 WiFi (arduino-esp32 core)
#include <WebServer.h> // ESP32 WebServer (arduino-esp32 core)
#include <WebSocketsServer.h> // WebSocketsServer // v2.3.6
const char* apSsid = "Robot";
const char* apSifre = "12345678";
const byte IN1 = 16, IN2 = 17, IN3 = 18, IN4 = 19; // Motor surucu pinleri (L298N icin uygun)
int hiz = 150; // 0-255
char karakter = 'e'; // baslangicta dur
WebServer sunucu(80);
WebSocketsServer webSoket(81);
const int kanal1 = 0, kanal2 = 1, kanal3 = 2, kanal4 = 3; // PWM kanallari
// SPA HTML -------------
static const char PROGMEM INDEX_HTML[] = R"rawliteral(
<!DOCTYPE html>
<html lang="tr">
<head>
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no">
<title>Wifi Robot Kontrol</title>
<style>
*{box-sizing:border-box;margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Arial;}
body{background:#0f172a;color:#e5e7eb;display:flex;flex-direction:column;min-height:100vh;}
.header{padding:12px 16px;text-align:center;background:#020617;box-shadow:0 2px 6px rgba(0,0,0,0.6);}
.header h1{font-size:20px;margin-bottom:4px;}
.header span{font-size:12px;color:#9ca3af;}
.kapsayici{flex:1;display:flex;flex-direction:column;justify-content:space-between;padding:12px;max-width:480px;margin:0 auto;width:100%;}
.kart{background:#020617;border-radius:18px;padding:12px 14px;margin-bottom:12px;box-shadow:0 10px 30px rgba(0,0,0,0.7);border:1px solid #1f2937;}
.baslik{font-size:14px;margin-bottom:8px;color:#9ca3af;}
.hiz-satir{display:flex;align-items:center;gap:10px;}
.hiz-deger{min-width:46px;text-align:right;font-variant-numeric:tabular-nums;font-size:14px;color:#fde68a;}
input[type=range]{-webkit-appearance:none;width:100%;height:6px;border-radius:999px;background:#1f2937;outline:none;}
input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:22px;height:22px;border-radius:50%;background:#38bdf8;border:2px solid #0f172a;box-shadow:0 0 0 4px rgba(56,189,248,0.2);}
input[type=range]::-moz-range-thumb{width:22px;height:22px;border-radius:50%;background:#38bdf8;border:2px solid #0f172a;}
.kontrol-kutu{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,70px);gap:10px;align-items:center;justify-items:center;}
.btn{border:none;border-radius:18px;padding:8px 10px;font-size:15px;font-weight:500;color:#e5e7eb;background:#1d4ed8;display:flex;flex-direction:column;align-items:center;justify-content:center;min-width:70px;min-height:60px;box-shadow:0 8px 18px rgba(15,23,42,0.8);transition:transform .08s ease,box-shadow .08s ease,background .15s ease;touch-action:manipulation;}
.btn span.ikon{font-size:18px;margin-bottom:4px;}
.btn-ileri{grid-column:2;grid-row:1;background:#16a34a;}
.btn-geri{grid-column:2;grid-row:3;background:#16a34a;}
.btn-sol{grid-column:1;grid-row:2;background:#16a34a;}
.btn-sag{grid-column:3;grid-row:2;background:#16a34a;}
.btn-dur{grid-column:2;grid-row:2;background:#ef4444;}
.btn:active{transform:translateY(1px) scale(0.98);box-shadow:0 4px 10px rgba(0,0,0,0.8);}
.durum-satir{display:flex;align-items:center;justify-content:space-between;gap:10px;}
.badge{padding:4px 8px;border-radius:999px;font-size:11px;background:#1f2937;color:#9ca3af;display:inline-flex;align-items:center;gap:6px;}
.badge span.nokta{width:8px;height:8px;border-radius:999px;background:#ef4444;box-shadow:0 0 0 4px rgba(239,68,68,0.15);}
.badge span.nokta.baglanti-ok{background:#22c55e;box-shadow:0 0 0 4px rgba(34,197,94,0.25);}
.durum-metin{font-size:12px;color:#9ca3af;}
.footer{font-size:11px;text-align:center;padding:8px;color:#6b7280;}
@media (min-height:700px){
.kontrol-kutu{grid-template-rows:repeat(3,86px);}
.btn{min-height:74px;}
}
</style>
</head>
<body>
<div class="header">
<h1>Wifi Robot Kontrol</h1>
<span>ESP32 · Gercek zamanli kontrol</span>
</div>
<div class="kapsayici">
<div class="kart">
<div class="baslik">Hiz Ayari</div>
<div class="hiz-satir">
<input id="hiz" type="range" min="80" max="255" value="150">
<div class="hiz-deger"><span id="hizDeger">150</span></div>
</div>
</div>
<div class="kart">
<div class="baslik">Yön Kontrol</div>
<div class="kontrol-kutu">
<button class="btn btn-ileri" data-kod="a"><span class="ikon">▲</span>ileri</button>
<button class="btn btn-sol" data-kod="c"><span class="ikon">◀</span>sol</button>
<button class="btn btn-dur" data-kod="e"><span class="ikon">■</span>dur</button>
<button class="btn btn-sag" data-kod="d"><span class="ikon">▶</span>sag</button>
<button class="btn btn-geri" data-kod="b"><span class="ikon">▼</span>geri</button>
</div>
</div>
<div class="kart">
<div class="baslik">Durum</div>
<div class="durum-satir">
<div class="badge"><span id="bagNokta" class="nokta"></span><span id="bagYazi">Baglanti yok</span></div>
<div class="durum-metin" id="durumMetin">Komut bekleniyor...</div>
</div>
</div>
</div>
<div class="footer">Temrinler · ESP32 SPA Arayüz</div>
<script>
let s=null, bagli=false, sonKod='e';
const bagNokta=document.getElementById('bagNokta');
const bagYazi=document.getElementById('bagYazi');
const durumMetin=document.getElementById('durumMetin');
const hizSlider=document.getElementById('hiz');
const hizDeger=document.getElementById('hizDeger');
function baglantiDurumu(geldi){
bagli=geldi;
if(bagli){
bagNokta.classList.add('baglanti-ok');
bagYazi.textContent='Bagli';
durumMetin.textContent='Komut bekleniyor...';
}else{
bagNokta.classList.remove('baglanti-ok');
bagYazi.textContent='Baglanti yok';
durumMetin.textContent='Tekrar baglaniliyor...';
}
}
function soketAc(){
try{
s=new WebSocket('ws://'+location.hostname+':81/');
s.onopen=()=>baglantiDurumu(true);
s.onclose=()=>{baglantiDurumu(false); setTimeout(soketAc,1500);}
s.onerror=()=>{baglantiDurumu(false);}
s.onmessage=(e)=>{ /* ileri gelisim icin saklanabilir */ }
}catch(err){
baglantiDurumu(false);
setTimeout(soketAc,2000);
}
}
function komutGonder(kod){
if(!s || s.readyState!==1) return;
sonKod=kod;
s.send(kod);
if(kod==='a')durumMetin.textContent='Ileri...';
else if(kod==='b')durumMetin.textContent='Geri...';
else if(kod==='c')durumMetin.textContent='Sol...';
else if(kod==='d')durumMetin.textContent='Sag...';
else if(kod==='e')durumMetin.textContent='Duruldu.';
}
function hizGonder(){
if(!s || s.readyState!==1) return;
const deger=parseInt(hizSlider.value);
hizDeger.textContent=deger;
s.send('h'+deger.toString()); // 'hxxx' formatinda hiz gonderimi
}
document.addEventListener('DOMContentLoaded',()=>{
soketAc();
document.querySelectorAll('.btn').forEach(btn=>{
const kod=btn.getAttribute('data-kod');
const basFunc=()=>komutGonder(kod);
btn.addEventListener('click',basFunc);
btn.addEventListener('touchstart',e=>{e.preventDefault();basFunc();});
});
hizSlider.addEventListener('input',()=>{hizDeger.textContent=hizSlider.value;});
hizSlider.addEventListener('change',hizGonder);
});
</script>
</body>
</html>
)rawliteral";
// SPA HTML SONU -----------
void motorDur(){ ledcWrite(kanal1,0); ledcWrite(kanal2,0); ledcWrite(kanal3,0); ledcWrite(kanal4,0); } // tum motorler durdurulmekte
void motorIleri(){ ledcWrite(kanal1,hiz); ledcWrite(kanal2,0); ledcWrite(kanal3,hiz); ledcWrite(kanal4,0); } // ileri surus yapilmakta
void motorGeri(){ ledcWrite(kanal1,0); ledcWrite(kanal2,hiz); ledcWrite(kanal3,0); ledcWrite(kanal4,hiz); } // geri surus yapilmakta
void motorSol(){ ledcWrite(kanal1,hiz); ledcWrite(kanal2,0); ledcWrite(kanal3,0); ledcWrite(kanal4,hiz); } // sola donus yapilmakta
void motorSag(){ ledcWrite(kanal1,0); ledcWrite(kanal2,hiz); ledcWrite(kanal3,hiz); ledcWrite(kanal4,0); } // saga donus yapilmakta
void webSoketFonksiyonu(byte no, WStype_t tur, uint8_t* veri, size_t uzunluk){ // websocket olayi islenmekte
if(tur==WStype_TEXT){
if(uzunluk==1){ // tek karakter komutlar (yon)
karakter = (char)veri[0];
Serial.print("Komut: "); Serial.println(karakter);
}else if(uzunluk>=2 && veri[0]=='h'){ // hiz ayari: "h150" gibi
int yeniHiz = atoi((const char*)(veri+1));
if(yeniHiz<0) yeniHiz=0; if(yeniHiz>255) yeniHiz=255;
hiz = yeniHiz;
Serial.print("Hiz: "); Serial.println(hiz);
}
}
}
void setup(){
Serial.begin(9600);
// PWM kanallari hazirlaniyor
ledcSetup(kanal1,5000,8); ledcAttachPin(IN1,kanal1);
ledcSetup(kanal2,5000,8); ledcAttachPin(IN2,kanal2);
ledcSetup(kanal3,5000,8); ledcAttachPin(IN3,kanal3);
ledcSetup(kanal4,5000,8); ledcAttachPin(IN4,kanal4);
motorDur();
WiFi.mode(WIFI_AP); WiFi.softAP(apSsid, apSifre); // AP modu baslatilmakta
Serial.print("AP IP: "); Serial.println(WiFi.softAPIP());
sunucu.on("/",[](){ sunucu.send(200,"text/html",INDEX_HTML); }); // SPA gonderilmekte
sunucu.begin();
webSoket.begin(); webSoket.onEvent(webSoketFonksiyonu); // WebSocket baslatilmakta
}
void loop(){
if(karakter=='a') motorIleri();
else if(karakter=='b') motorGeri();
else if(karakter=='c') motorSol();
else if(karakter=='d') motorSag();
else motorDur();
webSoket.loop();
sunucu.handleClient();
}

No responses yet