Вкл/выкл светодиода через сайт в интернете

Надо сделать пустую страницу сайта с одной кнопкой, при нажатии которой ESP8266 включает светодиод и обратно сайту даёт информацию о состоянии светодиода.

В локальной точке доступа у меня всё работает, я просто скачал с интернета рабочий скетч, а мне важно что бы работало не локально, а с сайта в интернете. Можно на любом бесплатном хостинге страничку сделать.

Привет. Гугл предоставляет такую возможность бесплатно. Создаётся гугл таблица/гугл док, создаётся гугл скрипт для общения с контроллером. Любая инфа может записываться контроллером в таблицу (в нужную ячейку), а также считываться из нужной ячейки.

ПыСы:
Таблицу можно редактировать с телефона в любом месте.

Реализуй, пожалуйста ? 1000р. переведу сразу

))
Денег не надо. Я помогу.

Что от меня требуется ? У меня есть ESP8266Wi-Fi

Нужно будет сконектиться. Скинь емейл или ватсапп или скайп. Дальше разберёмся )

Какие, в пень, таблицы??? Несколько строк на php.

На сервере:
Файлы index.php и led.txt. Второй нужен для хранения состояния светодиода, и его будет читать ESP8266.
led.txt должен быть открыт для записи вебсервером. Если не знаешь - как, то просто права “666” на него. Это файл содержит одно слово: on или off. Изначально - просто не забудь его создать.

index.php
<html>
<body>

<?php 
if (isset($_GET["newstate"])) {
  $myfile = fopen("led.txt", "w") or die("Unable to open file!");
  $txt = $_GET["newstate"];
  fwrite($myfile, $txt);
  fclose($myfile);
}

$myfile = fopen("led.txt", "r") or die("Unable to open file!");
echo "Led is " . fgets($myfile);
fclose($myfile);
?> 

<form action="index.php" method="get">
New State: <input type="text" name="newstate"><br>
<input type="submit">
</form>

</body>
</html> 

В ESP8266 фактически штатный пример из ИДЕ для httpClient с добавдением включения диодика.

82266WebLED.ino
#include <Arduino.h>

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>

#include <ESP8266HTTPClient.h>

#include <WiFiClient.h>

ESP8266WiFiMulti WiFiMulti;

void setup() {
  delay(2000); // для красоты ;)

  pinMode(LED_BUILTIN, OUTPUT); //пин встроенного светодиода

  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP("SSID", "скажЫПарол"); // твой ВиФи и пароль
}

void loop() {

  if ((WiFiMulti.run() == WL_CONNECTED)) {

    WiFiClient client;

    HTTPClient http;

    // Serial.print("[HTTP] begin...\n");
   // LEDTEST - папка в которую ты запихнешь два файла на сервере
    if (http.begin(client, "http://www.мойсайт.хрень/LEDTEST/led.txt")) { // HTTP

      // Serial.print("[HTTP] GET...\n");
      //  start connection and send HTTP header
      int httpCode = http.GET();

      // httpCode will be negative on error
      if (httpCode > 0) {
        // HTTP header has been send and Server response header has been handled
        Serial.printf("[HTTP] GET... code: %d\n", httpCode);

        // file found at server
        if (httpCode == HTTP_CODE_OK ||
            httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
          String payload = http.getString();
          // Serial.println(payload);
          if (payload == "on" || payload == "On" || payload == "ON") {
            digitalWrite(LED_BUILTIN, LOW);
          } else {
            digitalWrite(LED_BUILTIN, HIGH);
          }
        }
      } else {
        // Serial.printf("[HTTP] GET... failed, error: %s\n",
        // http.errorToString(httpCode).c_str());
      }

      http.end();
    } else {
      Serial.printf("[HTTP} Unable to connect\n");
    }
  }

  delay(500);
}

Я ничего не стал редактировать в примере из ИДЕ, только печать закомментировал и добавил строчки для диода, чтобы было понятно, что перед заданием ВОПРОСА на форуме, нужно головой вокруг себя покрутить.
Еще раз, для закрепления предмета: ЭТО ШТАТНЫЙ ПРИМЕР ИЗ ИДЕ. Его не надо писать.

2 лайка

Тебе выслать номер биткоин кошелька?

Я бы selectom сделал. А так согласен.

index.php с select'ом и проверкой статуса перед записью
<html>
<body>

<?php
if (isset($_GET["newstate"])) {
  $txt = trim($_GET["newstate"]);
  if ($txt == "on" || $txt == "off") {
    $myfile = fopen("led.txt", "w") or die("Unable to open file!");
    fwrite($myfile, $txt);
    fclose($myfile);
  } else {
    echo "Incorrect state<br><hr>";
  }
}

$myfile = fopen("led.txt", "r") or die("Unable to open file!");
echo "Led is " . fgets($myfile);
fclose($myfile);
?>

<form action="index.php" method="get">
New State:.
 <select name="newstate">
  <option selected value="_blank"></option>
  <option value="on">On</option>
  <option value="off">Off</option>
 </select>
<input type="submit">
</form>

</body>
</html>

2 лайка

Угу :wink: плюс векторную анимацию рубильника, плюс оформление на Бутстрапе под разные экраны!
Могём!
И бэкэнд я бы на своём сервере писал на Flask или Джанго. Я не люблю php.
Тут принцип был важен. Меня подорвали какие-то таблицы, Прости Господи!

А меня - что статус писать ручками надо :rofl:
Ну да, навертеть там можно много чего ))

а вот интересно, есть под оные аналогичное php-pear?

кажется сайт http://h92467eo.beget.tech/ не видит плату, ошибку пишет, в файл led.txt запись идёт

[HTTP] GET... code: 403

похоже ESP к роутеру не коннектится, хотя имя и пароль верные, так как в другом скетче, который с таблицей, работает, но там с таким кодом

const char* ssid = "ZyXEL_KEENETIC_DA9466";
const char* password = "12345678";
WiFi.begin(ssid, password)

либо дело в чём-то другом :man_shrugging:

у твоего провайдера запрещен доступ от железок (есп и т.п.). (чаще всего это на бесплатных или дешевых тарифах). Ошибка 403 именно это и обозначает.
Лечится установкой заголовков http или выбором нормального провайдера.

BOOM, вот тебе красивая кнопочка! http://pda.mycortez.ru/LEDTEST/

2ТС: можешь на моём сервере поиграться пока.

1 лайк

симпатишно!

Осталось решить вопросы по безопасности, доступ к страничке по авторизации, код защитить от инъекций

Доступ к странице можно защитить паролем с помощью .htpasswd

я просто отключу вечером. Не параной! Кому нужен мой сервер?

ЗЫ: потом список IP с которых ко мне ходили выложу тут! ;))

1 лайк

Всё пропало !

Я - коварен!!! :cowboy_hat_face: