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

Решено USART <> WiFi (Lua) (Помогите!)

Serjaru

Member
Нужна помощь от профи в Lua!

Нужен простой функционал USART<>WiFi так сказать просто мост.

Взял следующий пример за основу

Код:
wifi.setmode(wifi.STATION)
wifi.sta.config("SSID", "PASSWORD")

function Success()
    tmr.stop(0)
    if (SERIAL_PRINT) then
        print("IP: " .. wifi.sta.getip())
    end
    wifi.sta.eventMonStop()
    wifi.sta.eventMonReg(wifi.STA_GOTIP, "unreg")
    StartServer()
end

function Failure()
    if (SERIAL_PRINT) then
        print("Unable to connect")
    end
    wifi.sta.eventMonStop()
    wifi.sta.eventMonReg(wifi.STA_GOTIP, "unreg")
    return 0
end

tmr.alarm(0,30000,0, function() Failure() end)
wifi.sta.connect()
sv=net.createServer(net.TCP, 60)
global_c = nil

if (wifi.sta.getip()==nil) then
    wifi.sta.eventMonReg(wifi.STA_GOTIP, function() Success() end)
    wifi.sta.eventMonStart()
else
    StartServer()
end


function StartServer()
    print("Start server")
    uart.setup(0,115200,8,0,1,0)

    sv:listen(80, function(c)
        if global_c~=nil then
            global_c:close()
        end
        global_c=c
        c:on("receive",function(sck,pl)    uart.write(0,pl) end)
    end)

    uart.on("data",0, function(data)
        if global_c~=nil then
            global_c:send(data)
        end
    end, 0)
end
все запускается, работает но!

Когда передаешь строку "Hello World" от WiFi к USART, то все нормально и быстро, но когда обратно USART > Wifi, то доходит только первая буква H

Пробовал менять менять второй параметр (играть с буфером),

Код:
uart.on("data",0, function(data)
то естественно, пока он не накопит нужно кол-во байтов не выдает в сторону WiFi, что плохо.

Вообще нормальнольно можно реализовать такой мост? Lua для меня новый язык и уж слишком высокий (странный), работа с uart как-то нормально реализовывается? в доках там 4-5 методов у этого класса (или как его там)

Может у кого-то есть рабочий пример???

Если у вас работает, то какую версию nodemcu используете?
у меня NodeMCU v1.5.4.1 Lua_5.1.4 (SDK_1.5.4.1)
 

nikolz

Well-known member
это у Вас вся программа. Без таймера и колбека?
Т е разовое исполнение.
------------------
А у Вас WIFI все принимает?
Может быть проблема на передающей стороне?
Поставьте Wireshark и посмотрите пакеты .
--------------------
 

Serjaru

Member
это у Вас вся программа. Без таймера и колбека?
Т е разовое исполнение.
------------------
А у Вас WIFI все принимает?
Может быть проблема на передающей стороне?
Поставьте Wireshark и посмотрите пакеты .
--------------------
Всё, спасибо решил! Нашел более грамотное решение без заморочек с lua!
 

vladimir1

New member
Вот вполне рабочий вариант (nodemcu-firmware/tcp2uart.lua at master · nodemcu/nodemcu-firmware · GitHub)


wifi.setmode(wifi.STATION)
wifi.sta.config("SSID", "PASSWORD")

uart.setup(0,9600,8,0,1,0)
sv=net.createServer(net.TCP, 60)
global_c = nil
sv:listen(9999, function(c)
if global_c~=nil then
global_c:close()
end
global_c=c
c:eek:n("receive",function(sck,pl) uart.write(0,pl) end)
end)

uart.on("data",4, function(data)
if global_c~=nil then
global_c:send(data)
end
end, 0)
 
Сверху Снизу