mirror of
https://github.com/esp8266/Arduino.git
synced 2025-07-27 18:02:17 +03:00
* Deprecate SPIFFS, move examples to LittleFS SPIFFS has been a great filesystem, but it has significant problems in many cases (and it's also pretty slow). Development seems to have slowed/stopped on the upstream version, and we're not able to provide support or fix the known issues with it as-is. Deprecate SPIFFS variable. Update all examples to use LittleFS instead of SPIFFS. Also, minor cleanup on very old examples which has obsolete delays waiting for the Serial port to come up, or which were stuck at 9600 baud because of their ancient AVR heritage. Fixes #7095 * Remove leftover debug code * Clean up comments in some examples * Update documentation on SPIFFS deprecation * Fix host tests to avoid deprecation warnings * Fix cut-n-paste error * Restore SpeedTest.ino, adjust to allow custom FSes Co-authored-by: Develo <deveyes@gmail.com>
244 lines
5.3 KiB
C++
244 lines
5.3 KiB
C++
/**
|
|
@file OTA-mDNS-LittleFS.ino
|
|
|
|
@author Pascal Gollor (http://www.pgollor.de/cms/)
|
|
@date 2015-09-18
|
|
|
|
changelog:
|
|
2015-10-22:
|
|
- Use new ArduinoOTA library.
|
|
- loadConfig function can handle different line endings
|
|
- remove mDNS studd. ArduinoOTA handle it.
|
|
|
|
*/
|
|
|
|
#ifndef STASSID
|
|
#define STASSID "your-ssid"
|
|
#define STAPSK "your-password"
|
|
#endif
|
|
|
|
// includes
|
|
#include <ESP8266WiFi.h>
|
|
#include <ESP8266mDNS.h>
|
|
#include <WiFiUdp.h>
|
|
#include <FS.h>
|
|
#include <LittleFS.h>
|
|
#include <ArduinoOTA.h>
|
|
|
|
|
|
/**
|
|
@brief mDNS and OTA Constants
|
|
@{
|
|
*/
|
|
#define HOSTNAME "ESP8266-OTA-" ///< Hostename. The setup function adds the Chip ID at the end.
|
|
/// @}
|
|
|
|
/**
|
|
@brief Default WiFi connection information.
|
|
@{
|
|
*/
|
|
const char* ap_default_ssid = STASSID; ///< Default SSID.
|
|
const char* ap_default_psk = STAPSK; ///< Default PSK.
|
|
/// @}
|
|
|
|
/// Uncomment the next line for verbose output over UART.
|
|
//#define SERIAL_VERBOSE
|
|
|
|
/**
|
|
@brief Read WiFi connection information from file system.
|
|
@param ssid String pointer for storing SSID.
|
|
@param pass String pointer for storing PSK.
|
|
@return True or False.
|
|
|
|
The config file have to containt the WiFi SSID in the first line
|
|
and the WiFi PSK in the second line.
|
|
Line seperator can be \r\n (CR LF) \r or \n.
|
|
*/
|
|
bool loadConfig(String *ssid, String *pass) {
|
|
// open file for reading.
|
|
File configFile = LittleFS.open("/cl_conf.txt", "r");
|
|
if (!configFile) {
|
|
Serial.println("Failed to open cl_conf.txt.");
|
|
|
|
return false;
|
|
}
|
|
|
|
// Read content from config file.
|
|
String content = configFile.readString();
|
|
configFile.close();
|
|
|
|
content.trim();
|
|
|
|
// Check if ther is a second line available.
|
|
int8_t pos = content.indexOf("\r\n");
|
|
uint8_t le = 2;
|
|
// check for linux and mac line ending.
|
|
if (pos == -1) {
|
|
le = 1;
|
|
pos = content.indexOf("\n");
|
|
if (pos == -1) {
|
|
pos = content.indexOf("\r");
|
|
}
|
|
}
|
|
|
|
// If there is no second line: Some information is missing.
|
|
if (pos == -1) {
|
|
Serial.println("Infvalid content.");
|
|
Serial.println(content);
|
|
|
|
return false;
|
|
}
|
|
|
|
// Store SSID and PSK into string vars.
|
|
*ssid = content.substring(0, pos);
|
|
*pass = content.substring(pos + le);
|
|
|
|
ssid->trim();
|
|
pass->trim();
|
|
|
|
#ifdef SERIAL_VERBOSE
|
|
Serial.println("----- file content -----");
|
|
Serial.println(content);
|
|
Serial.println("----- file content -----");
|
|
Serial.println("ssid: " + *ssid);
|
|
Serial.println("psk: " + *pass);
|
|
#endif
|
|
|
|
return true;
|
|
} // loadConfig
|
|
|
|
|
|
/**
|
|
@brief Save WiFi SSID and PSK to configuration file.
|
|
@param ssid SSID as string pointer.
|
|
@param pass PSK as string pointer,
|
|
@return True or False.
|
|
*/
|
|
bool saveConfig(String *ssid, String *pass) {
|
|
// Open config file for writing.
|
|
File configFile = LittleFS.open("/cl_conf.txt", "w");
|
|
if (!configFile) {
|
|
Serial.println("Failed to open cl_conf.txt for writing");
|
|
|
|
return false;
|
|
}
|
|
|
|
// Save SSID and PSK.
|
|
configFile.println(*ssid);
|
|
configFile.println(*pass);
|
|
|
|
configFile.close();
|
|
|
|
return true;
|
|
} // saveConfig
|
|
|
|
|
|
/**
|
|
@brief Arduino setup function.
|
|
*/
|
|
void setup() {
|
|
String station_ssid = "";
|
|
String station_psk = "";
|
|
|
|
Serial.begin(115200);
|
|
|
|
delay(100);
|
|
|
|
Serial.println("\r\n");
|
|
Serial.print("Chip ID: 0x");
|
|
Serial.println(ESP.getChipId(), HEX);
|
|
|
|
// Set Hostname.
|
|
String hostname(HOSTNAME);
|
|
hostname += String(ESP.getChipId(), HEX);
|
|
WiFi.hostname(hostname);
|
|
|
|
// Print hostname.
|
|
Serial.println("Hostname: " + hostname);
|
|
//Serial.println(WiFi.hostname());
|
|
|
|
|
|
// Initialize file system.
|
|
if (!LittleFS.begin()) {
|
|
Serial.println("Failed to mount file system");
|
|
return;
|
|
}
|
|
|
|
// Load wifi connection information.
|
|
if (! loadConfig(&station_ssid, &station_psk)) {
|
|
station_ssid = "";
|
|
station_psk = "";
|
|
|
|
Serial.println("No WiFi connection information available.");
|
|
}
|
|
|
|
// Check WiFi connection
|
|
// ... check mode
|
|
if (WiFi.getMode() != WIFI_STA) {
|
|
WiFi.mode(WIFI_STA);
|
|
delay(10);
|
|
}
|
|
|
|
// ... Compare file config with sdk config.
|
|
if (WiFi.SSID() != station_ssid || WiFi.psk() != station_psk) {
|
|
Serial.println("WiFi config changed.");
|
|
|
|
// ... Try to connect to WiFi station.
|
|
WiFi.begin(station_ssid.c_str(), station_psk.c_str());
|
|
|
|
// ... Pritn new SSID
|
|
Serial.print("new SSID: ");
|
|
Serial.println(WiFi.SSID());
|
|
|
|
// ... Uncomment this for debugging output.
|
|
//WiFi.printDiag(Serial);
|
|
} else {
|
|
// ... Begin with sdk config.
|
|
WiFi.begin();
|
|
}
|
|
|
|
Serial.println("Wait for WiFi connection.");
|
|
|
|
// ... Give ESP 10 seconds to connect to station.
|
|
unsigned long startTime = millis();
|
|
while (WiFi.status() != WL_CONNECTED && millis() - startTime < 10000) {
|
|
Serial.write('.');
|
|
//Serial.print(WiFi.status());
|
|
delay(500);
|
|
}
|
|
Serial.println();
|
|
|
|
// Check connection
|
|
if (WiFi.status() == WL_CONNECTED) {
|
|
// ... print IP Address
|
|
Serial.print("IP address: ");
|
|
Serial.println(WiFi.localIP());
|
|
} else {
|
|
Serial.println("Can not connect to WiFi station. Go into AP mode.");
|
|
|
|
// Go into software AP mode.
|
|
WiFi.mode(WIFI_AP);
|
|
|
|
delay(10);
|
|
|
|
WiFi.softAP(ap_default_ssid, ap_default_psk);
|
|
|
|
Serial.print("IP address: ");
|
|
Serial.println(WiFi.softAPIP());
|
|
}
|
|
|
|
// Start OTA server.
|
|
ArduinoOTA.setHostname((const char *)hostname.c_str());
|
|
ArduinoOTA.begin();
|
|
}
|
|
|
|
|
|
/**
|
|
@brief Arduino loop function.
|
|
*/
|
|
void loop() {
|
|
// Handle OTA server.
|
|
ArduinoOTA.handle();
|
|
}
|
|
|