ESP8266具有重编程能力的Tcp-to-uart

时间:2017-04-15 14:01:17

标签: esp8266 nodemcu

我在nodemcu repo中使用这个例子:

ng-model="object.property"

但是,由于我使用的是uart模块,我无法通过LuaLoader与我的芯片通信,无法上传更新的$scope.object = {}; $scope.addRoom = function () { $http.post("add_library_room.php", {'roomName': $scope.object.roomName, 'maxPax': $scope.object.maxPerson}) .then(function (response) { $scope.msg = "Room is inserted into database."; }); }; 文件。相反,我必须将芯片置于闪存上传模式,然后刷新初始nodemcu固件,然后更新我的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:on("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) 。太多的步骤。

如何保留通过LuaLoader进行通信的能力?我尝试过这样的事情:

init.lua

它在另一个串行终端中打印init.luauart.on('data', '\n', handleUartResponse, 0) ... ... function handleUartResponse(response) if response == 'flash\n' then g_flash = true toggleOutput(true) uart.write(0, 'flash mode') elseif response == 'endflash\n' then g_flash = false uart.write(0, 'normal mode') toggleOutput(false) elseif g_flash then node.input(response) else if g_conn ~= nil then g_conn:send(response, function(sock) closeConnection(sock) g_conn = nil end) end end end function toggleOutput(turnOn) if turnOn then node.output(nil, 1) else node.output(silent, 0) end end ,但它在LuaLoader中不起作用。我认为问题出在uart设置中,也许它不应该是flash mode,而是其他条件,我不知道是什么。

1 个答案:

答案 0 :(得分:0)

知道了!不确定它是否是最佳选择,因为我是lua的新手,但它确实有用。

function handleNormalMode(response)
    if response == 'flash\r' then -- magic code to enter interpreter mode
        toggleFlash(true)        
    else -- tcp-to-uart
        if g_conn ~= nil then
            g_conn:send(response, function(sock)
                closeConnection(sock)
                g_conn = nil
            end)
        end
    end
end

function ignore(x)
end

function uartSetup(echo)
    uart.setup(0, 115200, 8, 0, 1, echo)
end

function toggleFlash(turnOn) 
    if turnOn then
        uart.on('data')  -- unregister old callback
        uartSetup(1) -- re-configure uart
        uart.on('data', 0, ignore, 1) -- this allows lua interpreter to work
        node.output(nil) -- turn on lua output to uart
        uart.write(0, 'flash mode') -- notify user
    else
        node.output(ignore, 0) -- turn off lua output to uart
        uart.on('data') -- unregister old callback
        uartSetup(0) -- re-configure uart
        uart.on('data', '\r', handleNormalMode, 0) -- turn on tcp-to-uart
        uart.write(0, 'normal mode') -- notify user
    end
end

我在脚本开头调用toggleFlash(false)。然后,输入flash\r进入lua解释器模式并切换回我只需键入toggleFlash(false)即可正常工作!这简化了每次更新init.lua