【3】TCP协议读取---sta_tcp

在这里插入图片描述有一点需要注意的是,就是你的服务器端口(也就是网络调试助手的server)必须先打开然后上传程序之后esp8266才会和服务器进行连接,如果先传程序再打开服务,有可能收不到消息的,或者是要等一会儿才行!这里你的esp8266连上热点之后是作为tcp client存在的,网络调试助手是作为server在这里插入图片描述

#include <ESP8266WiFi.h>        
#include <WiFiClient.h> 
/*****************网络设置项 *****************/
const char *STAssid ="xxxxxxxxxx";                   //需要连接路由器的名称
const char *STApassword="xxxxxxxxxx";      //路由器的密码
const char *host= "192.168.7.40";              //外网服务器ip
const int httpPort = 8888;                    //外网服务器端口
WiFiClient client;                            //声明客户端对象
bool is=0;                                    //用来做连接到服务器后,仅发送一次问候语
int led=14;                                   //灯io,D5
void setup() {
  Serial.begin(115200);
  Serial.println("");
  pinMode(14,OUTPUT);
  digitalWrite(14,0);  
  WiFi.mode(WIFI_STA);                       //设置为STA模式 
  WiFi.begin(STAssid, STApassword);          //配置连接信息,开始连接
  //运行自定义函数,在未连接到路由器的过程中,打印输出......,直到连接成功   
  gotoWifi();  
  Serial.println("连接路由器成功");
  //此时已经连接到路由器,可以开始连接远程服务器   
  lianjie();                                 
}

void loop() {   
/****************检测WiFi连接状态****************/ 
  if (WiFi.status() != WL_CONNECTED) { 
    WiFi.disconnect();
    WiFi.begin(STAssid, STApassword);
    gotoWifi();  
  }
  else{
    if (!client.connected()) {            //如果没有连接到服务器
      lianjie();
      return;
    }
    else{                                //否则,就是连接到服务器
      if(is==0){
        client.print("hello,server"); 
        is=1;      
      }
    }
  }
  Tcp_Handler(Read_Tcp());              //读取服务器信息,并处理
}
//读取服务器信息,返回String类型
String Read_Tcp(){
  String data = "";          
  while (client.available() > 0){
    data += char(client.read());
    delay(2);    
  } 
  return data;
}
//处理服务器信息
void Tcp_Handler(String data){
  if(data!=""){
    Serial.print("收到服务器信息:");
    Serial.println(data);
    if(data=="open"){
      digitalWrite(14,1);  
      client.print("open led");     
    }
    else if(data=="close"){
      digitalWrite(14,0); 
      client.print("close led");      
    }
  }  
}
//连接路由器
void gotoWifi(){
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);    
    Serial.print(".");
  }
}
//连接服务器
void lianjie() {
  Serial.println("开始连接服务器");
  client.connect(host, httpPort);
  delay(1000);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值