Created
March 18, 2020 20:06
-
-
Save karx/9159e439ae7bf1b91630ddeca1e69fa3 to your computer and use it in GitHub Desktop.
Ambient Apparels Blog Codeshare
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <esp8266wifi.h> | |
#include <esp8266webserver.h> | |
#include <esp8266httpclient.h> | |
#include <spi.h> | |
#include <eeprom.h> | |
#include <wifiudp.h> | |
#include <dnsserver.h> | |
#include <esp8266mdns.h> | |
#include <eeprom.h></eeprom.h></esp8266mdns.h></dnsserver.h></wifiudp.h></eeprom.h></spi.h></esp8266httpclient.h></esp8266webserver.h></esp8266wifi.h> //Initialization | |
#define USE_SERIAL Serial | |
#include <adafruit_gfx.h> | |
#include <adafruit_neomatrix.h> | |
#include <adafruit_neopixel.h> | |
#ifndef PSTR | |
#define PSTR </adafruit_neopixel.h></adafruit_neomatrix.h></adafruit_gfx.h> #define PIN 5 //Your matrix pin which is connected to board Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(8, 8, PIN, // This is the initialization of matrix that what is the | |
NEO_MATRIX_BOTTOM + NEO_MATRIX_LEFT + // height and width of the panel and from which end the | |
NEO_MATRIX_ROWS + NEO_MATRIX_PROGRESSIVE, // data is coming. | |
NEO_GRB + NEO_KHZ800); const uint16_t colors[] = { | |
matrix.Color(255, 0, 0), matrix.Color(0, 255, 0), matrix.Color(0, 0, 255) | |
}; String wi_deviceId = ""; byte data[24]; | |
int code_version = 1; WiFiClient wifiClient; ESP8266WebServer server(80); int status = WL_IDLE_STATUS; String ssid = ""; | |
String txt = ""; boolean ap_flag = 0; | |
boolean init_flag = 1; | |
boolean retAp = 0; | |
boolean extra = 0; int inpin = 12; char MACAddress[12]; // DNS server | |
const byte DNS_PORT = 53; | |
DNSServer serverDNS; | |
/* Soft Access Point network parameters */ | |
IPAddress apIP(192, 168, 4, 1); | |
IPAddress gateway(192, 168, 1, 0); | |
IPAddress netMsk(255, 255, 255, 0); // hostname for mDNS. Try http://logger_one_wire.local | |
const char *myHostname = "wificonfig"; // cycle time in loop() | |
unsigned long cycleTime = 120000; // ms | |
const unsigned long sec24h = 24 * 3600; // one day in seconds | |
unsigned long convTime = millis(); // conversion time about 1000 ms | |
boolean startSync = false; unsigned long timeStart; | |
unsigned long timeRel; //Function declaration | |
void initialize_sensors(); | |
void init_wifi(); | |
void initApMode(); | |
void send_Data(); // from handleHttp.ino | |
/** Handle root or redirect to captive portal */ | |
void handleRoot(); /** Handle the Text save form and redirect to WLAN config page again */ | |
void handleTextSave(); /** 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(); // from tools.ino | |
/** Is this an IP? */ | |
boolean isIp(String str); /** IP to String? */ | |
String toStringIp(IPAddress ip); //Setup begin | |
void setup() { ESP.eraseConfig(); matrix.begin(); | |
matrix.setTextWrap(false); | |
matrix.setBrightness(50); | |
matrix.setTextColor(colors[0]); //USE_SERIAL.begin(115200); | |
Serial.begin(9600); | |
delay(10); EEPROM.begin(512); uint8_t MAC_array[6]; WiFi.macAddress(MAC_array); //Accuring MAC id for ESP module | |
for (int i = 0; i < sizeof(MAC_array); ++i) { | |
sprintf(MACAddress, "%s%02x", MACAddress, MAC_array[i]); | |
} String address = String(MACAddress); | |
wi_deviceId = "WifiConfig_" + address.substring(7, 12); //Unique device ID // Setup MDNS responder | |
if (!MDNS.begin("wificonfig")) { | |
Serial.println("Error setting up MDNS responder!"); | |
} else { | |
Serial.println("mDNS responder started"); | |
// Add service to MDNS-SD | |
MDNS.addService("http", "tcp", 80); | |
} // Setup the DNS server redirecting all the domains to the apIP | |
serverDNS.setErrorReplyCode(DNSReplyCode::NoError); | |
serverDNS.start(DNS_PORT, "*", apIP); } int x = matrix.width(); | |
int pass = 0; void loop() { if (init_flag) | |
{ | |
initialize_sensors(); //Initializing sensors timeStart = millis(); | |
timeRel = millis() + cycleTime; // avoid unsigned long rollover after 40 days init_flag = 0; | |
} boolean val = digitalRead(inpin); //Manually getting into AP mode if (val == 0) { | |
extra = 1; | |
init_flag = 1; | |
for (int i = 0; i < 13; ++i) { //192 | |
EEPROM.write(i, 0); | |
} | |
EEPROM.commit(); | |
} // DNS | |
serverDNS.processNextRequest(); | |
// HTTP | |
server.handleClient(); | |
txtEEP(); | |
} void init_wifi(void) | |
{ | |
Serial.println("Init Wifi"); | |
// We start by connecting to a WiFi network | |
WiFi.setAutoConnect(1); if (WiFi.status() != WL_CONNECTED) | |
{ | |
WiFi.disconnect(); if (WiFi.getMode() != WIFI_STA) { | |
WiFi.mode(WIFI_STA); | |
} unsigned long startTime = millis(); | |
while (WiFi.status() != WL_CONNECTED && millis() - startTime < 10000) { | |
delay(500); | |
Serial.print("."); | |
} | |
Serial.println(""); | |
} if (WiFi.status() == WL_CONNECTED) | |
{ | |
Serial.println("Wifi Connected"); | |
for (int j = 0 ; j <= 8 ; j++) | |
{ | |
// LED colour blinks 8 times --> BLUE ..Indicating successfull connection with wifi | |
delay(300); | |
//Led Color if needed | |
delay(300); | |
} } | |
else | |
{ | |
ap_flag = 1; | |
init_flag = 1; | |
retAp = 0; | |
//Led Color if needed | |
} } /********************************/ | |
/* Function EEPROM */ | |
/********************************/ | |
void txtEEP() | |
{ | |
String stip; | |
for (int i = 0; i < 13; ++i) | |
{ | |
stip += char(EEPROM.read(i)); | |
} | |
Serial.print("EEPROM: "); | |
Serial.println(stip); | |
int len = stip.length(); | |
int pixelPerChar = 6; | |
int maxDisplacement = len * pixelPerChar + matrix.width(); | |
matrix.fillScreen(0); | |
matrix.setCursor(x, 0); | |
matrix.print(stip); | |
if (--x < -maxDisplacement) { | |
x = matrix.width(); | |
if (++pass >= 3) pass = 0; | |
matrix.setTextColor(colors[pass]); | |
} | |
matrix.show(); | |
delay(50); | |
} /********************************/ | |
/* Initilize Wi-Fi to AP Mode */ | |
/********************************/ | |
void initApMode() | |
{ | |
//Led Color if needed | |
WiFi.disconnect(); | |
server.on("/", handleRoot); | |
server.on("/textsave", handleTextSave); | |
Serial.println(""); | |
Serial.println("WiFi connect failed, try Access Point mode for configuration"); | |
Serial.print("Configuring as access point, SSID: "); | |
Serial.println(wi_deviceId); | |
/* You can remove the password parameter if you want the AP to be open. */ | |
WiFi.mode(WIFI_AP); // Access Point & Station mode | |
delay(10); | |
WiFi.softAPConfig(apIP, gateway, netMsk); | |
WiFi.softAP(wi_deviceId.c_str()); | |
WiFi.begin(); // for test | |
delay(500); // Without delay I've seen the IP address blank | |
Serial.print("AP IP address: "); | |
Serial.println(WiFi.softAPIP()); | |
delay(1000); server.begin(); // Web server start retAp = 0; | |
delay(1000); | |
} /********************************/ | |
/* Initialize Sensors */ | |
/********************************/ | |
void initialize_sensors(void) | |
{ | |
Serial.println("Initializing Sensor : "); | |
delay(5000); | |
// Check wifi status to start AP Mode | |
if (!WiFi.isConnected() && retAp == 0) | |
{ | |
ap_flag = 1; | |
} | |
else | |
{ | |
ap_flag = 0; | |
} if (extra) | |
{ | |
ap_flag = 1; | |
extra = 0; | |
} if (ap_flag == 1) | |
{ | |
initApMode(); | |
} | |
else | |
{ | |
init_wifi(); | |
} } /** Handle root or redirect to captive portal */ | |
void handleRoot() { | |
if (captivePortal()) { // If caprive portal redirect instead of displaying the page. | |
return; | |
} server.sendContent( | |
"" | |
" | |
" | |
" | |
" | |
" | |
" | |
" | |
" | |
" "</p> | |
" | |
" | |
"<div relative;="" width:auto\"="">" | |
" <img src="\"data:image/png;base64,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\"" position:relative;="" margin-left:="" auto;"="" ="" "margin-right:="" auto;display:="" block;\"="" style="width: 26px;">" | |
"<div id="\"header\"" -webkit-box-shadow:="" 0="" 3px="" 6px="" rgba(0,0,0,0.33);opacity:0.9;="" background-color:="" #16a085;="" height:="" 8%;="" padding-top:="" 0.1%="" \"="">" | |
"<h1 ;text-align:center;="" background-color:="" #16a085;="" font-size:="" 200%="" ;="" \"=""><strong> Text Setup</strong></h1>" | |
); | |
server.sendContent( | |
"</div> | |
" | |
"<div id="\"content\"">" | |
); | |
if (server.client().localIP() == apIP) { | |
// server.sendContent(String("<p center;="" font-size:large\"=""> You are connected through soft AP :</p>" | |
// "<div center\"=""><span x-small="">") + wi_deviceId + "</span></div> | |
"); | |
server.sendContent(String(" | |
<p center;="" font-size:="" medium\"=""> You are connected through soft AP: | |
</p><p center;="" font-size:="" large\"="">") + wi_deviceId + " "); | |
} else { | |
server.sendContent(String(" | |
</p><p center;="" font-size:large\"=""> You are connected through soft AP:</p>" | |
"<div center\"="">") + ssid + "</div> | |
"); | |
} | |
server.sendContent( | |
"<div>" | |
"<form method="POST" action="textsave">" | |
"<div id="\"list\"" align="\"center\"">" | |
"<h2>Ambient Apparel</h2>" | |
"<div id="\"right\"" align="\"center\"">" | |
"" | |
"<div class="\"row\""><h2> Send Text to: </h2>" | |
"<input name="txt" id="\"show\"" style="\"display:inline-block;vertical-align:top;" padding:4%="" 3%="" 4%="" 3%;\"="" type="\"text\"" placeholder="\"Text\"" required=""><br>" | |
"</div> | |
" | |
"<br>" | |
"<div>" | |
"<input type="\"submit\"style=\"position:relative;" background-color:="" #16a085;="" color:="" white;"="" ="" "="" padding:="" 0.4em="" 1em;="" text-align:center;="" display:="" inline-block;="" cursor:="" pointer;font-size:="" 25px;\"="" value="\"Send\"">" | |
"</div> | |
" | |
"<p>" "</p></div><p>" | |
"</p></div></form><p>" " " | |
" " | |
); server.client().stop(); // Stop is needed because we sent no content length | |
} /** Handle the WLAN save form and redirect to WLAN config page again */ | |
void handleTextSave() { | |
server.sendContent( | |
"" | |
" | |
" | |
" | |
" | |
" | |
" | |
" | |
" | |
" "</p> | |
" | |
" | |
"<div relative;="" width:auto\"="">" | |
" <img src="\"data:image/png;base64,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\"" position:relative;="" margin-left:="" auto;"="" ="" "margin-right:="" auto;display:="" block;\"="">" | |
"<div id="\"header\"" -webkit-box-shadow:="" 0="" 3px="" 6px="" rgba(0,0,0,0.33);opacity:0.9;="" background-color:="" #16a085;="" height:="" 8%;="" padding-top:="" 0.1%="" \"="">" | |
"<h1 ;text-align:center;="" background-color:="" #16a085;="" font-size:="" 200%="" ;="" \"=""><strong> WiFi Setup</strong></h1>" | |
"<p color:#fff\"=""> Wait for text to get changed... </p>" | |
"</div> | |
" | |
"<br>" | |
"<div margin:0="" auto;="" text-align:="" center;\"="">" | |
"<a href="/" align="\"center\"">" | |
"<button type="\"submit\"" background-color:="" #16a085;="" color:="" white;"="" ="" "padding:="" 0.4em="" 1em;="" text-align:center;="" display:="" inline-block;="" cursor:="" pointer;font-size:="" 25px;\"="" value="">" | |
"Send Text Again" | |
"</button>" | |
"</a>" | |
"</div> | |
" | |
); | |
txt = server.arg("txt"); | |
Serial.print("txt : "); | |
Serial.println(txt); | |
String stip = txt; | |
if (stip.length() > 0 ) { | |
for (int i = 0; i < 13; ++i) { | |
EEPROM.write(i, 0); //clearing | |
} | |
EEPROM.commit();<p> for (int i = 0; i < 13 ; ++i) | |
{ | |
EEPROM.write(i, stip[i]); | |
} | |
EEPROM.commit(); | |
} | |
server.sendHeader("Location", "wifi", true); | |
server.sendHeader("Cache-Control", "no-cache, no-store, must-revalidate"); | |
server.sendHeader("Pragma", "no-cache"); | |
server.sendHeader("Expires", "-1"); | |
delay(5000); | |
server.client().stop(); // Stop is needed because we sent no content length } /** 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")) { | |
Serial.println("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.client().stop(); // Stop is needed because we sent no content length | |
return true; | |
} | |
return false; | |
} /** Is this an IP? */ | |
boolean isIp(String str) { | |
for (int i = 0; i < str.length(); i++) { | |
int c = str.charAt(i); | |
if (c != '.' && (c < '0' || c > '9')) { | |
return false; | |
} | |
} | |
return true; | |
} /** IP to String? */ | |
String toStringIp(IPAddress ip) { | |
String res = ""; | |
for (int i = 0; i < 3; i++) { | |
res += String((ip >> (8 * i)) & 0xFF) + "."; | |
} | |
res += String(((ip >> 8 * 3)) & 0xFF); | |
return res; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment