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

EspLua вместо NodeMCU

"Прикололся" ;)
pesp_conn->proto.udp->local_port =port+1;//espconn_port();
работает, но это заплатка к Lua :eek:!
 
Последнее редактирование:

pvvx

Активный участник сообщества
"Прикололся" ;)
pesp_conn->proto.udp->local_port =port+1;//espconn_port();
работает, но это заплатка к Lua :eek:!
Специально для вас:
поставьте тут https://github.com/pvvx/EspLua/blob/master/app/modules/net.c#L787
#if 1
И страслируйте. Выйдет это:
Код:
cu=net.createConnection(net.UDP)
cu:connect(1001,"192.168.4.2",1001)
cu:send("Привет")
И так тоже: cu:connect(1001,"192.168.4.2"), но тогда запрос со случайным портом, как и было.
Код:
Receive from 192.168.4.1 : 1001Ўї:
Привет
Receive from 192.168.4.1 : 41460Ўї:
Привет
Receive from 192.168.4.1 : 1001Ўї:
Привет
PS: А спамовщик jcmvbkbc куда делся? Врубился что-ли что опять насрал и сбежал?
 
Специально для вас:
Привет Pvvx!
Спасибо, работает.
до корректировок пробовал: cu:connect(portD,"192.168.0.109",portL)
Lua не обнаруживал ошибку, но portL не устанавливался.
Китайцы заложили переменную и забыли наверное.
Или пиши в стек сколько хочешь переменных...

Вот тут опечатка наверное, или я не "догоняю":
if(lport) pesp_conn->proto.tcp->local_port = lport;
сразу заменил на "udp".

Может китайцы и эти команды забыли?
channel=13
wifi.ap.channel(channel) -ругается.:(
или
wifi.setmode(2,PHY_MODE_11N, channel) -Lua проглотил...;)
Все равно сидит PHY_MODE_11B и на 6 канале.
Как канал хотя бы сменить?;)
Вот вот код:
Код:
wifi.setphymode(3)
print("Ch="..wifi.getchannel())
print("Phy="..wifi.getphymode())

Выдает:
Ch=6
Phy=3
>
но только выдает 6 канал
и соединение 54мб
 
Последнее редактирование:

nikolz

Well-known member
Но с текущими исправлениями она работает, только очень медленно, т.к. не рассчитана на размеры диска более 100 кило. См. описание автора https://github.com/pellepl/spiffs:
"* ОСОБЕННОСТИ:
Spiffs предназначена для небольших устройств c малыми размерами SPI flash. Выход за рамки ~ 128 к, вероятно, плохая идея. Это
побочный эффект дизайна c целью использования малой оперативной памяти, как это возможно."

Но и не сказать, что у spiffs малое использование памяти. Она использует RAM (heap + bss) к 4 килобайтам.
.
-----------------------------------------------
Если бы было до 128 к то автор бы не писал:
Цитата:
"Common memory capacaties for SPI flashes are 512kB up to 8MB of data, where blocks may be 64kB."
------------------------------------------
Использование памяти тоже автором указано :
Цитата:
"Say you have a logical page size of 256 bytes. You want to be able to have four
files open simultaneously, and you can give spiffs four cache pages. This
roughly sums up to:

256*2 (work buffer) +
32*4 (file descriptors) +
(256+32)*4 (cache pages) + 40 (cache metadata)

i.e. 1832 bytes."
---------------------------------------------------
Вообще-то размер может быть любой, но в существующей версии будет использовано лишь половина.
----------------------------------------------
Вообще-то и задачи которые решает данная файловая система тоже указана автором.
Он не делал самую быструю систему
--------------------------------------
Не надо искать черную кошку в темной комнате, если ее там быть не может.
 
Добавил команду wifi.setchannel():
Код:
static int wifi_setchannel( lua_State* L )
{
    s8 Ch;
      Ch = luaL_checkinteger( L, 1 );
      if ( Ch<= 1 ||Ch > 13 ) {
          luaL_error( L, "wrong arg range" );
          return 0;
      }
// тут не знаю что вызывать...   

      return 0;
}
подскажите что вызвать?
 

pvvx

Активный участник сообщества
@Vladimir555 про nikolz:
Ничего он не делает и никогда ни на какие просьбы не дает примеров, а только ругается :)
Ему цитату от автора привели и перевели про 128 из git, а он что-то выдумывает, ищет черных кошаков и всё "ГЛАВРЫБА" наоборот...
Добавил команду:
Код:
static int wifi_setchannel( lua_State* L )
{
    s8 Ch;
      Ch = luaL_checkinteger( L, 1 );
      if ( Ch<= 1 ||Ch > 13 ) {
          luaL_error( L, "wrong arg range" );
          return 0;
      }
// тут не знаю что вызывать...   

      return 0;
}
подскажите что вызвать?
Мне кажется, что luaL_checkinteger( L, 1 ) вытягивает только числа... Надо глядеть.
 

pvvx

Активный участник сообщества
256*2 (work buffer) +
32*4 (file descriptors) +
(256+32)*4 (cache pages) + 40 (cache metadata)

i.e. 1832 bytes."
bss переменные забыли, структуры там громадные, да ещё стек тоже...
Заполнение объема диска тоже не половина, а немного больше.
А итого уже проверено на 80MHz проце - итог печальный и даны примеры с тестами.
 
Последнее редактирование:
Мне кажется, что luaL_checkinteger( L, 1 ) вытягивает только числа... Надо глядеть.
каналы это и есть числа... 1-13;)
L966
Код:
 unsigned channel = luaL_checkinteger(L, -1);
    if (channel < 1 || channel > 13)
      return luaL_error( L, "channel:1~13" );
на wifi.setchannel(55)
отвечает правильно "wrong arg range"

или я опять не догоняю?
Вопрос что там из SDK вызвать?
 
Последнее редактирование:

pvvx

Активный участник сообщества
Про канал - добавьте это:
struct softap_config config;
if(wifi_softap_get_config(&config)) {
config.channel = ????
wifi_softap_set_config(&config);
}
Но там беда с каналом : Его номер в AP имеет зависимость с каналом ST.
Сильно не изучал эту китай-зависимость.

Есть ещё такие функции в SDK 1.2.0:
uint8 wifi_get_channel(void);
bool wifi_set_channel(uint8 channel);
Описанное выше (wifi_softap_set_config) работает и на старых SDK.
Вот что пишут китайцы:
8.4. ESP8266 soft-AP and station channel configuration Even though ESP8266 can be in soft-AP + station mode,it actually has only one hardware channel.
So in soft-AP + station mode, ESP8266 soft-AP will adjust its channel configuration to be as same as ESP8266 station.
This limitation may cause some inconvenience in softAP + station mode users need to pay attention,for example:
Case 1.
(1) If user connect ESP8266 station to a router(e.g. router is in channel 6)
(2) Then set ESP8266 softAP by wifi_softap_set_config
(3) The API may return true, but channel will always be channel 6. Because we have only one hardware channel.
Case 2.
(1)If user set ESP8266 softAP a channel number(e.g. channel 5) by wifi_softap_set_config
(2)Some stations connected to ESP8266 softAP.
(3)Then connect ESP8266 station to a router of which channel number is different (e.g. channel 6) .
(4)ESP8266 softAP has to adjust its channel to be as same as ESP8266 station , in this case, is channel 6.
(5)So the stations that connected to ESP8266 softAP in step 2 will be disconnected because of the channel change.
Espressif
 
Последнее редактирование:

nikolz

Well-known member
Добавил команду wifi.setchannel():
Код:
static int wifi_setchannel( lua_State* L )
{
    s8 Ch;
      Ch = luaL_checkinteger( L, 1 );
      if ( Ch<= 1 ||Ch > 13 ) {
          luaL_error( L, "wrong arg range" );
          return 0;
      }
// тут не знаю что вызывать...  

      return 0;
}
подскажите что вызвать?
return 0; - Означает, что Вы не возвращаете параметры из функции, поэтому ничего не надо вызывать.
или Вы что-то хотите вернуть?
 

nikolz

Well-known member
Ch = luaL_checkinteger( L, 1 );
Проверяет значение на заданный тип и преобразует его в целое если тип число
 

nikolz

Well-known member
@Vladimir555 про nikolz:
Ничего он не делает и никогда ни на какие просьбы не дает примеров, а только ругается :)
Ему цитату от автора привели и перевели про 128 из git, а он что-то выдумывает, ищет черных кошаков и всё "ГЛАВРЫБА" наоборот...

Мне кажется, что luaL_checkinteger( L, 1 ) вытягивает только числа... Надо глядеть.
pvvx,
Вы все сплетни сочиняете ? Не надоело?
 

pvvx

Активный участник сообщества
pvvx,
Вы все сплетни сочиняете ? Не надоело?
А вам? Хоть какой пример на Lua дайте народу, а то пока только фантазии на вольную тему от вас.
Да и при чем тут сплетни? У меня в EspLua диск на spiffs работает, в NodeMCU - нет и уже так пол года, пока не влез...
Heap в SDK1.2.0 + EspLua больше, чем в NodeMCU на старой бэте 0.9.6.
Ну и т.д.
Или вы считаете, что я должен переписать всё и проверить за свой счет, да отадать вам, когда вы не принимаете никакого участия, кроме выдумок и наговоров?
 
Последнее редактирование:

nikolz

Well-known member
А вам? Хоть какой пример на Lua дайте народу, а то пока только фантазии на вольную тему от вас.
Вот по вашей просьбе,
специально для народа сочинил анекдот:
-----------------------------
Новости дня:
Сегодня президент России выступил с инициативой.
Он предложил включить в список олимпийских игр
новый вид соревнования - Борьбу с коррупцией.
Он также выразил уверенность,
что сборная России выиграет все медали по данному виду соревнований.
-----------------------
Главным тренером сборной назначен генеральный прокурор.
-----------------------------
Председателем попечительского совета сборной назначен премьер министр.
-----------------------
Лидеры фракций с воодушевлением восприняли новое предложение президента.
Они готовы в срочном порядке вернутся с каникул и принять законы,
позволяющие развиваться данному виду соревнований не только в Москве,
но и в российской глубинке.
--------------------
 
Последнее редактирование:

nikolz

Well-known member
А вам? Хоть какой пример на Lua дайте народу, а то пока только фантазии на вольную тему от вас.
А народу надо?
Я не знаю,что ему надо.
Вот Вам не надо. Верно?
или Вы не народ?
Тогда откуда знаете, что надо народу?
Только депутаты чиновники и президент знают все что народу надо.
Но Вы же не из их числа?
или из них, родимых и сердобольных?
 

pvvx

Активный участник сообщества
А народу надо?
Я не знаю,что ему надо.
У вас спрашивали на данном форуме, но вы практически ни разу не ответили и не привели примеров или решений (хоть как альтернативу). Только анекдоты и прочий спам, да недовольства на то, что у других, за всё что они берутся - выходит с решением задачи :p
Вот сравнение по прожорству памяти:
Код:
   Section|     Web свалка* | EspLua  |
---------------------------------------
      data:            1356 |    2776 |
    rodata:            2540 |       8 |
       bss:           27464 |   32688 |
      text:           19656 |   44148 |
irom0_text:          203236 |  411500 |
Total Used RAM:       31360 |   35472 |
Free RAM:             50560 |   46448 |
Free IRAM:            29514 |    5022 |
Total Free RAM:       80074 |   51470 |
Max Disk ph.size**:  266240 |   40960 |

* Нет тормозных чтений данных расположенных в rodata
  и irom0_text через перерывание исключения в CPU
** Возможность для выделения под диск в 512k flash
"Web свалка" дана как сравнение с минимальной (урезанной) SDK 1.2.0. Т.е. ещё можно много выжать в EspLua, что не сказать о вашей горячо любимой NodeMCU.
Да, и когда вы займетесь своим любимым делом - кляузничать NodeMCU-шникам?
Я же не собираюсь поддерживать Lua на ESP всю жизнь, а делаю работу над ошибками NodeMCU, чтобы они опять стянули и вставили наработанное, раз сами не могут :)
Вы думкаете, что вас из-за чего-то другого тут держат :)
 
Вот получилось:
Код:
static int wifi_setchannel( lua_State* L )
{
    s8 Ch;
    Ch = luaL_checkinteger( L, 1 );
      if ( Ch <1 || Ch > 13 ) {
          luaL_error( L, "Error,channel:1~13" );
          return 0;
      }
      struct softap_config config;
      if(wifi_softap_get_config(&config)) {
      config.channel = Ch;
      wifi_softap_set_config(&config);
      }
      return 0;
}
ЧуднО как то (все по китайски) , два раза из 10 сработало , нужно после создания AP переключать или до того?
У Вас в проекте TCP2UART весело каналы скачут, а здесь что то...:(
Может в коде что не правильно?
 
Сверху Снизу