Files
PlatformIO_MailboxNotifierD…/src/main.cpp
2022-06-11 16:18:17 -05:00

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); */
}