Skip to content

Instantly share code, notes, and snippets.

@karx
Created March 18, 2020 20:06
Show Gist options
  • Save karx/9159e439ae7bf1b91630ddeca1e69fa3 to your computer and use it in GitHub Desktop.
Save karx/9159e439ae7bf1b91630ddeca1e69fa3 to your computer and use it in GitHub Desktop.
Ambient Apparels Blog Codeshare
#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