Things used in this project

Custom parts and enclosures

PostBox
We made our own postbox using cardboard box and chart paper.
0e9aujvj6yuogoh8l26u

Schematics

idiotware-shield

Code

Smart Iot PostboxArduino
/*
    WiFi POSTBOX
    
    In this example we are using ESP8266 and IdIoTWare Shield and Arduino Board. LDR on IdIoTWare shield 
    is used as sensor to detect letter in the letterbox. WS2812 Led (addressable RGB LED) 
    on IdIoTWare shield is continuously ON (WHITE Color) and reflects light on LDR. As 
    soon as new letter dropped in postbox light intensity on LDR changes due to reflection 
    and event gets triggered.
    Here we are using IFTTT to trigger an event.
    
    IFTTT is a free web-based service that allows users to create chains of simple conditional statements,
    called "recipes", which are triggered based on changes to other web services such as Gmail, Facebook,
    Instagram, and many more.IFTTT is an abbreviation of "If This Then That"
    Create account on IFTTT and create your recipe.
    
    We are using Maker and Gmail channel to trigger an event.
    
    If there is new letter in postbox, Arduino will send POST request to maker channel.  
    if Maker then Gmail
    If Maker Event "New Letter", then send an email from "abcd@gmail.com" 
      
*/

#include <Adafruit_NeoPixel.h>
#include "idIoTwareShield.h" // sets up and initialize idIoTwareShield
#include <Wire.h>         // Require for I2C communication
idIoTwareShield fs;             // Instanciate CGShield instance

#include <ELClient.h>
#include <ELClientRest.h>
char buff[128];

// Initialize a connection to esp-link using the normal hardware serial port both for
// SLIP and for debug messages.
ELClient esp(&Serial, &Serial);

// Initialize a REST client on the connection to esp-link
ELClientRest rest(&esp);

boolean wifiConnected = false;

// Callback made from esp-link to notify of wifi status changes
// Here we print something out and set a global flag
void wifiCb(void *response) 
    {
      ELClientResponse *res = (ELClientResponse*)response;
      if (res->argc() == 1) 
         {
           uint8_t status;
           res->popArg(&status, 1);

           if(status == STATION_GOT_IP) 
             {
               Serial.println("WIFI CONNECTED");  //Wifi gets connected at this place
               wifiConnected = true;
             } 
           else 
             {
               Serial.print("WIFI NOT READY: ");//Wifi not connected,check connection
               Serial.println(status);
               wifiConnected = false;
             }
         }
    }

void setup() 
    {
      Serial.begin(9600);   // the baud rate here needs to match the esp-link config
      color(255,255,255);   // set white color 
      Serial.println("EL-Client starting!");

      // Sync-up with esp-link, this is required at the start of any sketch and initializes the
      // callbacks to the wifi status change callback. The callback gets called with the initial
      // status right after Sync() below completes.
      esp.wifiCb.attach(wifiCb); // wifi status change callback, optional (delete if not desired)
      bool ok;
      do 
       {
         ok = esp.Sync();      // sync up with esp-link, blocks for up to 2 seconds
         if (!ok) Serial.println("EL-Client sync failed!");
       } while(!ok);
      Serial.println("EL-Client synced!");

      // Get immediate wifi status info for demo purposes. This is not normally used because the
      // wifi status callback registered above gets called immediately. 
      esp.GetWifiStatus();
      ELClientPacket *packet;
      if((packet=esp.WaitReturn()) != NULL) 
        {
          Serial.print("Wifi status: ");
          Serial.println(packet->value);
        }

      // Set up the REST client to talk to www.maker.ifttt.com, this doesn't connect to that server,
      // it just sets-up stuff on the esp-link side
      int err = rest.begin("maker.ifttt.com");
      if(err != 0) 
        {
          Serial.print("REST begin failed: ");
          Serial.println(err);
          while(1) ;
        }
      Serial.println("EL-REST ready");
      
    }

void loop() 
    {
     new_letter();
    }
 
// this function detects the new letter
int new_letter()
   { 
    
      int light_value = analogRead(A3); delay(10);
      int light_value1 = analogRead(A3);delay(10);  
      Serial.println(light_value1);
      if(light_value1 >= 510)    //if there is change in light value (New Letter)
        { 
          sprintf(buff, "/trigger/new_letter/with/key/XXXXXXXXXXXXXXXXXX");//replace with your Maker channel's API Key
          logToMaker();  //Log to Maker using commands under void LogToMaker()
          // print to the serial port too:              
          Serial.print("New Letter!!");
                   
        }
        delay(50);   
   } 
 
//function to send POST request to Maker channel    
void logToMaker()
    {
           // process any callbacks coming from esp_link
      esp.Process();

     
      // if we're connected make an HTTP request
      if(wifiConnected) 
        {  Serial.println("wifi connected!!");
          // Request  from the previously set-up server
          rest.get((const char*)buff);

          char response[266];
          uint16_t code = rest.waitResponse(response, 266);
          if(code == HTTP_STATUS_OK)     //check for response for HTTP request  
            {
             Serial.println("ARDUINO: GET successful:");
             Serial.println(response);
            } 
          else 
            {
             Serial.print("ARDUINO: GET failed: ");
             Serial.println(code);
            }
          
        }
        
    }   

Credits

Photo
Ravi Parmar

I am an Electronics and telecom graduate engineer with passion in embedded technology ,and designing creative project cases

Contact
Photo
Rupin Chheda

Resident Maker at CuriosityGym! Electronics Engineer, CAD Modeller, Educator

Contact

Replications

Did you replicate this project? Share it!

I made one

Love this project? Think it could be improved? Tell us what you think!

Give feedback

Comments

Similar projects you might like

Arduino on Internal Oscillator Crystal as Clock Source
Intermediate
  • 1,039
  • 73

Protip

Want to make an Arduino having only an ATmega328 chip and nothing else? Not even the crystal oscillator!

Self Balancing Robot Using Mpu6050 Accelerometer
Intermediate
  • 194
  • 7

Protip

this is self balancing robot on two wheels using mpu6050 accelerometer based on arduino..

Pen Stand: Gaming Enabled
Intermediate
  • 47
  • 3

Full instructions

Do you have a pen stand that just sits there and does nothing? Can we make it play a game/flash LEDs every time you use it? Let's find out!

Dancing Autobot
Intermediate
  • 136
  • 3

Protip

this is our project..and new thats called autobot with dancing like michael jackson....

Lighting control
Intermediate
  • 214
  • 4

Lighting control using the Cayenne Dashboard button and wall mount button.

Barbot: Cocktail Mixing Robot
Intermediate
  • 5,569
  • 39

Full instructions

Barbot is an open source Arduino cocktail mixing robot controlled with the hybrid mobile app via Bluetooth.

Sign up / LoginProjectsCommunitiesTopicsContestsLiveAppsBetaFree StoreBlog