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

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

lincinus

New member
pvvx, а у вас случайно новый срез этой прошивки не созрел?

хочу поковыряться и написать своё, но жду когда у вас закончится работа по вырезанию всего лишнего :)
 

pvvx

Активный участник сообщества
pvvx, а у вас случайно новый срез этой прошивки не созрел?

хочу поковыряться и написать своё, но жду когда у вас закончится работа по вырезанию всего лишнего :)
Неа. Туго с TCP2UART идет. Там не годится имеющийся tcp_srv_... Он тоже счас разломан и в нерабочем варианте у меня...
Ещё не созрело каким путем идти. Городить абстракцию (разделение на каком уровне) от Lwip, чтобы можно было далее прикручивать хоть SSL. Если это направление – то оно выливается в полноценный tcp-socket… Тогда надо много писать и падает скорость (не хватает CPU на дуплекс в 3Mbaud). А если реализовывать напрямую с Lwip (вместе с использованием его буферов), то скорости хватает. Так и мечусь - пытаюсь что-то среднее сотворить :) Плохо что у ESP нет DMA, из-за этого прием/отсылка пачками по 128 fifo ужасны - они занимают всё время из-за низкой скорости внутренней шины CPU <-> UART.
12 тактов CPU на чтение счетчика fifo и 12 на запись байта: http://esp8266.ru/forum/attachments/clk_wr-gif.454/
Как итого на fifo ~ 12*2*125 = 3000 тактов.
 
Последнее редактирование:

lincinus

New member
по моему скромному опыту, впихивание невпихуемого обычно терпит неудачу.

я несколько нить потерял, как мне казалось, вы выпиливаете китайскую надстройку SDK, чтобы можно было работать без неё, используя чистый lwip, т.е. что то типа opensdk
меня бы устроил такой вариант
 

pvvx

Активный участник сообщества
по моему скромному опыту, впихивание невпихуемого обычно терпит неудачу.
Уже впихнулось в v 0.3.1 :) Правда тестировано не окончательно.
Кто точно знает, с какой частотой обновляется счетчик во втором таймере (адрес 0x60000624, команда чтения NOW()) ?
 

pvvx

Активный участник сообщества
Похоже проблема только в режиме
Sleep Mode: LIGHT
в режиме MODEM работает стабильно
Основной таймер Lwip-у (ets_timer_setfn(&check_timeouts_timer, (ETSTimerFunc *) sys_check_timeouts, NULL);) киатёзы устанавливают на такие задержки, в зависимости от типа sleep:
wifi_set_sleep_type:
NONE = 25 ms,
LIGHT = 3000 ms + reset_noise_timer(3000),
MODEM = 25 ms + reset_noise_timer(100);
Естественно, что Lwip ничего не сращивает, когда у него все времена poll и т.д. поехали в 120 раз! :eek:
Поставил патч на версию SDK 1.0.1:
Код:
  if (wset.b.sleep) {
        if(!(wifi_set_sleep_type(wcfg->b.sleep)))    werr.b.sleep = 1;
#if SDK_VERSION <= 1019
        else if(wcfg->b.sleep == 1) {
            ets_timer_disarm(&check_timeouts_timer);
            ets_timer_arm_new(&check_timeouts_timer, 100, 1, 1);
        }
#elif SDK_VERSION > 1019
#error "LIGHT mode?"
#endif
    }
Работает....
 
Последнее редактирование:

folny

New member
Hi pvvx

Today I tested a longer time for your code tpm2net and I have found that under STATIONAP_MODE and STATION_MODE at a specified time as if the UDP connection is interrupted and the output GPIO0 stops working but HTTP works fine you can ever look at this bug?.
 

random1st

New member
Есть баг с отображением пароля в настройках при наличии в нем апострофа. Баг-трекер имеется?
 

pvvx

Активный участник сообщества
Есть баг с отображением пароля в настройках при наличии в нем апострофа. Баг-трекер имеется?
passw2.gif
system.xml:
-<ap>
<ssid>ESP8266</ssid>
<password>012345678'9</password>

Принятый код эксплорером wifi.htm:
<td><input name='wifi_ap_psw' maxlength='63' value='012345678'9'></td>
passw1.gif :p
При замене ` на " :
<td><input name='wifi_ap_psw' maxlength='63' value="~wifi_ap_psw~"></td>
Принятый код эксплорером wifi.htm, если в пароле " :
<td><input name='wifi_ap_psw' maxlength='63' value="012345678"9"></td>

Претензии по HTML коду и его обработке в эксплорерах не принимаются. По HTML принимаются только готовые варианты исправлений и улучшений :p
Пишите разбор пароля для вставки в окно изменения на java, с учетом всех языков мира :) UTF-8 китай-SDK не поддерживает.

PS: В выложенной версии 0.3.1 я знаю и уже исправил более 10 программных багов. Но про них тут все молчат. А придираются только к примерам на HTML, для которых дан редактор :) Выложу в следующей версии, с их исправлением :)
Так будет в следующей версии, на пароли и имена WiFi станций: <password>01234567&quot;8&apos;9</password>
passw3.gif

Временная бета версия 0.3.2b с частично исправленными старыми ошибками + пачкой новых :)
Не хочет работать wifi_handle_event_cb(System_Event_t *evt), событие 3. А оно нужно для более менее реализации старта TCP клиентов к удаленным серверам, по событию получения IP станцией и т.д. На этом пока и застряла добавка "клиентов" к "серверам". Идти другим путем, типа опросов по таймеру, неохота...
 
Последнее редактирование:

xopek

New member
Простите за то, что вмешиваюсь в ваши высокоинтеллектуальные беседы :)
А что надо добавить в [HASHTAG]#include[/HASHTAG] чтобы работали вот эти штуки? всё тот же gpio.h из sdk? или как-то по другом это делать?
Код:
GPIO_OUTPUT_SET(1, 1)
GPIO_DIS_OUTPUT(1)
GPIO_INPUT_GET(1)
PIN_PULLUP_EN(1)
PIN_FUNC_SELECT(1, 1)
 

pvvx

Активный участник сообщества
Простите за то, что вмешиваюсь в ваши высокоинтеллектуальные беседы :)
А что надо добавить в [HASHTAG]#include[/HASHTAG] чтобы работали вот эти штуки? всё тот же gpio.h из sdk? или как-то по другом это делать?
А как будет работать PIN_FUNC_SELECT(1, 1), если для порта 1 надо ставить адрес регистра MUX, а не номер порта? Номер регистра MUX и функция вычисляется только таблично, т.к. их номера и порядок линейно не связан с номерами GPIOn.

Чтобы это не вычислять есть такое:
при [HASHTAG]#include[/HASHTAG] "esp8266.h"
SET_PIN_FUNC(PIN_NUM, FUN)
SET_PIN_FUNC_IOPORT(PIN_NUM) // установить функцию GPIOn как I/O port
SET_PIN_FUNC_DEF_SDK(PIN_NUM) // установить функцию GPIOn по умолчанию для SDK
SET_PIN_PULLUP_ENA(PIN_NUM)
SET_PIN_PULLUP_DIS(PIN_NUM)
при [HASHTAG]#include[/HASHTAG] "web_iohw.h"
void set_gpiox_mux_pull(uint8 pin_num, uint8 pull) - установить (2) pullup или (1) pulldown, или (0) снять подтяжки.
void set_gpiox_mux_func_ioport(uint8 pin_num) - установить GPIOn как порт i/o.

PIN_NUM везде - это номер GPIOn.

Дальше просто работают с регистрами портов напрямую (биты в порту GPIO_OUT или GPIO_IN или GPIO_ENABLE) где номер порта равен номеру бита в них или:
GPIO_OUTPUT_SET(1, 1), GPIO_DIS_OUTPUT(1), GPIO_INPUT_GET(1) - это при [HASHTAG]#include[/HASHTAG] "bios/gpio.h"
bios/gpio.h т.к. это функции не SDK, а ROM-BIOS и находятся в самом чипе ESP8266 и лучше использовать просто [HASHTAG]#include[/HASHTAG] "bios.h".
 
Последнее редактирование:

pvvx

Активный участник сообщества
С большой flash (16Meg), через WEB, успешно обновляется SMART-TV (виджеты) на телеке SAMSUNG... :)
Дайте исходники какого стандартного протокола для передачи звука в стандартные программы - надо затестить WiFi микрофон на ADC модуля. :) С разбегу не нашел. Есть только громадные, под операционки...
 

porex

New member
Где можно купить модуль с такой флешкой? Запись в адреса выше 0х80000 без проблем?
 

pvvx

Активный участник сообщества
Где можно купить модуль с такой флешкой? Запись в адреса выше 0х80000 без проблем?
Перепаять. Интерфейс записи по SPI гарантированно работает с flash в 16 мегабайт. Больше пока не пробовал, но и физическое ограничение у QSPI автоматической работы с flash в подаче адреса в 24 бита.
---
Кинул новую версию, исправлен WiFi scan в режиме SOFTAP + инфа производителя по MAC в интерфейсе, путем двойного тыкания в MAC...
Вставлять выявитель местоположения на карте по MAC не стал, т.к. пользователю и так оно известно :)
 
Последнее редактирование:

Victor

Administrator
Команда форума

aloika

Active member
pvvx, я тут немного ковыряю Вашу сборку, возникли несколько вопросов, если позволите.
1. Что такое MEMW() ?
2. В функции
Код:
//=============================================================================
// Стандартный вывод putc (UART0)
//-----------------------------------------------------------------------------
void uart0_write_char(char c)
{
//    while(READ_PERI_REG(UART_STATUS(0))  & (UART_TXFIFO_CNT<<UART_TXFIFO_CNT_S)); // debug !!!
    if (c != '\r') {
        do {
            MEMW();
            if(((UART1_STATUS >> UART_TXFIFO_CNT_S) & UART_TXFIFO_CNT) <= 125) break;
        } while(1);
        if (c != '\n') UART0_FIFO = c;
        else {
            UART0_FIFO = '\r';
            UART0_FIFO = '\n';
        }
    }
}
UART1_STATUS - это опечатка, речь же идет об UART0, или так надо?
 

Victor

Administrator
Команда форума
UART1_STATUS - это опечатка, речь же идет об UART0, или так надо?
Я на прошивке @pvvx подключал два USB-TTL. Нулевой, как обычно, а первый, отладочный только GPIO2 = TX1 (еще и GND конечно). Мне показалось это очень удобным. Не приходится отключать отладочный терминал на время прошивки. Сейчас удивляюсь, почему все так не делают :)
 

aloika

Active member
Victor, и я так делаю :)
Просто в вышеприведенной функции речь идет о UART0. И вместе с тем есть переменная UART1_STATUS.
Такая же функция есть и для UART1, и там тоже UART1_STATUS.

Может, в первой функции должно быть написано UART0_STATUS ?
 

xopek

New member
DHT22/BMP085 к этой разработке никто не приделывал? у меня знаний недостаточно :(
 

xopek

New member
Отдельно я их заводил. DHT22 даже работает сейчас с дипслипом от батареек. Но вот в комплекте с малым вебсервером не удается даже собрать. То одни ошибки то другие то третьи. Потому и написал, что знаний недостаточно.
 
Сверху Снизу