四、ESP8266之 TCP客户端 (基于LUA开发)
2017-10-08 02:09
369 查看
8266做客户端,PC或手机做服务器
wifi.luawifi.setmode(wifi.STATIONAP) cfg = {} cfg.ssid = "Hello8266" cfg.pwd = "11223344" wifi.ap.config(cfg) stacfg = {} stacfg.ssid = "6103" stacfg.pwd = "6a1a0a3a" wifi.sta.config(stacfg) wifi.sta.autoconnect(1) ClientConnectFlag = 0 TcpClient = nil --以上同上一篇TCP服务器一样,不再解释 tmr.alarm(2, 1000, 1, function() --定时器的妙用,当没连接上就一直打印Error,连接上就OK if ClientConnectFlag == 0 then Client = net.createConnection(net.TCP, 0) --创建一个TCP Client Client:connect(8000, "192.168.0.117") --连接服务器的IP以及端口(下面会介绍怎么看IP) Client:on("receive", function(sck, data) --Client接收到数据,打印到串口 print(data) --uart.write(0, data) 两者都可以 end) Client:on("connection", function(sck, c) --当连接上的时候 ClientConnectFlag = 1 --标志位 TcpClient = sck --记录当前的socket,以供串口向网络发送数据。 print("Link OK") tmr.stop(2) --连上就停止定时器 --特别注意connection和disconnection的嵌套关系,不然会有意外情况 Client:on("disconnection", function(sck, c) --没有连上 ClientConnectFlag = 0 --清0标志位 TcpClient = nil tmr.start(2) --重启定时器 end) end) if ClientConnectFlag == 0 then print("Link Error") end end end) uart.on("data", 0, function(data) --串口要发送数据到网口 if TcpClient~=nil then TcpClient:send(data) end end,0) printip = 0 --以下同上一篇TCP服务器一样,不再解释 wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, function(T) printip = 0 end) wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T) if printip==0 then print("IP: "..T.IP) end printip = 1 end)
分享出现的几个问题
1.服务器IP的获取,端口倒是无所谓,一个不行换另一个。
如果您使用的是SocketTool这个软件的话,它是不会自动捕获PC作为服务器时候的IP的,需要自行查看此时PC的IP,如何看呢?
当然除了这款软件您也可以使用
自动捕获IP
2、其实PC做服务器,8266连,有一点比较坑的是,防火墙有时候阻止它不让它们两个进行通信,,,可参考当时玩AT时的这篇文章
怎么办呢?
①、您要不直接关闭防火墙,但是那又太危险了,毕竟是联网状态。
②、emmmm,其实也可以这样,8266目前是处于AP模式的,会自己建立wifi,PC连8266的wifi,然后借助8266的IP地址(在串口进行回显的那个IP就行,直接就能连上了),但是这种状态又是处于断网的局域网状态,很让人恶心。。有没有更好的办法呢?
③、把相关的调试助手加入到防火墙的白名单
emmm,就完美搞定了,哈哈哈哈。。。
2、然后就是程序中问题了
①、注意别像我一样,定义的变量要前后一致,,,找了半天错误。。
话说LUA处处定义全局变量是方便,但是又不利于错误的排查。。。
②、
这个问题有有点弱智,就是为了提醒自己不要再犯了。。。。
③、
这里用sck或者Client进行赋值都行,反正都是socket,不影响下面串口的广播。
3、再来看一下connection以及disconnection不产生嵌套的结果
PC
app
一连四个,直到第四个才成功。。。为啥???
应该涉及到SDK的东西,暂时还不是太懂,欢迎指点。。。
ADC
emmmmmm,,,接下来实战一下吧。。。8266ADC测电压
在这里ADC
对应板子的位置引脚
命令以及回复这样规定
API文档说明
我们使用的是引脚输入,然后readadc(0) 就行…
需要在init.lua里面加入
if adc.force_init_mode(adc.INIT_ADC) then--注意和API参数不同,我们要测引脚输入的 node.restart() --重启生效 return end
然后wifi.lua中加入
function ReadAD(data) if data=="++MD9" then if TcpClient~=nil then ad = adc.read(0) TcpClient:send(ad) end end end
并在receive事件监听中进行函数的调用~
对了测试的电压是0-1V 然后分辨率是 1024
当悬空的时候,数据是飘忽的,正常。。。
当接到3V3上面的时候,传回来的数据是1024
接到GND的时候的数据
竟然是14,竟然不是0
什么情况?这个能解释原因不?。。。。。
好像不是这个。。
戳这里
那暂且TCP的就到这里了吧~~~
相关文章推荐
- 三、ESP8266之 TCP服务器(基于LUA开发)
- 六、ESP8266之 file操作 (基于LUA开发)
- 二、ESP8266之GPIO 定时器 以及串口(基于LUA开发)
- 3.4 ESP8266-劢领 SDK开发教程-TCP例程指南(第二节)
- esp8266利用nodemcu平台开发用lua语言开发
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- C++基于TCP/IP简单的客户端、服务器通信程序实例
- 基于freeswitch+linphone客户端开发对讲系统
- [精通WindowsSocket网络开发-基于VC++实现]第三章——WindowsSockets基础—TCP,UDP程序
- 基于 SailingEase WinForm Framework 开发优秀的客户端应用程序(2:开始搭建模块化的程序框架)
- 基于TCP开发的Hessian组件Nession
- 计算机网络中基于TCP服务器与客户端通信
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- linux网络编程之用socket实现简单客户端和服务端的通信(基于TCP)
- 基于Hadoop开发网络云盘系统客户端界面设计初稿
- 基于Hadoop开发网络云盘系统客户端界面设计初稿
- Android_TCP/IP开发——聊天室模型(客户端与服务器进行通信)
- GeoServer地图开发解决方案(五):基于Silverlight技术的地图客户端实现
- C++基于TCP/IP简单的客户端、服务器通信程序实例
- 服务器基于workerman,客户端基于ODSocket的TCP,socket通信,本地测试