Надо сделать пустую страницу сайта с одной кнопкой, при нажатии которой ESP8266 включает светодиод и обратно сайту даёт информацию о состоянии светодиода.
В локальной точке доступа у меня всё работает, я просто скачал с интернета рабочий скетч, а мне важно что бы работало не локально, а с сайта в интернете. Можно на любом бесплатном хостинге страничку сделать.
Привет. Гугл предоставляет такую возможность бесплатно. Создаётся гугл таблица/гугл док, создаётся гугл скрипт для общения с контроллером. Любая инфа может записываться контроллером в таблицу (в нужную ячейку), а также считываться из нужной ячейки.
ПыСы:
Таблицу можно редактировать с телефона в любом месте.
На сервере:
Файлы 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);
}
Я ничего не стал редактировать в примере из ИДЕ, только печать закомментировал и добавил строчки для диода, чтобы было понятно, что перед заданием ВОПРОСА на форуме, нужно головой вокруг себя покрутить.
Еще раз, для закрепления предмета: ЭТО ШТАТНЫЙ ПРИМЕР ИЗ ИДЕ. Его не надо писать.
Угу плюс векторную анимацию рубильника, плюс оформление на Бутстрапе под разные экраны!
Могём!
И бэкэнд я бы на своём сервере писал на Flask или Джанго. Я не люблю php.
Тут принцип был важен. Меня подорвали какие-то таблицы, Прости Господи!
у твоего провайдера запрещен доступ от железок (есп и т.п.). (чаще всего это на бесплатных или дешевых тарифах). Ошибка 403 именно это и обозначает.
Лечится установкой заголовков http или выбором нормального провайдера.