• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

esp12 как с стационарного компа поменять цифру на ее страничке?

yuran111

New member
программа которая крутится в esp12 включает такие библиотеки:
  1. #include <ESP8266WiFi.h>
  2. #include <WiFiClient.h>
  3. #include <ESP8266WebServer.h>
  4. #include <ESP8266mDNS.h>
  5. по нажатию на кнопку я получаю на ее вебинтерфейсе либо 0(ноль) либо 1(единичку).
  6. хочу со стационарного компа на си# написать программку которая смогла бы поменять эту цифру в вебинтерфейсе esp12 на 2(двоечку). программка на компе уже получает эту циферку 0 или 1, а как туда закинуть "2"????

 

kalobyte

New member
что-то я ничего не понял
где 2? 0 и 1 это состояние выводов, 2 там не может быть по определению, если только порт не настроен на шим

ты код покажи или это пример в ардуине?
 

yuran111

New member
что-то я ничего не понял
где 2? 0 и 1 это состояние выводов, 2 там не может быть по определению, если только порт не настроен на шим

ты код покажи или это пример в ардуине?
код в esp написан в ардуино иде и работает нормально. еспешка на свою страничку кидает циферки в зависимости от состояния выводов. а я хотел бы поменять эту циферку из стационарного компа, который в одной сети и видит эти циферки в браузере на страничке еспешки. т е программа для компа написанная на си шарп как-то должна заменить циферку на страничке еспешки. я получить цифру со странички могу и поменять ее могу, а как туда обратно ее закинуть не понимаю.
 

kalobyte

New member
ну в целом это делается так:
в щарпе тебе надо сделать гет запрос типа ?digit=2
в ардуине есть сервер, там есть пример обработки приходящего гет вызова
у тебя будет переменная digit и вот это значение и бери и делай чего хочеш
 

yuran111

New member
ну в целом это делается так:
в щарпе тебе надо сделать гет запрос типа ?digit=2
в ардуине есть сервер, там есть пример обработки приходящего гет вызова
у тебя будет переменная digit и вот это значение и бери и делай чего хочеш
спасибо. как то так и представлял, ну правда думал что мне подойдет только POST запрос, но как то мало инфы в инете или не там искал. я не программист, но обычно с такими простые программки писал легко при помощи гугла, а тут застрял.
 

yuran111

New member
еще добавлю может кто посоветует правильно ли я все задумал, может все можно намного проще. я и еще пятьдесят человек наблюдают за состоянием ноги еспешки со своих компов. все в одной сети и отображается это в трее светофорчиком. и вот иногда мне надо с любого из этих компов включить всем желтый свет.
я использовал это
  1. #include <ESP8266WiFi.h>
  2. #include <WiFiClient.h>
  3. #include <ESP8266WebServer.h>
  4. #include <ESP8266mDNS.h> а правильнее наверно MQTT? только вот на си не нашел примеров MQTT простых. на еспешку полно кстати.
 

kalobyte

New member
тебе нен ужен mqtt
правда насчет 50 я не уверен, что есп столько потянет даже не одновременны запросов
но mqtt подразумевает наличие стороннего сервера или сервиса, если хочеш ввести его, то да
ну правда думал что мне подойдет только POST запро
пост нужен для передачи больших массивов данных, больше 255 что ли, да и я думаю на есп буфер пот такое еще меньше

примеры mqtt есть в библиотеке pubsub для ардуины
а брокер можеш этот взять и примеры на шарпе там есть, правда там вроде на 50 соединений уже платно
Documentation - CloudMQTT
ну или поставить свой
 

KupVadim

New member
Не уверен что смогу точно вам помочь, но все же.

1. Самый простой способ для вас отправка HTTP запроса на ESP (GET или POST не суть важно)
2. Уже вижу что вы используете веб сервер

Итого на стороне ESP делает что то типа такого, если вы уже используете ESP8266WebServer.h:
Код:
server.on("/changeState", []() {
// Код который вы хотите выполнить при получении запроса от C# приложения
    server.send(200, "application/json", "{result: \"OK\"}");
  });
C# приложение:
Код:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); //URL вида http://[IP]/changeState, где [IP] - домен или IP адрес вашей ESP
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
    Console.WriteLine("Всё норм.");
}
else if (response.StatusCode == HttpStatusCode.NotFound)
{
    Console.WriteLine("Такой страницы нет.");
}
response.Close();
Передача параметров для GET запроса - достаточно добавить в URL ?someParam=2, где someParam имя параметра. НА стороне ESP для получения параметра используйте server.arg("someParam").

Но с точки зрения корректности разрабатываемого вами API, GET запросы используются для получения данных (т.е. было правильно сделать так, что бы GET запрос не менял состояние вашего приложения или ESP), POST запросы для как раз таки для отправки данных, которые вы хотите явно передать в ваше приложение (хотя все чуть сложнее, т.к. HTTP запросов не только два вида, подробнее о правильном построении вашего API почитайте про RESTFull services). Т.е. я бы рекомендовал в данном случае использовать POST запрос. Работать с ним не намного сложнее.


 
Последнее редактирование:
Сверху Снизу