【arduino】通过Esp8266-01模块实现的WiFi通信(4)关于透传

【arduino】通过Esp8266-01模块实现的WiFi通信(4)关于透传
版权声明:本⽂为博主原创⽂章,未经博主允许不得转载。 blog.csdn/mottled233/article/details/52792334
原本计划这⼀篇就直接讲tcpserver,但是我发现如果没有透传的基本概念的话,很难讲清楚整个流程以及应⽤。
如果读者以前就明⽩透传的概念,那么可以直接跳过这⼀篇了。 接下来以零基础的⽅式来解释。
透传的概念
所谓透传,可以理解为“透过传输”或者“透明传输”。想像对着⼀块透明玻璃打激光灯,激光会穿过透明玻璃⽽不发⽣什么变化,这个过程就可以理解为透传的⼀种。更精确的⼀个例⼦是互联⽹,我们⽤户(或者程序)输⼊的数据后,这个数据并不是直接到达我们要发往的地⽅,⽽要经过分包路由等步骤之后,到达彼⽅之后再重新解包变为原本我们发送的数据,数据在这个过程中确实被操作过,但是如果将传输的过程也想象成⼀块“玻璃”,数据想象成“激光“,事实上对于我们的数据,穿过这层玻璃并没有发⽣改变。
这就是透传,穿过处理块之后数据并没有发⽣改变,也就是对于毫不了解的⽤户的观察来说,这层处理
36xp
是“透明的”(并⾮是指处理过程可见,相反,是指⽤户看不见处理,⽽且对⽤户来说这并没有什么影响,即数据不变)。
透传概念具体到此次实践国画调盘
为什么要讲透传?因为既然题⽬标签是arduino,必然要将8266和arduino结合起来啊。
截⽌到上⼀篇为⽌,我们都只是对8266进⾏编程,8266本⾝有⼀定的处理能⼒,但是复杂的处理当然还是要交给arduino。我们⽤8266这个模块并不是让其运算,⽽是能够通过⽹络传输arduino的数据,因此,我们应该讲8266模块做成“透明的”。即:arduino向其传输数据,可以相当于直接向彼⽅的接收端传输数据。
所以如何将8266模块与arduino相连呢?⽤串⼝通信就⾏了。
将8266的tx,rx针脚分别与arduino的rx,tx(即0,1针脚)相连。
编写程序时,只需要输⼊以下代码即可开启串⼝(8266和arduino都是如此)
Serial.start(115200);
如果arduino还有其他模块需要连接rx,tx针脚,⼀定不要把它们并联起来了事,正确的解决⽅法是使⽤软串⼝。会在以后的博客中讲解。
以下是透传的代码原理
while (client.available())//读取到的数据转发到到串⼝
{
uint8_t c = ad();
Serial.write(c);
}
if (Serial.available())//串⼝读取到的转发到服务器,因为串⼝是⼀位⼀位的发送所以在这⾥缓存完再发送
{
plc一体机size_t counti = Serial.available();
uint8_t sbuf[counti];
client.write(sbuf, counti);
}
代码解释:
while的判断条件中的client.available()判断服务器是否发来了信息(事实上,是返回位于等待队列的数据位数)当有数据时,下⾯两句代码⽤于读取数据,并将其写⼊arduino。
⽽if的判断条件也差不多,判断arduino有多少数据发送过来,但这时我们是先将串⼝的数据缓存之后再发送的。
下⾯附上8266的完整透传代码
绷带装#include <ESP8266WiFi.h>
//wifi密码及ssid
const char *ssid    = "test";
const char *password = "56789123";
//⽬标服务器ip即端⼝号
const char *host = "192.168.43.218";
const int tcpPort = 8266;
WiFiClient client;//tcpclient实例
void setup() {
//启动串⼝通信
Serial.begin(115200);
delay(10);
//连接到WiFi
WiFi.begin(ssid, password);
//处理未连接异常
while(WiFi.status() != WL_CONNECTED)
{
delay(100);
}
}
void loop() {
//处理未连接到服务器异常
while(!ted())
{
油管锚if(!t(host, tcpPort))
{
delay(500);
led发光模块}
}
//透传数据
while (client.available())//读取到的数据转发到到串⼝
{
uint8_t c = ad();
Serial.write(c);
}
if (Serial.available())//串⼝读取到的转发到wifi,因为串⼝是⼀位⼀位的发送所以在这⾥缓存完再发送  {
size_t counti = Serial.available();
uint8_t sbuf[counti];
client.write(sbuf, counti);
}
}

本文发布于:2024-09-21 19:08:23,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/158367.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   透传   模块   代码   透明   传输   处理   发送
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议