ESP-手機--雙向通訊模式

來源:互聯網
上載者:User

標籤:釋放   獲得   use   函數   redist   soft   XA   .com   char s   

1 AP 接受手機

2 STA(密碼固定)連線路由器,AP接受手機

3 STA(密碼靈活)連線路由器,AP接受手機

 

1 AP 接受手機
#include <ESP8266WiFi.h> const char *ssid = "esp8266_666";const char *password = "12345678";WiFiServer server(8266);void setup(){  Serial.begin(115200);  Serial.println();  Serial.print("Setting soft-AP ... ");   IPAddress softLocal(192,168,4,1);   IPAddress softGateway(192,168,4,1);IPAddress softSubnet(255,255,255,0); WiFi.softAPConfig(softLocal, softGateway, softSubnet);  WiFi.softAP(ssid, password);   IPAddress myIP = WiFi.softAPIP();  Serial.print("AP IP address: ");  Serial.println(myIP); server.begin(); Serial.printf("Web server started, open %s in a web browser\n", WiFi.localIP().toString().c_str()); } void loop(){ WiFiClient client = server.available(); if (client)  {    Serial.println("\n[Client connected]");    while (client.connected())    { //  將串口資料列印給TCP  if(Serial.available()){    size_t len = Serial.available();    uint8_t sbuf[len];    Serial.readBytes(sbuf, len);      client.write(sbuf, len);    delay(1);        }            // 將TCP資料列印給串口      if (client.available())      {        String line = client.readStringUntil(‘\r‘);        Serial.print(line);            }    }    delay(1);     client.stop();    Serial.println("[Client disonnected]");  }  } 

  

2 STA(密碼固定)連線路由器,AP接受手機
/*   WiFiTelnetToSerial - Example Transparent UART to Telnet Server for esp8266  Copyright (c) 2015 Hristo Gochkov. All rights reserved.  This file is part of the ESP8266WiFi library for Arduino environment.   This library is free software; you can redistribute it and/or  modify it under the terms of the GNU Lesser General Public  License as published by the Free Software Foundation; either  version 2.1 of the License, or (at your option) any later version.  This library is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  Lesser General Public License for more details.  You should have received a copy of the GNU Lesser General Public  License along with this library; if not, write to the Free Software  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA*/#include <ESP8266WiFi.h>//how many clients should be able to telnet to this ESP8266#define MAX_SRV_CLIENTS 1const char* ssid = "**********";const char* password = "**********";WiFiServer server(23);WiFiClient serverClients[MAX_SRV_CLIENTS];void setup() {  Serial1.begin(115200);  WiFi.begin(ssid, password);  Serial1.print("\nConnecting to "); Serial1.println(ssid);  uint8_t i = 0;  while (WiFi.status() != WL_CONNECTED && i++ < 20) delay(500);  if(i == 21){    Serial1.print("Could not connect to"); Serial1.println(ssid);    while(1) delay(500);  }  //start UART and the server  Serial.begin(115200);  server.begin();  server.setNoDelay(true);    Serial1.print("Ready! Use ‘telnet ");  Serial1.print(WiFi.localIP());  Serial1.println(" 23‘ to connect");}void loop() {  uint8_t i;  //check if there are any new clients  if (server.hasClient()){    for(i = 0; i < MAX_SRV_CLIENTS; i++){      //find free/disconnected spot      if (!serverClients[i] || !serverClients[i].connected()){        if(serverClients[i]) serverClients[i].stop();        serverClients[i] = server.available();        Serial1.print("New client: "); Serial1.print(i);        continue;      }    }    //no free/disconnected spot so reject    WiFiClient serverClient = server.available();    serverClient.stop();  }  //check clients for data  for(i = 0; i < MAX_SRV_CLIENTS; i++){    if (serverClients[i] && serverClients[i].connected()){      if(serverClients[i].available()){        //get data from the telnet client and push it to the UART        while(serverClients[i].available()) Serial.write(serverClients[i].read());      }    }  }  //check UART for data  if(Serial.available()){    size_t len = Serial.available();    uint8_t sbuf[len];    Serial.readBytes(sbuf, len);    //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);      }    }  }}

  

 

3 STA(密碼靈活)連線路由器,AP接受手機
/*** 日期:2017/09/19* 功能:wifi lamp 8266端*       加入SmartConfig功能* 單片機菜鳥**/#include <ESP8266WiFi.h>#include <EEPROM.h> #define MAX_SRV_CLIENTS 3   //最大同時聯結數,即你想要接入的裝置數量,8266tcpserver只能接入五個,哎#define led 2#define DEBUG //是否開啟debug功能 #ifdef DEBUG#define DebugPrintln(message)    Serial.println(message)#else#define DebugPrintln(message)#endif #ifdef DEBUG#define DebugPrint(message)    Serial.print(message)#else#define DebugPrint(message)#endif   const char* ssid     = "360wifilulu";         // XXXXXX -- 使用時請修改為當前你的 wifi ssidconst char* password = "6206908you11011010";         // XXXXXX -- 使用時請修改為當前你的 wifi 密碼   const unsigned long BAUD_RATE = 115200;                   // serial connection speedconst unsigned long HTTP_TIMEOUT = 5000;               // max respone time from server   WiFiServer server(8266);//你要的連接埠號碼,隨意修改,範圍0-65535WiFiClient serverClients[MAX_SRV_CLIENTS]; //ssid和密碼結構體struct config_type{  char ssid[32];  char psw[64];}; config_type config;int flag = HIGH;//預設當前滅燈   /*** @Desc 初始化操作*/void setup() {  Serial.begin(BAUD_RATE);  pinMode(led,OUTPUT);  digitalWrite(led, HIGH);   if(!autoConfig()){    smartConfig();    DebugPrint("Connecting to ");//寫幾句提示,哈哈    DebugPrintln(ssid);    while (WiFi.status() != WL_CONNECTED) {    //這個函數是wifi串連狀態,返回wifi連結狀態       delay(500);       DebugPrint(".");    }  }     delay(1000);  digitalWrite(led, LOW);  DebugPrintln("IP address: ");  DebugPrintln(WiFi.localIP());//WiFi.localIP()返回8266獲得的ip地址  server.begin();  server.setNoDelay(true);  //加上後才正常些}   /*** @Desc  主函數*/void loop() {  uint8_t i;  if (server.hasClient()){        for (i = 0; i < MAX_SRV_CLIENTS; i++){            if (!serverClients[i] || !serverClients[i].connected()){                if (serverClients[i]) serverClients[i].stop();//未聯結,就釋放                serverClients[i] = server.available();//分配新的                continue;            }        }        //8266tcpserver只能接入五個  超出的需要釋放        WiFiClient serverClient = server.available();        if (serverClient){          serverClient.stop();        }  }     for (i = 0; i < MAX_SRV_CLIENTS; i++){        if (serverClients[i] && serverClients[i].connected()){            //處理用戶端發過來的資料            if (serverClients[i].available()){                while (serverClients[i].available())                     Serial.write(serverClients[i].read());            }        }   }    if(Serial.available()>0){      char ch = Serial.read();      if(ch == ‘1‘){        smartConfig();        delay(1000);        digitalWrite(led, LOW);        DebugPrintln("IP address: ");        DebugPrintln(WiFi.localIP());//WiFi.localIP()返回8266獲得的ip地址      }   }} /*** 自動連接20s 超過之後自動進入SmartConfig模式*/bool autoConfig(){  WiFi.mode(WIFI_AP_STA);     //設定esp8266 工作模式  WiFi.begin();  delay(2000);//剛啟動模組的話 延時穩定一下  DebugPrintln("AutoConfiging ......");  for(int i=0;i<20;i++){    int wstatus = WiFi.status();    if (wstatus == WL_CONNECTED){      DebugPrintln("AutoConfig Success");      DebugPrint("SSID:");      DebugPrintln(WiFi.SSID().c_str());      DebugPrint("PSW:");      DebugPrintln(WiFi.psk().c_str());      return true;    }else{      DebugPrint(".");      delay(1000);      flag = !flag;      digitalWrite(led, flag);    }   }  DebugPrintln("AutoConfig Faild!");  return false;} /*** 開啟SmartConfig功能*/void smartConfig(){  WiFi.mode(WIFI_STA);  delay(2000);  DebugPrintln("Wait for Smartconfig");  // 等待配網  WiFi.beginSmartConfig();  while (1){    DebugPrint(".");    delay(500);    flag = !flag;    digitalWrite(led, flag);         if (WiFi.smartConfigDone()){      //smartconfig配置完畢      DebugPrintln("SmartConfig Success");      DebugPrint("SSID:");      DebugPrintln(WiFi.SSID().c_str());      DebugPrint("PSW:");      DebugPrintln(WiFi.psk().c_str());      strcpy(config.ssid, WiFi.SSID().c_str());      strcpy(config.psw, WiFi.psk().c_str());      saveConfig();      WiFi.mode(WIFI_AP_STA);     //設定esp8266 工作模式      WiFi.setAutoConnect(true);  // 設定自動連接      break;    }  }}  /*儲存參數到eeprom */void saveConfig(){  EEPROM.begin(1024);  uint8_t *p = (uint8_t*)(&config);  for (int i = 0; i < sizeof(config); i++)  {    EEPROM.write(i, *(p + i));  }  EEPROM.commit();}  /*   從EEPROM載入參數*/void loadConfig(){  EEPROM.begin(1024);  uint8_t *p = (uint8_t*)(&config);  for (int i = 0; i < sizeof(config); i++)  {    *(p + i) = EEPROM.read(i);  }  EEPROM.commit();}

  

 

ESP-手機--雙向通訊模式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.