1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-06-06 05:21:22 +03:00

examples: format all .ino files

This formats all the example source files using Arduino style rules.
This commit is contained in:
Ivan Grokhotkov 2018-02-19 18:30:59 +03:00 committed by Ivan Grokhotkov
parent e226251b27
commit 61cd8d8385
88 changed files with 2730 additions and 2801 deletions

View File

@ -32,10 +32,11 @@ void setup() {
ArduinoOTA.onStart([]() {
String type;
if (ArduinoOTA.getCommand() == U_FLASH)
if (ArduinoOTA.getCommand() == U_FLASH) {
type = "sketch";
else // U_SPIFFS
} else { // U_SPIFFS
type = "filesystem";
}
// NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end()
Serial.println("Start updating " + type);
@ -48,11 +49,17 @@ void setup() {
});
ArduinoOTA.onError([](ota_error_t error) {
Serial.printf("Error[%u]: ", error);
if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
else if (error == OTA_END_ERROR) Serial.println("End Failed");
if (error == OTA_AUTH_ERROR) {
Serial.println("Auth Failed");
} else if (error == OTA_BEGIN_ERROR) {
Serial.println("Begin Failed");
} else if (error == OTA_CONNECT_ERROR) {
Serial.println("Connect Failed");
} else if (error == OTA_RECEIVE_ERROR) {
Serial.println("Receive Failed");
} else if (error == OTA_END_ERROR) {
Serial.println("End Failed");
}
});
ArduinoOTA.begin();
Serial.println("Ready");

View File

@ -23,7 +23,7 @@ void setup() {
WiFi.begin(ssid, password);
while (WiFi.waitForConnectResult() != WL_CONNECTED){
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
WiFi.begin(ssid, password);
Serial.println("Retrying connection...");
}
@ -32,30 +32,32 @@ void setup() {
/* configure dimmers, and OTA server events */
analogWriteRange(1000);
analogWrite(led_pin,990);
analogWrite(led_pin, 990);
for (int i=0; i<N_DIMMERS; i++)
{
for (int i = 0; i < N_DIMMERS; i++) {
pinMode(dimmer_pin[i], OUTPUT);
analogWrite(dimmer_pin[i],50);
analogWrite(dimmer_pin[i], 50);
}
ArduinoOTA.setHostname(host);
ArduinoOTA.onStart([]() { // switch off all the PWMs during upgrade
for(int i=0; i<N_DIMMERS;i++)
for (int i = 0; i < N_DIMMERS; i++) {
analogWrite(dimmer_pin[i], 0);
analogWrite(led_pin,0);
}
analogWrite(led_pin, 0);
});
ArduinoOTA.onEnd([]() { // do a fancy thing with our board led at end
for (int i=0;i<30;i++)
{
analogWrite(led_pin,(i*100) % 1001);
for (int i = 0; i < 30; i++) {
analogWrite(led_pin, (i * 100) % 1001);
delay(50);
}
});
ArduinoOTA.onError([](ota_error_t error) { (void)error; ESP.restart(); });
ArduinoOTA.onError([](ota_error_t error) {
(void)error;
ESP.restart();
});
/* setup the OTA server */
ArduinoOTA.begin();

View File

@ -6,16 +6,16 @@
#include <EEPROM.h>
/*
* This example serves a "hello world" on a WLAN and a SoftAP at the same time.
* The SoftAP allow you to configure WLAN parameters at run time. They are not setup in the sketch but saved on EEPROM.
*
* Connect your computer or cell phone to wifi network ESP_ap with password 12345678. A popup may appear and it allow you to go to WLAN config. If it does not then navigate to http://192.168.4.1/wifi and config it there.
* Then wait for the module to connect to your wifi and take note of the WLAN IP it got. Then you can disconnect from ESP_ap and return to your regular WLAN.
*
* Now the ESP8266 is in your network. You can reach it through http://192.168.x.x/ (the IP you took note of) or maybe at http://esp8266.local too.
*
* This is a captive portal because through the softAP it will redirect any http request to http://192.168.4.1/
*/
This example serves a "hello world" on a WLAN and a SoftAP at the same time.
The SoftAP allow you to configure WLAN parameters at run time. They are not setup in the sketch but saved on EEPROM.
Connect your computer or cell phone to wifi network ESP_ap with password 12345678. A popup may appear and it allow you to go to WLAN config. If it does not then navigate to http://192.168.4.1/wifi and config it there.
Then wait for the module to connect to your wifi and take note of the WLAN IP it got. Then you can disconnect from ESP_ap and return to your regular WLAN.
Now the ESP8266 is in your network. You can reach it through http://192.168.x.x/ (the IP you took note of) or maybe at http://esp8266.local too.
This is a captive portal because through the softAP it will redirect any http request to http://192.168.4.1/
*/
/* Set these to your desired softAP credentials. They are not configurable at runtime */
const char *softAP_ssid = "ESP_ap";
@ -71,7 +71,7 @@ void setup() {
server.on("/wifisave", handleWifiSave);
server.on("/generate_204", handleRoot); //Android captive portal. Maybe not needed. Might be handled by notFound handler.
server.on("/fwlink", handleRoot); //Microsoft captive portal. Maybe not needed. Might be handled by notFound handler.
server.onNotFound ( handleNotFound );
server.onNotFound(handleNotFound);
server.begin(); // Web server start
Serial.println("HTTP server started");
loadCredentials(); // Load WLAN credentials from network
@ -81,37 +81,37 @@ void setup() {
void connectWifi() {
Serial.println("Connecting as wifi client...");
WiFi.disconnect();
WiFi.begin ( ssid, password );
WiFi.begin(ssid, password);
int connRes = WiFi.waitForConnectResult();
Serial.print ( "connRes: " );
Serial.println ( connRes );
Serial.print("connRes: ");
Serial.println(connRes);
}
void loop() {
if (connect) {
Serial.println ( "Connect requested" );
Serial.println("Connect requested");
connect = false;
connectWifi();
lastConnectTry = millis();
}
{
unsigned int s = WiFi.status();
if (s == 0 && millis() > (lastConnectTry + 60000) ) {
if (s == 0 && millis() > (lastConnectTry + 60000)) {
/* If WLAN disconnected and idle try to connect */
/* Don't set retry time too low as retry interfere the softAP operation */
connect = true;
}
if (status != s) { // WLAN status change
Serial.print ( "Status: " );
Serial.println ( s );
Serial.print("Status: ");
Serial.println(s);
status = s;
if (s == WL_CONNECTED) {
/* Just connected to WLAN */
Serial.println ( "" );
Serial.print ( "Connected to " );
Serial.println ( ssid );
Serial.print ( "IP address: " );
Serial.println ( WiFi.localIP() );
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
// Setup MDNS responder
if (!MDNS.begin(myHostname)) {

View File

@ -2,9 +2,9 @@
void loadCredentials() {
EEPROM.begin(512);
EEPROM.get(0, ssid);
EEPROM.get(0+sizeof(ssid), password);
char ok[2+1];
EEPROM.get(0+sizeof(ssid)+sizeof(password), ok);
EEPROM.get(0 + sizeof(ssid), password);
char ok[2 + 1];
EEPROM.get(0 + sizeof(ssid) + sizeof(password), ok);
EEPROM.end();
if (String(ok) != String("OK")) {
ssid[0] = 0;
@ -12,16 +12,16 @@ void loadCredentials() {
}
Serial.println("Recovered credentials:");
Serial.println(ssid);
Serial.println(strlen(password)>0?"********":"<no password>");
Serial.println(strlen(password) > 0 ? "********" : "<no password>");
}
/** Store WLAN credentials to EEPROM */
void saveCredentials() {
EEPROM.begin(512);
EEPROM.put(0, ssid);
EEPROM.put(0+sizeof(ssid), password);
char ok[2+1] = "OK";
EEPROM.put(0+sizeof(ssid)+sizeof(password), ok);
EEPROM.put(0 + sizeof(ssid), password);
char ok[2 + 1] = "OK";
EEPROM.put(0 + sizeof(ssid) + sizeof(password), ok);
EEPROM.commit();
EEPROM.end();
}

View File

@ -26,10 +26,10 @@ void handleRoot() {
/** Redirect to captive portal if we got a request for another domain. Return true in that case so the page handler do not try to handle the request again. */
boolean captivePortal() {
if (!isIp(server.hostHeader()) && server.hostHeader() != (String(myHostname)+".local")) {
if (!isIp(server.hostHeader()) && server.hostHeader() != (String(myHostname) + ".local")) {
Serial.print("Request redirected to captive portal");
server.sendHeader("Location", String("http://") + toStringIp(server.client().localIP()), true);
server.send ( 302, "text/plain", ""); // Empty content inhibits Content-length header so we have to close the socket ourselves.
server.send(302, "text/plain", ""); // Empty content inhibits Content-length header so we have to close the socket ourselves.
server.client().stop(); // Stop is needed because we sent no content length
return true;
}
@ -75,7 +75,7 @@ void handleWifi() {
Serial.println("scan done");
if (n > 0) {
for (int i = 0; i < n; i++) {
server.sendContent(String() + "\r\n<tr><td>SSID " + WiFi.SSID(i) + String((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":" *") + " (" + WiFi.RSSI(i) + ")</td></tr>");
server.sendContent(String() + "\r\n<tr><td>SSID " + WiFi.SSID(i) + String((WiFi.encryptionType(i) == ENC_TYPE_NONE) ? " " : " *") + " (" + WiFi.RSSI(i) + ")</td></tr>");
}
} else {
server.sendContent(String() + "<tr><td>No WLAN found</td></tr>");
@ -101,7 +101,7 @@ void handleWifiSave() {
server.sendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
server.sendHeader("Pragma", "no-cache");
server.sendHeader("Expires", "-1");
server.send ( 302, "text/plain", ""); // Empty content inhibits Content-length header so we have to close the socket ourselves.
server.send(302, "text/plain", ""); // Empty content inhibits Content-length header so we have to close the socket ourselves.
server.client().stop(); // Stop is needed because we sent no content length
saveCredentials();
connect = strlen(ssid) > 0; // Request WLAN connect with new credentials if there is a SSID
@ -115,17 +115,17 @@ void handleNotFound() {
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += ( server.method() == HTTP_GET ) ? "GET" : "POST";
message += (server.method() == HTTP_GET) ? "GET" : "POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for ( uint8_t i = 0; i < server.args(); i++ ) {
message += " " + server.argName ( i ) + ": " + server.arg ( i ) + "\n";
for (uint8_t i = 0; i < server.args(); i++) {
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.sendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
server.sendHeader("Pragma", "no-cache");
server.sendHeader("Expires", "-1");
server.send ( 404, "text/plain", message );
server.send(404, "text/plain", message);
}

View File

@ -1,19 +1,19 @@
/*
* EEPROM Clear
*
* Sets all of the bytes of the EEPROM to 0.
* This example code is in the public domain.
EEPROM Clear
*/
Sets all of the bytes of the EEPROM to 0.
This example code is in the public domain.
*/
#include <EEPROM.h>
void setup()
{
void setup() {
EEPROM.begin(512);
// write a 0 to all 512 bytes of the EEPROM
for (int i = 0; i < 512; i++)
for (int i = 0; i < 512; i++) {
EEPROM.write(i, 0);
}
// turn the LED on when we're done
pinMode(13, OUTPUT);
@ -21,6 +21,5 @@ void setup()
EEPROM.end();
}
void loop()
{
void loop() {
}

View File

@ -1,10 +1,10 @@
/*
* EEPROM Read
*
* Reads the value of each byte of the EEPROM and prints it
* to the computer.
* This example code is in the public domain.
*/
EEPROM Read
Reads the value of each byte of the EEPROM and prints it
to the computer.
This example code is in the public domain.
*/
#include <EEPROM.h>
@ -12,8 +12,7 @@
int address = 0;
byte value;
void setup()
{
void setup() {
// initialize serial and wait for port to open:
Serial.begin(9600);
while (!Serial) {
@ -22,8 +21,7 @@ void setup()
EEPROM.begin(512);
}
void loop()
{
void loop() {
// read a byte from the current address of the EEPROM
value = EEPROM.read(address);
@ -37,8 +35,9 @@ void loop()
// there are only 512 bytes of EEPROM, from 0 to 511, so if we're
// on address 512, wrap around to address 0
if (address == 512)
if (address == 512) {
address = 0;
}
delay(500);
}

View File

@ -1,10 +1,10 @@
/*
* EEPROM Write
*
* Stores values read from analog input 0 into the EEPROM.
* These values will stay in the EEPROM when the board is
* turned off and may be retrieved later by another sketch.
*/
EEPROM Write
Stores values read from analog input 0 into the EEPROM.
These values will stay in the EEPROM when the board is
turned off and may be retrieved later by another sketch.
*/
#include <EEPROM.h>
@ -12,13 +12,11 @@
// we're going to write to next)
int addr = 0;
void setup()
{
void setup() {
EEPROM.begin(512);
}
void loop()
{
void loop() {
// need to divide by 4 because analog inputs range from
// 0 to 1023 and each byte of the EEPROM can only hold a
// value from 0 to 255.
@ -33,8 +31,7 @@ void loop()
// the EEPROM, so go back to 0 when we hit 512.
// save all changes to the flash.
addr = addr + 1;
if (addr == 512)
{
if (addr == 512) {
addr = 0;
EEPROM.commit();
}

View File

@ -1,9 +1,9 @@
/**
* Authorization.ino
*
* Created on: 09.12.2015
*
*/
Authorization.ino
Created on: 09.12.2015
*/
#include <Arduino.h>
@ -25,7 +25,7 @@ void setup() {
USE_SERIAL.println();
USE_SERIAL.println();
for(uint8_t t = 4; t > 0; t--) {
for (uint8_t t = 4; t > 0; t--) {
USE_SERIAL.printf("[SETUP] WAIT %d...\n", t);
USE_SERIAL.flush();
delay(1000);
@ -38,7 +38,7 @@ void setup() {
void loop() {
// wait for WiFi connection
if((WiFiMulti.run() == WL_CONNECTED)) {
if ((WiFiMulti.run() == WL_CONNECTED)) {
HTTPClient http;
@ -64,12 +64,12 @@ void loop() {
int httpCode = http.GET();
// httpCode will be negative on error
if(httpCode > 0) {
if (httpCode > 0) {
// HTTP header has been send and Server response header has been handled
USE_SERIAL.printf("[HTTP] GET... code: %d\n", httpCode);
// file found at server
if(httpCode == HTTP_CODE_OK) {
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
USE_SERIAL.println(payload);
}

View File

@ -1,9 +1,9 @@
/**
* BasicHTTPClient.ino
*
* Created on: 24.05.2015
*
*/
BasicHTTPClient.ino
Created on: 24.05.2015
*/
#include <Arduino.h>
@ -25,7 +25,7 @@ void setup() {
USE_SERIAL.println();
USE_SERIAL.println();
for(uint8_t t = 4; t > 0; t--) {
for (uint8_t t = 4; t > 0; t--) {
USE_SERIAL.printf("[SETUP] WAIT %d...\n", t);
USE_SERIAL.flush();
delay(1000);
@ -38,7 +38,7 @@ void setup() {
void loop() {
// wait for WiFi connection
if((WiFiMulti.run() == WL_CONNECTED)) {
if ((WiFiMulti.run() == WL_CONNECTED)) {
HTTPClient http;
@ -52,12 +52,12 @@ void loop() {
int httpCode = http.GET();
// httpCode will be negative on error
if(httpCode > 0) {
if (httpCode > 0) {
// HTTP header has been send and Server response header has been handled
USE_SERIAL.printf("[HTTP] GET... code: %d\n", httpCode);
// file found at server
if(httpCode == HTTP_CODE_OK) {
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
USE_SERIAL.println(payload);
}

View File

@ -5,7 +5,7 @@
This example is released into public domain,
or, at your option, CC0 licensed.
*/
*/
#include <ESP8266WiFi.h>
@ -20,10 +20,12 @@ const char *password = "admin";
const char *server = "http://httpbin.org";
const char *uri = "/digest-auth/auth/admin/admin/MD5";
String exractParam(String& authReq, const String& param, const char delimit){
String exractParam(String& authReq, const String& param, const char delimit) {
int _begin = authReq.indexOf(param);
if (_begin==-1) return "";
return authReq.substring(_begin+param.length(),authReq.indexOf(delimit,_begin+param.length()));
if (_begin == -1) {
return "";
}
return authReq.substring(_begin + param.length(), authReq.indexOf(delimit, _begin + param.length()));
}
String getCNonce(const int len) {

View File

@ -1,9 +1,9 @@
/**
* reuseConnection.ino
*
* Created on: 22.11.2015
*
*/
reuseConnection.ino
Created on: 22.11.2015
*/
#include <Arduino.h>
@ -28,7 +28,7 @@ void setup() {
USE_SERIAL.println();
USE_SERIAL.println();
for(uint8_t t = 4; t > 0; t--) {
for (uint8_t t = 4; t > 0; t--) {
USE_SERIAL.printf("[SETUP] WAIT %d...\n", t);
USE_SERIAL.flush();
delay(1000);
@ -43,17 +43,17 @@ void setup() {
void loop() {
// wait for WiFi connection
if((WiFiMulti.run() == WL_CONNECTED)) {
if ((WiFiMulti.run() == WL_CONNECTED)) {
http.begin("http://192.168.1.12/test.html");
//http.begin("192.168.1.12", 80, "/test.html");
int httpCode = http.GET();
if(httpCode > 0) {
if (httpCode > 0) {
USE_SERIAL.printf("[HTTP] GET... code: %d\n", httpCode);
// file found at server
if(httpCode == HTTP_CODE_OK) {
if (httpCode == HTTP_CODE_OK) {
http.writeToStream(&USE_SERIAL);
}
} else {

View File

@ -1,9 +1,9 @@
/**
* StreamHTTPClient.ino
*
* Created on: 24.05.2015
*
*/
StreamHTTPClient.ino
Created on: 24.05.2015
*/
#include <Arduino.h>
@ -25,7 +25,7 @@ void setup() {
USE_SERIAL.println();
USE_SERIAL.println();
for(uint8_t t = 4; t > 0; t--) {
for (uint8_t t = 4; t > 0; t--) {
USE_SERIAL.printf("[SETUP] WAIT %d...\n", t);
USE_SERIAL.flush();
delay(1000);
@ -38,7 +38,7 @@ void setup() {
void loop() {
// wait for WiFi connection
if((WiFiMulti.run() == WL_CONNECTED)) {
if ((WiFiMulti.run() == WL_CONNECTED)) {
HTTPClient http;
@ -51,12 +51,12 @@ void loop() {
USE_SERIAL.print("[HTTP] GET...\n");
// start connection and send HTTP header
int httpCode = http.GET();
if(httpCode > 0) {
if (httpCode > 0) {
// HTTP header has been send and Server response header has been handled
USE_SERIAL.printf("[HTTP] GET... code: %d\n", httpCode);
// file found at server
if(httpCode == HTTP_CODE_OK) {
if (httpCode == HTTP_CODE_OK) {
// get lenght of document (is -1 when Server sends no Content-Length header)
int len = http.getSize();
@ -68,18 +68,18 @@ void loop() {
WiFiClient * stream = http.getStreamPtr();
// read all data from server
while(http.connected() && (len > 0 || len == -1)) {
while (http.connected() && (len > 0 || len == -1)) {
// get available data size
size_t size = stream->available();
if(size) {
if (size) {
// read up to 128 byte
int c = stream->readBytes(buff, ((size > sizeof(buff)) ? sizeof(buff) : size));
// write it to Serial
USE_SERIAL.write(buff, c);
if(len > 0) {
if (len > 0) {
len -= c;
}
}

View File

@ -156,8 +156,7 @@ static const uint8_t rsakey[] PROGMEM = {
0xe1, 0x40, 0x2b, 0xe3, 0xbd, 0x98, 0x44, 0xad
};
void setup()
{
void setup() {
Serial.begin(115200);
Serial.println();
@ -165,7 +164,7 @@ void setup()
WiFi.mode(WIFI_AP_STA);
WiFi.begin(ssid, password);
while(WiFi.waitForConnectResult() != WL_CONNECTED){
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
WiFi.begin(ssid, password);
Serial.println("WiFi failed, retrying.");
}
@ -182,7 +181,6 @@ void setup()
"'%s'\n", host, update_path, update_username, update_password);
}
void loop()
{
void loop() {
httpServer.handleClient();
}

View File

@ -18,7 +18,7 @@ const char* password = "........";
ESP8266WebServer httpServer(80);
ESP8266HTTPUpdateServer httpUpdater;
void setup(void){
void setup(void) {
Serial.begin(115200);
Serial.println();
@ -26,7 +26,7 @@ void setup(void){
WiFi.mode(WIFI_AP_STA);
WiFi.begin(ssid, password);
while(WiFi.waitForConnectResult() != WL_CONNECTED){
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
WiFi.begin(ssid, password);
Serial.println("WiFi failed, retrying.");
}
@ -40,6 +40,6 @@ void setup(void){
Serial.printf("HTTPUpdateServer ready! Open http://%s.local%s in your browser and login with username '%s' and password '%s'\n", host, update_path, update_username, update_password);
}
void loop(void){
void loop(void) {
httpServer.handleClient();
}

View File

@ -15,7 +15,7 @@ const char* password = "........";
ESP8266WebServer httpServer(80);
ESP8266HTTPUpdateServer httpUpdater;
void setup(void){
void setup(void) {
Serial.begin(115200);
Serial.println();
@ -23,7 +23,7 @@ void setup(void){
WiFi.mode(WIFI_AP_STA);
WiFi.begin(ssid, password);
while(WiFi.waitForConnectResult() != WL_CONNECTED){
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
WiFi.begin(ssid, password);
Serial.println("WiFi failed, retrying.");
}
@ -37,6 +37,6 @@ void setup(void){
Serial.printf("HTTPUpdateServer ready! Open http://%s.local/update in your browser\n", host);
}
void loop(void){
void loop(void) {
httpServer.handleClient();
}

View File

@ -1,59 +1,59 @@
/*
* ESP8266 LLMNR responder sample
* Copyright (C) 2017 Stephen Warren <swarren@wwwdotorg.org>
*
* Based on:
* ESP8266 Multicast DNS (port of CC3000 Multicast DNS library)
* Version 1.1
* Copyright (c) 2013 Tony DiCola (tony@tonydicola.com)
* ESP8266 port (c) 2015 Ivan Grokhotkov (ivan@esp8266.com)
* MDNS-SD Suport 2015 Hristo Gochkov
* Extended MDNS-SD support 2016 Lars Englund (lars.englund@gmail.com)
*
* License (MIT license):
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
*/
ESP8266 LLMNR responder sample
Copyright (C) 2017 Stephen Warren <swarren@wwwdotorg.org>
Based on:
ESP8266 Multicast DNS (port of CC3000 Multicast DNS library)
Version 1.1
Copyright (c) 2013 Tony DiCola (tony@tonydicola.com)
ESP8266 port (c) 2015 Ivan Grokhotkov (ivan@esp8266.com)
MDNS-SD Suport 2015 Hristo Gochkov
Extended MDNS-SD support 2016 Lars Englund (lars.englund@gmail.com)
License (MIT license):
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
/*
* This is an example of an HTTP server that is accessible via http://esp8266/
* (or perhaps http://esp8266.local/) thanks to the LLMNR responder.
*
* Instructions:
* - Update WiFi SSID and password as necessary.
* - Flash the sketch to the ESP8266 board.
* - Windows:
* - No additional software is necessary.
* - Point your browser to http://esp8266/, you should see a response. In most
* cases, it is important that you manually type the "http://" to force the
* browser to search for a hostname to connect to, rather than perform a web
* search.
* - Alternatively, run the following command from the command prompt:
* ping esp8266
* - Linux:
* - To validate LLMNR, install the systemd-resolve utility.
* - Execute the following command:
* systemd-resolve -4 -p llmnr esp8266
* - It may be possible to configure your system to use LLMNR for all name
* lookups. However, that is beyond the scope of this description.
*
*/
This is an example of an HTTP server that is accessible via http://esp8266/
(or perhaps http://esp8266.local/) thanks to the LLMNR responder.
Instructions:
- Update WiFi SSID and password as necessary.
- Flash the sketch to the ESP8266 board.
- Windows:
- No additional software is necessary.
- Point your browser to http://esp8266/, you should see a response. In most
cases, it is important that you manually type the "http://" to force the
browser to search for a hostname to connect to, rather than perform a web
search.
- Alternatively, run the following command from the command prompt:
ping esp8266
- Linux:
- To validate LLMNR, install the systemd-resolve utility.
- Execute the following command:
systemd-resolve -4 -p llmnr esp8266
- It may be possible to configure your system to use LLMNR for all name
lookups. However, that is beyond the scope of this description.
*/
#include <ESP8266WiFi.h>
#include <ESP8266LLMNR.h>

View File

@ -8,8 +8,7 @@ const char* password = "..............";
ESP8266WebServer wwwserver(80);
String content;
static void handleRoot(void)
{
static void handleRoot(void) {
content = F("<!DOCTYPE HTML>\n<html>Hello world from ESP8266");
content += F("<p>");
content += F("</html>");
@ -17,8 +16,7 @@ static void handleRoot(void)
wwwserver.send(200, F("text/html"), content);
}
void setup()
{
void setup() {
Serial.begin(115200);
// Connect to WiFi network
@ -44,7 +42,6 @@ void setup()
NBNS.begin("ESP");
}
void loop()
{
void loop() {
wwwserver.handleClient();
}

View File

@ -14,13 +14,13 @@ void setup() {
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
if(WiFi.waitForConnectResult() == WL_CONNECTED){
if (WiFi.waitForConnectResult() == WL_CONNECTED) {
Serial.printf("Starting HTTP...\n");
HTTP.on("/index.html", HTTP_GET, [](){
HTTP.on("/index.html", HTTP_GET, []() {
HTTP.send(200, "text/plain", "Hello World!");
});
HTTP.on("/description.xml", HTTP_GET, [](){
HTTP.on("/description.xml", HTTP_GET, []() {
SSDP.schema(HTTP.client());
});
HTTP.begin();
@ -41,7 +41,9 @@ void setup() {
Serial.printf("Ready!\n");
} else {
Serial.printf("WiFi Failed\n");
while(1) delay(100);
while (1) {
delay(100);
}
}
}

View File

@ -1,32 +1,32 @@
/*
* Copyright (c) 2015, Majenko Technologies
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
Copyright (c) 2015, Majenko Technologies
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this
* list of conditions and the following disclaimer in the documentation and/or
* other materials provided with the distribution.
*
list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
* * Neither the name of Majenko Technologies nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
@ -36,20 +36,20 @@
const char *ssid = "YourSSIDHere";
const char *password = "YourPSKHere";
ESP8266WebServer server ( 80 );
ESP8266WebServer server(80);
const int led = 13;
void handleRoot() {
digitalWrite ( led, 1 );
digitalWrite(led, 1);
char temp[400];
int sec = millis() / 1000;
int min = sec / 60;
int hr = min / 60;
snprintf ( temp, 400,
snprintf(temp, 400,
"<html>\
"<html>\
<head>\
<meta http-equiv='refresh' content='5'/>\
<title>ESP8266 Demo</title>\
@ -66,64 +66,64 @@ void handleRoot() {
hr, min % 60, sec % 60
);
server.send ( 200, "text/html", temp );
digitalWrite ( led, 0 );
server.send(200, "text/html", temp);
digitalWrite(led, 0);
}
void handleNotFound() {
digitalWrite ( led, 1 );
digitalWrite(led, 1);
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += ( server.method() == HTTP_GET ) ? "GET" : "POST";
message += (server.method() == HTTP_GET) ? "GET" : "POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for ( uint8_t i = 0; i < server.args(); i++ ) {
message += " " + server.argName ( i ) + ": " + server.arg ( i ) + "\n";
for (uint8_t i = 0; i < server.args(); i++) {
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send ( 404, "text/plain", message );
digitalWrite ( led, 0 );
server.send(404, "text/plain", message);
digitalWrite(led, 0);
}
void setup ( void ) {
pinMode ( led, OUTPUT );
digitalWrite ( led, 0 );
Serial.begin ( 115200 );
WiFi.mode ( WIFI_STA );
WiFi.begin ( ssid, password );
Serial.println ( "" );
void setup(void) {
pinMode(led, OUTPUT);
digitalWrite(led, 0);
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println("");
// Wait for connection
while ( WiFi.status() != WL_CONNECTED ) {
delay ( 500 );
Serial.print ( "." );
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println ( "" );
Serial.print ( "Connected to " );
Serial.println ( ssid );
Serial.print ( "IP address: " );
Serial.println ( WiFi.localIP() );
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
if ( MDNS.begin ( "esp8266" ) ) {
Serial.println ( "MDNS responder started" );
if (MDNS.begin("esp8266")) {
Serial.println("MDNS responder started");
}
server.on ( "/", handleRoot );
server.on ( "/test.svg", drawGraph );
server.on ( "/inline", []() {
server.send ( 200, "text/plain", "this works as well" );
} );
server.onNotFound ( handleNotFound );
server.on("/", handleRoot);
server.on("/test.svg", drawGraph);
server.on("/inline", []() {
server.send(200, "text/plain", "this works as well");
});
server.onNotFound(handleNotFound);
server.begin();
Serial.println ( "HTTP server started" );
Serial.println("HTTP server started");
}
void loop ( void ) {
void loop(void) {
server.handleClient();
}
@ -134,7 +134,7 @@ void drawGraph() {
out += "<rect width=\"400\" height=\"150\" fill=\"rgb(250, 230, 210)\" stroke-width=\"1\" stroke=\"rgb(0, 0, 0)\" />\n";
out += "<g stroke=\"black\">\n";
int y = rand() % 130;
for (int x = 10; x < 390; x+= 10) {
for (int x = 10; x < 390; x += 10) {
int y2 = rand() % 130;
sprintf(temp, "<line x1=\"%d\" y1=\"%d\" x2=\"%d\" y2=\"%d\" stroke-width=\"1\" />\n", x, 140 - y, x + 10, 140 - y2);
out += temp;
@ -142,5 +142,5 @@ void drawGraph() {
}
out += "</g>\n</svg>\n";
server.send ( 200, "image/svg+xml", out);
server.send(200, "image/svg+xml", out);
}

View File

@ -39,43 +39,60 @@ ESP8266WebServer server(80);
File fsUploadFile;
//format bytes
String formatBytes(size_t bytes){
if (bytes < 1024){
return String(bytes)+"B";
} else if(bytes < (1024 * 1024)){
return String(bytes/1024.0)+"KB";
} else if(bytes < (1024 * 1024 * 1024)){
return String(bytes/1024.0/1024.0)+"MB";
String formatBytes(size_t bytes) {
if (bytes < 1024) {
return String(bytes) + "B";
} else if (bytes < (1024 * 1024)) {
return String(bytes / 1024.0) + "KB";
} else if (bytes < (1024 * 1024 * 1024)) {
return String(bytes / 1024.0 / 1024.0) + "MB";
} else {
return String(bytes/1024.0/1024.0/1024.0)+"GB";
return String(bytes / 1024.0 / 1024.0 / 1024.0) + "GB";
}
}
String getContentType(String filename){
if(server.hasArg("download")) return "application/octet-stream";
else if(filename.endsWith(".htm")) return "text/html";
else if(filename.endsWith(".html")) return "text/html";
else if(filename.endsWith(".css")) return "text/css";
else if(filename.endsWith(".js")) return "application/javascript";
else if(filename.endsWith(".png")) return "image/png";
else if(filename.endsWith(".gif")) return "image/gif";
else if(filename.endsWith(".jpg")) return "image/jpeg";
else if(filename.endsWith(".ico")) return "image/x-icon";
else if(filename.endsWith(".xml")) return "text/xml";
else if(filename.endsWith(".pdf")) return "application/x-pdf";
else if(filename.endsWith(".zip")) return "application/x-zip";
else if(filename.endsWith(".gz")) return "application/x-gzip";
String getContentType(String filename) {
if (server.hasArg("download")) {
return "application/octet-stream";
} else if (filename.endsWith(".htm")) {
return "text/html";
} else if (filename.endsWith(".html")) {
return "text/html";
} else if (filename.endsWith(".css")) {
return "text/css";
} else if (filename.endsWith(".js")) {
return "application/javascript";
} else if (filename.endsWith(".png")) {
return "image/png";
} else if (filename.endsWith(".gif")) {
return "image/gif";
} else if (filename.endsWith(".jpg")) {
return "image/jpeg";
} else if (filename.endsWith(".ico")) {
return "image/x-icon";
} else if (filename.endsWith(".xml")) {
return "text/xml";
} else if (filename.endsWith(".pdf")) {
return "application/x-pdf";
} else if (filename.endsWith(".zip")) {
return "application/x-zip";
} else if (filename.endsWith(".gz")) {
return "application/x-gzip";
}
return "text/plain";
}
bool handleFileRead(String path){
bool handleFileRead(String path) {
DBG_OUTPUT_PORT.println("handleFileRead: " + path);
if(path.endsWith("/")) path += "index.htm";
if (path.endsWith("/")) {
path += "index.htm";
}
String contentType = getContentType(path);
String pathWithGz = path + ".gz";
if(SPIFFS.exists(pathWithGz) || SPIFFS.exists(path)){
if(SPIFFS.exists(pathWithGz))
if (SPIFFS.exists(pathWithGz) || SPIFFS.exists(path)) {
if (SPIFFS.exists(pathWithGz)) {
path += ".gz";
}
File file = SPIFFS.open(path, "r");
server.streamFile(file, contentType);
file.close();
@ -84,59 +101,76 @@ bool handleFileRead(String path){
return false;
}
void handleFileUpload(){
if(server.uri() != "/edit") return;
void handleFileUpload() {
if (server.uri() != "/edit") {
return;
}
HTTPUpload& upload = server.upload();
if(upload.status == UPLOAD_FILE_START){
if (upload.status == UPLOAD_FILE_START) {
String filename = upload.filename;
if(!filename.startsWith("/")) filename = "/"+filename;
if (!filename.startsWith("/")) {
filename = "/" + filename;
}
DBG_OUTPUT_PORT.print("handleFileUpload Name: "); DBG_OUTPUT_PORT.println(filename);
fsUploadFile = SPIFFS.open(filename, "w");
filename = String();
} else if(upload.status == UPLOAD_FILE_WRITE){
} else if (upload.status == UPLOAD_FILE_WRITE) {
//DBG_OUTPUT_PORT.print("handleFileUpload Data: "); DBG_OUTPUT_PORT.println(upload.currentSize);
if(fsUploadFile)
if (fsUploadFile) {
fsUploadFile.write(upload.buf, upload.currentSize);
} else if(upload.status == UPLOAD_FILE_END){
if(fsUploadFile)
}
} else if (upload.status == UPLOAD_FILE_END) {
if (fsUploadFile) {
fsUploadFile.close();
}
DBG_OUTPUT_PORT.print("handleFileUpload Size: "); DBG_OUTPUT_PORT.println(upload.totalSize);
}
}
void handleFileDelete(){
if(server.args() == 0) return server.send(500, "text/plain", "BAD ARGS");
void handleFileDelete() {
if (server.args() == 0) {
return server.send(500, "text/plain", "BAD ARGS");
}
String path = server.arg(0);
DBG_OUTPUT_PORT.println("handleFileDelete: " + path);
if(path == "/")
if (path == "/") {
return server.send(500, "text/plain", "BAD PATH");
if(!SPIFFS.exists(path))
}
if (!SPIFFS.exists(path)) {
return server.send(404, "text/plain", "FileNotFound");
}
SPIFFS.remove(path);
server.send(200, "text/plain", "");
path = String();
}
void handleFileCreate(){
if(server.args() == 0)
void handleFileCreate() {
if (server.args() == 0) {
return server.send(500, "text/plain", "BAD ARGS");
}
String path = server.arg(0);
DBG_OUTPUT_PORT.println("handleFileCreate: " + path);
if(path == "/")
if (path == "/") {
return server.send(500, "text/plain", "BAD PATH");
if(SPIFFS.exists(path))
}
if (SPIFFS.exists(path)) {
return server.send(500, "text/plain", "FILE EXISTS");
}
File file = SPIFFS.open(path, "w");
if(file)
if (file) {
file.close();
else
} else {
return server.send(500, "text/plain", "CREATE FAILED");
}
server.send(200, "text/plain", "");
path = String();
}
void handleFileList() {
if(!server.hasArg("dir")) {server.send(500, "text/plain", "BAD ARGS"); return;}
if (!server.hasArg("dir")) {
server.send(500, "text/plain", "BAD ARGS");
return;
}
String path = server.arg("dir");
DBG_OUTPUT_PORT.println("handleFileList: " + path);
@ -144,12 +178,14 @@ void handleFileList() {
path = String();
String output = "[";
while(dir.next()){
while (dir.next()) {
File entry = dir.openFile("r");
if (output != "[") output += ',';
if (output != "[") {
output += ',';
}
bool isDir = false;
output += "{\"type\":\"";
output += (isDir)?"dir":"file";
output += (isDir) ? "dir" : "file";
output += "\",\"name\":\"";
output += String(entry.name()).substring(1);
output += "\"}";
@ -160,7 +196,7 @@ void handleFileList() {
server.send(200, "text/json", output);
}
void setup(void){
void setup(void) {
DBG_OUTPUT_PORT.begin(115200);
DBG_OUTPUT_PORT.print("\n");
DBG_OUTPUT_PORT.setDebugOutput(true);
@ -201,8 +237,10 @@ void setup(void){
//list directory
server.on("/list", HTTP_GET, handleFileList);
//load editor
server.on("/edit", HTTP_GET, [](){
if(!handleFileRead("/edit.htm")) server.send(404, "text/plain", "FileNotFound");
server.on("/edit", HTTP_GET, []() {
if (!handleFileRead("/edit.htm")) {
server.send(404, "text/plain", "FileNotFound");
}
});
//create file
server.on("/edit", HTTP_PUT, handleFileCreate);
@ -210,21 +248,24 @@ void setup(void){
server.on("/edit", HTTP_DELETE, handleFileDelete);
//first callback is called after the request has ended with all parsed arguments
//second callback handles file uploads at that location
server.on("/edit", HTTP_POST, [](){ server.send(200, "text/plain", ""); }, handleFileUpload);
server.on("/edit", HTTP_POST, []() {
server.send(200, "text/plain", "");
}, handleFileUpload);
//called when the url is not defined here
//use it to load content from SPIFFS
server.onNotFound([](){
if(!handleFileRead(server.uri()))
server.onNotFound([]() {
if (!handleFileRead(server.uri())) {
server.send(404, "text/plain", "FileNotFound");
}
});
//get heap status, analog input value and all GPIO statuses in one json call
server.on("/all", HTTP_GET, [](){
server.on("/all", HTTP_GET, []() {
String json = "{";
json += "\"heap\":"+String(ESP.getFreeHeap());
json += ", \"analog\":"+String(analogRead(A0));
json += ", \"gpio\":"+String((uint32_t)(((GPI | GPO) & 0xFFFF) | ((GP16I & 0x01) << 16)));
json += "\"heap\":" + String(ESP.getFreeHeap());
json += ", \"analog\":" + String(analogRead(A0));
json += ", \"gpio\":" + String((uint32_t)(((GPI | GPO) & 0xFFFF) | ((GP16I & 0x01) << 16)));
json += "}";
server.send(200, "text/json", json);
json = String();
@ -234,6 +275,6 @@ void setup(void){
}
void loop(void){
void loop(void) {
server.handleClient();
}

View File

@ -16,24 +16,24 @@ void handleRoot() {
digitalWrite(led, 0);
}
void handleNotFound(){
void handleNotFound() {
digitalWrite(led, 1);
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET)?"GET":"POST";
message += (server.method() == HTTP_GET) ? "GET" : "POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i=0; i<server.args(); i++){
for (uint8_t i = 0; i < server.args(); i++) {
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send(404, "text/plain", message);
digitalWrite(led, 0);
}
void setup(void){
void setup(void) {
pinMode(led, OUTPUT);
digitalWrite(led, 0);
Serial.begin(115200);
@ -58,7 +58,7 @@ void setup(void){
server.on("/", handleRoot);
server.on("/inline", [](){
server.on("/inline", []() {
server.send(200, "text/plain", "this works as well");
});
@ -68,6 +68,6 @@ void setup(void){
Serial.println("HTTP server started");
}
void loop(void){
void loop(void) {
server.handleClient();
}

View File

@ -121,24 +121,24 @@ void handleRoot() {
digitalWrite(led, 0);
}
void handleNotFound(){
void handleNotFound() {
digitalWrite(led, 1);
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET)?"GET":"POST";
message += (server.method() == HTTP_GET) ? "GET" : "POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i=0; i<server.args(); i++){
for (uint8_t i = 0; i < server.args(); i++) {
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send(404, "text/plain", message);
digitalWrite(led, 0);
}
void setup(void){
void setup(void) {
pinMode(led, OUTPUT);
digitalWrite(led, 0);
Serial.begin(115200);
@ -164,7 +164,7 @@ void setup(void){
server.on("/", handleRoot);
server.on("/inline", [](){
server.on("/inline", []() {
server.send(200, "text/plain", "this works as well");
});
@ -174,6 +174,6 @@ void setup(void){
Serial.println("HTTPS server started");
}
void loop(void){
void loop(void) {
server.handleClient();
}

View File

@ -16,7 +16,7 @@ ESP8266WebServer server(80);
const char* www_username = "admin";
const char* www_password = "esp8266";
// allows you to set the realm of authentication Default:"Login Required"
// allows you to set the realm of authentication Default:"Login Required"
const char* www_realm = "Custom Auth Realm";
// the Content of the HTML response in case of Unautherized Access Default:empty
String authFailResponse = "Authentication Failed";
@ -25,15 +25,15 @@ void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
if(WiFi.waitForConnectResult() != WL_CONNECTED) {
if (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("WiFi Connect Failed! Rebooting...");
delay(1000);
ESP.restart();
}
ArduinoOTA.begin();
server.on("/", [](){
if(!server.authenticate(www_username, www_password))
server.on("/", []() {
if (!server.authenticate(www_username, www_password))
//Basic Auth Method with Custom realm and Failure Response
//return server.requestAuthentication(BASIC_AUTH, www_realm, authFailResponse);
//Digest Auth Method with realm="Login Required" and empty Failure Response
@ -41,7 +41,9 @@ void setup() {
//Digest Auth Method with Custom realm and empty Failure Response
//return server.requestAuthentication(DIGEST_AUTH, www_realm);
//Digest Auth Method with Custom realm and Failure Response
{
return server.requestAuthentication(DIGEST_AUTH, www_realm, authFailResponse);
}
server.send(200, "text/plain", "Login OK");
});
server.begin();

View File

@ -15,16 +15,17 @@ void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
if(WiFi.waitForConnectResult() != WL_CONNECTED) {
if (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("WiFi Connect Failed! Rebooting...");
delay(1000);
ESP.restart();
}
ArduinoOTA.begin();
server.on("/", [](){
if(!server.authenticate(www_username, www_password))
server.on("/", []() {
if (!server.authenticate(www_username, www_password)) {
return server.requestAuthentication();
}
server.send(200, "text/plain", "Login OK");
});
server.begin();

View File

@ -54,33 +54,50 @@ void returnFail(String msg) {
server.send(500, "text/plain", msg + "\r\n");
}
bool loadFromSdCard(String path){
bool loadFromSdCard(String path) {
String dataType = "text/plain";
if(path.endsWith("/")) path += "index.htm";
if (path.endsWith("/")) {
path += "index.htm";
}
if(path.endsWith(".src")) path = path.substring(0, path.lastIndexOf("."));
else if(path.endsWith(".htm")) dataType = "text/html";
else if(path.endsWith(".css")) dataType = "text/css";
else if(path.endsWith(".js")) dataType = "application/javascript";
else if(path.endsWith(".png")) dataType = "image/png";
else if(path.endsWith(".gif")) dataType = "image/gif";
else if(path.endsWith(".jpg")) dataType = "image/jpeg";
else if(path.endsWith(".ico")) dataType = "image/x-icon";
else if(path.endsWith(".xml")) dataType = "text/xml";
else if(path.endsWith(".pdf")) dataType = "application/pdf";
else if(path.endsWith(".zip")) dataType = "application/zip";
if (path.endsWith(".src")) {
path = path.substring(0, path.lastIndexOf("."));
} else if (path.endsWith(".htm")) {
dataType = "text/html";
} else if (path.endsWith(".css")) {
dataType = "text/css";
} else if (path.endsWith(".js")) {
dataType = "application/javascript";
} else if (path.endsWith(".png")) {
dataType = "image/png";
} else if (path.endsWith(".gif")) {
dataType = "image/gif";
} else if (path.endsWith(".jpg")) {
dataType = "image/jpeg";
} else if (path.endsWith(".ico")) {
dataType = "image/x-icon";
} else if (path.endsWith(".xml")) {
dataType = "text/xml";
} else if (path.endsWith(".pdf")) {
dataType = "application/pdf";
} else if (path.endsWith(".zip")) {
dataType = "application/zip";
}
File dataFile = SD.open(path.c_str());
if(dataFile.isDirectory()){
if (dataFile.isDirectory()) {
path += "/index.htm";
dataType = "text/html";
dataFile = SD.open(path.c_str());
}
if (!dataFile)
if (!dataFile) {
return false;
}
if (server.hasArg("download")) dataType = "application/octet-stream";
if (server.hasArg("download")) {
dataType = "application/octet-stream";
}
if (server.streamFile(dataFile, dataType) != dataFile.size()) {
DBG_OUTPUT_PORT.println("Sent less data than expected!");
@ -90,36 +107,46 @@ bool loadFromSdCard(String path){
return true;
}
void handleFileUpload(){
if(server.uri() != "/edit") return;
void handleFileUpload() {
if (server.uri() != "/edit") {
return;
}
HTTPUpload& upload = server.upload();
if(upload.status == UPLOAD_FILE_START){
if(SD.exists((char *)upload.filename.c_str())) SD.remove((char *)upload.filename.c_str());
if (upload.status == UPLOAD_FILE_START) {
if (SD.exists((char *)upload.filename.c_str())) {
SD.remove((char *)upload.filename.c_str());
}
uploadFile = SD.open(upload.filename.c_str(), FILE_WRITE);
DBG_OUTPUT_PORT.print("Upload: START, filename: "); DBG_OUTPUT_PORT.println(upload.filename);
} else if(upload.status == UPLOAD_FILE_WRITE){
if(uploadFile) uploadFile.write(upload.buf, upload.currentSize);
} else if (upload.status == UPLOAD_FILE_WRITE) {
if (uploadFile) {
uploadFile.write(upload.buf, upload.currentSize);
}
DBG_OUTPUT_PORT.print("Upload: WRITE, Bytes: "); DBG_OUTPUT_PORT.println(upload.currentSize);
} else if(upload.status == UPLOAD_FILE_END){
if(uploadFile) uploadFile.close();
} else if (upload.status == UPLOAD_FILE_END) {
if (uploadFile) {
uploadFile.close();
}
DBG_OUTPUT_PORT.print("Upload: END, Size: "); DBG_OUTPUT_PORT.println(upload.totalSize);
}
}
void deleteRecursive(String path){
void deleteRecursive(String path) {
File file = SD.open((char *)path.c_str());
if(!file.isDirectory()){
if (!file.isDirectory()) {
file.close();
SD.remove((char *)path.c_str());
return;
}
file.rewindDirectory();
while(true) {
while (true) {
File entry = file.openNextFile();
if (!entry) break;
String entryPath = path + "/" +entry.name();
if(entry.isDirectory()){
if (!entry) {
break;
}
String entryPath = path + "/" + entry.name();
if (entry.isDirectory()) {
entry.close();
deleteRecursive(entryPath);
} else {
@ -133,10 +160,12 @@ void deleteRecursive(String path){
file.close();
}
void handleDelete(){
if(server.args() == 0) return returnFail("BAD ARGS");
void handleDelete() {
if (server.args() == 0) {
return returnFail("BAD ARGS");
}
String path = server.arg(0);
if(path == "/" || !SD.exists((char *)path.c_str())) {
if (path == "/" || !SD.exists((char *)path.c_str())) {
returnFail("BAD PATH");
return;
}
@ -144,17 +173,19 @@ void handleDelete(){
returnOK();
}
void handleCreate(){
if(server.args() == 0) return returnFail("BAD ARGS");
void handleCreate() {
if (server.args() == 0) {
return returnFail("BAD ARGS");
}
String path = server.arg(0);
if(path == "/" || SD.exists((char *)path.c_str())) {
if (path == "/" || SD.exists((char *)path.c_str())) {
returnFail("BAD PATH");
return;
}
if(path.indexOf('.') > 0){
if (path.indexOf('.') > 0) {
File file = SD.open((char *)path.c_str(), FILE_WRITE);
if(file){
if (file) {
file.write((const char *)0);
file.close();
}
@ -165,12 +196,16 @@ void handleCreate(){
}
void printDirectory() {
if(!server.hasArg("dir")) return returnFail("BAD ARGS");
if (!server.hasArg("dir")) {
return returnFail("BAD ARGS");
}
String path = server.arg("dir");
if(path != "/" && !SD.exists((char *)path.c_str())) return returnFail("BAD PATH");
if (path != "/" && !SD.exists((char *)path.c_str())) {
return returnFail("BAD PATH");
}
File dir = SD.open((char *)path.c_str());
path = String();
if(!dir.isDirectory()){
if (!dir.isDirectory()) {
dir.close();
return returnFail("NOT DIR");
}
@ -182,12 +217,14 @@ void printDirectory() {
server.sendContent("[");
for (int cnt = 0; true; ++cnt) {
File entry = dir.openNextFile();
if (!entry)
if (!entry) {
break;
}
String output;
if (cnt > 0)
if (cnt > 0) {
output = ',';
}
output += "{\"type\":\"";
output += (entry.isDirectory()) ? "dir" : "file";
@ -202,24 +239,26 @@ void printDirectory() {
dir.close();
}
void handleNotFound(){
if(hasSD && loadFromSdCard(server.uri())) return;
void handleNotFound() {
if (hasSD && loadFromSdCard(server.uri())) {
return;
}
String message = "SDCARD Not Detected\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET)?"GET":"POST";
message += (server.method() == HTTP_GET) ? "GET" : "POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i=0; i<server.args(); i++){
message += " NAME:"+server.argName(i) + "\n VALUE:" + server.arg(i) + "\n";
for (uint8_t i = 0; i < server.args(); i++) {
message += " NAME:" + server.argName(i) + "\n VALUE:" + server.arg(i) + "\n";
}
server.send(404, "text/plain", message);
DBG_OUTPUT_PORT.print(message);
}
void setup(void){
void setup(void) {
DBG_OUTPUT_PORT.begin(115200);
DBG_OUTPUT_PORT.setDebugOutput(true);
DBG_OUTPUT_PORT.print("\n");
@ -233,10 +272,12 @@ void setup(void){
while (WiFi.status() != WL_CONNECTED && i++ < 20) {//wait 10 seconds
delay(500);
}
if(i == 21){
if (i == 21) {
DBG_OUTPUT_PORT.print("Could not connect to");
DBG_OUTPUT_PORT.println(ssid);
while(1) delay(500);
while (1) {
delay(500);
}
}
DBG_OUTPUT_PORT.print("Connected! IP address: ");
DBG_OUTPUT_PORT.println(WiFi.localIP());
@ -253,18 +294,20 @@ void setup(void){
server.on("/list", HTTP_GET, printDirectory);
server.on("/edit", HTTP_DELETE, handleDelete);
server.on("/edit", HTTP_PUT, handleCreate);
server.on("/edit", HTTP_POST, [](){ returnOK(); }, handleFileUpload);
server.on("/edit", HTTP_POST, []() {
returnOK();
}, handleFileUpload);
server.onNotFound(handleNotFound);
server.begin();
DBG_OUTPUT_PORT.println("HTTP server started");
if (SD.begin(SS)){
if (SD.begin(SS)) {
DBG_OUTPUT_PORT.println("SD Card initialized.");
hasSD = true;
}
}
void loop(void){
void loop(void) {
server.handleClient();
}

View File

@ -8,9 +8,9 @@ const char* password = "........";
ESP8266WebServer server(80);
//Check if header is present and correct
bool is_authentified(){
bool is_authentified() {
Serial.println("Enter is_authentified");
if (server.hasHeader("Cookie")){
if (server.hasHeader("Cookie")) {
Serial.print("Found cookie: ");
String cookie = server.header("Cookie");
Serial.println(cookie);
@ -24,26 +24,26 @@ bool is_authentified(){
}
//login page, also called for disconnect
void handleLogin(){
void handleLogin() {
String msg;
if (server.hasHeader("Cookie")){
if (server.hasHeader("Cookie")) {
Serial.print("Found cookie: ");
String cookie = server.header("Cookie");
Serial.println(cookie);
}
if (server.hasArg("DISCONNECT")){
if (server.hasArg("DISCONNECT")) {
Serial.println("Disconnection");
server.sendHeader("Location","/login");
server.sendHeader("Cache-Control","no-cache");
server.sendHeader("Set-Cookie","ESPSESSIONID=0");
server.sendHeader("Location", "/login");
server.sendHeader("Cache-Control", "no-cache");
server.sendHeader("Set-Cookie", "ESPSESSIONID=0");
server.send(301);
return;
}
if (server.hasArg("USERNAME") && server.hasArg("PASSWORD")){
if (server.arg("USERNAME") == "admin" && server.arg("PASSWORD") == "admin" ){
server.sendHeader("Location","/");
server.sendHeader("Cache-Control","no-cache");
server.sendHeader("Set-Cookie","ESPSESSIONID=1");
if (server.hasArg("USERNAME") && server.hasArg("PASSWORD")) {
if (server.arg("USERNAME") == "admin" && server.arg("PASSWORD") == "admin") {
server.sendHeader("Location", "/");
server.sendHeader("Cache-Control", "no-cache");
server.sendHeader("Set-Cookie", "ESPSESSIONID=1");
server.send(301);
Serial.println("Log in Successful");
return;
@ -60,17 +60,17 @@ void handleLogin(){
}
//root page can be accessed only if authentification is ok
void handleRoot(){
void handleRoot() {
Serial.println("Enter handleRoot");
String header;
if (!is_authentified()){
server.sendHeader("Location","/login");
server.sendHeader("Cache-Control","no-cache");
if (!is_authentified()) {
server.sendHeader("Location", "/login");
server.sendHeader("Cache-Control", "no-cache");
server.send(301);
return;
}
String content = "<html><body><H2>hello, you successfully connected to esp8266!</H2><br>";
if (server.hasHeader("User-Agent")){
if (server.hasHeader("User-Agent")) {
content += "the user agent used is : " + server.header("User-Agent") + "<br><br>";
}
content += "You can access this page until you <a href=\"/login?DISCONNECT=YES\">disconnect</a></body></html>";
@ -78,22 +78,22 @@ void handleRoot(){
}
//no need authentification
void handleNotFound(){
void handleNotFound() {
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET)?"GET":"POST";
message += (server.method() == HTTP_GET) ? "GET" : "POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i=0; i<server.args(); i++){
for (uint8_t i = 0; i < server.args(); i++) {
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send(404, "text/plain", message);
}
void setup(void){
void setup(void) {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
@ -113,20 +113,20 @@ void setup(void){
server.on("/", handleRoot);
server.on("/login", handleLogin);
server.on("/inline", [](){
server.on("/inline", []() {
server.send(200, "text/plain", "this works without need of authentification");
});
server.onNotFound(handleNotFound);
//here the list of headers to be recorded
const char * headerkeys[] = {"User-Agent","Cookie"} ;
size_t headerkeyssize = sizeof(headerkeys)/sizeof(char*);
const char * headerkeys[] = {"User-Agent", "Cookie"} ;
size_t headerkeyssize = sizeof(headerkeys) / sizeof(char*);
//ask server to track these headers
server.collectHeaders(headerkeys, headerkeyssize );
server.collectHeaders(headerkeys, headerkeyssize);
server.begin();
Serial.println("HTTP server started");
}
void loop(void){
void loop(void) {
server.handleClient();
}

View File

@ -14,38 +14,38 @@ const char* password = "........";
ESP8266WebServer server(80);
const char* serverIndex = "<form method='POST' action='/update' enctype='multipart/form-data'><input type='file' name='update'><input type='submit' value='Update'></form>";
void setup(void){
void setup(void) {
Serial.begin(115200);
Serial.println();
Serial.println("Booting Sketch...");
WiFi.mode(WIFI_AP_STA);
WiFi.begin(ssid, password);
if(WiFi.waitForConnectResult() == WL_CONNECTED){
if (WiFi.waitForConnectResult() == WL_CONNECTED) {
MDNS.begin(host);
server.on("/", HTTP_GET, [](){
server.on("/", HTTP_GET, []() {
server.sendHeader("Connection", "close");
server.send(200, "text/html", serverIndex);
});
server.on("/update", HTTP_POST, [](){
server.on("/update", HTTP_POST, []() {
server.sendHeader("Connection", "close");
server.send(200, "text/plain", (Update.hasError())?"FAIL":"OK");
server.send(200, "text/plain", (Update.hasError()) ? "FAIL" : "OK");
ESP.restart();
},[](){
}, []() {
HTTPUpload& upload = server.upload();
if(upload.status == UPLOAD_FILE_START){
if (upload.status == UPLOAD_FILE_START) {
Serial.setDebugOutput(true);
WiFiUDP::stopAll();
Serial.printf("Update: %s\n", upload.filename.c_str());
uint32_t maxSketchSpace = (ESP.getFreeSketchSpace() - 0x1000) & 0xFFFFF000;
if(!Update.begin(maxSketchSpace)){//start with max available size
if (!Update.begin(maxSketchSpace)) { //start with max available size
Update.printError(Serial);
}
} else if(upload.status == UPLOAD_FILE_WRITE){
if(Update.write(upload.buf, upload.currentSize) != upload.currentSize){
} else if (upload.status == UPLOAD_FILE_WRITE) {
if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) {
Update.printError(Serial);
}
} else if(upload.status == UPLOAD_FILE_END){
if(Update.end(true)){ //true to set the size to the current progress
} else if (upload.status == UPLOAD_FILE_END) {
if (Update.end(true)) { //true to set the size to the current progress
Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize);
} else {
Update.printError(Serial);
@ -63,7 +63,7 @@ void setup(void){
}
}
void loop(void){
void loop(void) {
server.handleClient();
delay(1);
}

View File

@ -1,20 +1,20 @@
/*
* HTTP over TLS (HTTPS) example sketch
*
* This example demonstrates how to use
* WiFiClientSecure class to access HTTPS API.
* We fetch and display the status of
* esp8266/Arduino project continuous integration
* build.
*
* Limitations:
* only RSA certificates
* no support of Perfect Forward Secrecy (PFS)
* TLSv1.2 is supported since version 2.4.0-rc1
*
* Created by Ivan Grokhotkov, 2015.
* This example is in public domain.
*/
HTTP over TLS (HTTPS) example sketch
This example demonstrates how to use
WiFiClientSecure class to access HTTPS API.
We fetch and display the status of
esp8266/Arduino project continuous integration
build.
Limitations:
only RSA certificates
no support of Perfect Forward Secrecy (PFS)
TLSv1.2 is supported since version 2.4.0-rc1
Created by Ivan Grokhotkov, 2015.
This example is in public domain.
*/
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>

View File

@ -16,7 +16,7 @@
This code is in the public domain.
*/
*/
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
@ -28,7 +28,7 @@ char pass[] = "********"; // your network password
unsigned int localPort = 2390; // local port to listen for UDP packets
/* Don't hardwire the IP address or we won't get the benefits of the pool.
* Lookup the IP address for the host name instead */
Lookup the IP address for the host name instead */
//IPAddress timeServer(129, 6, 15, 28); // time.nist.gov NTP server
IPAddress timeServerIP; // time.nist.gov NTP server address
const char* ntpServerName = "time.nist.gov";
@ -40,8 +40,7 @@ byte packetBuffer[ NTP_PACKET_SIZE]; //buffer to hold incoming and outgoing pack
// A UDP instance to let us send and receive packets over UDP
WiFiUDP udp;
void setup()
{
void setup() {
Serial.begin(115200);
Serial.println();
Serial.println();
@ -68,8 +67,7 @@ void setup()
Serial.println(udp.localPort());
}
void loop()
{
void loop() {
//get a random server from the pool
WiFi.hostByName(ntpServerName, timeServerIP);
@ -80,8 +78,7 @@ void loop()
int cb = udp.parsePacket();
if (!cb) {
Serial.println("no packet yet");
}
else {
} else {
Serial.print("packet received, length=");
Serial.println(cb);
// We've received a packet, read the data from it
@ -95,7 +92,7 @@ void loop()
// combine the four bytes (two words) into a long integer
// this is NTP time (seconds since Jan 1 1900):
unsigned long secsSince1900 = highWord << 16 | lowWord;
Serial.print("Seconds since Jan 1 1900 = " );
Serial.print("Seconds since Jan 1 1900 = ");
Serial.println(secsSince1900);
// now convert NTP time into everyday time:
@ -112,13 +109,13 @@ void loop()
Serial.print("The UTC time is "); // UTC is the time at Greenwich Meridian (GMT)
Serial.print((epoch % 86400L) / 3600); // print the hour (86400 equals secs per day)
Serial.print(':');
if ( ((epoch % 3600) / 60) < 10 ) {
if (((epoch % 3600) / 60) < 10) {
// In the first 10 minutes of each hour, we'll want a leading '0'
Serial.print('0');
}
Serial.print((epoch % 3600) / 60); // print the minute (3600 equals secs per minute)
Serial.print(':');
if ( (epoch % 60) < 10 ) {
if ((epoch % 60) < 10) {
// In the first 10 seconds of each minute, we'll want a leading '0'
Serial.print('0');
}
@ -129,8 +126,7 @@ void loop()
}
// send an NTP request to the time server at the given address
void sendNTPpacket(IPAddress& address)
{
void sendNTPpacket(IPAddress& address) {
Serial.println("sending NTP packet...");
// set all bytes in the buffer to 0
memset(packetBuffer, 0, NTP_PACKET_SIZE);

View File

@ -1,32 +1,32 @@
/*
* Copyright (c) 2015, Majenko Technologies
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
Copyright (c) 2015, Majenko Technologies
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this
* list of conditions and the following disclaimer in the documentation and/or
* other materials provided with the distribution.
*
list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
* * Neither the name of Majenko Technologies nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/* Create a WiFi access point and provide a web server on it. */
@ -41,8 +41,8 @@ const char *password = "thereisnospoon";
ESP8266WebServer server(80);
/* Just a little test message. Go to http://192.168.4.1 in a web browser
* connected to this access point to see it.
*/
connected to this access point to see it.
*/
void handleRoot() {
server.send(200, "text/html", "<h1>You are connected</h1>");
}

View File

@ -1,10 +1,10 @@
/*
* This sketch sends data via HTTP GET requests to data.sparkfun.com service.
*
* You need to get streamId and privateKey at data.sparkfun.com and paste them
* below. Or just customize this script to talk to other HTTP servers.
*
*/
This sketch sends data via HTTP GET requests to data.sparkfun.com service.
You need to get streamId and privateKey at data.sparkfun.com and paste them
below. Or just customize this script to talk to other HTTP servers.
*/
#include <ESP8266WiFi.h>
@ -85,7 +85,7 @@ void loop() {
}
// Read all the lines of the reply from server and print them to Serial
while(client.available()){
while (client.available()) {
String line = client.readStringUntil('\r');
Serial.print(line);
}

View File

@ -1,7 +1,7 @@
/*
* This sketch sends a message to a TCP server
*
*/
This sketch sends a message to a TCP server
*/
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
@ -20,7 +20,7 @@ void setup() {
Serial.println();
Serial.print("Wait for WiFi... ");
while(WiFiMulti.run() != WL_CONNECTED) {
while (WiFiMulti.run() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}

View File

@ -156,7 +156,7 @@ void loop() {
// Wait until the client sends some data
Serial.println("new client");
unsigned long timeout = millis() + 3000;
while(!client.available() && millis() < timeout){
while (!client.available() && millis() < timeout) {
delay(1);
}
if (millis() > timeout) {
@ -173,11 +173,11 @@ void loop() {
// Match the request
int val;
if (req.indexOf("/gpio/0") != -1)
if (req.indexOf("/gpio/0") != -1) {
val = 0;
else if (req.indexOf("/gpio/1") != -1)
} else if (req.indexOf("/gpio/1") != -1) {
val = 1;
else {
} else {
Serial.println("invalid request");
client.print("HTTP/1.1 404 Not Found\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html><body>Not found</body></html>");
return;
@ -190,7 +190,7 @@ void loop() {
// Prepare the response
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO is now ";
s += (val)?"high":"low";
s += (val) ? "high" : "low";
s += "</html>\n";
// Send the response to the client

View File

@ -1,7 +1,7 @@
/*
* This sketch trys to Connect to the best AP based on a given list
*
*/
This sketch trys to Connect to the best AP based on a given list
*/
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
@ -18,7 +18,7 @@ void setup() {
wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3");
Serial.println("Connecting Wifi...");
if(wifiMulti.run() == WL_CONNECTED) {
if (wifiMulti.run() == WL_CONNECTED) {
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
@ -27,7 +27,7 @@ void setup() {
}
void loop() {
if(wifiMulti.run() != WL_CONNECTED) {
if (wifiMulti.run() != WL_CONNECTED) {
Serial.println("WiFi not connected!");
delay(1000);
}

View File

@ -1,8 +1,8 @@
/*
* This sketch demonstrates how to scan WiFi networks.
* The API is almost the same as with the WiFi Shield library,
* the most obvious difference being the different file you need to include:
*/
This sketch demonstrates how to scan WiFi networks.
The API is almost the same as with the WiFi Shield library,
the most obvious difference being the different file you need to include:
*/
#include "ESP8266WiFi.h"
void setup() {
@ -22,14 +22,12 @@ void loop() {
// WiFi.scanNetworks will return the number of networks found
int n = WiFi.scanNetworks();
Serial.println("scan done");
if (n == 0)
if (n == 0) {
Serial.println("no networks found");
else
{
} else {
Serial.print(n);
Serial.println(" networks found");
for (int i = 0; i < n; ++i)
{
for (int i = 0; i < n; ++i) {
// Print SSID and RSSI for each network found
Serial.print(i + 1);
Serial.print(": ");
@ -37,7 +35,7 @@ void loop() {
Serial.print(" (");
Serial.print(WiFi.RSSI(i));
Serial.print(")");
Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*");
Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE) ? " " : "*");
delay(10);
}
}

View File

@ -34,10 +34,14 @@ void setup() {
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){
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);
while (1) {
delay(500);
}
}
//start UART and the server
Serial.begin(115200);
@ -52,40 +56,44 @@ void setup() {
void loop() {
uint8_t i;
//check if there are any new clients
if (server.hasClient()){
for(i = 0; i < MAX_SRV_CLIENTS; i++){
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();
if (!serverClients[i] || !serverClients[i].connected()) {
if (serverClients[i]) {
serverClients[i].stop();
}
serverClients[i] = server.available();
Serial1.print("New client: "); Serial1.print(i);
break;
}
}
//no free/disconnected spot so reject
if ( i == MAX_SRV_CLIENTS) {
if (i == MAX_SRV_CLIENTS) {
WiFiClient serverClient = server.available();
serverClient.stop();
Serial1.println("Connection rejected ");
}
}
//check clients for data
for(i = 0; i < MAX_SRV_CLIENTS; i++){
if (serverClients[i] && serverClients[i].connected()){
if(serverClients[i].available()){
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());
while (serverClients[i].available()) {
Serial.write(serverClients[i].read());
}
}
}
}
//check UART for data
if(Serial.available()){
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()){
for (i = 0; i < MAX_SRV_CLIENTS; i++) {
if (serverClients[i] && serverClients[i].connected()) {
serverClients[i].write(sbuf, len);
delay(1);
}

View File

@ -1,11 +1,11 @@
/*
* This sketch demonstrates how to set up a simple HTTP-like server.
* The server will set a GPIO pin depending on the request
* http://server_ip/gpio/0 will set the GPIO2 low,
* http://server_ip/gpio/1 will set the GPIO2 high
* server_ip is the IP address of the ESP8266 module, will be
* printed to Serial when the module is connected.
*/
This sketch demonstrates how to set up a simple HTTP-like server.
The server will set a GPIO pin depending on the request
http://server_ip/gpio/0 will set the GPIO2 low,
http://server_ip/gpio/1 will set the GPIO2 high
server_ip is the IP address of the ESP8266 module, will be
printed to Serial when the module is connected.
*/
#include <ESP8266WiFi.h>
@ -57,7 +57,7 @@ void loop() {
// Wait until the client sends some data
Serial.println("new client");
while(!client.available()){
while (!client.available()) {
delay(1);
}
@ -68,11 +68,11 @@ void loop() {
// Match the request
int val;
if (req.indexOf("/gpio/0") != -1)
if (req.indexOf("/gpio/0") != -1) {
val = 0;
else if (req.indexOf("/gpio/1") != -1)
} else if (req.indexOf("/gpio/1") != -1) {
val = 1;
else {
} else {
Serial.println("invalid request");
client.stop();
return;
@ -85,7 +85,7 @@ void loop() {
// Prepare the response
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO is now ";
s += (val)?"high":"low";
s += (val) ? "high" : "low";
s += "</html>\n";
// Send the response to the client

View File

@ -10,13 +10,12 @@ String manageRequest(String request);
ESP8266WiFiMesh mesh_node = ESP8266WiFiMesh(ESP.getChipId(), manageRequest);
/**
* Callback for when other nodes send you data
*
* @request The string received from another node in the mesh
* @returns The string to send back to the other node
*/
String manageRequest(String request)
{
Callback for when other nodes send you data
@request The string received from another node in the mesh
@returns The string to send back to the other node
*/
String manageRequest(String request) {
/* Print out received message */
Serial.print("received: ");
Serial.println(request);
@ -27,8 +26,7 @@ String manageRequest(String request)
return response;
}
void setup()
{
void setup() {
Serial.begin(115200);
delay(10);
@ -40,8 +38,7 @@ void setup()
mesh_node.begin();
}
void loop()
{
void loop() {
/* Accept any incoming connections */
mesh_node.acceptRequest();

View File

@ -1,9 +1,9 @@
/**
* httpUpdate.ino
*
* Created on: 27.11.2015
*
*/
httpUpdate.ino
Created on: 27.11.2015
*/
#include <Arduino.h>
@ -26,7 +26,7 @@ void setup() {
USE_SERIAL.println();
USE_SERIAL.println();
for(uint8_t t = 4; t > 0; t--) {
for (uint8_t t = 4; t > 0; t--) {
USE_SERIAL.printf("[SETUP] WAIT %d...\n", t);
USE_SERIAL.flush();
delay(1000);
@ -39,12 +39,12 @@ void setup() {
void loop() {
// wait for WiFi connection
if((WiFiMulti.run() == WL_CONNECTED)) {
if ((WiFiMulti.run() == WL_CONNECTED)) {
t_httpUpdate_return ret = ESPhttpUpdate.update("http://server/file.bin");
//t_httpUpdate_return ret = ESPhttpUpdate.update("https://server/file.bin");
switch(ret) {
switch (ret) {
case HTTP_UPDATE_FAILED:
USE_SERIAL.printf("HTTP_UPDATE_FAILD Error (%d): %s", ESPhttpUpdate.getLastError(), ESPhttpUpdate.getLastErrorString().c_str());
break;

View File

@ -1,9 +1,9 @@
/**
* httpUpdateSPIFFS.ino
*
* Created on: 05.12.2015
*
*/
httpUpdateSPIFFS.ino
Created on: 05.12.2015
*/
#include <Arduino.h>
@ -26,7 +26,7 @@ void setup() {
USE_SERIAL.println();
USE_SERIAL.println();
for(uint8_t t = 4; t > 0; t--) {
for (uint8_t t = 4; t > 0; t--) {
USE_SERIAL.printf("[SETUP] WAIT %d...\n", t);
USE_SERIAL.flush();
delay(1000);
@ -39,15 +39,15 @@ void setup() {
void loop() {
// wait for WiFi connection
if((WiFiMulti.run() == WL_CONNECTED)) {
if ((WiFiMulti.run() == WL_CONNECTED)) {
USE_SERIAL.println("Update SPIFFS...");
t_httpUpdate_return ret = ESPhttpUpdate.updateSpiffs("http://server/spiffs.bin");
if(ret == HTTP_UPDATE_OK) {
if (ret == HTTP_UPDATE_OK) {
USE_SERIAL.println("Update sketch...");
ret = ESPhttpUpdate.update("http://server/file.bin");
switch(ret) {
switch (ret) {
case HTTP_UPDATE_FAILED:
USE_SERIAL.printf("HTTP_UPDATE_FAILED Error (%d): %s", ESPhttpUpdate.getLastError(), ESPhttpUpdate.getLastErrorString().c_str());
break;

View File

@ -1,16 +1,16 @@
/**
* @file OTA-mDNS-SPIFFS.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.
*
*/
@file OTA-mDNS-SPIFFS.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.
*/
// includes
#include <ESP8266WiFi.h>
@ -21,16 +21,16 @@
/**
* @brief mDNS and OTA Constants
* @{
*/
@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.
* @{
*/
@brief Default WiFi connection information.
@{
*/
const char* ap_default_ssid = "esp8266"; ///< Default SSID.
const char* ap_default_psk = "esp8266esp8266"; ///< Default PSK.
/// @}
@ -39,21 +39,19 @@ const char* ap_default_psk = "esp8266esp8266"; ///< Default PSK.
//#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)
{
@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 = SPIFFS.open("/cl_conf.txt", "r");
if (!configFile)
{
if (!configFile) {
Serial.println("Failed to open cl_conf.txt.");
return false;
@ -69,19 +67,16 @@ bool loadConfig(String *ssid, String *pass)
int8_t pos = content.indexOf("\r\n");
uint8_t le = 2;
// check for linux and mac line ending.
if (pos == -1)
{
if (pos == -1) {
le = 1;
pos = content.indexOf("\n");
if (pos == -1)
{
if (pos == -1) {
pos = content.indexOf("\r");
}
}
// If there is no second line: Some information is missing.
if (pos == -1)
{
if (pos == -1) {
Serial.println("Infvalid content.");
Serial.println(content);
@ -95,30 +90,28 @@ bool loadConfig(String *ssid, String *pass)
ssid->trim();
pass->trim();
#ifdef SERIAL_VERBOSE
#ifdef SERIAL_VERBOSE
Serial.println("----- file content -----");
Serial.println(content);
Serial.println("----- file content -----");
Serial.println("ssid: " + *ssid);
Serial.println("psk: " + *pass);
#endif
#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)
{
@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 = SPIFFS.open("/cl_conf.txt", "w");
if (!configFile)
{
if (!configFile) {
Serial.println("Failed to open cl_conf.txt for writing");
return false;
@ -135,10 +128,9 @@ bool saveConfig(String *ssid, String *pass)
/**
* @brief Arduino setup function.
*/
void setup()
{
@brief Arduino setup function.
*/
void setup() {
String station_ssid = "";
String station_psk = "";
@ -161,15 +153,13 @@ void setup()
// Initialize file system.
if (!SPIFFS.begin())
{
if (!SPIFFS.begin()) {
Serial.println("Failed to mount file system");
return;
}
// Load wifi connection information.
if (! loadConfig(&station_ssid, &station_psk))
{
if (! loadConfig(&station_ssid, &station_psk)) {
station_ssid = "";
station_psk = "";
@ -178,15 +168,13 @@ void setup()
// Check WiFi connection
// ... check mode
if (WiFi.getMode() != WIFI_STA)
{
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)
{
if (WiFi.SSID() != station_ssid || WiFi.psk() != station_psk) {
Serial.println("WiFi config changed.");
// ... Try to connect to WiFi station.
@ -198,9 +186,7 @@ void setup()
// ... Uncomment this for debugging output.
//WiFi.printDiag(Serial);
}
else
{
} else {
// ... Begin with sdk config.
WiFi.begin();
}
@ -209,8 +195,7 @@ void setup()
// ... Give ESP 10 seconds to connect to station.
unsigned long startTime = millis();
while (WiFi.status() != WL_CONNECTED && millis() - startTime < 10000)
{
while (WiFi.status() != WL_CONNECTED && millis() - startTime < 10000) {
Serial.write('.');
//Serial.print(WiFi.status());
delay(500);
@ -218,14 +203,11 @@ void setup()
Serial.println();
// Check connection
if(WiFi.status() == WL_CONNECTED)
{
if (WiFi.status() == WL_CONNECTED) {
// ... print IP Address
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
else
{
} else {
Serial.println("Can not connect to WiFi station. Go into AP mode.");
// Go into software AP mode.
@ -246,10 +228,9 @@ void setup()
/**
* @brief Arduino loop function.
*/
void loop()
{
@brief Arduino loop function.
*/
void loop() {
// Handle OTA server.
ArduinoOTA.handle();
yield();

View File

@ -7,7 +7,7 @@
- Update WiFi SSID and password as necessary.
- Flash the sketch to two ESP8266 boards
- The last one powered on should now find the other.
*/
*/
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
@ -49,8 +49,7 @@ void setup() {
Serial.println("mDNS query done");
if (n == 0) {
Serial.println("no services found");
}
else {
} else {
Serial.print(n);
Serial.println(" service(s) found");
for (int i = 0; i < n; ++i) {

View File

@ -13,7 +13,7 @@
- For Mac OSX and iOS support is built in through Bonjour already.
- Point your browser to http://esp8266.local, you should see a response.
*/
*/
#include <ESP8266WiFi.h>
@ -26,8 +26,7 @@ const char* password = "..............";
// TCP server at port 80 will respond to HTTP requests
WiFiServer server(80);
void setup(void)
{
void setup(void) {
Serial.begin(115200);
// Connect to WiFi network
@ -53,7 +52,7 @@ void setup(void)
// we send our IP address on the WiFi network
if (!MDNS.begin("esp8266")) {
Serial.println("Error setting up MDNS responder!");
while(1) {
while (1) {
delay(1000);
}
}
@ -67,8 +66,7 @@ void setup(void)
MDNS.addService("http", "tcp", 80);
}
void loop(void)
{
void loop(void) {
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
@ -78,7 +76,7 @@ void loop(void)
Serial.println("New client");
// Wait for data from client to become available
while(client.connected() && !client.available()){
while (client.connected() && !client.available()) {
delay(1);
}
@ -100,17 +98,14 @@ void loop(void)
client.flush();
String s;
if (req == "/")
{
if (req == "/") {
IPAddress ip = WiFi.localIP();
String ipStr = String(ip[0]) + '.' + String(ip[1]) + '.' + String(ip[2]) + '.' + String(ip[3]);
s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>Hello from ESP8266 at ";
s += ipStr;
s += "</html>\r\n\r\n";
Serial.println("Sending 200");
}
else
{
} else {
s = "HTTP/1.1 404 Not Found\r\n\r\n";
Serial.println("Sending 404");
}

View File

@ -8,8 +8,8 @@
Using an Arduino Wiznet Ethernet shield.
Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
* Analog inputs attached to pins A0 through A5 (optional)
Ethernet shield attached to pins 10, 11, 12, 13
Analog inputs attached to pins A0 through A5 (optional)
created 18 Dec 2009
by David A. Mellis
@ -18,7 +18,7 @@
redesigned to make use of operator== 25 Nov 2013
by Norbert Truchsess
*/
*/
#include <SPI.h>
#include <Ethernet.h>
@ -27,9 +27,10 @@
// The IP address will be dependent on your local network.
// gateway and subnet are optional:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1, 177);
IPAddress gateway(192,168,1, 1);
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 1, 177);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 0, 0);
@ -62,9 +63,9 @@ void loop() {
if (client) {
boolean newClient = true;
for (byte i=0;i<4;i++) {
for (byte i = 0; i < 4; i++) {
//check whether this client refers to the same socket as one of the existing instances:
if (clients[i]==client) {
if (clients[i] == client) {
newClient = false;
break;
}
@ -72,8 +73,8 @@ void loop() {
if (newClient) {
//check which of the existing clients can be overridden:
for (byte i=0;i<4;i++) {
if (!clients[i] && clients[i]!=client) {
for (byte i = 0; i < 4; i++) {
if (!clients[i] && clients[i] != client) {
clients[i] = client;
// clead out the input buffer:
client.flush();
@ -90,8 +91,8 @@ void loop() {
// read the bytes incoming from the client:
char thisChar = client.read();
// echo the bytes back to all other connected clients:
for (byte i=0;i<4;i++) {
if (clients[i] && (clients[i]!=client)) {
for (byte i = 0; i < 4; i++) {
if (clients[i] && (clients[i] != client)) {
clients[i].write(thisChar);
}
}
@ -99,7 +100,7 @@ void loop() {
Serial.write(thisChar);
}
}
for (byte i=0;i<4;i++) {
for (byte i = 0; i < 4; i++) {
if (!(clients[i].connected())) {
// client.stop() invalidates the internal socket-descriptor, so next use of == will allways return false;
clients[i].stop();

View File

@ -19,7 +19,7 @@
created 31 July 2010
by Tom Igoe
*/
*/
#include <Ethernet.h>
// the sensor communicates using SPI, so include the library:
@ -156,8 +156,7 @@ void listenForEthernetClients() {
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != '\r') {
} else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
@ -219,5 +218,5 @@ unsigned int readRegister(byte registerName, int numBytes) {
// take the chip select high to de-select:
digitalWrite(chipSelectPin, HIGH);
// return the result:
return(result);
return (result);
}

View File

@ -7,15 +7,15 @@
Using an Arduino Wiznet Ethernet shield.
Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
* Analog inputs attached to pins A0 through A5 (optional)
Ethernet shield attached to pins 10, 11, 12, 13
Analog inputs attached to pins A0 through A5 (optional)
created 18 Dec 2009
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe
*/
*/
#include <SPI.h>
#include <Ethernet.h>

View File

@ -6,13 +6,13 @@
using an Arduino Wiznet Ethernet shield.
Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
Ethernet shield attached to pins 10, 11, 12, 13
created 12 April 2011
modified 9 Apr 2012
by Tom Igoe
*/
*/
#include <SPI.h>
#include <Ethernet.h>

View File

@ -9,14 +9,14 @@
THis version attempts to get an IP address using DHCP
Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
Ethernet shield attached to pins 10, 11, 12, 13
created 21 May 2011
modified 9 Apr 2012
by Tom Igoe
Based on ChatServer example by David A. Mellis
*/
*/
#include <SPI.h>
#include <Ethernet.h>

View File

@ -10,13 +10,13 @@
http://processing.org/
Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
Ethernet shield attached to pins 10, 11, 12, 13
created 14 Sep 2010
modified 9 Apr 2012
by Tom Igoe
*/
*/
#include <SPI.h>
#include <Ethernet.h>
@ -54,15 +54,13 @@ void setup() {
// if you get a connection, report back via serial:
if (client.connect(server, 10002)) {
Serial.println("connected");
}
else {
} else {
// if you didn't get a connection to the server:
Serial.println("connection failed");
}
}
void loop()
{
void loop() {
// if there are incoming bytes available
// from the server, read them and print them:
if (client.available()) {

View File

@ -10,7 +10,7 @@
by Michael Margolis
This code is in the public domain.
*/
*/
#include <SPI.h> // needed for Arduino versions later than 0018
@ -45,17 +45,14 @@ void setup() {
void loop() {
// if there's data available, read a packet
int packetSize = Udp.parsePacket();
if (packetSize)
{
if (packetSize) {
Serial.print("Received packet of size ");
Serial.println(packetSize);
Serial.print("From ");
IPAddress remote = Udp.remoteIP();
for (int i = 0; i < 4; i++)
{
for (int i = 0; i < 4; i++) {
Serial.print(remote[i], DEC);
if (i < 3)
{
if (i < 3) {
Serial.print(".");
}
}
@ -114,6 +111,6 @@ void loop() {
print(char(data[i]));
println();
}
*/
*/

View File

@ -14,7 +14,7 @@
This code is in the public domain.
*/
*/
#include <SPI.h>
#include <Ethernet.h>
@ -37,8 +37,7 @@ byte packetBuffer[ NTP_PACKET_SIZE]; //buffer to hold incoming and outgoing pack
// A UDP instance to let us send and receive packets over UDP
EthernetUDP Udp;
void setup()
{
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
@ -56,13 +55,12 @@ void setup()
Udp.begin(localPort);
}
void loop()
{
void loop() {
sendNTPpacket(timeServer); // send an NTP packet to a time server
// wait to see if a reply is available
delay(1000);
if ( Udp.parsePacket() ) {
if (Udp.parsePacket()) {
// We've received a packet, read the data from it
Udp.read(packetBuffer, NTP_PACKET_SIZE); // read the packet into the buffer
@ -74,7 +72,7 @@ void loop()
// combine the four bytes (two words) into a long integer
// this is NTP time (seconds since Jan 1 1900):
unsigned long secsSince1900 = highWord << 16 | lowWord;
Serial.print("Seconds since Jan 1 1900 = " );
Serial.print("Seconds since Jan 1 1900 = ");
Serial.println(secsSince1900);
// now convert NTP time into everyday time:
@ -91,13 +89,13 @@ void loop()
Serial.print("The UTC time is "); // UTC is the time at Greenwich Meridian (GMT)
Serial.print((epoch % 86400L) / 3600); // print the hour (86400 equals secs per day)
Serial.print(':');
if ( ((epoch % 3600) / 60) < 10 ) {
if (((epoch % 3600) / 60) < 10) {
// In the first 10 minutes of each hour, we'll want a leading '0'
Serial.print('0');
}
Serial.print((epoch % 3600) / 60); // print the minute (3600 equals secs per minute)
Serial.print(':');
if ( (epoch % 60) < 10 ) {
if ((epoch % 60) < 10) {
// In the first 10 seconds of each minute, we'll want a leading '0'
Serial.print('0');
}
@ -108,8 +106,7 @@ void loop()
}
// send an NTP request to the time server at the given address
void sendNTPpacket(char* address)
{
void sendNTPpacket(char* address) {
// set all bytes in the buffer to 0
memset(packetBuffer, 0, NTP_PACKET_SIZE);
// Initialize values needed to form NTP request

View File

@ -5,14 +5,14 @@
using an Arduino Wiznet Ethernet shield.
Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
Ethernet shield attached to pins 10, 11, 12, 13
created 18 Dec 2009
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe, based on work by Adrian McEwen
*/
*/
#include <SPI.h>
#include <Ethernet.h>
@ -59,15 +59,13 @@ void setup() {
client.println("Host: www.google.com");
client.println("Connection: close");
client.println();
}
else {
} else {
// kf you didn't get a connection to the server:
Serial.println("connection failed");
}
}
void loop()
{
void loop() {
// if there are incoming bytes available
// from the server, read them and print them:
if (client.available()) {

View File

@ -10,7 +10,7 @@
IP address, and DNS address.
Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
Ethernet shield attached to pins 10, 11, 12, 13
created 19 Apr 2012
by Tom Igoe
@ -20,7 +20,7 @@
http://www.arduino.cc/en/Tutorial/WebClientRepeating
This code is in the public domain.
*/
*/
#include <SPI.h>
#include <Ethernet.h>
@ -98,8 +98,7 @@ void httpRequest() {
// note the time that the connection was made:
lastConnectionTime = millis();
}
else {
} else {
// if you couldn't make a connection:
Serial.println("connection failed");
}

View File

@ -5,15 +5,15 @@
using an Arduino Wiznet Ethernet shield.
Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
* Analog inputs attached to pins A0 through A5 (optional)
Ethernet shield attached to pins 10, 11, 12, 13
Analog inputs attached to pins A0 through A5 (optional)
created 18 Dec 2009
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe
*/
*/
#include <SPI.h>
#include <Ethernet.h>
@ -84,8 +84,7 @@ void loop() {
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != '\r') {
} else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}

View File

@ -42,8 +42,7 @@ struct sRFC1305 packetBuffer; //buffer to hold incoming and outgoing packets
// A UDP instance to let us send and receive packets over UDP
EthernetUDP Udp;
void setup()
{
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
@ -62,34 +61,33 @@ void setup()
Udp.begin(localPort);
}
void loop()
{
void loop() {
sendNTPpacket(timeServer); // send an NTP packet to a time server
// wait to see if a reply is available
delay(1000);
if ( Udp.parsePacket() ) {
if (Udp.parsePacket()) {
// We've received a packet, read the data from it
Udp.read((byte *)&packetBuffer, NTP_PACKET_SIZE); // read the packet into the buffer
#if 0 // just for debugging
Serial.println(ENDIAN_SWAP_16(packetBuffer.rootdelay_main),HEX);
Serial.println(ENDIAN_SWAP_16(packetBuffer.rootdelay_fraction),HEX);
Serial.println(ENDIAN_SWAP_16(packetBuffer.rootdispersion_main),HEX);
Serial.println(ENDIAN_SWAP_16(packetBuffer.rootdispersion_fraction),HEX);
Serial.println(ENDIAN_SWAP_32(packetBuffer.referencetimestamp_main),HEX);
Serial.println(ENDIAN_SWAP_32(packetBuffer.referencetimestamp_fraction),HEX);
Serial.println(ENDIAN_SWAP_32(packetBuffer.origintimestamp_main),HEX);
Serial.println(ENDIAN_SWAP_32(packetBuffer.origintimestamp_fraction),HEX);
Serial.println(ENDIAN_SWAP_32(packetBuffer.receivetimestamp_main),HEX);
Serial.println(ENDIAN_SWAP_32(packetBuffer.receivetimestamp_fraction),HEX);
Serial.println(ENDIAN_SWAP_32(packetBuffer.transmittimestamp_main),HEX);
Serial.println(ENDIAN_SWAP_32(packetBuffer.transmittimestamp_fraction),HEX);
#endif
#if 0 // just for debugging
Serial.println(ENDIAN_SWAP_16(packetBuffer.rootdelay_main), HEX);
Serial.println(ENDIAN_SWAP_16(packetBuffer.rootdelay_fraction), HEX);
Serial.println(ENDIAN_SWAP_16(packetBuffer.rootdispersion_main), HEX);
Serial.println(ENDIAN_SWAP_16(packetBuffer.rootdispersion_fraction), HEX);
Serial.println(ENDIAN_SWAP_32(packetBuffer.referencetimestamp_main), HEX);
Serial.println(ENDIAN_SWAP_32(packetBuffer.referencetimestamp_fraction), HEX);
Serial.println(ENDIAN_SWAP_32(packetBuffer.origintimestamp_main), HEX);
Serial.println(ENDIAN_SWAP_32(packetBuffer.origintimestamp_fraction), HEX);
Serial.println(ENDIAN_SWAP_32(packetBuffer.receivetimestamp_main), HEX);
Serial.println(ENDIAN_SWAP_32(packetBuffer.receivetimestamp_fraction), HEX);
Serial.println(ENDIAN_SWAP_32(packetBuffer.transmittimestamp_main), HEX);
Serial.println(ENDIAN_SWAP_32(packetBuffer.transmittimestamp_fraction), HEX);
#endif
Serial.print("Delay ");
Serial.print(ENDIAN_SWAP_16(packetBuffer.rootdelay_main));Serial.print(".");Serial.println(ENDIAN_SWAP_16(packetBuffer.rootdelay_fraction));
Serial.print("Seconds since Jan 1 1900 = " );
Serial.print(ENDIAN_SWAP_16(packetBuffer.rootdelay_main)); Serial.print("."); Serial.println(ENDIAN_SWAP_16(packetBuffer.rootdelay_fraction));
Serial.print("Seconds since Jan 1 1900 = ");
unsigned long secsSince1900 = ENDIAN_SWAP_32(packetBuffer.transmittimestamp_main);
Serial.print(secsSince1900);Serial.print(".");Serial.println(ENDIAN_SWAP_32(packetBuffer.transmittimestamp_fraction));
Serial.print(secsSince1900); Serial.print("."); Serial.println(ENDIAN_SWAP_32(packetBuffer.transmittimestamp_fraction));
// now convert NTP time into everyday time:
Serial.print("Unix time = ");
@ -108,25 +106,24 @@ void loop()
Serial.print("The UTC time is "); // UTC is the time at Greenwich Meridian (GMT)
Serial.print((epoch % SECS_PER_DAY) / SECS_PER_HOUR);
Serial.print(':');
if ( ((epoch % SECS_PER_HOUR) / SECS_PER_MINUTE) < 10 ) {
if (((epoch % SECS_PER_HOUR) / SECS_PER_MINUTE) < 10) {
// In the first 10 minutes of each hour, we'll want a leading '0'
Serial.print('0');
}
Serial.print((epoch % SECS_PER_HOUR) / SECS_PER_MINUTE);
Serial.print(':');
if ( (epoch % SECS_PER_MINUTE) < 10 ) {
if ((epoch % SECS_PER_MINUTE) < 10) {
// In the first 10 seconds of each minute, we'll want a leading '0'
Serial.print('0');
}
Serial.println(epoch % SECS_PER_MINUTE); // print the second
}
}
// wait ten seconds before asking for the time again
delay(10000);
}
// send an NTP request to the time server at the given address
unsigned long sendNTPpacket(char* address)
{
unsigned long sendNTPpacket(char* address) {
// set all bytes in the buffer to 0
memset((char *)&packetBuffer, 0, NTP_PACKET_SIZE);
// Initialize values needed to form NTP request
@ -141,7 +138,7 @@ unsigned long sendNTPpacket(char* address)
packetBuffer.identifier[1] = 'N';
packetBuffer.identifier[2] = '1';
packetBuffer.identifier[3] = '4';
// Serial.println(*(uint8_t *)&packetBuffer,HEX);
// Serial.println(*(uint8_t *)&packetBuffer,HEX);
// all NTP fields have been given values, now
// you can send a packet requesting a timestamp:
Udp.beginPacket(address, 123); //NTP requests are to port 123

View File

@ -1,6 +1,6 @@
/**
* simple demo to show sha1 calculation
*/
simple demo to show sha1 calculation
*/
#include <Arduino.h>
#include <Hash.h>
@ -22,7 +22,7 @@ void loop() {
sha1("abc", &hash[0]);
Serial.print("SHA1:");
for(uint16_t i = 0; i < 20; i++) {
for (uint16_t i = 0; i < 20; i++) {
Serial.printf("%02x", hash[i]);
}
Serial.println();

View File

@ -6,7 +6,7 @@
Very useful for testing a card when you're not sure whether its working or not.
The circuit:
* SD card attached to SPI bus as follows:
SD card attached to SPI bus as follows:
** MOSI - pin 11 on Arduino Uno/Duemilanove/Diecimila
** MISO - pin 12 on Arduino Uno/Duemilanove/Diecimila
** CLK - pin 13 on Arduino Uno/Duemilanove/Diecimila
@ -18,7 +18,7 @@
by Limor Fried
modified 9 Apr 2012
by Tom Igoe
*/
*/
// include the SD library:
#include <SPI.h>
#include <SD.h>
@ -34,8 +34,7 @@ SdFile root;
// Sparkfun SD shield: pin 8
const int chipSelect = 4;
void setup()
{
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {

View File

@ -5,8 +5,8 @@
to an SD card using the SD library.
The circuit:
* analog sensors on analog ins 0, 1, and 2
* SD card attached to SPI bus as follows:
analog sensors on analog ins 0, 1, and 2
SD card attached to SPI bus as follows:
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
@ -18,15 +18,14 @@
This example code is in the public domain.
*/
*/
#include <SPI.h>
#include <SD.h>
const int chipSelect = 4;
void setup()
{
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
@ -45,8 +44,7 @@ void setup()
Serial.println("card initialized.");
}
void loop()
{
void loop() {
// make a string for assembling the data to log:
String dataString = "";

View File

@ -5,7 +5,7 @@
SD library and send it over the serial port.
The circuit:
* SD card attached to SPI bus as follows:
SD card attached to SPI bus as follows:
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
@ -18,15 +18,14 @@
This example code is in the public domain.
*/
*/
#include <SPI.h>
#include <SD.h>
const int chipSelect = 4;
void setup()
{
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
@ -61,7 +60,6 @@ void setup()
}
}
void loop()
{
void loop() {
}

View File

@ -3,7 +3,7 @@
This example shows how to create and destroy an SD card file
The circuit:
* SD card attached to SPI bus as follows:
SD card attached to SPI bus as follows:
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
@ -16,14 +16,13 @@
This example code is in the public domain.
*/
*/
#include <SPI.h>
#include <SD.h>
File myFile;
void setup()
{
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
@ -41,8 +40,7 @@ void setup()
if (SD.exists("example.txt")) {
Serial.println("example.txt exists.");
}
else {
} else {
Serial.println("example.txt doesn't exist.");
}
@ -54,8 +52,7 @@ void setup()
// Check to see if the file exists:
if (SD.exists("example.txt")) {
Serial.println("example.txt exists.");
}
else {
} else {
Serial.println("example.txt doesn't exist.");
}
@ -65,14 +62,12 @@ void setup()
if (SD.exists("example.txt")) {
Serial.println("example.txt exists.");
}
else {
} else {
Serial.println("example.txt doesn't exist.");
}
}
void loop()
{
void loop() {
// nothing happens after setup finishes.
}

View File

@ -3,7 +3,7 @@
This example shows how to read and write data to and from an SD card file
The circuit:
* SD card attached to SPI bus as follows:
SD card attached to SPI bus as follows:
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
@ -16,15 +16,14 @@
This example code is in the public domain.
*/
*/
#include <SPI.h>
#include <SD.h>
File myFile;
void setup()
{
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
@ -73,8 +72,7 @@ void setup()
}
}
void loop()
{
void loop() {
// nothing happens after setup
}

View File

@ -5,7 +5,7 @@
directory on a SD card
The circuit:
* SD card attached to SPI bus as follows:
SD card attached to SPI bus as follows:
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
@ -20,14 +20,13 @@
This example code is in the public domain.
*/
*/
#include <SPI.h>
#include <SD.h>
File root;
void setup()
{
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
@ -49,26 +48,25 @@ void setup()
Serial.println("done!");
}
void loop()
{
void loop() {
// nothing happens after setup finishes.
}
void printDirectory(File dir, int numTabs) {
while(true) {
while (true) {
File entry = dir.openNextFile();
if (! entry) {
// no more files
break;
}
for (uint8_t i=0; i<numTabs; i++) {
for (uint8_t i = 0; i < numTabs; i++) {
Serial.print('\t');
}
Serial.print(entry.name());
if (entry.isDirectory()) {
Serial.println("/");
printDirectory(entry, numTabs+1);
printDirectory(entry, numTabs + 1);
} else {
// files have sizes, directories do not
Serial.print("\t\t");

View File

@ -16,21 +16,18 @@
*/
#include <SPI.h>
class ESPMaster
{
private:
class ESPMaster {
private:
uint8_t _ss_pin;
public:
ESPMaster(uint8_t pin):_ss_pin(pin) {}
void begin()
{
public:
ESPMaster(uint8_t pin): _ss_pin(pin) {}
void begin() {
pinMode(_ss_pin, OUTPUT);
digitalWrite(_ss_pin, HIGH);
}
uint32_t readStatus()
{
uint32_t readStatus() {
digitalWrite(_ss_pin, LOW);
SPI.transfer(0x04);
uint32_t status = (SPI.transfer(0) | ((uint32_t)(SPI.transfer(0)) << 8) | ((uint32_t)(SPI.transfer(0)) << 16) | ((uint32_t)(SPI.transfer(0)) << 24));
@ -38,8 +35,7 @@ public:
return status;
}
void writeStatus(uint32_t status)
{
void writeStatus(uint32_t status) {
digitalWrite(_ss_pin, LOW);
SPI.transfer(0x01);
SPI.transfer(status & 0xFF);
@ -49,50 +45,45 @@ public:
digitalWrite(_ss_pin, HIGH);
}
void readData(uint8_t * data)
{
void readData(uint8_t * data) {
digitalWrite(_ss_pin, LOW);
SPI.transfer(0x03);
SPI.transfer(0x00);
for(uint8_t i=0; i<32; i++) {
for (uint8_t i = 0; i < 32; i++) {
data[i] = SPI.transfer(0);
}
digitalWrite(_ss_pin, HIGH);
}
void writeData(uint8_t * data, size_t len)
{
uint8_t i=0;
void writeData(uint8_t * data, size_t len) {
uint8_t i = 0;
digitalWrite(_ss_pin, LOW);
SPI.transfer(0x02);
SPI.transfer(0x00);
while(len-- && i < 32) {
while (len-- && i < 32) {
SPI.transfer(data[i++]);
}
while(i++ < 32) {
while (i++ < 32) {
SPI.transfer(0);
}
digitalWrite(_ss_pin, HIGH);
}
String readData()
{
String readData() {
char data[33];
data[32] = 0;
readData((uint8_t *)data);
return String(data);
}
void writeData(const char * data)
{
void writeData(const char * data) {
writeData((uint8_t *)data, strlen(data));
}
};
ESPMaster esp(SS);
void send(const char * message)
{
void send(const char * message) {
Serial.print("Master: ");
Serial.println(message);
esp.writeData(message);
@ -102,8 +93,7 @@ void send(const char * message)
Serial.println();
}
void setup()
{
void setup() {
Serial.begin(115200);
SPI.begin();
esp.begin();
@ -111,8 +101,7 @@ void setup()
send("Hello Slave!");
}
void loop()
{
void loop() {
delay(1000);
send("Are you alive?");
}

View File

@ -17,26 +17,22 @@
*/
#include <SPI.h>
class ESPSafeMaster
{
private:
class ESPSafeMaster {
private:
uint8_t _ss_pin;
void _pulseSS()
{
void _pulseSS() {
digitalWrite(_ss_pin, HIGH);
delayMicroseconds(5);
digitalWrite(_ss_pin, LOW);
}
public:
ESPSafeMaster(uint8_t pin):_ss_pin(pin) {}
void begin()
{
public:
ESPSafeMaster(uint8_t pin): _ss_pin(pin) {}
void begin() {
pinMode(_ss_pin, OUTPUT);
_pulseSS();
}
uint32_t readStatus()
{
uint32_t readStatus() {
_pulseSS();
SPI.transfer(0x04);
uint32_t status = (SPI.transfer(0) | ((uint32_t)(SPI.transfer(0)) << 8) | ((uint32_t)(SPI.transfer(0)) << 16) | ((uint32_t)(SPI.transfer(0)) << 24));
@ -44,8 +40,7 @@ public:
return status;
}
void writeStatus(uint32_t status)
{
void writeStatus(uint32_t status) {
_pulseSS();
SPI.transfer(0x01);
SPI.transfer(status & 0xFF);
@ -55,50 +50,45 @@ public:
_pulseSS();
}
void readData(uint8_t * data)
{
void readData(uint8_t * data) {
_pulseSS();
SPI.transfer(0x03);
SPI.transfer(0x00);
for(uint8_t i=0; i<32; i++) {
for (uint8_t i = 0; i < 32; i++) {
data[i] = SPI.transfer(0);
}
_pulseSS();
}
void writeData(uint8_t * data, size_t len)
{
uint8_t i=0;
void writeData(uint8_t * data, size_t len) {
uint8_t i = 0;
_pulseSS();
SPI.transfer(0x02);
SPI.transfer(0x00);
while(len-- && i < 32) {
while (len-- && i < 32) {
SPI.transfer(data[i++]);
}
while(i++ < 32) {
while (i++ < 32) {
SPI.transfer(0);
}
_pulseSS();
}
String readData()
{
String readData() {
char data[33];
data[32] = 0;
readData((uint8_t *)data);
return String(data);
}
void writeData(const char * data)
{
void writeData(const char * data) {
writeData((uint8_t *)data, strlen(data));
}
};
ESPSafeMaster esp(SS);
void send(const char * message)
{
void send(const char * message) {
Serial.print("Master: ");
Serial.println(message);
esp.writeData(message);
@ -108,8 +98,7 @@ void send(const char * message)
Serial.println();
}
void setup()
{
void setup() {
Serial.begin(115200);
SPI.begin();
esp.begin();
@ -117,8 +106,7 @@ void setup()
send("Hello Slave!");
}
void loop()
{
void loop() {
delay(1000);
send("Are you alive?");
}

View File

@ -17,8 +17,7 @@
#include "SPISlave.h"
void setup()
{
void setup() {
Serial.begin(115200);
Serial.setDebugOutput(true);
@ -28,11 +27,11 @@ void setup()
SPISlave.onData([](uint8_t * data, size_t len) {
String message = String((char *)data);
(void) len;
if(message.equals("Hello Slave!")) {
if (message.equals("Hello Slave!")) {
SPISlave.setData("Hello Master!");
} else if(message.equals("Are you alive?")) {
} else if (message.equals("Are you alive?")) {
char answer[33];
sprintf(answer,"Alive for %lu seconds!", millis() / 1000);
sprintf(answer, "Alive for %lu seconds!", millis() / 1000);
SPISlave.setData(answer);
} else {
SPISlave.setData("Say what?");

View File

@ -13,25 +13,22 @@
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
// twelve servo objects can be created on most boards
void setup()
{
void setup() {
myservo.attach(2); // attaches the servo on GIO2 to the servo object
}
void loop()
{
void loop() {
int pos;
for(pos = 0; pos <= 180; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for(pos = 180; pos>=0; pos-=1) // goes from 180 degrees to 0 degrees
{
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}

View File

@ -7,23 +7,21 @@
#include <TFTv2.h>
#include <SPI.h>
void setup()
{
void setup() {
TFT_BL_ON; //turn on the background light
Tft.TFTinit(); //init TFT library
Tft.drawCircle(100, 100, 30,YELLOW); //center: (100, 100), r = 30 ,color : YELLOW
Tft.drawCircle(100, 100, 30, YELLOW); //center: (100, 100), r = 30 ,color : YELLOW
Tft.drawCircle(100, 200, 40,CYAN); // center: (100, 200), r = 10 ,color : CYAN
Tft.drawCircle(100, 200, 40, CYAN); // center: (100, 200), r = 10 ,color : CYAN
Tft.fillCircle(200, 100, 30,RED); //center: (200, 100), r = 30 ,color : RED
Tft.fillCircle(200, 100, 30, RED); //center: (200, 100), r = 30 ,color : RED
Tft.fillCircle(200, 200, 30,BLUE); //center: (200, 200), r = 30 ,color : BLUE
Tft.fillCircle(200, 200, 30, BLUE); //center: (200, 200), r = 30 ,color : BLUE
}
void loop()
{
void loop() {
}

View File

@ -7,22 +7,20 @@
#include <stdint.h>
#include <TFTv2.h>
#include <SPI.h>
void setup()
{
void setup() {
TFT_BL_ON; // turn on the background light
Tft.TFTinit(); //init TFT library
Tft.drawLine(0,0,239,319,RED); //start: (0, 0) end: (239, 319), color : RED
Tft.drawLine(0, 0, 239, 319, RED); //start: (0, 0) end: (239, 319), color : RED
Tft.drawVerticalLine(60,100,100,GREEN); // Draw a vertical line
Tft.drawVerticalLine(60, 100, 100, GREEN); // Draw a vertical line
// start: (60, 100) length: 100 color: green
Tft.drawHorizontalLine(30,60,150,BLUE); //Draw a horizontal line
Tft.drawHorizontalLine(30, 60, 150, BLUE); //Draw a horizontal line
//start: (30, 60), high: 150, color: blue
}
void loop()
{
void loop() {
}

View File

@ -8,8 +8,7 @@
#include <TFTv2.h>
#include <SPI.h>
void setup()
{
void setup() {
TFT_BL_ON; // turn on the background light
Tft.TFTinit(); // init TFT library
@ -30,8 +29,7 @@ void setup()
}
void loop()
{
void loop() {
}

View File

@ -7,18 +7,16 @@
#include <TFTv2.h>
#include <SPI.h>
void setup()
{
void setup() {
TFT_BL_ON; // turn on the background light
Tft.TFTinit(); // init TFT library
Tft.fillScreen(80, 160, 50, 150,RED);
Tft.fillRectangle(30, 120, 100,65,YELLOW);
Tft.drawRectangle(100, 170, 120,60,BLUE);
Tft.fillScreen(80, 160, 50, 150, RED);
Tft.fillRectangle(30, 120, 100, 65, YELLOW);
Tft.drawRectangle(100, 170, 120, 60, BLUE);
}
void loop()
{
void loop() {
}
/*********************************************************************************************************

View File

@ -14,19 +14,16 @@ unsigned int colors[8] = {BLACK, RED, GREEN, BLUE, CYAN, YELLOW, WHITE, GRAY1};
TouchScreen ts = TouchScreen(XP, YP, XM, YM); //init TouchScreen port pins
void setup()
{
void setup() {
Tft.TFTinit(); //init TFT library
Serial.begin(115200);
//Draw the pallet
for(int i = 0; i<8; i++)
{
Tft.fillRectangle(i*30, 0, 30, ColorPaletteHigh, colors[i]);
for (int i = 0; i < 8; i++) {
Tft.fillRectangle(i * 30, 0, 30, ColorPaletteHigh, colors[i]);
}
}
void loop()
{
void loop() {
// a point object holds x y and z coordinates.
Point p = ts.getPoint();
@ -40,13 +37,10 @@ void loop()
if (p.z > __PRESURE) {
// Detect paint brush color change
if(p.y < ColorPaletteHigh+2)
{
color = colors[p.x/30];
}
else
{
Tft.fillCircle(p.x,p.y,2,color);
if (p.y < ColorPaletteHigh + 2) {
color = colors[p.x / 30];
} else {
Tft.fillCircle(p.x, p.y, 2, color);
}
}
}

View File

@ -4,17 +4,14 @@
#include <TFTv2.h>
#include <SPI.h>
void setup()
{
void setup() {
TFT_BL_ON; // turn on the background light
Tft.TFTinit(); // init TFT library
}
void loop()
{
for(int r=0;r<115;r=r+2) //set r : 0--115
{
Tft.drawCircle(119,160,r,random(0xFFFF)); //draw circle, center:(119, 160), color: random
void loop() {
for (int r = 0; r < 115; r = r + 2) { //set r : 0--115
Tft.drawCircle(119, 160, r, random(0xFFFF)); //draw circle, center:(119, 160), color: random
}
delay(10);
}

View File

@ -7,29 +7,27 @@
#include <TFTv2.h>
#include <SPI.h>
void setup()
{
void setup() {
TFT_BL_ON; // turn on the background light
Tft.TFTinit(); // init TFT library
Tft.drawChar('S',0,0,1,RED); // draw char: 'S', (0, 0), size: 1, color: RED
Tft.drawChar('S', 0, 0, 1, RED); // draw char: 'S', (0, 0), size: 1, color: RED
Tft.drawChar('E',10,10,2,BLUE); // draw char: 'E', (10, 10), size: 2, color: BLUE
Tft.drawChar('E', 10, 10, 2, BLUE); // draw char: 'E', (10, 10), size: 2, color: BLUE
Tft.drawChar('E',20,40,3,GREEN); // draw char: 'E', (20, 40), size: 3, color: GREEN
Tft.drawChar('E', 20, 40, 3, GREEN); // draw char: 'E', (20, 40), size: 3, color: GREEN
Tft.drawChar('E',30,80,4,YELLOW); // draw char: 'E', (30, 80), size: 4, color: YELLOW
Tft.drawChar('E', 30, 80, 4, YELLOW); // draw char: 'E', (30, 80), size: 4, color: YELLOW
Tft.drawChar('D',40,120,4,YELLOW); // draw char: 'D', (40, 120), size: 4, color: YELLOW
Tft.drawChar('D', 40, 120, 4, YELLOW); // draw char: 'D', (40, 120), size: 4, color: YELLOW
Tft.drawString("Hello",0,180,3,CYAN); // draw string: "hello", (0, 180), size: 3, color: CYAN
Tft.drawString("Hello", 0, 180, 3, CYAN); // draw string: "hello", (0, 180), size: 3, color: CYAN
Tft.drawString("World!!",60,220,4,WHITE); // draw string: "world!!", (80, 230), size: 4, color: WHITE
Tft.drawString("World!!", 60, 220, 4, WHITE); // draw string: "world!!", (80, 230), size: 4, color: WHITE
}
void loop()
{
void loop() {
}

View File

@ -30,34 +30,31 @@ unsigned char __Gnbmp_image_offset = 0; // offset
int __Gnfile_num = 3; // num of file
char __Gsbmp_files[3][FILENAME_LEN] = // add file name here
{
"flower.BMP",
"hibiscus.bmp",
"test.bmp",
char __Gsbmp_files[3][FILENAME_LEN] = { // add file name here
"flower.BMP",
"hibiscus.bmp",
"test.bmp",
};
File bmpFile;
void setup()
{
void setup() {
Serial.begin(9600);
pinMode(PIN_SD_CS,OUTPUT);
digitalWrite(PIN_SD_CS,HIGH);
pinMode(PIN_SD_CS, OUTPUT);
digitalWrite(PIN_SD_CS, HIGH);
Tft.TFTinit();
Sd2Card card;
card.init(SPI_FULL_SPEED, PIN_SD_CS);
if(!SD.begin(PIN_SD_CS))
{
if (!SD.begin(PIN_SD_CS)) {
Serial.println("failed!");
while(1); // init fail, die here
while (1); // init fail, die here
}
Serial.println("SD OK!");
@ -65,19 +62,15 @@ void setup()
TFT_BL_ON;
}
void loop()
{
for(unsigned char i=0; i<__Gnfile_num; i++)
{
void loop() {
for (unsigned char i = 0; i < __Gnfile_num; i++) {
bmpFile = SD.open(__Gsbmp_files[i]);
if (! bmpFile)
{
if (! bmpFile) {
Serial.println("didnt find image");
while (1);
}
if(! bmpReadHeader(bmpFile))
{
if (! bmpReadHeader(bmpFile)) {
Serial.println("bad bmp");
return;
}
@ -100,44 +93,39 @@ void loop()
#define BUFFPIXEL 60 // must be a divisor of 240
#define BUFFPIXEL_X3 180 // BUFFPIXELx3
void bmpdraw(File f, int x, int y)
{
void bmpdraw(File f, int x, int y) {
bmpFile.seek(__Gnbmp_image_offset);
uint32_t time = millis();
uint8_t sdbuffer[BUFFPIXEL_X3]; // 3 * pixels to buffer
for (int i=0; i< __Gnbmp_height; i++)
{
for (int i = 0; i < __Gnbmp_height; i++) {
for(int j=0; j<(240/BUFFPIXEL); j++)
{
for (int j = 0; j < (240 / BUFFPIXEL); j++) {
bmpFile.read(sdbuffer, BUFFPIXEL_X3);
uint8_t buffidx = 0;
int offset_x = j*BUFFPIXEL;
int offset_x = j * BUFFPIXEL;
unsigned int __color[BUFFPIXEL];
for(int k=0; k<BUFFPIXEL; k++)
{
__color[k] = sdbuffer[buffidx+2]>>3; // read
__color[k] = __color[k]<<6 | (sdbuffer[buffidx+1]>>2); // green
__color[k] = __color[k]<<5 | (sdbuffer[buffidx+0]>>3); // blue
for (int k = 0; k < BUFFPIXEL; k++) {
__color[k] = sdbuffer[buffidx + 2] >> 3; // read
__color[k] = __color[k] << 6 | (sdbuffer[buffidx + 1] >> 2); // green
__color[k] = __color[k] << 5 | (sdbuffer[buffidx + 0] >> 3); // blue
buffidx += 3;
}
Tft.setCol(offset_x, offset_x+BUFFPIXEL);
Tft.setCol(offset_x, offset_x + BUFFPIXEL);
Tft.setPage(i, i);
Tft.sendCMD(0x2c);
TFT_DC_HIGH;
TFT_CS_LOW;
for(int m=0; m < BUFFPIXEL; m++)
{
SPI.transfer(__color[m]>>8);
for (int m = 0; m < BUFFPIXEL; m++) {
SPI.transfer(__color[m] >> 8);
SPI.transfer(__color[m]);
}
@ -150,8 +138,7 @@ void bmpdraw(File f, int x, int y)
Serial.println(" ms");
}
boolean bmpReadHeader(File f)
{
boolean bmpReadHeader(File f) {
// read header
uint32_t tmp;
uint8_t bmpDepth;
@ -182,13 +169,13 @@ boolean bmpReadHeader(File f)
int bmp_width = read32(f);
int bmp_height = read32(f);
if(bmp_width != __Gnbmp_width || bmp_height != __Gnbmp_height) // if image is not 320x240, return false
{
if (bmp_width != __Gnbmp_width || bmp_height != __Gnbmp_height) { // if image is not 320x240, return false
return false;
}
if (read16(f) != 1)
if (read16(f) != 1) {
return false;
}
bmpDepth = read16(f);
Serial.print("bitdepth ");
@ -210,8 +197,7 @@ boolean bmpReadHeader(File f)
// (the data is stored in little endian format!)
// LITTLE ENDIAN!
uint16_t read16(File f)
{
uint16_t read16(File f) {
uint16_t d;
uint8_t b;
b = f.read();
@ -222,8 +208,7 @@ uint16_t read16(File f)
}
// LITTLE ENDIAN!
uint32_t read32(File f)
{
uint32_t read32(File f) {
uint32_t d;
uint16_t b;

View File

@ -34,28 +34,31 @@ char __Gsbmp_files[MAX_BMP][FILENAME_LEN]; // file name
File bmpFile;
// if bmp file return 1, else return 0
bool checkBMP(char *_name, char r_name[])
{
bool checkBMP(char *_name, char r_name[]) {
int len = 0;
if(NULL == _name)return false;
if (NULL == _name) {
return false;
}
while(*_name)
{
while (*_name) {
r_name[len++] = *(_name++);
if(len>FILENAME_LEN)return false;
if (len > FILENAME_LEN) {
return false;
}
}
r_name[len] = '\0';
if(len < 5)return false;
if (len < 5) {
return false;
}
// if xxx.bmp or xxx.BMP
if( r_name[len-4] == '.' \
&& (r_name[len-3] == 'b' || (r_name[len-3] == 'B')) \
&& (r_name[len-2] == 'm' || (r_name[len-2] == 'M')) \
&& (r_name[len-1] == 'p' || (r_name[len-1] == 'P')) )
{
if (r_name[len - 4] == '.' \
&& (r_name[len - 3] == 'b' || (r_name[len - 3] == 'B')) \
&& (r_name[len - 2] == 'm' || (r_name[len - 2] == 'M')) \
&& (r_name[len - 1] == 'p' || (r_name[len - 1] == 'P'))) {
return true;
}
@ -64,26 +67,21 @@ bool checkBMP(char *_name, char r_name[])
}
// search root to find bmp file
void searchDirectory()
{
void searchDirectory() {
File root = SD.open("/"); // root
while(true)
{
while (true) {
File entry = root.openNextFile();
if (! entry)
{
if (! entry) {
break;
}
if(!entry.isDirectory())
{
if (!entry.isDirectory()) {
char *ptmp = entry.name();
char __Name[20];
if(checkBMP(ptmp, __Name))
{
if (checkBMP(ptmp, __Name)) {
Serial.println(__Name);
strcpy(__Gsbmp_files[__Gnfile_num++], __Name);
@ -96,30 +94,27 @@ void searchDirectory()
Serial.print(__Gnfile_num);
Serial.println(" file: ");
for(int i=0; i<__Gnfile_num; i++)
{
for (int i = 0; i < __Gnfile_num; i++) {
Serial.println(__Gsbmp_files[i]);
}
}
void setup()
{
void setup() {
Serial.begin(115200);
pinMode(PIN_SD_CS,OUTPUT);
digitalWrite(PIN_SD_CS,HIGH);
pinMode(PIN_SD_CS, OUTPUT);
digitalWrite(PIN_SD_CS, HIGH);
Tft.TFTinit();
Sd2Card card;
card.init(SPI_FULL_SPEED, PIN_SD_CS);
if(!SD.begin(PIN_SD_CS))
{
if (!SD.begin(PIN_SD_CS)) {
Serial.println("failed!");
while(1); // init fail, die here
while (1); // init fail, die here
}
Serial.println("SD OK!");
@ -129,9 +124,8 @@ void setup()
TFT_BL_ON;
}
void loop()
{
/*
void loop() {
/*
static int dirCtrl = 0;
for(unsigned char i=0; i<__Gnfile_num; i++)
{
@ -154,19 +148,17 @@ void loop()
delay(1000);
}
*/
*/
bmpFile = SD.open("pfvm_1.bmp");
if (! bmpFile)
{
if (! bmpFile) {
Serial.println("didnt find image");
while (1);
}
if(! bmpReadHeader(bmpFile))
{
if (! bmpReadHeader(bmpFile)) {
Serial.println("bad bmp");
return;
}
@ -174,7 +166,7 @@ void loop()
bmpdraw(bmpFile, 0, 0, 1);
bmpFile.close();
while(1);
while (1);
}
/*********************************************/
@ -193,11 +185,9 @@ void loop()
// dir - 1: up to down
// dir - 2: down to up
void bmpdraw(File f, int x, int y, int dir)
{
void bmpdraw(File f, int x, int y, int dir) {
if(bmpFile.seek(__Gnbmp_image_offset))
{
if (bmpFile.seek(__Gnbmp_image_offset)) {
Serial.print("pos = ");
Serial.println(bmpFile.position());
}
@ -206,40 +196,33 @@ void bmpdraw(File f, int x, int y, int dir)
uint8_t sdbuffer[BUFFPIXEL_X3]; // 3 * pixels to buffer
for (int i=0; i< __Gnbmp_height; i++)
{
if(dir)
{
bmpFile.seek(__Gnbmp_image_offset+(__Gnbmp_height-1-i)*240*3);
for (int i = 0; i < __Gnbmp_height; i++) {
if (dir) {
bmpFile.seek(__Gnbmp_image_offset + (__Gnbmp_height - 1 - i) * 240 * 3);
}
for(int j=0; j<(240/BUFFPIXEL); j++)
{
for (int j = 0; j < (240 / BUFFPIXEL); j++) {
bmpFile.read(sdbuffer, BUFFPIXEL_X3);
uint8_t buffidx = 0;
int offset_x = j*BUFFPIXEL;
int offset_x = j * BUFFPIXEL;
unsigned int __color[BUFFPIXEL];
for(int k=0; k<BUFFPIXEL; k++)
{
__color[k] = sdbuffer[buffidx+2]>>3; // read
__color[k] = __color[k]<<6 | (sdbuffer[buffidx+1]>>2); // green
__color[k] = __color[k]<<5 | (sdbuffer[buffidx+0]>>3); // blue
for (int k = 0; k < BUFFPIXEL; k++) {
__color[k] = sdbuffer[buffidx + 2] >> 3; // read
__color[k] = __color[k] << 6 | (sdbuffer[buffidx + 1] >> 2); // green
__color[k] = __color[k] << 5 | (sdbuffer[buffidx + 0] >> 3); // blue
buffidx += 3;
}
Tft.setCol(offset_x, offset_x+BUFFPIXEL);
Tft.setCol(offset_x, offset_x + BUFFPIXEL);
if(dir)
{
if (dir) {
Tft.setPage(i, i);
}
else
{
Tft.setPage(__Gnbmp_height-i-1, __Gnbmp_height-i-1);
} else {
Tft.setPage(__Gnbmp_height - i - 1, __Gnbmp_height - i - 1);
}
Tft.sendCMD(0x2c);
@ -247,9 +230,8 @@ void bmpdraw(File f, int x, int y, int dir)
TFT_DC_HIGH;
TFT_CS_LOW;
for(int m=0; m < BUFFPIXEL; m++)
{
SPI.transfer(__color[m]>>8);
for (int m = 0; m < BUFFPIXEL; m++) {
SPI.transfer(__color[m] >> 8);
SPI.transfer(__color[m]);
delay(10);
@ -264,8 +246,7 @@ void bmpdraw(File f, int x, int y, int dir)
Serial.println(" ms");
}
boolean bmpReadHeader(File f)
{
boolean bmpReadHeader(File f) {
// read header
uint32_t tmp;
uint8_t bmpDepth;
@ -295,13 +276,13 @@ boolean bmpReadHeader(File f)
int bmp_width = read32(f);
int bmp_height = read32(f);
if(bmp_width != __Gnbmp_width || bmp_height != __Gnbmp_height) // if image is not 320x240, return false
{
if (bmp_width != __Gnbmp_width || bmp_height != __Gnbmp_height) { // if image is not 320x240, return false
return false;
}
if (read16(f) != 1)
if (read16(f) != 1) {
return false;
}
bmpDepth = read16(f);
Serial.print("bitdepth ");
@ -323,8 +304,7 @@ boolean bmpReadHeader(File f)
// (the data is stored in little endian format!)
// LITTLE ENDIAN!
uint16_t read16(File f)
{
uint16_t read16(File f) {
uint16_t d;
uint8_t b;
b = f.read();
@ -335,8 +315,7 @@ uint16_t read16(File f)
}
// LITTLE ENDIAN!
uint32_t read32(File f)
{
uint32_t read32(File f) {
uint32_t d;
uint16_t b;

View File

@ -18,20 +18,17 @@ Ticker flipper;
int count = 0;
void flip()
{
void flip() {
int state = digitalRead(LED_BUILTIN); // get the current state of GPIO1 pin
digitalWrite(LED_BUILTIN, !state); // set pin to the opposite state
++count;
// when the counter reaches a certain value, start blinking like crazy
if (count == 20)
{
if (count == 20) {
flipper.attach(0.1, flip);
}
// when the counter reaches yet another value, stop blinking
else if (count == 120)
{
else if (count == 120) {
flipper.detach();
}
}

View File

@ -19,15 +19,15 @@ void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop()
{
void loop() {
unsigned long currentMillis = millis();
if(currentMillis - previousMillis >= interval) {
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if (ledState == LOW)
if (ledState == LOW) {
ledState = HIGH; // Note that this switches the LED *off*
else
} else {
ledState = LOW; // Note that this switches the LED *on*
}
digitalWrite(LED_BUILTIN, ledState);
}
}

View File

@ -1,14 +1,14 @@
/*
* NativeSdk by Simon Peter
* Access functionality from the Espressif ESP8266 SDK
* This example code is in the public domain
*
* This is for advanced users.
* Note that this makes your code dependent on the ESP8266, which is generally
* a bad idea. So you should try to use esp8266/Arduino functionality
* where possible instead, in order to abstract away the hardware dependency.
*/
NativeSdk by Simon Peter
Access functionality from the Espressif ESP8266 SDK
This example code is in the public domain
This is for advanced users.
Note that this makes your code dependent on the ESP8266, which is generally
a bad idea. So you should try to use esp8266/Arduino functionality
where possible instead, in order to abstract away the hardware dependency.
*/
// Expose Espressif SDK functionality - wrapped in ifdef so that it still
// compiles on other platforms
@ -25,9 +25,9 @@ void setup() {
void loop() {
// Call Espressif SDK functionality - wrapped in ifdef so that it still
// compiles on other platforms
#ifdef ESP8266
#ifdef ESP8266
Serial.print("wifi_station_get_hostname: ");
Serial.println(wifi_station_get_hostname());
#endif
#endif
delay(1000);
}

View File

@ -3,7 +3,7 @@
This sketch tests if the EEPROM settings of the IDE match to the Hardware
*/
*/
void setup(void) {
Serial.begin(115200);
@ -22,7 +22,7 @@ void loop() {
Serial.printf("Flash ide speed: %u\n", ESP.getFlashChipSpeed());
Serial.printf("Flash ide mode: %s\n", (ideMode == FM_QIO ? "QIO" : ideMode == FM_QOUT ? "QOUT" : ideMode == FM_DIO ? "DIO" : ideMode == FM_DOUT ? "DOUT" : "UNKNOWN"));
if(ideSize != realSize) {
if (ideSize != realSize) {
Serial.println("Flash Chip configuration wrong!\n");
} else {
Serial.println("Flash Chip configuration ok.\n");

View File

@ -36,8 +36,7 @@
timeval cbtime; // time set in callback
bool cbtime_set = false;
void time_is_set (void)
{
void time_is_set(void) {
gettimeofday(&cbtime, NULL);
cbtime_set = true;
Serial.println("------------------ settimeofday() was called ------------------");
@ -47,7 +46,7 @@ void setup() {
Serial.begin(115200);
settimeofday_cb(time_is_set);
#if NTP0_OR_LOCAL1
#if NTP0_OR_LOCAL1
// local
ESP.eraseConfig();
@ -56,14 +55,14 @@ void setup() {
timezone tz = { TZ_MN + DST_MN, 0 };
settimeofday(&tv, &tz);
#else // ntp
#else // ntp
configTime(TZ_SEC, DST_SEC, "pool.ntp.org");
WiFi.mode(WIFI_STA);
WiFi.begin(SSID, SSIDPWD);
// don't wait, observe time changing when ntp timestamp is received
#endif // ntp
#endif // ntp
}
// for testing purpose:
@ -73,7 +72,7 @@ extern "C" int clock_gettime(clockid_t unused, struct timespec *tp);
Serial.print(":" #w "="); \
Serial.print(tm->tm_##w);
void printTm (const char* what, const tm* tm) {
void printTm(const char* what, const tm* tm) {
Serial.print(what);
PTM(isdst); PTM(yday); PTM(wday);
PTM(year); PTM(mon); PTM(mday);

View File

@ -38,15 +38,14 @@ void setup() {
Serial.println("Read: ");
printMemory();
Serial.println();
uint32_t crcOfData = calculateCRC32( (uint8_t*) &rtcData.data[0], sizeof(rtcData.data) );
uint32_t crcOfData = calculateCRC32((uint8_t*) &rtcData.data[0], sizeof(rtcData.data));
Serial.print("CRC32 of data: ");
Serial.println(crcOfData, HEX);
Serial.print("CRC32 read from RTC: ");
Serial.println(rtcData.crc32, HEX);
if (crcOfData != rtcData.crc32) {
Serial.println("CRC32 in RTC memory doesn't match CRC32 of data. Data is probably invalid!");
}
else {
} else {
Serial.println("CRC32 check ok, data is probably valid.");
}
}
@ -56,7 +55,7 @@ void setup() {
rtcData.data[i] = random(0, 128);
}
// Update CRC32 of data
rtcData.crc32 = calculateCRC32( (uint8_t*) &rtcData.data[0], sizeof(rtcData.data) );
rtcData.crc32 = calculateCRC32((uint8_t*) &rtcData.data[0], sizeof(rtcData.data));
// Write struct to RTC memory
if (ESP.rtcUserMemoryWrite(0, (uint32_t*) &rtcData, sizeof(rtcData))) {
Serial.println("Write: ");
@ -71,8 +70,7 @@ void setup() {
void loop() {
}
uint32_t calculateCRC32(const uint8_t *data, size_t length)
{
uint32_t calculateCRC32(const uint8_t *data, size_t length) {
uint32_t crc = 0xffffffff;
while (length--) {
uint8_t c = *data++;
@ -99,8 +97,7 @@ void printMemory() {
Serial.print(buf);
if ((i + 1) % 32 == 0) {
Serial.println();
}
else {
} else {
Serial.print(" ");
}
}

View File

@ -1,13 +1,13 @@
/**
* TestEspApi by Max Vilimpoc
* This code is released to the public domain.
*
* Test out the Expressif ESP8266 Non-OS API, exhaustively trying out
* as many of the built-in functions as possible.
*
* Some of the code is based on examples in:
* "20A-ESP8266__RTOS_SDK__Programming Guide__EN_v1.3.0.pdf"
*/
TestEspApi by Max Vilimpoc
This code is released to the public domain.
Test out the Expressif ESP8266 Non-OS API, exhaustively trying out
as many of the built-in functions as possible.
Some of the code is based on examples in:
"20A-ESP8266__RTOS_SDK__Programming Guide__EN_v1.3.0.pdf"
*/
#ifdef ESP8266
extern "C" {
@ -28,8 +28,7 @@ Stream& ehConsolePort(Serial);
// UNLESS: You swap the TX pin using the alternate pinout.
const uint8_t LED_PIN = 1;
const char * const RST_REASONS[] =
{
const char * const RST_REASONS[] = {
"REASON_DEFAULT_RST",
"REASON_WDT_RST",
"REASON_EXCEPTION_RST",
@ -39,8 +38,7 @@ const char * const RST_REASONS[] =
"REASON_EXT_SYS_RST"
};
const char * const FLASH_SIZE_MAP_NAMES[] =
{
const char * const FLASH_SIZE_MAP_NAMES[] = {
"FLASH_SIZE_4M_MAP_256_256",
"FLASH_SIZE_2M",
"FLASH_SIZE_8M_MAP_512_512",
@ -50,16 +48,14 @@ const char * const FLASH_SIZE_MAP_NAMES[] =
"FLASH_SIZE_32M_MAP_1024_1024"
};
const char * const OP_MODE_NAMES[]
{
const char * const OP_MODE_NAMES[] {
"NULL_MODE",
"STATION_MODE",
"SOFTAP_MODE",
"STATIONAP_MODE"
};
const char * const AUTH_MODE_NAMES[]
{
const char * const AUTH_MODE_NAMES[] {
"AUTH_OPEN",
"AUTH_WEP",
"AUTH_WPA_PSK",
@ -68,16 +64,14 @@ const char * const AUTH_MODE_NAMES[]
"AUTH_MAX"
};
const char * const PHY_MODE_NAMES[]
{
const char * const PHY_MODE_NAMES[] {
"",
"PHY_MODE_11B",
"PHY_MODE_11G",
"PHY_MODE_11N"
};
const char * const EVENT_NAMES[]
{
const char * const EVENT_NAMES[] {
"EVENT_STAMODE_CONNECTED",
"EVENT_STAMODE_DISCONNECTED",
"EVENT_STAMODE_AUTHMODE_CHANGE",
@ -87,8 +81,7 @@ const char * const EVENT_NAMES[]
"EVENT_MAX"
};
const char * const EVENT_REASONS[]
{
const char * const EVENT_REASONS[] {
"",
"REASON_UNSPECIFIED",
"REASON_AUTH_EXPIRE",
@ -115,19 +108,16 @@ const char * const EVENT_REASONS[]
"REASON_CIPHER_SUITE_REJECTED",
};
const char * const EVENT_REASONS_200[]
{
const char * const EVENT_REASONS_200[] {
"REASON_BEACON_TIMEOUT",
"REASON_NO_AP_FOUND"
};
void wifi_event_handler_cb(System_Event_t * event)
{
void wifi_event_handler_cb(System_Event_t * event) {
ehConsolePort.print(EVENT_NAMES[event->event]);
ehConsolePort.print(" (");
switch (event->event)
{
switch (event->event) {
case EVENT_STAMODE_CONNECTED:
break;
case EVENT_STAMODE_DISCONNECTED:
@ -137,10 +127,9 @@ void wifi_event_handler_cb(System_Event_t * event)
case EVENT_STAMODE_GOT_IP:
break;
case EVENT_SOFTAPMODE_STACONNECTED:
case EVENT_SOFTAPMODE_STADISCONNECTED:
{
case EVENT_SOFTAPMODE_STADISCONNECTED: {
char mac[32] = {0};
snprintf(mac, 32, MACSTR ", aid: %d" , MAC2STR(event->event_info.sta_connected.mac), event->event_info.sta_connected.aid);
snprintf(mac, 32, MACSTR ", aid: %d", MAC2STR(event->event_info.sta_connected.mac), event->event_info.sta_connected.aid);
ehConsolePort.print(mac);
}
@ -150,8 +139,7 @@ void wifi_event_handler_cb(System_Event_t * event)
ehConsolePort.println(")");
}
void print_softap_config(Stream & consolePort, softap_config const& config)
{
void print_softap_config(Stream & consolePort, softap_config const& config) {
consolePort.println();
consolePort.println(F("SoftAP Configuration"));
consolePort.println(F("--------------------"));
@ -185,8 +173,7 @@ void print_softap_config(Stream & consolePort, softap_config const& config)
consolePort.println();
}
void print_system_info(Stream & consolePort)
{
void print_system_info(Stream & consolePort) {
const rst_info * resetInfo = system_get_rst_info();
consolePort.print(F("system_get_rst_info() reset reason: "));
consolePort.println(RST_REASONS[resetInfo->reason]);
@ -224,8 +211,7 @@ void print_system_info(Stream & consolePort)
consolePort.println(FLASH_SIZE_MAP_NAMES[system_get_flash_size_map()]);
}
void print_wifi_general(Stream & consolePort)
{
void print_wifi_general(Stream & consolePort) {
consolePort.print(F("wifi_get_channel(): "));
consolePort.println(wifi_get_channel());
@ -233,8 +219,7 @@ void print_wifi_general(Stream & consolePort)
consolePort.println(PHY_MODE_NAMES[wifi_get_phy_mode()]);
}
void secure_softap_config(softap_config * config, const char * ssid, const char * password)
{
void secure_softap_config(softap_config * config, const char * ssid, const char * password) {
size_t ssidLen = strlen(ssid) < sizeof(config->ssid) ? strlen(ssid) : sizeof(config->ssid);
size_t passwordLen = strlen(password) < sizeof(config->password) ? strlen(password) : sizeof(config->password);
@ -247,13 +232,12 @@ void secure_softap_config(softap_config * config, const char * ssid, const char
config->ssid_len = ssidLen;
config->channel = 1;
config->authmode = AUTH_WPA2_PSK;
// config->ssid_hidden = 1;
// config->ssid_hidden = 1;
config->max_connection = 4;
// config->beacon_interval = 1000;
// config->beacon_interval = 1000;
}
void setup()
{
void setup() {
// Reuse default Serial port rate, so the bootloader
// messages are also readable.
@ -304,8 +288,7 @@ void setup()
// ESP.deepSleep(15000);
}
void loop()
{
void loop() {
Serial.print(F("system_get_time(): "));
Serial.println(system_get_time());
delay(1000);