arduino esp8266连接WIFI-打印IP地址mac地址--启动服务端server等待连接

arduino esp8266连接WIFI-打印IP地址mac地址--启动服务端server等待连接

arduino ESP8266设置静态IP 方法

#include <ESP8266WiFi.h>


const char* ssid = "txw--tech";
const char* password = "xxx";

//const char* host = "data.sparkfun.com";
//const char* host = "172.16.1.242";
const char* host = "172.17.140.245";
//const char* host = "192.168.66.113";
//const char* host = "10.24.15.127";
//const char* host = "192.168.10.101";
const char* streamId = "....................";
const char* privateKey = "....................";
int LED6 = D6;

int pinD2 = 2;
int pinD0 = 0;
int senVal = 0;

#define MAX_SRV_CLIENTS 1  //做多多少个客户端可以连接

WiFiServer server(6789);    //创建server 端口号是23

WiFiClient serverClients[MAX_SRV_CLIENTS];   //定义最多多少个client可以连接本server(一般不要超过4个)

void setup()
{
    Serial.begin(115200);
    WiFi.mode(WIFI_STA);
    pinMode(pinD2, OUTPUT);
    WiFi.begin(ssid, password);
    Serial.print("\n连接到:");
    Serial.println(ssid);
    uint8_t i = 0;
    while (WiFi.status() != WL_CONNECTED && i++ < 20) {
        delay(500);
    }
    if (i == 21) {
        Serial.print("没能连接到:");
        Serial.println(ssid);
        return;
    }

    server.begin();  //启动server
    server.setNoDelay(true);//关闭小包合并包功能,不会延时发送数据

    Serial.println("准备好了!使用网络吧 IP是: ");
    Serial.println(WiFi.localIP());
    Serial.println(WiFi.macAddress());
    Serial.println("端口: 6789");
}

void array_to_string(byte array[], unsigned int len, char buffer[])
{
    for (unsigned int i = 0; i < len; i++)
    {
        byte nib1 = (array[i] >> 4) & 0x0F;
        byte nib2 = (array[i] >> 0) & 0x0F;
        buffer[i * 2 + 0] = nib1 < 0xA ? '0' + nib1 : 'A' + nib1 - 0xA;
        buffer[i * 2 + 1] = nib2 < 0xA ? '0' + nib2 : 'A' + nib2 - 0xA;
    }
    buffer[len * 2] = '\0';
}
void loop() {
    uint8_t i;

    if (server.hasClient())
    {  //判断是否有新的client请求进来
        for (i = 0; i < MAX_SRV_CLIENTS; i++)
        {

            //释放旧无效或者断开的client
            if (!serverClients[i] || !serverClients[i].connected())
            {
                if (!serverClients[i])
                {
                    //serverClients[i]    判断指定序号的客户端是否有效
                    serverClients[i].stop();  //停止指定客户端的连接
                }

                serverClients[i] = server.available();//分配最新的client
                Serial.print("1个新的客户端: ");
                Serial.println(i);
                Serial.println(666);
                break; //跳出一层for循环
            }
        }

        //当达到最大连接数 无法释放无效的client,需要拒绝连接
        if (i == MAX_SRV_CLIENTS)
        {
            WiFiClient client = server.available();
            client.stop();
            Serial.println("连接被拒绝 ");
        }
    }


    //检测client发过来的数据
    for (i = 0; i < MAX_SRV_CLIENTS; i++)
    {
        if (serverClients[i] && serverClients[i].connected())
        {
            char recv_msg[1024];
            String recv_str_from_client = "";
            char ch_str =0x0;
            int index2 = 0;
            if (serverClients[i].available())
            {

                //serverClients[i].available()   判断指定客户端是否有可读数据
                while (serverClients[i].available())
                {
                //    byte recv_word = serverClients[i].read();
                    char recv_word = serverClients[i].read();
                    recv_str_from_client = recv_str_from_client + recv_word;
                    //Serial.write(recv_word);
                    //Serial.write("_");
                    
                    
                    recv_msg[index2] = recv_word;
                    index2++;

                }
                recv_msg[index2] = '\0';
                Serial.println("string type print");
                Serial.println(recv_str_from_client);
                Serial.write("\n------------------\n");
                //Serial.write(recv_msg, index2);
                //Serial.write("\n------------------\n");
                const byte sbuf2[] = "recv_success";
                const byte sbuf_error[] = "recv_error";
                const char original_open[] = "c11_open";
                String original_open2 = "c11_open";
                byte recv_str[1024];
                String aa = "123";


                if (recv_str_from_client.compareTo(original_open2) == 0)
                {
                    Serial.println("相等");
                }
                else
                {
                    Serial.println("不相等");
                    Serial.println("recv_str_from_client:" + recv_str_from_client);
                    Serial.println("original_open:" + original_open2);
                }


                //Serial.println(aa);
                for (int i = 0; i < index2; i++)
                {
                    recv_str[i] = recv_msg[i];
                    //Serial.write(recv_str[i]);
                }
                recv_str[index2] = 0x0;

                //0 byte array[4] = { 0xAB, 0xCD, 0xEF, 0x99 };
                char recv_str_2[1024] = "";
                array_to_string(recv_str, 36, recv_str_2);
                recv_str_2[index2] = '\0';
                //Serial.println("");
                //Serial.println("print_recv_str_2");
                //Serial.println(recv_str_2);
                int ori_length = strlen(recv_msg);
                aa = "ori_length=";
                aa = aa + ori_length;

                Serial.println(aa);
                aa = "index2=";
                aa = aa + index2;
                //Serial.println(aa);

                if (index2 == ori_length)
                {
                    //Serial.println("相等");
                    int a2_length = strcmp(recv_str_2, original_open);
                    aa = "a2_length=";
                    aa = aa + a2_length;

                    //Serial.println(aa);
                    String str1 = "";
                    String str2 = "";
                    for (int i = 0; i < ori_length; i++)
                    {
                        str1 = str1 + original_open[i];
                        str2 = str2 + recv_str_2[i];
                    }
                    int cc = str1.compareTo(str2);
                    aa = "cc=";
                    aa = aa + cc;

                    //Serial.println(aa);
                    //Serial.println(str1);
                    //Serial.println(str2);
                }
                else
                {
                    //Serial.println("不相等");
                }







                //  Serial.write(aa,sizeof(aa));




               //   if (strcmp(recv_str, original_open) == 0)
                {
                    serverClients[i].write(sbuf2, sizeof(sbuf2) / sizeof(sbuf2[0]));//向客户端发送数据
                }
                // else
                {
                    serverClients[i].write(sbuf_error, sizeof(sbuf_error) / sizeof(sbuf_error[0]));//向客户端发送数据
                }
                // serverClients[i].write(sbuf2, sizeof(sbuf2) / sizeof(sbuf2[0]));//向客户端发送数据

            }


        }
    }

    if (Serial.available())
    {
        //把串口调试器发过来的数据 发送给client
        size_t len = Serial.available();  //返回可读数据的长度
        uint8_t sbuf[len];
        Serial.readBytes(sbuf, len);
        String aa;
        for (int i = 0; i < sizeof(sbuf); i++)
        {
            aa = aa + sbuf[i];
        }
        if (aa == "abc")
        {
            digitalWrite(pinD2, HIGH);
        }
        else
        {
            digitalWrite(pinD2, LOW);
        }
        //push UART data to all connected telnet clients
        for (i = 0; i < MAX_SRV_CLIENTS; i++)
        {
            if (serverClients[i] && serverClients[i].connected())
            {
                serverClients[i].write(sbuf, len);//向客户端发送数据
                delay(1);
            }
        }
    }
}

 

posted @ 2023-04-16 15:16  txwtech  阅读(806)  评论(0)    收藏  举报