/*
Pushover Test
Arduino IDE 1.6.4
*/
#include "WiFiEsp.h"
char ssid[] = "xxxxxxxxxxxxxxxx"; // your network SSID (name)
char passw[] = "yyyyyyyyyyyyyyyy"; // your network password
int wifi_status = WL_IDLE_STATUS; // the Wifi status
//---------PHP Server Request Strings---------------------------------------
#define prog_char char
const PROGMEM prog_char post_header[] = "POST /pushover/pushme.php HTTP/1.1\r\n"; //PHP-Skripte Ordner
const PROGMEM prog_char post_host [] = "HOST: www.zzzzzzzzzzzzzzz.de\r\n"; //your Webserver-Name/Ordner
const PROGMEM prog_char post_user [] = "User-Agent: ArduinoWiFi/1.1\r\n";
const PROGMEM prog_char post_conn [] = "Connection: close\r\n";
const PROGMEM prog_char post_contt [] = "Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\n";
const PROGMEM prog_char post_contl [] = "Content-Length: ";
const char* const PHP_Content[] PROGMEM = {post_header, post_host, post_user, post_conn, post_contt, post_contl};
#define POST_REQ_HEADER 0
#define POST_REQ_HOST 1
#define POST_REQ_USER 2
#define POST_REQ_CONN 3
#define POST_REQ_CONTT 4
#define POST_REQ_CONTL 5
//---------String Buffer------------------------------------------------------
#define STRINGBUFF_SIZE 120
char stringbuffer[STRINGBUFF_SIZE];
//---------WEB Server---------------------------------------------------------
#define WEBSERVER_PORT 80
WiFiEspServer WEBserver(WEBSERVER_PORT);
String WEBhttpString = "";
boolean WebReqEnde = false;
boolean GETokay = false;
//---------PHP Server Skript-------------------------------------------------
#define PHP_DATEN_VAR "pushinfo="
WiFiEspClient PHPclient;
char PHPServerName[] = "www.zzzzzzzzzzzzz.de";
char PHP_REQChar;
int PHP_REQ_String_Laenge = 0;
boolean PushReq_okay = false;
String DatenString_Push = "Das ist meine Push-Nachricht"; // <-------------------- hier die eigene Push Nachricht
//-----------------------------------------------------------------------------
void CheckFreeRam()
{
int RAM = freeRam();
if(RAM < 1000){String ram = String(RAM); Serial.println(F("RAM < 1000"));}
}
int freeRam()
{
extern int __heap_start, *__brkval;
int v;
return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}
//------------------------------------------------------------------------------
int inByte = 0; // Zum Testen über Konsole
//------------------------------------------------------------------------------
//-----------------Arduino WIFi Modul----------------------------------------------------
void Start_WiFI_Verbindung()
{
while (wifi_status != WL_CONNECTED)
{
Serial.print(F("... verbinden mit ")); Serial.println(ssid);
wifi_status = WiFi.begin(ssid, passw);
}
}
void ShowWifiData()
{
IPAddress ip = WiFi.localIP();
Serial.print(F("\n\rIP Address: "));
Serial.println(ip);
byte mac[6];
WiFi.macAddress(mac);
Serial.print(F("MAC Address: "));
Serial.print(mac[5],HEX);
Serial.print(":");
Serial.print(mac[4],HEX);
Serial.print(":");
Serial.print(mac[3],HEX);
Serial.print(":");
Serial.print(mac[2],HEX);
Serial.print(":");
Serial.print(mac[1],HEX);
Serial.print(":");
Serial.println(mac[0],HEX);
}
void ShowCurrentNet()
{
Serial.print(F("SSID: "));
Serial.println(WiFi.SSID());
byte bssid[6];
WiFi.BSSID(bssid);
Serial.print("BSSID: ");
Serial.print(bssid[5],HEX);
Serial.print(":");
Serial.print(bssid[4],HEX);
Serial.print(":");
Serial.print(bssid[3],HEX);
Serial.print(":");
Serial.print(bssid[2],HEX);
Serial.print(":");
Serial.print(bssid[1],HEX);
Serial.print(":");
Serial.println(bssid[0],HEX);
long rssi = WiFi.RSSI();
Serial.print(F("WLan Signal Staerke(RSSI):"));
Serial.println(rssi);
}
//#######################################################################################
//-------Request zum PHP Server für EMail------------------------------------------------
void PhpContentPrint(int posi)
{
strcpy_P(stringbuffer,(char*)pgm_read_word(&(PHP_Content[posi])));
PHPclient.print(stringbuffer);
}
void RequestToPHPserver()
{
PHPclient.stop();
DatenString_Push = PHP_DATEN_VAR + DatenString_Push;
int DSL = DatenString_Push.length();
PushReq_okay = true;
Serial.print("\n\rPushText: "); Serial.print(DatenString_Push);
Serial.print(" StringL: "); Serial.println(DSL);
memset(stringbuffer,0,STRINGBUFF_SIZE);
if (PHPclient.connect(PHPServerName, 80))
{
Serial.print(F("\n\rsende Req PHP..."));
PhpContentPrint(POST_REQ_HEADER);
PhpContentPrint(POST_REQ_HOST);
PhpContentPrint(POST_REQ_USER);
PhpContentPrint(POST_REQ_CONN);
PhpContentPrint(POST_REQ_CONTT);
PhpContentPrint(POST_REQ_CONTL);
PHPclient.println(DSL);
PHPclient.println();
PHPclient.println(DatenString_Push);
PHPclient.println();
Serial.println(F("ende"));
}else{
Serial.println("Keine Verbindung zum Server");
PHPclient.stop();
}
}
//-----------------Eingabe---------------------------------------------
void Eingabe_Auswahl()
{
if(Serial.available() > 0)
{
inByte = Serial.read();
if(inByte == 35) //-#-
{
RequestToPHPserver();
}
if(inByte == 116) //-t-
{
}
if(inByte == 119) //-w-
{
}
if(inByte == 100) //-d-
{
}
if(inByte == 43) //- + -
{
ShowWifiData();
ShowCurrentNet();
}
}
}
//##########################################################################
void setup()
{
Serial.begin(19200);
Serial.println(F("-----------------Pushover Test--------------------"));
Serial.println(F("MEGA-Board + WiFi8266-Modul"));
Serial.println(F("--------------------------------------------------"));
Serial.println(F("Eingabe # fuer Post-Request Pushover"));
Serial.println(F("Eingabe + fuer WiFi Infos"));
Serial.println(F("--------------------------------------------------"));
Serial3.begin(115200); // initialize serial for ESP module
WiFi.init(&Serial3); // initialize ESP module
Start_WiFI_Verbindung();
Serial.print(F("Firmware Version= ")); Serial.println(WiFi.firmwareVersion());
Serial.print(F("Netzwerk= ")); Serial.println(WiFi.SSID());
Serial.print(F("IP Address= ")); Serial.println(WiFi.localIP());
Serial.print(F("RAM = ")); Serial.println(freeRam());
}
//------------------------------------------------------------------------------------
void loop()
{
Eingabe_Auswahl();
WiFiEspClient WEBclient = WEBserver.available();
if (WEBclient)
{
//Serial.println("Web-Req...");
WEBhttpString = "";
boolean LeerZeile = false;
WebReqEnde = true; //ein HTTP Request endet mit einer leeren Zeile
while (WEBclient.connected())
{
if (WEBclient.available())
{
char c = WEBclient.read();
WEBhttpString += c;
//if (WEBhttpString.length() < 100) WEBhttpString += c;
Serial.write(c);
//if(c == '\n' && LeerZeile) {WebReqEnde = true; break;}
//if(c == '\r'){LeerZeile = true;}else{LeerZeile = false;}
}
}//while Web connected
}
//------------------------------------------------------------------------------------
}