【ESP8266】无线串口调试工具(实时收发、支持中文)——上集

本文介绍使用ESP8266实现无线串口调试的方法,通过设置服务器端和客户端实现两个ESP8266间的自动配对连接及TCP通信。文中详细展示了Arduino编程代码,并提供注意事项和测试结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【ESP8266】无线串口调试工具(实时收发、支持中文)——上集

背景

学嵌入式,调试的时候基本上都是拖着串口进行测试,但有时候连延长线都解决不了的问题:电脑在房间,节点需要跑到窗边进行数据采集比如GPS,此时就会变得很不方便。

此文使用ESP8266-01S进行测试,基于Arduino进行编程,实现两个ESP8266之间的开机自动配对连接,使用TCP通信,实现两个串口之间的无线传输,基于波特率9600进行测试无任何数据丢失。

(一)服务器端

服务器端主要的内容为:设置wifi为AP模式,设置热点,开启80端口的TCP服务器,当有客户端连接并且串口有数据时将数据转发到客户端,当客户端有数据时打印到串口。

#include <ESP8266WiFi.h>
// #include <ESP8266Ping.h>

#define BAUDRATE 115200         // 串口波特率
IPAddress apIP(192, 168, 4, 1); // 8266 DNS的AP-IP地址
WiFiServer server(80);          //启动服务器

String ssid = "WIFINAME"; //默认SSID
String pssd = "88888888";    //默认密码

void setup()
{
    Serial.begin(BAUDRATE);
    WiFi.hostname("8266-AP"); // 设置ESP8266设备名
    WiFi.mode(WIFI_AP);
    if (WiFi.softAP(ssid, pssd, 6, false)) // 接入点是否隐藏SSID:false
    {
        Serial.println("[success]ESP8266-AP-is-readdy");
    }
    IPAddress ip = WiFi.softAPIP(); //获取ip地址
    // Serial.println(ip);             //打印出来ip地址
    server.begin();
}

WiFiClient client;
void loop()
{
    delay(500);
    Serial.println("Waiting for client connection");
    client = server.available();

    if (client)
    {
        if (client.connected())
        {
            Serial.print("[success]Client Connected!");
            Serial.println(client.remoteIP());
        }

        while (client.connected())
        {
            while (client.available() > 0)
            {
                Serial.write(client.read()); // 读取从连接的设备的数据
            }
            while (Serial.available() > 0)
            {
                client.write(Serial.read()); // 从串口读取数据发送给连接的客户端
            }
        }
        client.stop();
        Serial.println("[fail]Client disconnected");
    }
}

(二)客户端

客户端主要的内容为:设置wifi为STA模式,连接wifi,连接对应wifi的80端口的TCP服务器,当连上了服务器并且串口有数据时将数据转发到服务器端,当服务器端有数据时打印到串口。

#include <ESP8266WiFi.h>

#define SSID "WIFINAME"        // wifi名字
#define PASSWD "88888888"         // wifi密码
#define BAUDRATE 115200           // 串口波特率
const char *host = "192.168.4.1"; // TCP服务器ip
const uint16_t port = 80;         // 端口

WiFiClient client; //创建一个tcp client连接

void setup()
{
    Serial.begin(BAUDRATE);
    WiFi.mode(WIFI_STA); // 配置为STA模式
    connect_Network();   // 连接wifi
}

void loop()
{

    if (WiFi.status() != WL_CONNECTED) // wifi重连
        connect_Network();

    while (client.available() > 0)
    {
        Serial.write(client.read()); // 从服务器获取数据,将它打印到串口
    }
    while (Serial.available() > 0)
    {
        client.write(Serial.read()); // 从串口服务数据,上传到TCP服务器
    }
}

void connect_Network()
{
    WiFi.begin(SSID, PASSWD); // 连接wifi
    Serial.println("Wait for WiFi... ");
    while (WiFi.status() != WL_CONNECTED)
    {
        Serial.print(".");
        delay(500);
    }
    Serial.println("\n[success]WiFi connected");

    if (client.connect(host, port)) // 连接TCP服务器
        Serial.println("[success]Service Connected!");
}

(三)注意事项

1、波特率一致,低波特率更稳定
2、两个ESP8266的WIFI名和密码需要配对一致
3、主机IP一致
4、端口一致
5、以上代码中,客户端会自动重连,服务器端的重连只实现了50%

(四)测试结果

1、在波特率为11500的条件下,使用电脑对ESP8266搭建的TCP服务器进行测试的结果,无数据丢失
在这里插入图片描述

2、使用两个ESP8266-01s进行测试,连接linux板子进行命令行测试
在这里插入图片描述

进入系统并且成功登录,命令行测试正常,与直接连接串口无明显差异
在这里插入图片描述

下集预告

使用EDA绘制PCB,于11月3日下单打板,后续测试如何欢迎持续关注
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FoxPi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值