Подошел, к тому на что надеялся!
Проект: … … , хм а что проект, обычный самый.
Сам проект на GitHub-бе
Там есть README.md
Отлично так все расписано. и тут коротенько отпишу.
Управление с девайса смарта через браузер - лодочным мотором.
Задумка так себе, в неба звезд не хватает, и все же, может кому будет полезной, для понимания таинств природы в электрических сетях
Прикручу сюда, от туда скрин-> начальное действие построения
А в чем смысл проекта?
Зашел на гитхаб, там просто html страничка с css и js. А где управление мотором? Или я поспешил и еще не все выложено?
Порадовал такой кусок в main.js
// --- Остальной код (подключение, команды) остаётся как был ---
// (скопируй сюда предыдущий код из connectBtn, sendCommand и т.д.)
// или я пришлю всё целиком в следующем сообщении
// Кнопки управления
document.getElementById("btnOn").onclick = () => sendCommand("led/on");
document.getElementById("btnOff").onclick = () => sendCommand("led/off");
То есть это кто то пишет? не сам?
кто пишет, хММ вопрос вполне на уровне. Пусть это будет тайной.
Наверно пишет тот кто хочет написать, это вполне нормальный ответ.
что ещё добавить, это же GitHub?, да" вы тоже можите руку приложить. А что слабо? …).
Что делают на GitHub-бе, наверно пишут совместный код, работают над проектом, делятся, учатся, друг у друга, что то ещё, собираются в команды единомышленники.
Ладно: что первое, это писать код как должно.
Второе: скачал, установил Android-Studio это дикий тормоз\ мягонько сказано, и без него через браузер вполне можно обойтись, управлением смарт-девайсом, через браузер. Что не исключает сделать файл .akr, и закидывать. Как вам такое? это не вопрос, это что делает этот проект.
И по случаю, вы видели только начало проекта, его начальную стадию. Пока это только разметка управлением. Вижу вы внимательно ознакомились, там есть ещё два раздела.
Как то arduino-nano/ i ESP-01.
Это как раз в рамках этого форума. Дальше подтяну сюда код от них, вот тогда и поговорить будет о чем!!!
А да вижу что не все папки есть, они пусты поэтому GitHub их не заметил, он работает только с файлами(папки обходит стороной), но там есть README.mb и в нем вполне написано, и они там есть. Если есть невидимые папки, значит и будут в дальнейшем с содержанием
Вы можите принять участие, не всеж сидеть тут и сраться, у кого длинней.
вполне написано ясно.
если писали через ии, то проверили бы все… а то ии такие, напишут что в следующим сообщении скинут, но не факт, если не запросите)))
Предлагаю тему снести нафик по причине вышеизложенного автором темы.
Т.е. вы здесь чужой проект тиснули?
Я понимаю вы не читатель, вы писатель, но прошу осилить первые 3 предложения по правилам данного раздела, сразу приведу на правила ссылку чтобы не утруждать вас поисками.
Единственный раздел форума, где автор темы отвечает на вопросы читателей, а не наоборот. Предназначен для законченных проектов или проектов в работе. Публикация скетча обязательна.
Вы можите принять участие, не всеж сидеть тут и сраться, у кого длинней.
Пока не вижу смысла, думаю при таком подходе вы и измерить правильно не сможете.
не всеж сидеть тут и сраться,
в этой теме только это и остается делать
Теме место в ЧЧ, туда она и отправилась.
И есть «смутное сомнение», что всякие там «лодки на управлении» сейчас должны быть под жесточайшим запретом.
ТС хотел вовлечь во что-то «интересное» со сроком «пожизненное».
ну да ))
![]()
![]()
![]()
![]()
![]()
![]()
Почему вы и вдруг это придумали? Вот прямо сейчас пишу скетч)) для ESP32-01
Серверную часть , да тут IDE глюканула, пока задержка, никак не выберу настройки, памяти мало в ней 512, весь html код не умещается, надо разнести на части.
Ждите)))
/**
* Флаг состояния подключения к устройству.
* @type {boolean}
*/
let connected = false;
/**
* IP-адрес сервера ESP-01 по умолчанию.
* Используется для формирования URL при отправке команд.
* @type {string}
*/
let serverIP = "192.168.4.1";
/**
* Пароль для доступа к устройству.
* Проверяется при попытке подключения.
* @type {string}
*/
let devicePassword = "";
// DOM-элементы — добавим новые
/**
* Элемент отображения текущего статуса устройства (режим: AP/STA).
* @type {HTMLElement}
*/
const deviceStatus = document.getElementById('deviceStatus');
/**
* Элемент отображения имени текущей Wi-Fi сети, к которой подключено устройство.
* @type {HTMLElement}
*/
const currentNetwork = document.getElementById('currentNetwork');
/**
* Элемент отображения IP-адреса устройства.
* @type {HTMLElement}
*/
const deviceIP = document.getElementById('deviceIP');
/**
* Кнопка инициализации сканирования доступных Wi-Fi сетей.
* @type {HTMLElement}
*/
const scanBtn = document.getElementById('scanBtn');
/**
* Кнопка запуска режима точки доступа (AP) на устройстве.
* @type {HTMLElement}
*/
const startAPBtn = document.getElementById('startAPBtn');
/**
* Секция настроек подключения, отображается при старте.
* @type {Element}
*/
const setupSection = document.querySelector('.setup');
/**
* Панель управления, отображается после успешного подключения.
* @type {HTMLElement}
*/
const controlPanel = document.getElementById('controlPanel');
/**
* Элемент отображения текущего статуса подключения интерфейса.
* @type {Element}
*/
const status = document.querySelector('.status');
/**
* Поле ввода IP-адреса сервера, позволяет пользователю изменить адрес назначения.
* @type {HTMLElement}
*/
const serverIPInput = document.getElementById('serverIP');
/**
* Поле ввода пароля для аутентификации при подключении к устройству.
* @type {HTMLElement}
*/
const passwordInput = document.getElementById('devicePassword');
/**
* Кнопка инициации подключения к устройству с введёнными параметрами.
* @type {HTMLElement}
*/
const connectBtn = document.getElementById('connectBtn');
/**
* Кнопка возврата из панели управления в настройки подключения.
* @type {HTMLElement}
*/
const backBtn = document.getElementById('backBtn');
/**
* Обновляет статус Wi-Fi устройства (эмуляция).
* Имитирует запрос к ESP-01, устанавливает случайный режим работы,
* имя сети и IP-адрес. Обновляет соответствующие элементы интерфейса.
* @returns {void}
*/
function updateWiFiStatus() {
status.textContent = "Запрос статуса...";
status.style.color = "orange";
// Эмуляция задержки — как будто идёт запрос к ESP
setTimeout(() => {
// Случайный режим: либо STA (подключён к сети), либо AP (своя сеть)
const modes = [
{ status: "Режим: STA", network: "HomeNet", ip: "192.168.1.105" },
{ status: "Режим: AP", network: "OKEAN_Lodka", ip: "192.168.4.1" },
{ status: "Нет подключения", network: "—", ip: "—" }
];
const mode = modes[Math.floor(Math.random() * modes.length)];
deviceStatus.textContent = mode.status;
currentNetwork.textContent = mode.network;
deviceIP.textContent = mode.ip;
status.textContent = "Готово";
status.style.color = "green";
}, 1200);
}
// Эмуляция: сканирование сетей
/**
* Обработчик клика по кнопке сканирования Wi-Fi сетей.
* Блокирует кнопку, имитирует процесс сканирования,
* выводит уведомление с результатами (эмуляция),
* затем разблокирует кнопку и обновляет статус Wi-Fi.
* @returns {void}
*/
scanBtn.onclick = function () {
scanBtn.disabled = true;
scanBtn.textContent = "Сканирую...";
setTimeout(() => {
alert("Сканирование завершено!\n\n(Это эмуляция. В реальности: HomeNet, WiFi_Guest, OKEAN_Test)");
scanBtn.disabled = false;
scanBtn.textContent = "Обновить сети";
// Можно обновить статус
updateWiFiStatus();
}, 1500);
};
// Эмуляция: запуск точки доступа
/**
* Обработчик клика по кнопке запуска режима точки доступа (AP).
* При подтверждении пользователем, имитирует запуск точки доступа,
* обновляет статус, IP-адрес и активирует режим AP.
* Также обновляет поле ввода IP на основной странице.
* @returns {void}
*/
startAPBtn.onclick = function () {
if (confirm("Запустить режим точки доступа?")) {
startAPBtn.disabled = true;
status.textContent = "Запуск AP...";
status.style.color = "blue";
setTimeout(() => {
deviceStatus.textContent = "Режим: AP";
currentNetwork.textContent = "OKEAN_Lodka";
deviceIP.textContent = "192.168.4.1";
serverIPInput.value = "192.168.4.1";
status.textContent = "Точка доступа запущена";
status.style.color = "green";
startAPBtn.disabled = false;
}, 1800);
}
};
// Инициализация — при загрузке
/**
* Инициализация при полной загрузке страницы.
* Вызывает обновление статуса Wi-Fi для отображения начальных данных.
* @returns {void}
*/
window.onload = function () {
updateWiFiStatus(); // показать статус
};
/**
* Отправляет команду на сервер устройства.
* Формирует URL на основе serverIP и переданной команды.
* Требует предварительного подключения (connected === true).
* Обрабатывает успешные и ошибочные ответы, включая сетевые ошибки.
* @param {string} command - Команда для отправки (например, "led/on").
* @returns {void}
*/
function sendCommand(command) {
if (!connected) return;
console.log(`Отправка: ${serverIP}/${command}`);
fetch(`http://${serverIP}/${command}`, {
method: "GET",
mode: "cors",
})
.then(response => {
if (response.ok) {
console.log("Команда выполнена");
} else {
console.warn("Ошибка:", response.status);
}
})
.catch(err => {
console.error("Ошибка связи:", err);
alert("❌ Нет связи с сервером. Проверьте Wi-Fi и IP.");
});
}
// Кнопки управления
/**
* Обработчик нажатия кнопки "ВКЛ".
* Отправляет команду включения на сервер.
* @listens HTMLButtonElement#click
*/
document.getElementById("btnOn").onclick = () => sendCommand("led/on");
/**
* Обработчик нажатия кнопки "ВЫКЛ".
* Отправляет команду выключения на сервер.
* @listens HTMLButtonElement#click
*/
document.getElementById("btnOff").onclick = () => sendCommand("led/off");
Этот код не рабочий, объяснения рабочие))
Они прекрасны(кто понимает)
Судя по коду, ты просто наркоман проклятый.
#include <ESP8266WiFi.h>
const char* ssid = "OKEAN_Test";
const char* password = "12345678";
WiFiServer server(80);
void setup() {
Serial.begin(115200);
delay(10);
WiFi.softAP(ssid, password);
server.begin();
Serial.println();
Serial.println("✅ ESP-01: Точка доступа запущена");
Serial.print("👉 Подключись к: ");
Serial.println(ssid);
Serial.print("🌐 IP: ");
Serial.println(WiFi.softAPIP());
}
void loop() {
WiFiClient client = server.available();
if (client) {
String req = client.readStringUntil('\r');
client.flush();
if (req.indexOf("/on") != -1) {
Serial.println("📱 КНОПКА: ВКЛ");
}
if (req.indexOf("/off") != -1) {
Serial.println("📱 КНОПКА: ВЫКЛ");
}
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.println("<h1>🌊 OKEAN_Test</h1>");
client.println("<a href='/on'><button>ВКЛ</button></a> ");
client.println("<a href='/off'><button>ВЫКЛ</button></a>");
client.stop();
}
}
Можешь сильно не пыжиться, никому это всё равно не нужно…
для ESP32-01
Это что за зверь такой?
помнится вы еще код обещали для ардуино нано, сейф без ключей это не сейф!)))
#include <ESP8266WiFi.h>
ищи и тебе воздастся
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
ищи и тебе воздастся
И при чем здесь esp32? Зачем ты постишь то, в чем не разбираешься, скетчеписатель?

