Arduino-ESP8266-TCPClient

/**********************************************************************/
/* 学习例程:  关于esp8266 TCP_Client
   学习目的:  了解Client 连接步骤及ESP8266WiFiClient 库相关函数
   学习日期:  20200707
   第一类方法,连接操作;
   第二类方法,发送请求操作;
   第三类方法,响应操作;
   第四类方法,普通设置;

*/
/**********************************************************************/
//#include <Arduino.h>
#include<ESP8266WiFi.h>    //WIFI 头文件
#include <U8g2lib.h>       //第三方库
#include <Wire.h>          //I2C库头文件


/*
   int connect(IPAddress ip, uint16_t port);                   //创建一个客户端 并进行连接相应IP,端口的服务器  返回连接结果 0:fail 1:success
   int connect(const String host, uint16_t port);              //创建一个客户端 并进行连接相应域名,端口的服务器  返回连接结果 0:fail 1:success
   int connect(const String host, uint16_t port);              //创建一个客户端 并进行连接相应域名,端口的服务器  返回连接结果 0:fail 1:success
   uint8_t connected();                                        //判断是否仍在连接服务器 返回连接结果 0:fail 1:success
   void stop();                                                //停止关闭该客户端去连接服务器
   uint8_t status();                                           //检测该客户端状态

   size_t write(uint8_t);                                      //发送单个字节   返回发送成功的字节数
   size_t write(const uint8_t *buf, size_t size);              //发送数组中的几个字节数   返回发送成功的字节数
   size_t write_P(PGM_P buf, size_t size);
   size_t write(Stream& stream);                               //发送文件流或数据流中的数据
*/


#define LED D9
long debouncdDelay = 500;  //延时间隔
long lastDebounceTime = 0; //最近记录的一次时间

U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ D6, /* data=*/ D5, /* reset=*/ U8X8_PIN_NONE);   // ESP32 Thing, pure SW emulated I2C
//U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ D6, /* data=*/ D5);   // ESP32 Thing, HW I2C with pin remapping

//定义 AP  的名称及密码
#define AP_SSID      "vivoX20A"
#define AP_PASSWORD  "12345678"
// 配置热点的参数信息(IP,网关,子掩码)
//以下三个定义为调试定义
#define DebugBegin(baud_rate)    Serial.begin(baud_rate)
#define DebugPrintln(message)    Serial.println(message)
#define DebugPrint(message)      Serial.print(message)

IPAddress local_IP(192, 168, 4, 22);
IPAddress gateway(192, 168, 4, 9);
IPAddress subnet(255, 255, 255, 0);

const uint16_t port = 1234;
const char * host = "192.168.43.1"; // ip or dns

uint8_t TX_Buffter[10] = {0xAA, 0X55, 0x12, 0x54, 0x85,0x12, 0x54, 0x85,0x0d,0x0a};
WiFiClient client;//创建一个tcp client连接

uint8_t mills_val = 10;
uint8_t Rx_size = 0;
uint8_t RX_buffer[50] = {0};
void setup() {
  // put your setup code here, to run once:

  pinMode(LED, OUTPUT);         //初始化led io
  digitalWrite(LED, LOW);       //配置io输出为低电平

  pinMode(D5, OUTPUT);    // SSD1306 SDA
  pinMode(D6, OUTPUT);    // SSD1306 SCL
  digitalWrite(D5, 0);
  digitalWrite(D6, 0);

  u8g2.begin();                  // 显示屏初始化配置
  u8g2.enableUTF8Print();        // 使print支持UTF8字集
  DebugBegin(115200);   //配置串口
  DebugPrint("**************************Setting STA*************************" );
  DebugPrint("/n");
  //第一步 启动STA模式,并连接到wifi网络
  WiFi.mode(WIFI_STA);
  WiFi.begin(AP_SSID, AP_PASSWORD);
  //判断网络状态是否连接上,没连接上就延时500ms,并且打出一个点,模拟连接过程
  //笔者扩展:加入网络一直都连不上 是否可以做个判断,由你们自己实现
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    DebugPrint(".");
    DebugPrint(WiFi.status());
  }
  if (WiFi.status() == WL_CONNECTED)
  {
    //输出mac地址
    DebugPrintln(String("Connected, mac address: ") + WiFi.macAddress().c_str());

    //输出station IP地址,这里的IP地址由DHCP分配
    DebugPrintln(String("Connected, IP address: ") + WiFi.localIP().toString());

    //输出子网掩码地址
    DebugPrintln(String("Subnet mask: ") + WiFi.subnetMask().toString());

    //输出网关 IP地址
    DebugPrintln(String("Gataway IP: ") + WiFi.gatewayIP().toString());

    //输出hostname
    DebugPrintln(String("Default hostname: ") + WiFi.hostname());
    //设置新的hostname
    WiFi.hostname("Station_host_1");
    DebugPrintln(String("New hostname: ") + WiFi.hostname());

    //输出SSID
    DebugPrintln(String("SSID: ") + WiFi.SSID());

    //输出psk
    DebugPrintln(String("psk: ") + WiFi.psk());

    //输出BSSID
    DebugPrintln(String("BSSID: ") + WiFi.BSSIDstr());

    //输出RSSI
    DebugPrintln(String("RSSI: ") + WiFi.RSSI() + " dBm");
  }
  u8g2.firstPage();
  do {
    u8g2.setFont(u8g2_font_5x8_tf);
    u8g2.setFontDirection(0);
    u8g2.drawStr(0, 8, " AP_SSID:");
    u8g2.drawStr(50, 8, AP_SSID);
    u8g2.drawStr(0, 18, " AP_PSW:");
    u8g2.drawStr(50, 18, AP_PASSWORD);
    //    u8g2.drawStr(50, 48, port);
    //    u8g2.setFont(u8g2_font_unifont_t_symbols);
    //    u8g2.drawGlyph(5, 40, 0x2603);  /* dec 9731/hex 2603 Snowman */
    //     u8g2.drawXBM( 0, 0, u8g_logo_width, u8g_logo_height, u8g_logo_bits);
  } while ( u8g2.nextPage() );
  ESP.wdtEnable(5000);            //使能软件看门狗的触发间隔
}

void loop() {
  // put your main code here, to run repeatedly:
  ESP.wdtFeed();  //喂狗
  if (millis() - lastDebounceTime > debouncdDelay)
  {
    mills_val++;
    if (mills_val > 10)
    {
      mills_val = 0;
      if (!client.connected())                             //判断tcp client是否处于连接状态,不是就建立连接
      {
        if (!client.connect(host, port))
        {
          DebugPrintln("connection fail");
        }
        else
        {
          DebugPrintln("connection ok");
        }
      }
    }
    lastDebounceTime = millis();  //重新赋值上一次时间
    u8g2.firstPage();
    do {
      u8g2.setFont(u8g2_font_5x8_tf);
      u8g2.setFontDirection(0);
      u8g2.drawStr(0, 8, " AP_SSID:");
      u8g2.drawStr(50, 8, AP_SSID);
      u8g2.drawStr(0, 18, " AP_PSW:");
      u8g2.drawStr(50, 18, AP_PASSWORD);
      if (WiFi.status() == WL_CONNECTED)
      {
        u8g2.drawStr(0, 28, " RSSI:");
        u8g2.setCursor(50, 28);
        u8g2.print( WiFi.RSSI());  //输出内容
      }
      else
      {
        u8g2.clearBuffer();
        // ... write something to the buffer
        u8g2.drawStr(0, 28, "WL_DISCONNECTED");
        u8g2.sendBuffer();
      }
    } while ( u8g2.nextPage() );
    digitalWrite(D9, !digitalRead(D9));   //配置io输出为 读取当前IO口状态的反向值
  }
  if (client.available())
  {
    Rx_size = client.available();
    client.read(RX_buffer, Rx_size);
    Serial.write(RX_buffer, Rx_size);  
    client.flush();//丢弃已写入客户端但尚未读取的字节
    if ((RX_buffer[Rx_size-1] == 0x0A)&& (RX_buffer[Rx_size-2] == 0x0D))
    {
       client.write(TX_Buffter,10);
    }
 
  }
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值