简介

本设计通过使用Arduino IDE开发环境,建立TCPserver 进行数据透传。

程序流程

  1. 设定模式
    WiFiServer server(21);
    WiFiClient serverClients[MAX]
  2. 初始化波特率
    Serial.begin(9600)
  3. 打开WiFi
    WiFi.begin(ssid,password)
  4. 连接热点
    if(WiFi.status()!=WL_CONNECTED&&++i<20)
  5. 启动服务器
    server.begin()
  6. 设置服务器是否需要延时
    server.setNoDelay(true)
  7. 获得本地IP
    Serial.println(WiFi.localIP());
  8. 编写循环函数
  9. 检测是否有活动的客户端
    server.hasClient()
  10. 查找空闲或者断开的客户端
    ! serverClient[i] || !serverClient.connected()
  11. 置为可用
    serverClient[i]=server.available()
  12. 若没有可用的客户端,则停止连接
    WiFiClient serverClient=server.availble()
    serverClient.stop()
  13. 检查客户端的连接
    serverClient[i]&&serverClient[i].connected()
    serverClient[i].available()
  14. 从客户端获取数据,并在串口上显示出来
    while(serverClient[i].available())
    Serial.print(serverClient[i].read())
  15. 检查串口数据
    Serial.available()
    size_t len=Serial.available()
    uint8_t sbuf[len];
    Serial.readBytes(sbuf,len);
  16. 将串口数据推送到已连接的客户端
    for(i=0;i<max;i++)
    if(serverClient[i]&&serverClient.connected())
    {
    serverClient[i].write(sbuf,len);
    delay(1);
    }

程序

#include <ESP8266WiFi.h>
//定义可连接的客户端数目最大值
#define MAX_SRV_CLIENTS 1
const char* ssid = "Doit";
const char* password = "doit3305";WiFiServer server(23);
WiFiClient serverClients[MAX_SRV_CLIENTS];void setup() {Serial.begin(115200);WiFi.begin(ssid, password);Serial.print("\nConnecting to "); Serial.println(ssid);uint8_t i = 0;while (WiFi.status() != WL_CONNECTED && i++ < 20) delay(500);if(i == 21){ //超时(20x500=10000,10秒钟),提示连接失败Serial.print("Could not connect to"); Serial.println(ssid);while(1) delay(500);}//启动UART传输和服务器server.begin();server.setNoDelay(true);Serial.print("Ready! Use 'telnet ");Serial.print(WiFi.localIP());//获得服务器本地IPSerial.println(" 23' to connect");
}void loop() {uint8_t i;//检测服务器端是否有活动的客户端连接if (server.hasClient()){for(i = 0; i < MAX_SRV_CLIENTS; i++){//查找空闲或者断开连接的客户端,并置为可用if (!serverClients[i] || !serverClients[i].connected()){if(serverClients[i]) serverClients[i].stop();serverClients[i] = server.available();Serial.print("New client: "); Serial.println(i);continue;}}//若没有可用客户端,则停止连接WiFiClient serverClient = server.available();serverClient.stop();}//检查客户端的数据for(i = 0; i < MAX_SRV_CLIENTS; i++){if (serverClients[i] && serverClients[i].connected()){if(serverClients[i].available()){//从Telnet客户端获取数据,并推送到URAT端口while(serverClients[i].available()) Serial.write(serverClients[i].read());}}}//检查UART端口数据if(Serial.available()){size_t len = Serial.available();uint8_t sbuf[len];Serial.readBytes(sbuf, len);//将UART端口数据推送到所有已连接的telnet客户端,实现双向通信for(i = 0; i < MAX_SRV_CLIENTS; i++){if (serverClients[i] && serverClients[i].connected()){serverClients[i].write(sbuf, len);delay(1);}}}
}

后续

如果想了解更多物联网、智能家居项目知识,可以关注我的项目实战专栏。
关注公众号。

编写不易,感谢支持。

ESP8266 建立TCPserver 进行数据互传相关推荐

  1. iphone传输 android,安卓苹果数据互传,三种方法教你怎样把iPhone数据迁移到安卓手机...

    下面来看看这两大利器的操作方法: iphone数据迁移到安卓手机用i换机大师迁移备忘录: 如果你的新手机是EMUI 9.0之前的系统:备忘录的存放地址在:"文件管理文件夹>内部存储&g ...

  2. 华为手机手机与计算机传输,如何将华为手机的视频传到华为的电脑上?手机与电脑数据互传操作步骤...

    手机与电脑数据互传操作bai步骤如下: 1.手机du通过原装USB数据线与电脑相连,待zhi电脑自行dao安装驱动,并确认驱动安装成功,如下图所示: 注:如驱动未安装成功,可通过安装HiSuite软件 ...

  3. python 小工具实现 windows笔记本与 ipad数据互传

    宅在家没事的时候就开始琢磨ipad的进阶使用,由于没有mac无法隔空投送,ipad与windows的数据交互表现极差,所以设计了这个ftp小工具. 当然,这个工具不仅仅能用于windows与ipad, ...

  4. ESP8266通过TCP透传连接OneNet云平台实现数据互传——保姆级教程

    OneNet云平台设置 登录OneNet云平台并注册账号 进入控制台 选择全部产品服务中的多协议接入 在多协议接入中选择"TCP透传",并添加产品 在添加产品中填写产品的基本信息( ...

  5. 正点原子STM32f103ZE精英开发板实现基于ESP8266 WIFI模块温湿度数据上传至乐联网平台

    文章目录 一.准备工作 二.实现流程 1.AT指令 2.接入乐联网平台 3.代码实现 三.数据可视化分析 一.准备工作 1.准备一块正点原子STM32f103ZE精英开发板 2.在某宝上购买好正点原子 ...

  6. MultCloud – 支持数据互传的网盘管理

    MultCloud https://www.multcloud.com/ 是一款在线服务,可以在一个地方管理众多网盘,支持国产百度盘, 最具有特色的地方是你可以直接在 MultCloud 里操作将 D ...

  7. 串口(CH340)与网口数据互传实验

    嗨!别来无恙,这里是码龄区区一年的小菜鸡. 目录 实验概述 一.LAN8720A简介 二.TCP/IP简介 三.硬件设计 1.串口 2.LCD模块 3.ETH 4.PCF8574 四.软件设计 1.t ...

  8. esp8266作为wifi与手机互传数据

    指令参考安信可官方指令.无线模块_蓝牙模块_ESP32-C3_WiFi|物联网模块[安信可] 目录 1.esp8266.c代码,另外需要配置usart3与定时器 2.esp8266.h代码 3.mai ...

  9. 【最简单】STM32+ESP8266+MQTT+EMQX完成数据上传和点灯环节

    首先要吐槽一点,那就是网络上的这方面资料杂七杂八,而且很多都是一模一样的: 然后我作为一个学生,没有多大的本事,就是想实现最基本的功能,然后在此基础上慢慢拓展.所以那些十分庞大的工程或者一些IoT物联 ...

最新文章

  1. java.lang.NoClassDefFoundError: org/codehaus/jackson/JsonProcessingException(Spring使用json的异常处理)
  2. python seek到指定行_python文件操作seek()偏移量,读取指正到指定位置操作
  3. 031_yml配置文件
  4. java uipath_10.3 UiPath如何调用Java
  5. 云图说|初识云数据库GaussDB(for Redis)
  6. 【白皮书分享】2021年智慧城市白皮书:依托智慧服务,共创新型智慧城市.pdf(附下载链接)
  7. CCF NOI1028 判断互质
  8. Linux 上关于iptables
  9. Golang web请求
  10. 这10款APP,让残障人士出行无忧!
  11. 现代程序设计 homework-06
  12. lol服务器不稳定领皮肤,LOL免费领“源代码娜美”皮肤 官方致歉游戏卡顿问题...
  13. Telegram支付接口接入
  14. ZBrush - 动物毛发制作及渲染
  15. 『迷你教程』识别人类活动的一维卷积神经网络模型,附完整代码
  16. mbedtls | 09 - 数字签名算法的配置与使用(RSA数字签名算法、ECDSA数字签名算法)
  17. 问题 E: 1.10 旅行时间  根据火车的出发时间和到达时间,编写程序计算整个旅途所用的时间。
  18. OpenSSL公钥 私钥 RSA
  19. linux 基因组数据下载,phytozome植物基因组下载网站
  20. 织梦 DEDECMS LOOP标签的用法及调用

热门文章

  1. Mybatis的案例和接口代理开发和模板配置
  2. MySQL笔记(九)查询结果添加序列号
  3. VC++ HIDAPI实现USB数据读写
  4. 【BZOJ3566】—概率充电器(树形+概率dp)
  5. trie树 Codeforces Round #367 D Vasiliy's Multiset
  6. 判断应用程序在前台还是后台
  7. SequoiaDB数据水平分区简介
  8. struts2.1.6出现at com.opensymphony.xwork2.util.FileManager$FileRevision.needsReloading
  9. Flash中textInput限定中英文字数
  10. 移动开发解决方案之玩转输入框