ESP8266作为TCP Client和Server通信

  • 一、本例程实现功能
  • 二、 Core提供的TCP功能介绍
  • 三、接线图
  • 五、完整代码(通过IP地址和服务器建立连接)
  • 六、完整代码(通过域名和服务器建立连接)
  • 七、 利用花生壳内网穿透工具,让运行在自己电脑上的Tcp Server具备独立的域名和端口号

前言:虽然在如今的物联网开发中,像MQTT,COAP这些专门为了物联网而诞生的协议逐渐成为主流,但其实TCP做为最基本的通信方式,依然可以解决大部分的物联通信需求。所以我们在选择物联网协议时,也没必要一味的追求人云亦云,尤其是新手容易产生一种误区,别人都用MQTT那我也要用MQTT,其实您要做的是静下心来了解TCP和MQTT或者COAP这样的协议在通信方式,架构上的区别,然后和您的服务端开发人员在一起商议,结合物联网设备数量规模、设备是否长时间在线以及服务器容量和部署成本等特性来决定用什么协议。

一、本例程实现功能

通过ESP8266模块和指定的服务器建立TCP连接,ESP8266每5秒向服务器发送一个数据包(5字节),服务器每1秒钟向ESP8266发送一个数据包(10字节)。

服务器的地址即可以是IP地址也可以是域名。

二、 Core提供的TCP功能介绍

Core已将TCP的操作封装成三个简单的API函数,分别为:LIB_WifiTcpConfig(),LIB_WifiTcpRecv(),LIB_WifiTcpSend()。您只需要调用这三个API即可将esp8266连接上路由器并实现和server端的收发数据。并且Core会自动处理通信中的异常情况并尝试重新恢复通信(比如和路由器的连接异常断开,和server的tcp连接异常断开,网络异常等),您无需考虑这些复杂的情况即可实现WIFI长期稳定的在线通讯。

三、接线图

五、完整代码(通过IP地址和服务器建立连接)

通过ESP8266模块和指定的服务器建立TCP连接,ESP8266每5秒向服务器发送一个数据包(5字节),服务器每1秒钟向ESP8266发送一个数据包(10字节)。
server_addr = "192.168.1.101" --这里也可以直接写服务器的域名,比如"www.shineblink.com"等
server_port = 8080
ap_ssid = "mywifi" --路由器账号
ap_passwd = "abc123" --路由器密码
--配置USB以虚拟串口模式工作,这样调用print()函数就会在电脑串口终端打印输出
LIB_UsbConfig("CDC")
--使能系统10毫秒定时器开始工作
LIB_10msTimerConfig("ENABLE")
--设置esp8266 Wifi模块占用TX0、RX0、D5引脚,TCP Client模式
--路由器账号:mywifi 路由器密码:abc123,服务器ip:192.168.1.101 端口号:8080
--心跳包间隔时间0秒(不使用心跳机制)。如果需要使用请在ApiDoc文档中查阅关于LIB_WifiTcpConfig函数的p7参数详细介绍
LIB_WifiTcpConfig("UART0","D5",ap_ssid,ap_passwd,server_addr,server_port,0)
--变量初始化
cnt_10ms = 0
send_tab = {1,2,3,4,5} --需要发送给server端的数据
--定义10ms中断回调函数
function LIB_10msTimerCallback()cnt_10ms = cnt_10ms + 1
end
--开始大循环
while(GC(1) == true)
do--查询是否收到server下发的数据,如果收到就print输出收到的数据recv_flag,recv_tab = LIB_WifiTcpRecv()if recv_flag == 1 thenprint(string.format("tcp client receive %d bytes", #recv_tab))for k,v in ipairs(recv_tab) doprint(k,v)endend--每5秒发送一包数据给serverif cnt_10ms >= 500 then  --5000mscnt_10ms = 0LIB_WifiTcpSend(send_tab)end
end

代码运行结果

这里我们在局域网内的一台电脑(192.168.1.101)上运行《网络调试助手》软件模拟Tcp Server端进行调试。
(1)Server端数据接收如下:

(2)Client端(Core)数据接收如下:

六、完整代码(通过域名和服务器建立连接)

这里实现的功能和上面第五节中的完全一样,不一样的地方是服务器是在远端而不是本地局域网,并且这里是通过域名来访问服务器。这里要求你的esp8266所连接的路由器能够访问英特网。

下面是代码需要改动的地方,仅仅需要改动第一行和第二行,将IP地址换成远端服务器的域名即可,剩下代码保持不变。

server_addr = "shblk.qicp.vip"
server_port = 25983

代码运行结果和第五节一样,我们仍然是在远端电脑上运行一个《网络调试助手》软件用来模拟Tcp Server端。

但是不同的是,这回我们利用内网穿透工具赋予该网络调试助手一个可全网访问的域名和端口号。下一节会介绍如何实现内网穿透,让你家的电脑也具备域名和端口供外网访问。

七、 利用花生壳内网穿透工具,让运行在自己电脑上的Tcp Server具备独立的域名和端口号

在 https://hsk.oray.com/ 花生壳官网注册账号

初次体验,可选购个人免费版,后期结合您个人需求可升级付费的

下载花生壳客户端安装并运行

在域名管理列表中建立新的域名,域名有免费的也有收费的,选免费的即可

最后将域名和本机TCP Server的IP地址和端口建立映射关系即可,下图就是第六章节中用到的已建立好的内网穿透映射,内网主机192.168.1.101:8080就是我本机电脑上运行的网络调试助手的IP地址和端口号。

更多详情请参看 shineblink.com官网链接

快速实现WIFI TCP通信详解相关推荐

  1. Modbus通信从入门到精通_2_Modbus TCP通信详解及仿真(搭建ModbusTCP仿真环境:创建虚拟PLC并进行ModbusTCP通讯;寄存器与PLC中映射关系;适合理解如何编写上位机)

    本篇将会以西门子PLC软件搭建ModbusTCP仿真环境,并通过仿真环境,介绍基础知识及模拟实际应用中写一个简单的通信读取PLC数据方法,并简介了编写上位机的方法. 文章目录 1. 搭建ModbusT ...

  2. 《TCP/IP详解·卷1:协议》随笔(已完结)

    第一章.概述 Internet的成功 Internet体系结构被设计成支持现有网络互联,同时提供了广泛的服务与协议操作. 选用数据包的分组交换主要是因为它的鲁棒性与效率,而相对来说数据安全性与交付可预 ...

  3. TCP/IP详解--第一章

    说明:专栏中的内容是<TCP/IP详解>这本书,博主分享在此. 第1章概     述 1.1   引言 很多不同的厂家生产各种型号的计算机,它们运行完全不同的操作系统,但  TCP/IP协 ...

  4. TCP/IP详解学习笔记-基本概念

    为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样 ...

  5. 《TCP/IP详解 卷1:协议》第4章 ARP:地址解析协议

    4.1 引言 本章我们要讨论的问题是只对TCP/IP协议簇有意义的IP地址.数据链路如以太网或令牌环网都有自己的寻址机制(常常为48 bit地址),这是使用数据链路的任何网络层都必须遵从的.一个网络如 ...

  6. ​TCP 拥塞控制详解

    作者:engleliu,腾讯 PCG 开发工程师 本文主要介绍 TCP 拥塞控制算法,内容多来自网上各个大佬的博客及<TCP/IP 详解>一书,在此基础上进行梳理总结,与大家分享.因水平有 ...

  7. 基础才是王道——TCP/IP详解学习笔记 这位仁兄写得太好了

    TCP/IP详解学习笔记 这位仁兄写得太好了 TCP/IP详解学习笔记   这位仁兄写得太好了. http://blog.csdn.net/goodboy1881/category/204448.as ...

  8. Linux网络-UDP/TCP协议详解

    Linux网络-UDP/TCP协议详解 零.前言 一.UDP协议 二.TCP协议 1.应答机制 2.序号机制 3.超时重传机制 4.连接管理机制 三次握手 四次挥手 5.理解CLOSE_WAIT状态 ...

  9. TCP/IP详解卷一读书笔记一

    TCP/IP详解卷一:第一章 一.分层   1.网络协议通常分不同层次进行开发,每一层分别负责不同的通信功能.   疑点 介质访问控制方法   多个主机需要通过一条"共享介质"发送 ...

最新文章

  1. FB壕掷千万办换脸视频检测挑战赛,网友:这是帮Deepfake训练鉴别器吗?
  2. c# 控制IE浏览器
  3. html判断安装没安装qq,QQ6.1体验版怎么用?腾讯QQ6.1体验版本安装步骤(无须申请体验账号)...
  4. Pool construction UVA - 1515 最小割模型
  5. jboss eap_带有自定义模块的JBoss EAP上的骆驼
  6. aspx是什么语言_什么是网页
  7. luci L大_智慧城市大讲堂 l 大咖说5G智慧大交通
  8. 输出毫秒_使用AMETEK直流电源实现波形变化的输出
  9. self = [super init]的解释
  10. 金蝶KIS专业版本单据导入导出工具使用说明
  11. Word删除指定一页的页码
  12. DM DBLINK使用笔记
  13. 花花公子推荐伤感qq日志:乖不哭,我拜你
  14. c语言中weak用法,c语言中weak的作用
  15. Requests 校花网图片爬取
  16. 高压加工食品的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  17. sqlserver 取余和取整
  18. STL 源码分析之string(一)基础篇
  19. 分析-Bitlocker固定磁盘随系统自动解锁
  20. 滴滴轮回--顺风车带有明显的性暗示

热门文章

  1. mac下导出chrome插件及安装
  2. 基于Django3.0的Python版网易云音乐API
  3. JAVA-打印圆形三种代码
  4. 老男孩Python自动化培养(全栈)脱产面授班32期(python语言类课销量榜首)
  5. 源码解析6-系统封装-QTableView实现
  6. 链塔年终企划:《2020—2021中国区块链产业年鉴》编纂工作启动
  7. Android----一个完整的小项目(医疗app)
  8. 32位win系统,突破4G内存限制方法
  9. 04 修改数据库用户密码
  10. R语言 计算 最小二乘法 代码 流程