透传概念具体到此次实践
为什么要讲透传?因为既然题目标签是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);1
如果arduino还有其他模块需要连接rx,tx针脚,一定不要把它们并联起来了事,正确的解决方法是使用软串口。会在以后的博客中讲解。
以下是透传的代码原理
while (client.available())//读取到的数据转发到到串口
{
uint8_t c = client.read();
Serial.write(c);
}
if (Serial.available())//串口读取到的转发到服务器,因为串口是一位一位的发送所以在这里缓存完再发送
{
size_t counti = Serial.available();
uint8_t ***uf[counti];
Serial.readBytes(***uf, counti);
client.write(***uf, counti);
}123456789101112131415
代码解释:
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(!client.connected())
{
if(!client.connect(host, tcpPort))
{
delay(500);
}
}
//透传数据
while (client.available())//读取到的数据转发到到串口
{
uint8_t c = client.read();
Serial.write(c);
}
if (Serial.available())//串口读取到的转发到wifi,因为串口是一位一位的发送所以在这里缓存完再发送
{
size_t counti = Serial.available();
uint8_t ***uf[counti];
Serial.readBytes(***uf, counti);
client.write(***uf, counti);
}
}
透传概念具体到此次实践
为什么要讲透传?因为既然题目标签是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);1
如果arduino还有其他模块需要连接rx,tx针脚,一定不要把它们并联起来了事,正确的解决方法是使用软串口。会在以后的博客中讲解。
以下是透传的代码原理
while (client.available())//读取到的数据转发到到串口
{
uint8_t c = client.read();
Serial.write(c);
}
if (Serial.available())//串口读取到的转发到服务器,因为串口是一位一位的发送所以在这里缓存完再发送
{
size_t counti = Serial.available();
uint8_t ***uf[counti];
Serial.readBytes(***uf, counti);
client.write(***uf, counti);
}123456789101112131415
代码解释:
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(!client.connected())
{
if(!client.connect(host, tcpPort))
{
delay(500);
}
}
//透传数据
while (client.available())//读取到的数据转发到到串口
{
uint8_t c = client.read();
Serial.write(c);
}
if (Serial.available())//串口读取到的转发到wifi,因为串口是一位一位的发送所以在这里缓存完再发送
{
size_t counti = Serial.available();
uint8_t ***uf[counti];
Serial.readBytes(***uf, counti);
client.write(***uf, counti);
}
}
举报