四、ESP8266之 TCP客户端 (基于LUA开发)
来源:互联网 发布:csgo国服mac 编辑:程序博客网 时间:2024/06/05 03:09
8266做客户端,PC或手机做服务器
wifi.lua
wifi.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 = 0TcpClient = 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) endend,0)printip = 0 --以下同上一篇TCP服务器一样,不再解释wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, function(T) printip = 0end)wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T) if printip==0 then print("IP: "..T.IP) end printip = 1end)
分享出现的几个问题
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() --重启生效 returnend
然后wifi.lua中加入
function ReadAD(data) if data=="++MD9" then if TcpClient~=nil then ad = adc.read(0) TcpClient:send(ad) end endend
并在receive事件监听中进行函数的调用~
对了测试的电压是0-1V 然后分辨率是 1024
当悬空的时候,数据是飘忽的,正常。。。
当接到3V3上面的时候,传回来的数据是1024
接到GND的时候的数据
竟然是14,竟然不是0
什么情况?这个能解释原因不?。。。。。
好像不是这个。。
戳这里
那暂且TCP的就到这里了吧~~~
- 四、ESP8266之 TCP客户端 (基于LUA开发)
- 三、ESP8266之 TCP服务器(基于LUA开发)
- 五、ESP8266 之 UDP (基于LUA开发)
- 六、ESP8266之 file操作 (基于LUA开发)
- 一、ESP8266入门(基于LUA开发)
- 二、ESP8266之GPIO 定时器 以及串口(基于LUA开发)
- ESP8266--学习笔记(四)TCP通信--TCP-Client
- ESP8266与NodeMCU开发(三)客户端
- ESP8266的MQTT客户端搭建教程(基于NONS_SDK_v2.0)
- 基于STM32的ESP8266使用教程(四)(短篇)
- ESP8266使用详解--基于Lua脚本语言
- ESP8266编译脚本之四
- ESP8266 SDK开发篇(四)——UDP通信
- ESP8266--MQTT--ESP_MQTT固件开发笔记(四)
- 基于Smack3.0.4+ Openfire3.10.2开发之Android 客户端之四
- 基于esp8266的开发导航帖arduino ide for esp8266
- WiFi-ESP8266入门开发(三)-网页客户端
- Swift开发:GCDAsyncSocket通信之TCP 客户端
- 关于PLSQL日期时间设置的问题
- contentDocument实现iframe自适应子页面高度
- 两端对齐文本效果
- 多线程(一)
- JAVA正则表达式使用总结
- 四、ESP8266之 TCP客户端 (基于LUA开发)
- CentOS7 部署LDAP服务器
- 调试器
- spingboot 显示jsp页面
- Quartz-Trigger详解
- 微信和支付宝APP支付使用总结
- 一个Filter配置多个url-pattern
- 关于window与虚拟机ubuntu之间的FTP通讯问题
- FTPrep, 112 Path Sum