mirror of
https://github.com/esp8266/Arduino.git
synced 2025-07-27 18:02:17 +03:00
Deprecate axTLS, update examples (#5366)
* update examples * fix serial<->tcp example, use STASSID instead of SSID (name collision) * fix HTTPSRequest.ino * update AxTLS HTTPS examples, update AxTLS API to deprecated * fixes * fixes + fix astyle (no preproc directives) + restyling script * fix HTTPClient library * fixes * common.sh: do not reload arduino when already present (for locally CI testing) * common.sh: do not reload ArduinoJson when already present (for locally CI testing) * fix * fix * fix deprecated example * fix WiFiHTTPSServer.ino * reduce footprint * wipfix * fix led builtin * fix example * finished updating APSSID on all examples * style * restyle examples * helper to run CI test locally * local CI runner more verbose * +const * deprecation deprecation * deprecation * Update NTPClient.ino const char[] => const char * * Update interactive.ino const char[] => const char *
This commit is contained in:
committed by
Earle F. Philhower, III
parent
8f28c88f9c
commit
92373a9837
@ -20,83 +20,190 @@
|
||||
*/
|
||||
#include <ESP8266WiFi.h>
|
||||
|
||||
//how many clients should be able to telnet to this ESP8266
|
||||
#define MAX_SRV_CLIENTS 1
|
||||
const char* ssid = "**********";
|
||||
const char* password = "**********";
|
||||
#include <algorithm> // std::min
|
||||
|
||||
WiFiServer server(23);
|
||||
#ifndef STASSID
|
||||
#define STASSID "your-ssid"
|
||||
#define STAPSK "your-password"
|
||||
#endif
|
||||
|
||||
/*
|
||||
SWAP_PINS:
|
||||
0: use Serial1 for logging (legacy example)
|
||||
1: configure Hardware Serial port on RX:GPIO13 TX:GPIO15
|
||||
and use SoftwareSerial for logging on
|
||||
standard Serial pins RX:GPIO3 and TX:GPIO1
|
||||
*/
|
||||
|
||||
#define SWAP_PINS 0
|
||||
|
||||
/*
|
||||
SERIAL_LOOPBACK
|
||||
0: normal serial operations
|
||||
1: RX-TX are internally connected (loopback)
|
||||
*/
|
||||
|
||||
#define SERIAL_LOOPBACK 0
|
||||
|
||||
#define BAUD_SERIAL 115200
|
||||
#define BAUD_LOGGER 115200
|
||||
#define RXBUFFERSIZE 1024
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
#if SERIAL_LOOPBACK
|
||||
#undef BAUD_SERIAL
|
||||
#define BAUD_SERIAL 3000000
|
||||
#include <esp8266_peri.h>
|
||||
#endif
|
||||
|
||||
#if SWAP_PINS
|
||||
#include <SoftwareSerial.h>
|
||||
SoftwareSerial* logger = nullptr;
|
||||
#else
|
||||
#define logger (&Serial1)
|
||||
#endif
|
||||
|
||||
#define STACK_PROTECTOR 512 // bytes
|
||||
|
||||
//how many clients should be able to telnet to this ESP8266
|
||||
#define MAX_SRV_CLIENTS 2
|
||||
const char* ssid = STASSID;
|
||||
const char* password = STAPSK;
|
||||
|
||||
const int port = 23;
|
||||
|
||||
WiFiServer server(port);
|
||||
WiFiClient serverClients[MAX_SRV_CLIENTS];
|
||||
|
||||
void setup() {
|
||||
Serial1.begin(115200);
|
||||
|
||||
Serial.begin(BAUD_SERIAL);
|
||||
Serial.setRxBufferSize(RXBUFFERSIZE);
|
||||
|
||||
#if SWAP_PINS
|
||||
Serial.swap();
|
||||
// Hardware serial is now on RX:GPIO13 TX:GPIO15
|
||||
// use SoftwareSerial on regular RX(3)/TX(1) for logging
|
||||
logger = new SoftwareSerial(3, 1);
|
||||
logger->begin(BAUD_LOGGER);
|
||||
logger->println("\n\nUsing SoftwareSerial for logging");
|
||||
#else
|
||||
logger->begin(BAUD_LOGGER);
|
||||
logger->println("\n\nUsing Serial1 for logging");
|
||||
#endif
|
||||
logger->println(ESP.getFullVersion());
|
||||
logger->printf("Serial baud: %d (8n1: %d KB/s)\n", BAUD_SERIAL, BAUD_SERIAL * 8 / 10 / 1024);
|
||||
logger->printf("Serial receive buffer size: %d bytes\n", RXBUFFERSIZE);
|
||||
|
||||
#if SERIAL_LOOPBACK
|
||||
USC0(0) |= (1 << UCLBE); // incomplete HardwareSerial API
|
||||
logger->println("Serial Internal Loopback enabled");
|
||||
#endif
|
||||
|
||||
WiFi.mode(WIFI_STA);
|
||||
WiFi.begin(ssid, password);
|
||||
Serial1.print("\nConnecting to "); Serial1.println(ssid);
|
||||
uint8_t i = 0;
|
||||
while (WiFi.status() != WL_CONNECTED && i++ < 20) {
|
||||
logger->print("\nConnecting to ");
|
||||
logger->println(ssid);
|
||||
while (WiFi.status() != WL_CONNECTED) {
|
||||
logger->print('.');
|
||||
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);
|
||||
logger->println();
|
||||
logger->print("connected, address=");
|
||||
logger->println(WiFi.localIP());
|
||||
|
||||
//start server
|
||||
server.begin();
|
||||
server.setNoDelay(true);
|
||||
|
||||
Serial1.print("Ready! Use 'telnet ");
|
||||
Serial1.print(WiFi.localIP());
|
||||
Serial1.println(" 23' to connect");
|
||||
logger->print("Ready! Use 'telnet ");
|
||||
logger->print(WiFi.localIP());
|
||||
logger->printf(" %d' to connect\n", port);
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
//find free/disconnected spot
|
||||
int i;
|
||||
for (i = 0; i < MAX_SRV_CLIENTS; i++)
|
||||
if (!serverClients[i]) { // equivalent to !serverClients[i].connected()
|
||||
serverClients[i] = server.available();
|
||||
Serial1.print("New client: "); Serial1.print(i);
|
||||
logger->print("New client: index ");
|
||||
logger->print(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//no free/disconnected spot so reject
|
||||
if (i == MAX_SRV_CLIENTS) {
|
||||
WiFiClient serverClient = server.available();
|
||||
serverClient.stop();
|
||||
Serial1.println("Connection rejected ");
|
||||
server.available().println("busy");
|
||||
// hints: server.available() is a WiFiClient with short-term scope
|
||||
// when out of scope, a WiFiClient will
|
||||
// - flush() - all data will be sent
|
||||
// - stop() - automatically too
|
||||
logger->printf("server is busy with %d active connections\n", MAX_SRV_CLIENTS);
|
||||
}
|
||||
}
|
||||
//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 TCP clients for data
|
||||
#if 1
|
||||
// Incredibly, this code is faster than the bufferred one below - #4620 is needed
|
||||
// loopback/3000000baud average 348KB/s
|
||||
for (int i = 0; i < MAX_SRV_CLIENTS; i++)
|
||||
while (serverClients[i].available() && Serial.availableForWrite() > 0) {
|
||||
// working char by char is not very efficient
|
||||
Serial.write(serverClients[i].read());
|
||||
}
|
||||
#else
|
||||
// loopback/3000000baud average: 312KB/s
|
||||
for (int i = 0; i < MAX_SRV_CLIENTS; i++)
|
||||
while (serverClients[i].available() && Serial.availableForWrite() > 0) {
|
||||
size_t maxToSerial = std::min(serverClients[i].available(), Serial.availableForWrite());
|
||||
maxToSerial = std::min(maxToSerial, (size_t)STACK_PROTECTOR);
|
||||
uint8_t buf[maxToSerial];
|
||||
size_t tcp_got = serverClients[i].read(buf, maxToSerial);
|
||||
size_t serial_sent = Serial.write(buf, tcp_got);
|
||||
if (serial_sent != maxToSerial) {
|
||||
logger->printf("len mismatch: available:%zd tcp-read:%zd serial-write:%zd\n", maxToSerial, tcp_got, serial_sent);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// determine maximum output size "fair TCP use"
|
||||
// client.availableForWrite() returns 0 when !client.connected()
|
||||
size_t maxToTcp = 0;
|
||||
for (int i = 0; i < MAX_SRV_CLIENTS; i++)
|
||||
if (serverClients[i]) {
|
||||
size_t afw = serverClients[i].availableForWrite();
|
||||
if (afw) {
|
||||
if (!maxToTcp) {
|
||||
maxToTcp = afw;
|
||||
} else {
|
||||
maxToTcp = std::min(maxToTcp, afw);
|
||||
}
|
||||
} else {
|
||||
// warn but ignore congested clients
|
||||
logger->println("one client is congested");
|
||||
}
|
||||
}
|
||||
|
||||
//check UART for data
|
||||
size_t len = std::min((size_t)Serial.available(), maxToTcp);
|
||||
len = std::min(len, (size_t)STACK_PROTECTOR);
|
||||
if (len) {
|
||||
uint8_t sbuf[len];
|
||||
size_t serial_got = Serial.readBytes(sbuf, len);
|
||||
// push UART data to all connected telnet clients
|
||||
for (int i = 0; i < MAX_SRV_CLIENTS; i++)
|
||||
// if client.availableForWrite() was 0 (congested)
|
||||
// and increased since then,
|
||||
// ensure write space is sufficient:
|
||||
if (serverClients[i].availableForWrite() >= serial_got) {
|
||||
size_t tcp_sent = serverClients[i].write(sbuf, serial_got);
|
||||
if (tcp_sent != len) {
|
||||
logger->printf("len mismatch: available:%zd serial-read:%zd tcp-write:%zd\n", len, serial_got, tcp_sent);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user