2021-L3-Galilee-ECB

Dans le cadre de notre cours d’IOT proposés par nos professeurs M. Aomar Osmani et Hamidi Massinissa , nous avons voulu créer un Emergency Call Button, c’est-à-dire un bouton d’appel d’urgence grâce à un ESP8266 et une application mobile.

Slides & Videos

Members

NameContribution
LOUNI Ghezlane Nadine- Participation à l'état de l'art (aspect business et technique)
- Conception des maquettes
- Assemblage du prototype
- Participation à la documentation finale
ALEXANDRE Fred Karim- Aspect logiciel et programmation (recherches et essais quant aux différents moyens de création d'une application mobile)
- Participation aux rapports et état de l'art
- Achat des matériels (kit arduino, esp8266)

State of the Art

Technical Aspect

Aspect Technique

Les services utilisés par les boutons d’appel d’urgence sur le marché sont assez universels :

  • Communication WiFi (Bluetooth pour les moins chers)
  • GPS pour la localisation
  • Capteur de chute
  • Capteur de cardiaque
  • Option d’appel 

Project Description

Problem Definition
Notre ECB est un outil connecté qui sert à contacter de façon urgente et spontanée une personne éloignée (en distance) afin de recevoir de l’aide. C’est un outil conçu avant tout pour les personnes âgées avec une mobilité limitée et qui aurait besoin d’un coup de main ou se trouverait en situation de malaise.
Challenges & Motivation
Nous vivons dans une époque où les objets connectés se comptent par milliers mais peu d’entre eux s’avèrent être réellement utiles aux personnes âgées ou handicapées. Comment pourrait une personne muette, clouée au lit, contacter une auxiliaire de vie présente dans une autre pièce ? Comment une personne âgée pourrait facilement contacter une personne dans un laps de temps extrêmement court ? Aujourd’hui, certains concepts d’objets connectés permettent de résoudre et au minimum, de contourner ces problèmes. En effet, si nous ne pouvons soigner ces personnes, essayons au moins de les aider. comme l’indique le titre, notre objet connecté serait un « Emergency Call Button » « Bouton d’appel d’urgence ».
Il arrive souvent qu’une personne malade ou âgée se retrouve dans une situation où sa mobilité est restreinte. Imaginons maintenant que le malade veuille faire appel à une auxiliaire où n’importe qui susceptible de l’aider, ne serait-il pas plus simple de pouvoir effectuer cet appel de détresse en appuyant sur un petit bouton à proximité ? En effet, ce petit bouton pourrait intervenir dans énormément de
situations où le malade ne peut crier “à l’aide” !
Real and Complete Usecases

Prenons un scénario où dans une maison relativement grande, une personne malade soit clouée au lit tandis que son aide-soignante est occupée dans une pièce éloignée. Si le malade ressent une gêne ou a besoin d’une assistance, elle n’a qu’à appuyer sur un bouton qui activera une notification + un appel sur le téléphone de la personne concernée. Notification et appel reçus, l’accompagnateur peut voler au secours du malade.

Technical Description

L’ECB est opérationnel et infiniment utilisable tout autant qu’il est connecté au wifi et alimenté. Ensuite, tout suivi est effectué grâce à Webhook et IFTTT (If This Then That) qui est une application gratuite permettant de lier les objets connectés entre eux. Une fois le bouton appuyé, l’évènement est envoyé grâce à Webhook (messager entre l’application et l’ESP32). Le signal étant reçu par l’IFTTT, nous utilisons des applets afin de déclencher une notification et un appel avec un message personnalisé. De plus, si le téléphone était en mode silencieux, ce mode est annulé et le son est activé (ceci permet d’entendre l’appel). La personne est donc mise au courant du SOS avec comme bonus l’heure et la date où le signal a été déclenché.

Hardware

Materials
ImageNamePart NumberPriceCountLink
ESP826617.991🛒
led27,991🛒
resistance3Included in starter arduino pack1🛒
boutton4(Included in starter arduino pack)1🛒
câbles male femelle5(included in starter arduino pack)Severals🛒
Schematic

Software

Arduino Code

#include 


const char* ssid = "";   // Your network SSID (name)
const char* password = "";  // Your network password (use for WPA, or use as key for WEP)
// Unique IFTTT URL resource
const char* resource = "/trigger/emergency_call_button/with/key/gXsg2b0dWW69zZjsRUd6M6IfNLqlhUGvtqDQw02TJDn";   //Important- your key goes here
int keyIndex = 0;   // your network key Index number (needed only for WEP)
int LED = D3;  //declaring pin for LED
int BUTTON = D2;  //declaring pin for button
// Maker Webhooks IFTTT
const char* server = "maker.ifttt.com";

void setup(){
Serial.begin(9600);  //set rate of serial monitor
initWifi();
//makeIFTTTRequest();

pinMode(LED,OUTPUT);  //set LED pin as output
pinMode(BUTTON,INPUT_PULLUP);  //set button pin as input
}
// this loop looks for a button push and if happens 
//blinks LED and runs IFTTT request loop (otherwise LED off)
void loop(){
if(digitalRead(BUTTON) == LOW){
digitalWrite(LED,HIGH);
delay (1000);
digitalWrite(LED,LOW);
delay (1000);
digitalWrite(LED,HIGH);
delay (1000);
makeIFTTTRequest();

}else{

digitalWrite(LED,LOW);

}
}
// this loop helps for debugging Wifi connection 
//and initiates Wifi

void initWifi() {
  Serial.print("Connecting to: "); 
  Serial.print(ssid);
  WiFi.begin(ssid, password);  

  int timeout = 10 * 4; // 10 seconds
  while(WiFi.status() != WL_CONNECTED  && (timeout-- > 0)) {
    delay(250);
    Serial.print(".");
  }
  Serial.println("");

  if(WiFi.status() != WL_CONNECTED) {
     Serial.println("Failed to connect, going back to sleep");
  }

  Serial.print("WiFi connected in: "); 
  Serial.print(millis());
  Serial.print(", IP address: "); 
  Serial.println(WiFi.localIP());
}

// this loops makes an HTTP request to the IFTTT web service
// and also allows the serial monitor to help with debugging
void makeIFTTTRequest() {
  Serial.print("Connecting to "); 
  Serial.print(server);
  
  WiFiClient client;
  int retries = 5;
  while(!!!client.connect(server, 80) && (retries-- > 0)) {
    Serial.print(".");
  }
  Serial.println();
  if(!!!client.connected()) {
     Serial.println("Failed to connect, going back to sleep");
  }
  
  Serial.print("Request resource: "); 
  Serial.println(resource);
  client.print(String("GET ") + resource + 
                  " HTTP/1.1\r\n" +
                  "Host: " + server + "\r\n" + 
                  "Connection: close\r\n\r\n");
                  
  int timeout = 5 * 10; // 5 seconds             
  while(!!!client.available() && (timeout-- > 0)){
    delay(100);
  }
  if(!!!client.available()) {
     Serial.println("No response, going back to sleep");
  }
  while(client.available()){
    Serial.write(client.read());
  }
  
  Serial.println("\nclosing connection");
  client.stop();

}

External Services

IFTTT

ifttt nous permet  de connecter et d’automatiser des appareils intelligents. L’application et la web app IFTTT permettent de créer des applets personnalisés (appelés auparavant « recettes ») qui vont déclencher des événements selon certains critères.

Projet Similaire

Un projet similaire réalisé avec un arduino MKR1000.

Le notre s’en inspire mais est un peu plus complet et le code est plus épuré.