我正在尝试从连接到ESP8266的设备获取rs232数据(然后数据将通过http / wifi发送)。
我正在使用max3232 IC为ESP8266提供必要的3.3v TTL。
我已将max3232(引脚12)连接到ESP8266上的GPIO引脚13(rx)(我只接收数据不发送数据,因此只连接了rx引脚)。
我正在使用的代码:
alpha beta gamma
4 2 3 2
5 2 5 9
6 2 2 6
10 4 3 4
11 4 8 3
12 4 4 9
13 5 9 8
14 5 5 5
15 5 3 5
连接到ESP8266的rs232设备每隔3秒输出一个字母字符,但写入文件(data.tmp)的数据如下
--
--file: test2.lua
--
tst2 = require "tst2"
tst2.start()
--tst2.lua (testing script)
local module = {}
function module.start()
print("in tst2.start")
uart.alt(1) --use alt GPIO pin 13 (Rx)
uart.setup(0, 9600,8, uart.PARITY_NONE, uart.STOPBITS_1,0)
uart.on("data",10,
function(data)
file.open("data.tmp", "w+")
file.writeline("starting")
for i=1,10 do
file.writeline(string.byte(string.sub(data,i,i)) )
end
file.writeline("from uart: ", data)
file.writeline("finished")
file.close()
end, 0)
uart.alt(0) --switch back to standard Rx/Tx pins
end
return module
问题:
1- rs232设备没有发出任何newln或cr字符,但这些字符出现在数据文件中。
2-字符串" file.close()"正在写入数据文件,看起来它是在最终file.writeline命令之后的实际lua命令。
3-字母数据没有出现在数据文件中。
4-通过uart.alt(0)切换回标准uart引脚不起作用(ESP8266必须重新启动 - 这不是主要问题,因为标准的uart引脚仅在调试期间使用)。
我正在将rs232数据写入文件而不是简单地将其打印在屏幕上(我正在使用ESPlorer v0.2.0),因为uart.alt(1)命令将串行端口重定向到备用ESP8266 gpio引脚。
我认为我在做uart设置时遇到了根本性的错误,但我不知道它是什么。
答案 0 :(得分:0)
解决:
您似乎无法将ESP8266连接到串行端口进行调试(例如,运行ESPlorer的PC上的串行端口),并且还连接了备用串行引脚(ESP8266 GPIO 13和15)(至一个外部串行设备)。
nodemcu uart.alt()函数似乎没有"关闭"标准串行I / O引脚。
断开电池与标准串行I / O引脚的连接解决了这个问题(调试成为一个问题,但有解决方法可以解决这个问题。)
答案 1 :(得分:0)
(更新)一个解决方法是使用simple telnet server与lua解释器进行交互。您可以将ESP8266连接到您的wifi路由器,或者更好的是,将其设置为接入点(AP),这样您只需将计算机连接到它,然后只需远程登录(到网关&#39) ;啜)。因此,除了telnet代码之外,您还需要在init.lua中设置AP。 telnet服务器的完整代码和AP设置如下。一个很好的好处是我可以使用现成的telnet应用程序从我的手机编程和监控ESP8266!
jj = [[
sock = 22 -- just a placeholder, so it stays global. may not be needed.
-- use sock:send("hello") to insert your own custom output to the client.
telnet_srv = net.createServer(net.TCP, 180)
telnet_srv:listen(2323, function(socket)
local fifo = {}
local fifo_drained = true
local function sender(c)
if #fifo > 0 then
c:send(table.remove(fifo, 1))
else
fifo_drained = true
end
end
local function s_output(str)
table.insert(fifo, str)
if socket ~= nil and fifo_drained then
fifo_drained = false
sender(socket)
end
end
sock = socket -- make the socket globally available.
node.output(s_output, 0) -- re-direct output to function s_ouput.
socket:on("receive", function(c, l)
node.input(l) -- works like pcall(loadstring(l)) but support multiple separate line
end)
socket:on("disconnection", function(c)
node.output(nil) -- un-regist the redirect output function, output goes to serial
end)
socket:on("sent", sender)
print("Welcome to NodeMCU world.")
end)
]]
file.open("telnet.lua", "w")
file.write(jj)
file.close()
jj = [[
wifi.setmode(wifi.STATIONAP);
wifi.ap.config({ssid="ESPtest",pwd=""});
print("Server IP Address:",wifi.ap.getip())
dofile("telnet.lua")
]]
file.open("init.lua","w")
file.write(jj)
file.close()
node.restart()
输出:
Server IP Address: 192.168.4.1 255.255.255.0 192.168.4.1
>