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
Name | Contribution |
---|---|
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
Business Aspect
Technical Aspect
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
Challenges & Motivation
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
Software
Arduino Code
#includeconst 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 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.
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é.