mirror of
				https://github.com/0xFEEDC0DE64/arduino-esp32.git
				synced 2025-10-31 14:11:42 +01:00 
			
		
		
		
	
		
			
	
	
		
			132 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Arduino
		
	
	
	
	
	
		
		
			
		
	
	
			132 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Arduino
		
	
	
	
	
	
|   | /*
 | ||
|  |   WiFiTelnetToSerial - Example Transparent UART to Telnet Server for ESP32 | ||
|  | 
 | ||
|  |   Copyright (c) 2017 Hristo Gochkov. All rights reserved. | ||
|  |   This file is part of the ESP32 WiFi 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 <WiFi.h>
 | ||
|  | #include <WiFiMulti.h>
 | ||
|  | 
 | ||
|  | WiFiMulti wifiMulti; | ||
|  | 
 | ||
|  | //how many clients should be able to telnet to this ESP32
 | ||
|  | #define MAX_SRV_CLIENTS 1
 | ||
|  | const char* ssid = "**********"; | ||
|  | const char* password = "**********"; | ||
|  | 
 | ||
|  | WiFiServer server(23); | ||
|  | WiFiClient serverClients[MAX_SRV_CLIENTS]; | ||
|  | 
 | ||
|  | HardwareSerial Serial1(2);  // UART1/Serial1 pins 16,17
 | ||
|  | 
 | ||
|  | void setup() { | ||
|  |   Serial.begin(115200); | ||
|  |   Serial.println("\nConnecting"); | ||
|  | 
 | ||
|  |   wifiMulti.addAP(ssid, password); | ||
|  |   wifiMulti.addAP("ssid_from_AP_2", "your_password_for_AP_2"); | ||
|  |   wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3"); | ||
|  | 
 | ||
|  |   Serial.println("Connecting Wifi "); | ||
|  |   for (int loops = 10; loops > 0; loops--) { | ||
|  |     if (wifiMulti.run() == WL_CONNECTED) { | ||
|  |       Serial.println(""); | ||
|  |       Serial.print("WiFi connected "); | ||
|  |       Serial.print("IP address: "); | ||
|  |       Serial.println(WiFi.localIP()); | ||
|  |       break; | ||
|  |     } | ||
|  |     else { | ||
|  |       Serial.println(loops); | ||
|  |       delay(1000); | ||
|  |     } | ||
|  |   } | ||
|  |   if (wifiMulti.run() != WL_CONNECTED) { | ||
|  |     Serial.println("WiFi connect failed"); | ||
|  |     delay(1000); | ||
|  |     ESP.restart(); | ||
|  |   } | ||
|  | 
 | ||
|  |   //start UART and the server
 | ||
|  |   Serial1.begin(9600); | ||
|  |   server.begin(); | ||
|  |   server.setNoDelay(true); | ||
|  | 
 | ||
|  |   Serial.print("Ready! Use 'telnet "); | ||
|  |   Serial.print(WiFi.localIP()); | ||
|  |   Serial.println(" 23' to connect"); | ||
|  | } | ||
|  | 
 | ||
|  | void loop() { | ||
|  |   uint8_t i; | ||
|  |   if (wifiMulti.run() == WL_CONNECTED) { | ||
|  |     //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(); | ||
|  |           if (!serverClients[i]) Serial.println("available broken"); | ||
|  |           Serial.print("New client: "); | ||
|  |           Serial.print(i); Serial.print(' '); | ||
|  |           Serial.println(serverClients[i].remoteIP()); | ||
|  |           break; | ||
|  |         } | ||
|  |       } | ||
|  |       if (i >= MAX_SRV_CLIENTS) { | ||
|  |         //no free/disconnected spot so reject
 | ||
|  |         server.available().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()) Serial1.write(serverClients[i].read()); | ||
|  |         } | ||
|  |       } | ||
|  |       else { | ||
|  |         if (serverClients[i]) { | ||
|  |           serverClients[i].stop(); | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |     //check UART for data
 | ||
|  |     if(Serial1.available()){ | ||
|  |       size_t len = Serial1.available(); | ||
|  |       uint8_t sbuf[len]; | ||
|  |       Serial1.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); | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |   } | ||
|  |   else { | ||
|  |     Serial.println("WiFi not connected!"); | ||
|  |     for(i = 0; i < MAX_SRV_CLIENTS; i++) { | ||
|  |       if (serverClients[i]) serverClients[i].stop(); | ||
|  |     } | ||
|  |     delay(1000); | ||
|  |   } | ||
|  | } |