• Система автоматизации с открытым исходным кодом на базе 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

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