• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Разработка ‘библиотеки’ малого webсервера на esp8266.

AlexMelven

New member
Привет pvvx. А вот это имя aesp8266, про которое в некоторых местах на страницах веб пишется - оно в каком случае должно работать? А то у меня не работает, но случайно ввел sesp8266 и открылась страница вебсервера после подключения 8266 к роутеру. Но это все работает на компьютере, подключенном кабелем к роутеру домашнему. А вот телефон с андроидом, подключающийся по вайфай к этому же роутеру, почему-то ругается на введенный адрес sesp8266/
 

DoctorVx

New member
Привет pvvx . извини за глупый вопрос, но я новичёк в разработке под ESP8266 скажи пожалуйста куда мне необходимо в твои исходники вставить код для датчика освещённости GY-302 , согласно показаниям которого работал исполнительный механизм подключеный к какому либо GPIO и настроеный по WEB.. спасибо..
 

AlexMelven

New member
хм, странный вопрос. Вставить можешь в любое место. Главное тут - заставить все это вместе работать. А этим видимо за тебя никто заниматься не будет :) Либо начни разбираться с вебсервером и задавай конкретные вопросы, которые появятся в процессе разбирания.
 

DoctorVx

New member
хм, странный вопрос. Вставить можешь в любое место. Главное тут - заставить все это вместе работать. А этим видимо за тебя никто заниматься не будет :) Либо начни разбираться с вебсервером и задавай конкретные вопросы, которые появятся в процессе разбирания.
это то понятно что в любое место.. но я так и не нашёл где там в коде секция MAIN ну которая роде основного цикла программы.. просто мне необходимо получать данные с датчика постоянно а сам цикл опроса датчика незнаю куда воткнуть , слишком много кода.. не в секцию же сохранения настроек его вставлять.. =( как вы думаете куда лучше было бы?
 

AlexMelven

New member
самое начало находится в app->user->user_main.c, а все приложения начинаются с процедуры user_init() в этом файле.
 

DoctorVx

New member
самое начало находится в app->user->user_main.c, а все приложения начинаются с процедуры user_init() в этом файле.
А скажите пожалуйста где находятся процедуры мигающие светодиодиком на плате.. чтото весь код перерыл ничего со словами LED так и не нашёл... Спасибо.. Извините ещё раз за глупые вопросы..
 

AlexMelven

New member
процедуры прошивки, залитой в ваш модуль из китая? Или конкретно этого проекта? Насколько я помню, в этом проекте ничего не мигает светодиодиками, есть пример как 10 светодиодов подключить ко всем выходам IO и через страницу вебсервера тыкать мышкой и включать-выключать эти светодиоды. Это можно делать и сейчас - страница вебсервера через меню, под названием GPIO - жмешь мышкой в любую точку под нужным портом ввода-вывода что там есть, на этом пине должно меняться состояние..
 

pvvx

Активный участник сообщества
Привет pvvx. А вот это имя aesp8266, про которое в некоторых местах на страницах веб пишется - оно в каком случае должно работать? А то у меня не работает, но случайно ввел sesp8266 и открылась страница вебсервера после подключения 8266 к роутеру. Но это все работает на компьютере, подключенном кабелем к роутеру домашнему. А вот телефон с андроидом, подключающийся по вайфай к этому же роутеру, почему-то ругается на введенный адрес sesp8266/
Андроид не использует NetBIOS. У него свои прибамбасы. Должен работать по "ST Host Name" но и этого в конкретном смартфоне может быть не реализовано...
По поводу NETBIOS и USB-WiFi - третий параграф первого сообщения Прошивка TCP2UART переходника с настройкой по Web
 

DoctorVx

New member
процедуры прошивки, залитой в ваш модуль из китая? Или конкретно этого проекта? Насколько я помню, в этом проекте ничего не мигает светодиодиками, есть пример как 10 светодиодов подключить ко всем выходам IO и через страницу вебсервера тыкать мышкой и включать-выключать эти светодиоды. Это можно делать и сейчас - страница вебсервера через меню, под названием GPIO - жмешь мышкой в любую точку под нужным портом ввода-вывода что там есть, на этом пине должно меняться состояние..
да конкретно этого проекта.. после компиляции и прошивки мигает светодиодитк.. я вот так и не понел где это делается..
 

pvvx

Активный участник сообщества
А скажите пожалуйста где находятся процедуры мигающие светодиодиком на плате.. чтото весь код перерыл ничего со словами LED так и не нашёл... Спасибо..
Это вывод debug сообщений в TX UART1 - GPIO2. У некоторых модулей на GPOI2 через резистор подключен синий светодиод к шине 3.3 В (питания). Когда в TX UART1 выводятся символы, то синий светодиод моргает. Отключение в web-меню 'GPIO2 debug UART TX enable' отключает мигание.
На некоторых модулях синий светодиод подключен к TX UART0. Тогда моргает светодиодом при старте модуля или при работе TCP2UART или RS-485.
 
Последнее редактирование:

vad7

Active member
но я так и не нашёл где там в коде секция MAIN ну которая роде основного цикла программы.
Можно так: в функцию init_done_cb вставляется строчка:
ets_set_idle_cb(user_idle, NULL);

Выше init_done_cb вставляется:
void ICACHE_FLASH_ATTR user_idle(void)
{
.......
}
Данная функция будет регулярно выполняться.
Код в функции не должен работать долго, иначе будет сбой.
 

pvvx

Активный участник сообщества
Можно так: в функцию init_done_cb вставляется строчка:
ets_set_idle_cb(user_idle, NULL);

Выше init_done_cb вставляется:
void ICACHE_FLASH_ATTR user_idle(void)
{
.......
}
Данная функция будет регулярно выполняться.
Она будет исполнятся до первого стороннего вызова ets_set_idle_cb()
 

aloika

Active member
Прошивка работает клиентом в TCP2UART и Modbus TCP.
Ну да, в эту сторону я и начал смотреть, просто думал, что есть что-то более близкое к желаемому.
А еще такой вопрос - есть какая-то возможность задавать не IP, а непосредственно имя сайта (типа http://www.mysite.ru/ip.php) ? (т.е. где-то тут должна быть DNS, но я очень смутно себе это всё представляю).
 

pvvx

Активный участник сообщества
Ну да, в эту сторону я и начал смотреть, просто думал, что есть что-то более близкое к желаемому.
А еще такой вопрос - есть какая-то возможность задавать не IP, а непосредственно имя сайта (типа http://www.mysite.ru/ip.php) ? (т.е. где-то тут должна быть DNS, но я очень смутно себе это всё представляю).
По имени, через DNS, шаг ожидания ответа от DNS там не вставлен. Пример запроса через имя есть в SNTP...
А вот дальше будет полный затык для реализации передачи того, что надо для всех из-за множества вариантов и нет никаких разумных стандартов. Полная обработка стандарта HTTP в ESP не влезет по ресурсам. Без языка высокого уровня, тип Python или java ответ сервера не обработать. А никто не создал такую среду для ESP, чтобы в ней можно было запускать стандартные библиотеки языков высокого уровня... Экслореры на компах с трудом и помощью оператора справляются с миссией простого клиента, а вы хотите чтобы это ESP всё делал? :)
 
Последнее редактирование:

aloika

Active member
А вот дальше будет полный затык для реализации передачи того, что надо для всех из-за множества вариантов и нет никаких разумных стандартов. Полная обработка стандарта HTTP в ESP не влезет по ресурсам. Без языка высокого уровня, тип Python или java ответ сервера не обработать. А никто не создал такую среду для ESP, чтобы в ней можно было запускать стандартные библиотеки языков высокого уровня... Экслореры на компах с трудом и помощью оператора справляются с миссией простого клиента, а вы хотите чтобы это ESP всё делал? :)
Ну я-то думаю просто передавать пару-тройку пар "имя-параметр", а ответ от сервера вообще не анализировать. Передалось - хорошо, не передалось - ну и ладно. Как-то так. Вон, в параллельных ветках форума как-то передают же на сайты типа thingspeak температуру там, влажность и прочее. А на сервере (т.е. сайте) уже можно дальше с этими данными что хочешь, то и делать. Хочешь - собирай их в базу данных, потом отображай, хочешь - на ходу анализируй, уже от задачи зависит.

Можно передавать, например, uptime - смотреть статистику потом, сколько какое устройство работает, и вообще работает ли. В качестве идентификатора устройства вот что использовать...
 
Последнее редактирование:

pvvx

Активный участник сообщества
Ну я-то думаю просто передавать пару-тройку пар "имя-параметр", а ответ от сервера вообще не анализировать. Передалось - хорошо, не передалось - ну и ладно. Как-то так. Вон, в параллельных ветках форума как-то передают же на сайты типа thingspeak температуру там, влажность и прочее.
А вы посмотрите на достоверность доставки этих "передаваний" :)
Можно передавать, например, uptime - смотреть статистику потом, сколько какое устройство работает, и вообще работает ли. В качестве идентификатора устройства вот что использовать...
Всё очень просто :) Загружает UDP Test Port , сервер спрашивает по UDP 255.255.255.255:1025 к примеру H?
Ему приходит:
Receive from 192.168.1.50 : 1025:
heapsize: 49480

Т.е. узанем, сазу, какие устройства активны и по желанию пользователя опрашиваем или перенаправляем прямо на устройство.
 

Andy Korg

Moderator
Команда форума
можно ли из этой сборки как-нибудь отправить GET-запрос на какой-нибудь внешний сайт?
Вот тут черновичок кода esp8266 как клиент-сервер
А вот так можно сделать resolve имени в IP
Код:
/*
* Адрес получен от DNS или таймаут
*/
static void ICACHE_FLASH_ATTR resolve(const char *name, struct ip_addr *ipaddr, void *arg){
    if ((ipaddr) && (ipaddr->addr)){    //Адрес получен
        func(ipaddr); //дальше обрабатываем
        return;
    }
    error;    //Не удалось получить адрес
}

/*
* Запуск запроса resolve
*/
void ICACHE_FLASH_ATTR resolveStart(void)
{

    char *serverName = "www,esp8266.ru";
    struct ip_addr ipaddr;                //IP сервера - resolve from DNS

    switch (dns_gethostbyname(serverName, &ipaddr, resolve, NULL)) {
        case ERR_OK:                    //Адрес разрешен из кэша или локальной таблицы
            func(ipaddr); //дальше обрабатываем
            break;
        case ERR_INPROGRESS:             //Запущен процесс разрешения имени с внешнего DNS
            break;
        default:
            error; //ошибка
            break;
    }
}
 

pvvx

Активный участник сообщества
Ну примерно туда. Пишите оверлей клиента за пол часа и используете :)
 
Сверху Снизу