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

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

AlexMelven

New member
ну вроде подключился smart_config к проекту вебсервера после исправления множества варнингов и ошибок. И даже с приложения IOT Espressif передается SSID и пароль роутера и подключается к роутеру. Теперь надо понять что с этим делать :)
 

pvvx

Активный участник сообщества
мне пока это очень сложно. Ощущаю себя телепузиком :)
Ничего - захотите - разберетесь, заодно может что новое сделаете в сторону Open SDK. К примеру разгребете часть китай-либы smartconfig-а...
Я вот сижу и пытаюсь сообразить, как завести таймер.
Как описано в SDK.
Но у меня таймеры при инициализации уже выставлены в режим мксек, а не мсек. Это тоже описано в китай-SDK (используется ets_timer_arm_new()).
Вам надо создать структуру для таймера, назначить процедуру и время срабатывания.
Код:
os_timer_t test_timer;

void test_timer_isr(void)
{
// обработка таймера
...
// если параметры таймера хотим переназначить, то к примеру так:
 ets_timer_disarm(&test_timer);
 ets_timer_arm_new(&test_timer, 20000, 0, 0);
}

// где-то в процедуре инициализации или ...
    ets_timer_disarm(&test_timer);
    ets_timer_setfn(&test_timer, (os_timer_func_t *)test_timer_isr, NULL);
    ets_timer_arm_new(&test_timer, 10000, 1, 0); // 10 раз в сек (10000 us),  =1 повторять = 0 сработать один раз, =0 us время =1 ms время.
 
Последнее редактирование:

AlexMelven

New member
Ничего - захотите - разберетесь, заодно может что новое сделаете в сторону Open SDK. К примеру разгребете часть китай-либы smartconfig-а...
рад влиться в создание общего дела, правда. Разгребать - имеется ввиду дизассемблировать библиотеку и писать эти куски на СИ? Где бы почитать, как это делается.. А потом ведь еще надо как-то синхронизировать - сейчас я у себя что-то правлю, чтобы заработало, но это ведь не годится для каких-то публикаций.
 

pvvx

Активный участник сообщества
рад влиться в создание общего дела, правда. Разгребать - имеется ввиду дизассемблировать библиотеку и писать эти куски на СИ? Где бы почитать, как это делается.. А потом ведь еще надо как-то синхронизировать -
а это само собой. СИ переписать проще, да главное и не назначенные имена, а принцип. Синхронизацию делают когда всё SDK будет разобрано. Но пока я в этом один и забросил дальнейший разбор. Зачем он нужен, если я это делаю один? Мне разобранного пока хватает. :) Т.е. разбираю по мере своей нужды.
 

AlexMelven

New member
научите как, будем вдвоем разгребать :) не вставая сижу и пытаюсь что-то понять с прошлого года. Какой-то прогресс уже есть - в прошлом году даже не знал с чего начать.
 

pvvx

Активный участник сообщества
научите как, будем вдвоем разгребать :) не вставая сижу и пытаюсь что-то понять с прошлого года. Какой-то прогресс уже есть - в прошлом году даже не знал с чего начать.
Там частично описано: http://esp8266.ru/forum/threads/rev...s-dlja-sozdanija-otkrytogo-sdk.292/#post-5230
Но вот даже плагин xtensa.py к IDA до сих пор с ошибкой - загрузка в регистр значения врет (замучила она меня - от этого тоже ошибки от неё дублирую иногда)...
В этом деле больше всего важен опыт в этом деле. :) У меня он исчисляется несколькими десятилетиями, ещё с первых 8-битных компов... Последние лет 16 этим плотно не занимаюсь, но за всю историю не встречал такой ситуации, чтобы нельзя было вскрыть какое-то устройство. :) И тут важен опыт не столько в технике, а сколько в понимании процессов в конторах и подхода людей к созданию защит :)
 
Последнее редактирование:

Alexander

Member
Как описано в SDK.
Втречал в примерах, но не нашел в Programming-Guide__EN_v1.3:
ets_timer... и даже os_timer_arm_new не нашел :( Не там ищу? На версию 1.4.1 не нашел гайда, может там описано?
Вам надо создать структуру для таймера, назначить процедуру и время срабатывания.
Спасибо. Можно совет?
Как лучше поступить для борьбы с дребезгом? Создать кол-во таймеров по кол-ву каналов, создать флаги по кол-ву каналов, взвести флаги. В обработчике прерывания после инкремента нужного счетчика сбросить флаг этого счетчика, разрешающий инкремент и взвести таймер однократного выполнения, а в колбеке таймера взвести флаг и там же os_timer_disarm?
Или проще запустить таймер и по его тикам инкрементировать счетчик, а в обработчике прерываний проверять, что с момента предыдущего прерывания таймер тикнул? Второй вариант мне кажется менее красивым, т.к. теоретически возможен сбой в момент обнуление счетчика тиков. Точнее не то, чтобы сбой, но лишний импульс посчитается при дребезге. Насколько первый вариант нормален?

А, вот еще "=0 us время =1 ms время" переопределит только этот таймер? Остальные не затронет?
 
Последнее редактирование:

pvvx

Активный участник сообщества
Втречал в примерах, но не нашел в Programming-Guide__EN_v1.3:
ets_timer... и даже os_timer_arm_new не нашел :( Не там ищу? На версию 1.4.1 не нашел гайда, может там описано?
Там они описаны как os_timer_xxxx() и в osapi.h, os_type.h переназначены на est_timer_xxx()
 

PostLast

Member
У меня работают и os_timer
Код:
#define DELAY2 50 /* milleseconds */
.
.
LOCAL os_timer_t blink_timer;
LOCAL void ICACHE_FLASH_ATTR blink_cb(void *arg)
{
os_printf("blink YES!! \n ");
}   
.
.
/******************************************************************************
* FunctionName : user_init
* Description  : entry of user application, init user function here
* Parameters   : none
* Returns      : none
*******************************************************************************/
void ICACHE_FLASH_ATTR user_init(void) {
.
.
    os_timer_disarm(&blink_timer);
    os_timer_setfn(&blink_timer, (os_timer_func_t *)blink_cb, (void *)0);
    os_timer_arm(&blink_timer, DELAY2, 1);
.
}
 

Alexander

Member
Где задается дефолтный IP? Искал, но так и не нашел.
Проблема мелкая, но неприятная - при отладке приходится периодически перезаливать прошивку, а потом менять ИП, а это лениво.
Дома все равно, а на работе та же подсеть и нужно каждый раз отключить эзернет, приконнектится к ЕСП, сменить ИП, подключить эзернет или не подключать, но оставаться без почты, выхода наружу...
 

pvvx

Активный участник сообщества
Где задается дефолтный IP?
Какой? :)
Для AP задается в meSDK и он используется в нескольких местах, включая китай-код, по тому полной гарантии удачной смены нет. Но вот задание IP в meSDK:
https://github.com/pvvx/esp8266web/blob/master/app/sdklib/system/app_main.c#L482
А здесь уже задаются пользовательские конфиги IP (по умолчанию):
https://github.com/pvvx/esp8266web/blob/master/app/web/wifi.c#L367
https://github.com/pvvx/esp8266web/blob/master/app/web/web_int_callbacks.c#L437
(В новой версии вынесу в include\sdk\sdk_config.h и include\user_config.h.)

Ну и во первых при чем тут ваши похождения с своей сетью?
Модуль соединяется к внешней AP и она ему выдает IP через DHCP.

Во вторых, при прошивке нового кода старые установки не стираются. Их специально надо стирать выбором в меню Eclipse пункта "очистить" или "залить всё".

В третьих: Вам надо указать что модулю надо соединяться и имя вашей AP. :) При чем тут IP по умолчанию? :confused:
 
Последнее редактирование:

Alexander

Member
Это не найти было бы совсем уж странно :)
Потом поиск по 104A8C0 и даже по A8 - мало-ли, может где поэлементно, уже скорее от отчаяния.
Прошиваю и... Ничего. Все тот же 192.168.4.1 у AP. Подсеть, клиентские адреса, все по-старому.
Все, пошел убиваться ап стену :)

Ну и во первых при чем тут ваши похождения с своей сетью?
Модуль соединяется к внешней AP и она ему выдает IP через DHCP.
Очевидно же, что я имел в виду IP AP и пул DHCP.
Во вторых, при прошивке нового кода старые установки не стираются. Их специально надо стирать выбором в меню Eclipse пункта "очистить" или "залить всё".
Я не использую Eclipse, шью все разом с ESP_ROM_BAUD = 923076. 1.16с с момента щелчка мышью и модуль стартует. :p Дырку, надеюсь, протереть не успею.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Дырку, надеюсь, протереть не успею.
Мне пока не удалось протереть за год ESP-01 модуль, самый старый из тестируемых. Но при отладке и тестах он иногда переписывается полностью к сотне раз в сутки точно... Больше всего безусловно переписывается область конфигурации WiFi в последних секторах - при каждом старте по 2 раза - это китай фича :)
 

vad7

Active member
Интересно кто-нибудь им про эту баго-фичу писал?

Какое описание верное?

//void wifi_param_save_protect_with_check(uint16 startsector, int sectorsize, void *pdata, uint16 len);
void wifi_param_save_protect_with_check(int startsector, int sectorsize, void *pdata, int len);

в info\libs\main\user_interface.c:

void wifi_param_save_protect_with_check(uint16 startsector, int sectorsize, void *pdata, uint16 len)
{
 
Последнее редактирование:

pvvx

Активный участник сообщества
Интересно кто-нибудь им про эту баго-фичу писал?

Какое описание верное?

//void wifi_param_save_protect_with_check(uint16 startsector, int sectorsize, void *pdata, uint16 len);
void wifi_param_save_protect_with_check(int startsector, int sectorsize, void *pdata, int len);

в info\libs\main\user_interface.c:

void wifi_param_save_protect_with_check(uint16 startsector, int sectorsize, void *pdata, uint16 len)
{
Без разницы. Размер сектора 4096 байт. Данные пишет до 4096 байт - это len.
uint16 startsector -> 4096*65536 - это для 256 Мегабайтной Flash хватит, а аппаратный предел контроллера Flash у ESP8266 - 16 Мегабайт
Там более код из info не входит в проект и это только перевод дизасма из SDK - реверс, который не дописан для использования. Т.е. только для информации.
 
Последнее редактирование:

Alexander

Member
Я тут вот с чем столкнулся. При изменении настроек WiFi модуль иногда отваливается. Точнее, не модуль отваливается, а http сервер. Например, при смене канала AP через web интерфейс. При этом сам канал не меняется до ресета, можно и программного. Ресет сделать не сложно, но беда в том, что несколько раз наблюдал картину: Меняю канал, жму "Set config", отваливаюсь от модуля. Реконнект к модулю происходит, пинги ходят, а браузер говорит, что страница не доступна. Кто-то еще сталкивался или это у меня персональная проблема? Все бы ничего, но при расположении в плоходоступном месте с невозможностью передернуть питание без неприятных эффектов настройки, выходит, лучше не трогать.
 

pvvx

Активный участник сообщества
Я тут вот с чем столкнулся. При изменении настроек WiFi модуль иногда отваливается. Точнее, не модуль отваливается, а http сервер. Например, при смене канала AP через web интерфейс. При этом сам канал не меняется до ресета, можно и программного. Ресет сделать не сложно, но беда в том, что несколько раз наблюдал картину: Меняю канал, жму "Set config", отваливаюсь от модуля. Реконнект к модулю происходит, пинги ходят, а браузер говорит, что страница не доступна. Кто-то еще сталкивался или это у меня персональная проблема? Все бы ничего, но при расположении в плоходоступном месте с невозможностью передернуть питание без неприятных эффектов настройки, выходит, лучше не трогать.
Существует масса проблем с переключениями в сети и смене настроек. Что у роутеров, что у компа и експлореров. Пока конфигурация сети не обновится бывает ничего не сделать. Иногда приходится и перезапускать всю цепочку контроллеров в цепи... У эксплореров необходимо обновлять их кеш и текущие настройки соединения, что не делается только по F5 - читайте доки к используемому эксплореру... При смене номера канала и типа шифрования свистки Wifi-USB в винде не меняют запись соединения. Приходится (т.е. проще, чтобы не мучаться) уничтожать ранее записанные конфигурации подключений в винде....
 
Последнее редактирование:
Сверху Снизу