Arduino实现基于的ESP32的WiFiAP模式多客户端接入

代码中只实现了两个客户端服务,可自行根据需要自行添加任务代码。


 

#include "WiFi.h"



 

#define USE_MULTCORE 0  //是否使用多核

#define MAX_SRV_CLIENTS 4

WiFiServer server(8080);                    //声明服务器对象及监听端口号

WiFiClient serverClients[MAX_SRV_CLIENTS];  //最大连接数数组0-MAX_SRV_CLIENTS


 

TimerHandle_t xTimer1;      //定时器

SemaphoreHandle_t Tcp_sem;  //二进制信号量

//SemaphoreHandle_t xSemaphoreCreateCounting(UBaseType_t uxMaxCount, UBaseType_t uxInitialCount);//创建计数型信号量

EventGroupHandle_t xServerEventGroup1;  //定义事件组句柄,用来指向创建的事件标志组.




 

// define led according to pin diagram

int led = 8;

// typedef enum {

//  WIFI_OFF              -关闭配网模式

//                 WIFI_STA              -设置为STA模式

//                 WIFI_AP                -设置为AP模式

//                 WIFI_AP_STA        -设置为AP和STA共存模式

// } wifi_mode_t;

//多线程基于FREERTOS

//定时器回调函数

void xTime1Task(void *xTime1) {

  //xSemaphoreGive(Tcp_sem);//发布信号量

  //Serial.println("定时器1回调");

}


 

//回调函数任务

//创建服务器检测客户端介入并进行分配通信任务

void xTaskServerListen(void *xTask1)  

{

  bool TaskIDLE = true;  //是否有通信任务空闲

  int Channel = 0;     //扫描到的下一个可用于通信的任务号  100:无任务 默认使用范围0-MAX_SRV_CLIENTS

  WiFi.mode(WIFI_AP);  //设置为接入点模式

  WiFi.softAP("ESP_AP", "123456789");

  Serial.println(WiFi.softAPIP());  //服务器本机IP

  //启动SOFT服务器

  server.begin();

  server.setNoDelay(true);

  while (1) {

  //   //WiFiClient client = server.available();  // 监听新客户端接入

    //扫描是否有空闲通信任务

    if ( TaskIDLE == false) {

      for (int i = 0; i < MAX_SRV_CLIENTS; i++) {

        if (!serverClients[i]) {

          TaskIDLE = true;  //是否有通信任务空闲

          Channel = i;

          Serial.println("有空闲任务");

          break;

        }

        else {

          Serial.println("无空闲任务,请等待");

          TaskIDLE = false;

          //Channel = 100;

        }

      }

    }

    if (TaskIDLE == true)  //有空闲服务任务

    {

      serverClients[Channel] = server.available();  // 监听新客户端接入

      if(serverClients[Channel]){

        TaskIDLE = false;//更换下一个监听

        //发送对应的服务任务事件标志位

        xEventGroupSetBits(xServerEventGroup1, 0x01 << Channel);

      }

      //client.~ WiFiClient();

    }

  vTaskDelay(1);

  //delay(500);

  }

}

void xTaskOne(void *xTas

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值