122 lines
3.3 KiB
C++
122 lines
3.3 KiB
C++
|
|
#include <Arduino.h>
|
||
|
|
#include <WiFi.h>
|
||
|
|
#include <WiFiClientSecure.h>
|
||
|
|
#include <ArduinoJson.h>
|
||
|
|
|
||
|
|
#define ONBOARD_LED 2
|
||
|
|
#define uS_TO_mS_FACTOR 1000
|
||
|
|
#define BUTTON_PIN_BITMASK 0x200000000 // 2^33 in hex
|
||
|
|
|
||
|
|
RTC_RODATA_ATTR int bootCount=0;
|
||
|
|
|
||
|
|
// Wifi network credentials
|
||
|
|
const char* ssid = "JoNelsDarlings";
|
||
|
|
const char* password = "Paris2016";
|
||
|
|
esp_sleep_wakeup_cause_t wakeup_reason;
|
||
|
|
|
||
|
|
void print_wakeup_reason(){
|
||
|
|
wakeup_reason = esp_sleep_get_wakeup_cause();
|
||
|
|
|
||
|
|
switch(wakeup_reason){
|
||
|
|
case ESP_SLEEP_WAKEUP_EXT0 : Serial.println("Wakeup caused by external signal using RTC_IO"); break;
|
||
|
|
case ESP_SLEEP_WAKEUP_EXT1 : Serial.println("Wakeup caused by external signal using RTC_CNTL"); break;
|
||
|
|
case ESP_SLEEP_WAKEUP_TIMER : Serial.println("Wakeup caused by timer"); break;
|
||
|
|
case ESP_SLEEP_WAKEUP_TOUCHPAD : Serial.println("Wakeup caused by touchpad"); break;
|
||
|
|
case ESP_SLEEP_WAKEUP_ULP : Serial.println("Wakeup caused by ULP program"); break;
|
||
|
|
default : Serial.printf("Wakeup was not caused by deep sleep: %d\n",wakeup_reason); break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void connect_wifi(){
|
||
|
|
WiFi.mode(WIFI_STA);
|
||
|
|
WiFi.begin(ssid, password);
|
||
|
|
|
||
|
|
while (WiFi.status() != WL_CONNECTED) {
|
||
|
|
Serial.print(".");
|
||
|
|
digitalWrite(ONBOARD_LED,HIGH);
|
||
|
|
delay(100);
|
||
|
|
digitalWrite(ONBOARD_LED,LOW);
|
||
|
|
delay(400);
|
||
|
|
}
|
||
|
|
|
||
|
|
Serial.println("");
|
||
|
|
Serial.println("WiFi connected");
|
||
|
|
digitalWrite(ONBOARD_LED,HIGH);
|
||
|
|
Serial.print("IP address: ");
|
||
|
|
Serial.println(WiFi.localIP());
|
||
|
|
}
|
||
|
|
|
||
|
|
void send_notification(){
|
||
|
|
Serial.println("Sending Notification.");
|
||
|
|
WiFiClientSecure client;
|
||
|
|
client.setInsecure(); // NOT RECOMMENDED
|
||
|
|
const char* host="deadswitch.kawomi.com";
|
||
|
|
const int port=443;
|
||
|
|
if (!client.connect(host,port)) {
|
||
|
|
Serial.println("connection failed");
|
||
|
|
|
||
|
|
//blink the led to indicate the failed connection.....
|
||
|
|
for (int i=0;i<=5;i++) {
|
||
|
|
Serial.print("!");
|
||
|
|
digitalWrite(ONBOARD_LED,HIGH);
|
||
|
|
delay(1000*i);
|
||
|
|
digitalWrite(ONBOARD_LED,LOW);
|
||
|
|
delay(100);
|
||
|
|
}
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
String url = "/api/v1?topic=mailbox.livorno.address&secs=0&email=joerg.tretter@gmail.com";
|
||
|
|
Serial.print("Requesting URL: ");
|
||
|
|
Serial.println(url);
|
||
|
|
client.print(String("POST ") + url + " HTTP/1.1\r\n" +
|
||
|
|
"Host: " + host + "\r\n" +
|
||
|
|
"Content-Type: application/x-www-form-urlencoded\r\n" +
|
||
|
|
"Content-Length: 14\r\n\r\n" +
|
||
|
|
"platform=esp32\r\n");
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
void setup() {
|
||
|
|
bootCount++;
|
||
|
|
Serial.begin(9600);
|
||
|
|
pinMode(ONBOARD_LED,OUTPUT);
|
||
|
|
|
||
|
|
delay(2000); // just a bit of time to start logging..
|
||
|
|
Serial.printf("Boot #: %d\n",bootCount);
|
||
|
|
print_wakeup_reason();
|
||
|
|
|
||
|
|
/* if (bootCount % 2 == 0){
|
||
|
|
digitalWrite(ONBOARD_LED,HIGH);
|
||
|
|
delay(100);
|
||
|
|
} else {
|
||
|
|
digitalWrite(ONBOARD_LED,LOW);
|
||
|
|
} */
|
||
|
|
|
||
|
|
wakeup_reason = esp_sleep_get_wakeup_cause();
|
||
|
|
|
||
|
|
if(wakeup_reason==ESP_SLEEP_WAKEUP_EXT0){
|
||
|
|
connect_wifi();
|
||
|
|
send_notification();
|
||
|
|
} else {
|
||
|
|
Serial.println("Regular boot, going into deep sleep.");
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
//esp_sleep_enable_timer_wakeup(30000*uS_TO_mS_FACTOR);
|
||
|
|
esp_sleep_enable_ext0_wakeup(GPIO_NUM_33,1); //1 = High, 0 = Low
|
||
|
|
|
||
|
|
Serial.println("Going to sleep now");
|
||
|
|
delay(1000);
|
||
|
|
esp_deep_sleep_start();
|
||
|
|
}
|
||
|
|
|
||
|
|
void loop() {
|
||
|
|
/* When dealing with deep sleep, it looks like the esp will go back into setup... */
|
||
|
|
|
||
|
|
/* delay(1000);
|
||
|
|
digitalWrite(ONBOARD_LED,HIGH);
|
||
|
|
delay(100);
|
||
|
|
digitalWrite(ONBOARD_LED,LOW); */
|
||
|
|
}
|