Site web par SMS
Sommaire
- 1 Présentation
- 2 Développement Android
- 3 Développement Arduino
- 4 Avancement du Projet
- 4.1 Séance 1 (04/02/13)
- 4.2 Séance 2 (07/02/13)
- 4.3 Séance 3 (11/02/13)
- 4.4 Séance 4 (14/02/13)
- 4.5 Séance 5 (25/02/13)
- 4.6 Séance 6 (27/02/13)
- 4.7 Séance 7 (28/02/13)
- 4.8 Séance 8 (04/03/13)
- 4.9 Séance 9 (06/03/13)
- 4.10 Séance 10 (07/03/13)
- 4.11 Séance 11 (11/03/13)
- 4.12 Séance 12 (13/03/13)
- 4.13 Séance 13 (18/03/13)
- 4.14 Séance 14 (20/03/13)
- 4.15 Séance 15 (21/03/13)
- 4.16 Séance 16 (25/03/13)
- 4.17 Séance 17 (27/03/13)
- 4.18 Séance 18 (28/03/13)
- 4.19 Séance 19 (03/04/13)
- 4.20 Séance 20 (04/04/13)
- 4.21 Séance 21 (08/04/13)
- 4.22 Séance 22 (10/04/13)
- 4.23 Séance 23 (11/04/13)
- 4.24 Séance 24 (29/04/13)
- 4.25 Séance 25 (02/05/13)
Présentation
cahier des charges
Objectif :
Réaliser une plateforme permettant un accès à des services web simples uniquement par SMS.
Description :
La consultation de site internet ou la lecture de courriel est devenue monnaie courante sur téléphone. Ces services peuvent être fortement limités lorsque la couverture réseau est faible ou à l'étranger (coût de la connexion). Ce projet propose de réaliser une application Android permettant de lire ses courriels ou accéder à des sites tels que twitter uniquement par le biais de SMS. Il conviendra :
- de mettre en oeuvre un module GSM compatible Arduino qui recevra et transmettra les SMS de et vers un téléphone mobile,
- réaliser une application client sous Android.
Analyse du Sujet
Choix techniques : matériel requis
Développement Android
Spécification techniques
Les points suivant représente les problématiques techniques induites par le cahier des charges.
- L'application doit pouvoir stocker les mails. En effet il est primordial que toutes informations reçues ne soient pas re-demandées à l'arduino.
- L'application doit limiter le nombre s’envoie de SMS, principalement pour des raisons économique (le coût pour l'utilisateur de l'envoie de SMS) mais également de temps de réponse.
- L'interface et le design principal doit cacher le fonctionnement par SMS. On visera une qualité professionnelle en terme de design, clarté, expérience utilisateur.
Choix techniques
Pour répondre au cahier des charges ainsi qu'aux spécifications techniques voici les solutions techniques retenues :
- Langage android
Pour une plus grande flexibilité et une expérience pédagogique intéressante le développement se fera sans framework. Les logiciels utilisés sont Eclipse et les librairies android IDE uniquement. L'interface est décrite en langage XML spécifique à android et le coeur est en Java-Android.
- Base de données
Toutes les informations relatives aux mails sont dynamique. On utilisera donc une base de données SQLiteDatabase. Cette base de données sera optimisé et complète pour pouvoir traiter un nombre de mail important.
- Fonctionnement en fond
//TODO solution efficace et bien personnelle
Développement Arduino
Spécification techniques
Choix techniques
Avancement du Projet
Séance 1 (04/02/13)
Partie Android
Partie Arduino
- Prise en main du sujet
- Etude de la documentation du module TM2 GSM/GPRS de chez TELTONIKA, modem fourni par le service info pour le projet.
- Etude de la platine EasyGsm de chez MikroElectronika, support de connection pour le module TM2 et son Antenne
Séance 2 (07/02/13)
Partie Android
Partie Arduino
- 1er communication "à la main" à l'aide des commandes AT avec le module GSM grâce à un adaptateur TTL/RS232 (Module <--> PC) bricolé à base d'un MAX232.
- 1er Communication avec la carte SIM (B&You) insérée dans le module. Nous arrivons à nous identifier avec le code PIN mais l'identification ne reste que quelques secondes. Nous suspectons un problème d'alimentation car la documentation nous apprend que le module passe automatiquement en recherche de réseau après que l'on ai rentré le Code PIN et consomme ainsi plus de courant qu'au repos.
Séance 3 (11/02/13)
Partie Android
Partie Arduino
- Mesure de la Consommation du module : 30mA au repos / 200mA en recherche de réseau
- Test des différentes sources d'alimentation disponibles en salle E306.
- Problèmes : Brancher le module directement sur la sortie 5V de l'Arduino n'est pas suffisant. Utiliser un transformateur secteur n'est pas très pratique
- Solution trouvée ! : Utiliser un autre port USB que celui qui permet la programmation de l'Arduino pour alimenter le module. Indentification PIN Stable.
- 1er envoie de SMS !
Séance 4 (14/02/13)
Partie Android
Partie Arduino
- On essai de faire communiquer le module GSM avec un PC à travers un Arduino UNO (pour commencer).
- Problèmes : Utiliser les broches RX/TX de l'Arduino n'est pas viable si l'on veut envoyer une commande et visualiser correctement le resultat. Utiliser d'autres broches et la librairie Software Serial fournie de base avec l'IDE Arduino ne comporte par définition aucun élément Hardware comme par exemple les buffers d'emission/reception, on risque donc de perdre des données.
- Solution trouvée ! : Utiliser un Arduino Mega 2530 qui comporte 3 vraies UART supplémentaires. On aura donc Serial0 (Arduino <--> PC) et Serial1 (Arduino <--> Module GSM).
Séance 5 (25/02/13)
Partie Android
Partie Arduino
- Detarmination des commandes AT utiles au projet.
AT : Renvoie simplement OK AT+CPIN : Permet fournir le Code PIN de la carte SIM au module AT+COPS : Permet de slecttionner un operateur AT+CMGF : Permet de choisir le mode d'envoie des SMS (ici mode TEXT) AT+CMGS : Permet d'envoyer un SMS AT+CMGR : Permet de lire un SMS dans la mémoire de la SIM en précisant son Id AT+CMGD : Permet de supprimer un SMS dans la méméoire
- Implémentation d'une fonction dans l'arduino pour faire le lien entre les liaisons séries. (RX sur S0 --> TX sur S1 et inversement)
void GSM_Terminal_Command()
- 1er envoie de SMS à travers l'Arduino Mega !
Hello World !
Séance 6 (27/02/13)
Partie Android
Partie Arduino
- Implémentation de toutes les primitives nécessaires à la commande du module GSM par l'Arduino liées au commandes AT.
void GSM_Init_PIN(char * pin); void GSM_Init_NET(); void GSM_Send_SMS(char * tel,char * mess); void GSM_Read_SMS(int num, int disp); void GSM_Del_SMS(int num); void GSM_Clear_SIM();
Séance 7 (28/02/13)
Partie Android
Partie Arduino
- On continu de travailler sur void GSM_Read_SMS(int num, int disp) afin de bien extraire le numéro de l'expéditeur et le message d'après ce que le module nous renvoi.
- Mise en forme des données affichées dans le terminal ( "[ Service : Time Code ] Message" )
Séance 8 (04/03/13)
Partie Android
Partie Arduino
- Etude de différentes librairie permettant d'utiliser un TIMER avec l'Arduino. Candidat retenu : "SimpleTimer" (http://playground.arduino.cc/Code/SimpleTimer)
- Etude du Protocol Mail,POP3, Header...
Ci-dessous les commandes POP3 utiles au projet
(Source : http://irp.nain-t.net/doku.php/180pop3:020_commandes)
NOOP : Permet de garder la connexion active en ne faisant rien USER : Commande pour rentrer le login PASS : Commande pour rentrer le password UIDL : Affiche le tableau de correspondance Num/Id RETR n : Affiche le message complet de numéro n TOP n x : Affiche l'entête et les x premières lignes du mail n QUIT : Ferme la connexion
Séance 9 (06/03/13)
Partie Android
Partie Arduino
- Implémentation des fonctions de "Parsing" du contenu des SMS
- Mise en Place du Protocol Android ---> Arduino ( "#Commande%Argument&" )
#P%n& : Commande de PING où n est un entier que l'arduino doit renvoyer #D%n& : Demande des Id des n derniers mails recus #H%id1+id2+id3...+idn& : Demande des Headers des mails correspondant aux différents id #M%id& : Demande du Corps du Mail correspondant à l'id en argument #T%id& : Envoi dans l'ordre de tout les id des mails plus récents que l'id en argument. #V%(0 ou 1)& : Permet à l'application Android d'indiquer si elle va envoyer des requetes ou si l'arduino doit lui même scruter les nouveaux mails sans jamais recevoir d'accusé ("Mode Etrangé" ou Economique)
Séance 10 (07/03/13)
Partie Android
Partie Arduino
- Test du Parsing SMS et de toutes les commandes (sans appelle de fonction de traitement)
- 1ers tests de la partie réseau du Shield Ethernet Arduino
- 1ers tests de la partie Carte SD du Shield Ethernet Arduino
Séance 11 (11/03/13)
Partie Android
Partie Arduino
- Test de differentes solution de traitement des données du serveur POP3. Structure,Variables Globales, Carte SD...
- Solution retenue : ne pas utiliser la carte SD et traiter les données dès leur arrivée.
Séance 12 (13/03/13)
Partie Android
Partie Arduino
- Implémentation des Fonctions de Connection/Deconnection au serveur de Mail POP3
void ETH_Init(int config); void POP3_Connect(char * login, char * pass, int config); void POP3_Disconnect();
Séance 13 (18/03/13)
Partie Android
Partie Arduino
- Implémentation des Primitives permetant de récupérer la liste des Id des messages (UIDL), L'entete d'un message et le corps.
- Dans cette 1er version tout est sauvegardé dans des structures ou des tableaux de charactères tout en essayant d'optimiser la place des données en RAM.
- Rq : Ces fonctions sont appelés pour chaque Mail
void POP3_Head(int n); void POP3_Mess(int n); void POP3_UIDL();
Séance 14 (20/03/13)
Partie Android
Partie Arduino
- Implémentation des fonctions de conversion Num <-> Id, où Num est le numéro du message dans la liste, c'est ce qui est utilisé dans les commandes TOP ou RETR du protocol POP3 alors que l'Id est une chaîne de caractère qui l'identifie de façon unique.
char * POP3_NumToId(int n); int POP3_IdtoNum(char id[100]);
Séance 15 (21/03/13)
Partie Android
Partie Arduino
- Implémentation d'un fonction très importante.
int POP3_Extract_File(char *cmp,char fin);
Elle permet à partir d'une source de données brutes suite à la récupération de l'entête, du corps, ou autre... de détecter des mots clés et de récupérer la chaîne de caractère située entre ce mot clé et la fin de la ligne (ou délimiteur perso). Le principe est celui du fenêtrage. Puisque l'on lit les données du module ethernet caractère par caractère on rempli un tableau par la fin et on décale à chaque fois vers le haut. Quand le tableau contient le mot recherché on enregistre en tant que résultat tout la suite de la ligne.
- Rq : Toutes les manipulations de chaînes de caractères sont réalisées grâces au fonction de la librairie "String" standard du C et disponible sur Arduino
(Liste des fonctions : http://fr.wikipedia.org/wiki/String.h).
Séance 16 (25/03/13)
Partie Android
Partie Arduino
- Integration ... dans des fonctions permetant l'analyse de l'entête et du corps une fois ceux ci enregistrés par les fonctions vu precedement.
void POP3_Read_Top(int n); void POP3_Read_Mess(int n);
Séance 17 (27/03/13)
Partie Android
Partie Arduino
- Realisation avec Altium du Typon du PCB permetant de relier le module à l'Arduino comme un Sheld standard.
Séance 18 (28/03/13)
Partie Android
Partie Arduino
Séance 19 (03/04/13)
Partie Android
Partie Arduino
Séance 20 (04/04/13)
Partie Android
Partie Arduino
- Recuparation du PCB auprès du service electronique, perçage des trous, mise en place des connecteurs
Séance 21 (08/04/13)
Partie Android
Partie Arduino
- Refonte SD
Séance 22 (10/04/13)
Partie Android
Partie Arduino
- Multipart
Séance 23 (11/04/13)
Partie Android
Partie Arduino
- Fusion
Séance 24 (29/04/13)
- Tests
Partie Android
Partie Arduino
Séance 25 (02/05/13)
- Video