将 RSSI 数据从 ESP8266 传输到 PC

我想将 RSSI 测量值从 ESP8266 传输到 PC 上,然后我将在 C 平台和简单的室内定位系统中使用这些测量值。如何进行这种数据传输? 我尝试通过 TCP 传输此数据。但是如何在 TCP 服务器上写入 RSSI 值?例如,下面的代码用于写入“hello nodeMCU”。我可以在 TCP 服务器上实时打印 RSSI 值吗?我的意思是 ESP 将获取 RSSI,然后发送到 TCP 服务器。谢谢您的帮助?

print(wifi.setmode(wifi.STATION))
print(wifi.sta.config("SSID","password"))
print(wifi.sta.getip())
print('\nAll About Circuits main.lua\n')
tmr.alarm(0, 1000, 1, function()
    if wifi.sta.getip() == nil then
        print("Connecting to AP...\n")
    else
        ip, nm, gw=wifi.sta.getip()
        print("IP Info: \nIP Address: ",ip)
        print("Netmask: ",nm)
        print("Gateway Addr: ",gw,'\n')
        tmr.stop(0)
    end
end)

-- 启动一个简单的 HTTP 服务器
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
    conn:on("receive",function(conn,payload)
        print(payload)
        conn:send("Hello, NodeMCU!!! ")
    end)
    conn:on("sent",function(conn) conn:close() end)
end)
点赞
用户131929
用户131929

主要问题是:你的服务器在哪里?你贴出的代码在 ESP8266 上启动了一个服务器。但是,根据你的描述,我理解你想在 PC 上运行服务器,并从设备向其发送数据?

从 All About Circuits 复制的服务器代码存在潜在的内存泄漏(关闭了的 upvalue)。请改用以下代码:

srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
    conn:on("receive",function(sck,payload)
        print(payload)
        sck:send("Hello, NodeMCU!!! ")
    end)
    conn:on("sent",function(sck) sck:close() end)
end)

但是,如果服务器在你的 PC 上,并且假设它是一个 HTTP 服务器,你应该使用 NodeMCU 的 HTTP 模块,如下所示:

  • 启动一个新的定时器
  • 在每个间隔内读取 RSSI
  • 发送 HTTP POST 请求到服务器

以下是代码示例:

-- 请务必替换间隔、服务器地址、标头和主体
tmr.alarm(1, 5000, 1, function()
    local rssi = wifi.sta.getrssi()
    http.post('http://httpbin.org/post',
        'Content-Type: application/json\r\n',
        '{"rssi":"'..rssi..'"}',
        function(code, data)
            if (code < 0) then
                print("HTTP request failed")
            else
                print(code, data)
            end
        end)
end)
2016-06-02 06:30:21