/*
NodeMCU接入点模式
功能:
ESP8266接入点模式接收客户端信息,并发送到串口。
太极创客(http://www.taichi-maker.com)
2019-03-11
此程序用于演示如何将NodeMCU以接入点模式工作。通过此程序,您可以使用
电脑或者手机连接NodeMCU所建立WiFi网络。
网络名: taichi-maker
密码:12345678
如需获得更多关于如何使用NodeMCU开发物联网的教程和资料信息
请参考太极创客网站(http://www.taichi-maker.com)
并在首页搜索栏中搜索关键字:物联网
*/
#include <ESP8266WiFi.h> // 本程序使用ESP8266WiFi库
// 设置wifi模块的最大连接数
#define MAX_CONNECT 5
int incomingByte = 0; // for incoming serial data
const char *ssid = "taichi-maker"; // 这里定义将要建立的WiFi名称。此处以"taichi-maker"为示例
const char *password = "12345678"; // 这里定义将要建立的WiFi密码。此处以12345678为示例
const int SERVER_PORT = 80; //端口号,随意修改,范围0-65535
//设置IP地址
IPAddress local_IP(192, 168, 1, 1);
// 设置网关
IPAddress gateway(192, 168, 1, 1);
// 设置子网掩码
IPAddress subnet(255, 255, 255, 0);
// wifiServer服务
WiFiServer WiFi_Server(SERVER_PORT);
// wificlient对象,因为我们要想办法实现多个连接,所以我们创建一个指针数组来存储连接对象
WiFiClient *WiFi_Client[MAX_CONNECT] = {0} ;
// 临时wifi连接
WiFiClient WiFi_Client_Tmp;
void serialrec(){ //接收并发送串口inxi
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
// say what you got:
Serial.print("I received: ");
Serial.println(incomingByte,BIN);
Serial.println(incomingByte,HEX);
Serial.println(incomingByte,DEC);
}
}
void APclient(){//接收客户端的信息发送到串口上
// 判断是否有新的连接
WiFi_Client_Tmp = WiFi_Server.available();
// 判断这个连接是否有效
if(WiFi_Client_Tmp.connected()){
Serial.println("new connect");
// 如果有效,那么设置连接发送数据不延时
WiFi_Client_Tmp.setNoDelay(true);
// 使用for循环来遍历我们的连接池
for(int i =0; i< MAX_CONNECT; i++){//遍历最大连接对象
// 因为连接池里面可能会有连接,所以我们需要找到一个空的位置放入连接对象
if (WiFi_Client[i] == 0 || !WiFi_Client[i]->connected()){
// 我们新建一个TCP连接,然后把这个连接放入我们的连接池,放入后跳出循环
WiFi_Client[i] = new WiFiClient(WiFi_Client_Tmp);
break;
}
}
}
// 我们遍历连接池来接收数据
for(int i =0; i< MAX_CONNECT; i++){
// 先判断连接池里面的连接是否有效
if (WiFi_Client[i] != 0 && WiFi_Client[i]->connected()){
// 如果有效,尝试获取tcp发送的数据
if (WiFi_Client[i]->available() > 0){
// 这里说明有数据,我们直接读取tcp连接发送的数据
//String data = "get data" + WiFi_Client[i]->readStringUntil('\n');
String data =WiFi_Client[i]->readStringUntil('\n');
// 打印发送的数据
Serial.println(data);
}
}
}
}
void setup() {
// 启动串口通讯波特率为115200
Serial.begin(115200);
// 设置wifi模块为AP模式
WiFi.mode(WIFI_AP);
// 设置IP地址网关和子网掩码
WiFi.softAPConfig(local_IP, gateway, subnet);
// 设置wifi的名字和密码
WiFi.softAP(ssid, password); // 此语句是重点。WiFi.softAP用于启动NodeMCU的AP模式。
// 这两个参数具体内容在setup函数之前的位置进行定义。
WiFi_Server.begin();
Serial.print("Access Point: "); // 通过串口监视器输出信息
Serial.println(ssid); // 告知用户NodeMCU所建立的WiFi名
Serial.print("IP address: "); // 以及NodeMCU的IP地址
Serial.println(WiFi.softAPIP()); // 通过调用WiFi.softAPIP()可以得到NodeMCU的IP地址
}
void loop() {
//serialrec();
APclient();
}
整个程序还有一点问题就是,接收客户端信息的速度很慢,5秒才能将数据传送到串口上。