Version beta Station Météo 12/11/2012 Réalisation d un Station Météo avec Webserver composée de capteurs Grove et d un module Wifi Flyport.
Table des matières Révisions du document... 1 I. Présentation... 2 1) Grove et Grove Nest : un prototypage facile... 3 2) Flyport : Connectez vos objets sur Internet!... 4 3) Pack météo : Alliance entre Grove et Flyport... 5 II. Conception de la station météo : hardware... 6 1) Présentation des composants... 6 a) Carte de développement : Nest Grove... 6 b) Capteurs Grove... 6 c) Flyport... 7 d) Câbles Grove... 7 e) Alimentation... 7 f) MiniUSB programmer... 8 2) Assemblage des composants... 8 a) Connexion avec l ordinateur... 8 b) Grove NEST + Composant Grove... 9 III. Programmation... 10 a) Initialisation des librairies :... 10 b) Initialisation du Flyport, de la Grove Nest et de ses PORTs :... 10 c) Capteur de luminosité SEN11302P... 11 d) Capteur analogique de température SEN23292P... 11 e) Capteur de qualité de l air SEN01111P... 12 f) Capteur Température et Humidité SEN11301P... 13 g) Ecran OLED OLE35046P... 14 h) Webserver... 15 IV. Support & Contacts... 17 Révisions du document Date Version Auteur Description 12/11/2012 1.0 G.LINYON & Creation du document A.DA COSTA G.Linyon 1
I. Présentation Introduction Développez simplement une station météo avec la technologie Grove et openpicus. Cette station modulaire, sera à faire évoluer selon vos envies et objectifs. Basé sur une technologie Grove, la station météo est évolutive. Vous désirez ajouter de nouveaux composants : capteurs d air, capteurs de gaz, leds. Il suffit simplement de brancher les composants Grove sur la carte de développement NEST GROVE et de les intégrer au programme (librairies fournies). La Nest Grove peut intégrer un flyport. Le Flyport est une carte intelligente qui permet de maitriser et gérer des objets à distance grâce au WIFI. Il suffit simplement de l intégrer dans les appareils électriques pour ensuite piloter les objets via une box ADSL, un smartphone ou une tablette tactile. Grace au flyport vous pourrez donc connecter vos prototypes à Internet. Dans le cadre de ce tutoriel vous pourrez connecter cette station météo sur la toile. Pour faciliter le développement Ce tutoriel est destiné à tous les niveaux Débutant : Tout le code est fourni et commenté, il vous suffit simplement de connecter les composants sur la Nest Grove et de transférer le programme sur le flyport à l aide de l USB programmer. Confirmé : Ce pack vous permettra de découvrir la technologie Grove couplée au Flyport. Cette combinaison de produits vous donnera la possibilité de développer toute sorte de prototypes. G.Linyon 2
1) Grove et Grove Nest : un prototypage facile La technologie Grove est un nouveau système de connectiques standardisées. Cette technologie est composée de différentes séries de composants électroniques : capteurs, actuateurs, led et câbles connectiques, servant à concevoir et programmer des objets intelligents. Elle permet un développement simplifié des prototypes. En effet, il vous suffit simplement de connecter les composants (aucune soudure nécessaire). Cette technologie présente de nombreux avantages : Plus besoin de souder grâce aux connecteurs. La technologie Grove est donc accessible à tous Les librairies des composants Grove sont disponibles sur : http://www.seeedstudio.com/ (pour développer sur Arduino) http://wiki.openpicus.com/ (pour développer avec openpicus) Technologie Open Source & Plug & Play Une large gamme de composants compatibles. Dotée de plusieurs connecteurs Grove et d un emplacement Flyport, la Nest Grove vous permet de connecter une multitude de composants Grove : capteurs d humidité, moteurs, écran LCD Cette carte de développement possède un connecteur Flyport afin de brancher vos robots à internet. Emplacement USB PROGRAMMER : Emplacement pour carte de programmation USB Connecteurs GROVE Capteurs / Actuateurs Leds Emplacement FLYPORT : Flyport WIFI / ETHERNET ou GSM Slot MICRO SD Stockage, diffusion de données G.Linyon 3
2) Flyport : Connectez vos objets sur Internet! A l image d un serveur Web intégré, la plateforme OpenSource est la solution idéale pour les professionnels qui peuvent ainsi facilement intégrer le monde de l IP à leurs produits. Complet, le Flyport est un module programmable combinant à la fois un puissant processeur MicroChip et un client/serveur TCP et UDP ainsi qu un client SMTP et SNTP. Alimenté en 3.3V ou 5V, il est équipé de quatre entrées analogiques, dix entrées/sorties numériques et d un émetteurrécepteur asynchrone universel (UART). A la pointe de la technologie, le Flyport permet de personnaliser le hardware en modifiant le firmware et ainsi redistribuer les fonctions de chaque broche selon ses besoins. Autre atout non négligeable, la carte Flyport est facilement intégrable et ne nécessite pas de connaissances spécifiques en serveurs web pour être installée. Compact et léger le Flyport est la manière la plus simple et pratique de faire évoluer les fonctionnalités de ses prototypes dans l univers de l IP et s inscrire sur la toile. Caractéristiques techniques : - Alimentation 3,3 ou 5 volts - 4 entrées analogiques - 10 entrées/sorties numériques - 1 émetteur récepteur asynchrone universel (UART) - Dimensions : 35 x 48 mm G.Linyon 4
3) Pack météo : Alliance entre Grove et Flyport Grâce aux éléments Grove, à la carte de développement Grove Nest et au module Wifi Flyport, nous allons réaliser une station météo simple à développer, modulable et connectée à Internet. Pour résumer toute la technologie Grove pour permettra d assembler tout le matériel nécessaire à votre prototype : capteurs, actuateurs, leds, alimentation. Cet assemblage se fera sans une soudure, il vous suffira simplement de les connecter comme des lego. Et grâce au flyport vous donnez la possibilité à votre prototype de se connecter à internet pour lui permettre plusieurs fonctions : -Contrôle à distance (depuis tous les supports : navigateur, smartphone, tablette ) -Remontées d informations (des capteurs, caméras.). Quant au point de vue de la programmation, le flyport dispose de son IDE Opensource (logiciel de programmation) openpicus. Cet IDE simple d utilisation vous mâche le travail et vous fait bénéficier d un gain de temps d environ 60%. Cerise sur le gâteau, toutes les librairies des produits Grove sont disponibles sur le WIKI openpicus : http://wiki.openpicus.com/index.php?title=main_page Le wiki est actuellement en anglais, pour les plus retissent d entre vous, une version en français est en cours de traduction. G.Linyon 5
II. Conception de la station météo : hardware 1) Présentation des composants a) Carte de développement : Nest Grove Carte de développement Nest Grove avec emplacement pour connecteurs Grove et Flyport. Pour plus d informations : http://www.g-media.fr/nest-grove.html b) Capteurs Grove Grâce à sa conception plug & play et à sa compatibilité avec openpicus IDE, créez et concevez vos robots en toute simplicité avec la technologie Grove Liste des composants (dans l ordre de gauche à droite) - Un afficheur OLED (OLE35046P) - Un capteur analogique de luminosité (SEN11302P) - Un capteur analogique de température (SEN23292P) - Un capteur numérique de température et humidité (SEN11301P) En option - Un capteur analogique de qualité de l air (SEN011111P) Pour plus d informations : http://www.g-media.fr/pack-stationmeteo.html G.Linyon 6
c) Flyport La carte Flyport permet de prendre le contrôle et de gérer des objets à distance grâce au WIFI. Le Flyport ufl comprend un module flyport PCB Antenna. (Disponible en version Ethernet et GSM). Pour plus d informations : http://www.g-media.fr/flyport-pcb-antenna.html d) Câbles Grove Câbles universels de 5cm 4 Pin pour composants Grove. Pour plus d informations : http://www.g-media.fr/grove-universal-4-pin-buckled-5cm-cable-5-pcs.html e) Alimentation Alimentation 5V / 500mA pour cartes de développements NEST. Pour plus d informations : http://www.g-media.fr/developpeurs/openpicus/alimentation-nest-5v-500ma.html G.Linyon 7
f) MiniUSB programmer MINIUSB Programmer est un convertisseur USB vers Serial, vous permettant de configurer et programmer les modules sous OpenPicus Pour plus d information : http://www.g-media.fr/miniusb-programmer.html 2) Assemblage des composants a) Connexion avec l ordinateur Pour connecter le Flyport à l IDE, on utilise le MiniUSB et le câble USB/MiniUSB. Après avoir installé l IDE OPENPicus et codé, il faut définir le Port de communication afin d envoyer votre programme sur le Flyport. G.Linyon 8
b) Grove NEST + Composant Grove Afin de s assurer du bon fonctionnement de système, il faut s assurer de la concordance du type de communication du composant Grove ( AN/DIG/SPI/I2C) et de celui du port utilisé. Dans notre exemple : - Un afficheur OLED (OLE35046P) : communication I2C => I2Cport - Un capteur analogique de luminosité (SEN11302P) communication AN => AN1port - Un capteur analogique de température (SEN23292P) communication AN => AN2port - Un capteur analogique de qualité de l air (SEN011111P) communication AN => AN3port - «Un capteur numérique de température et humidité (SEN11301P)» : Concernant ce capteur, nous n avons pas encore développé les librairies afin de faciliter son implémentation sur la Grove Nest. Pour montrer que c est vraiment de l «OPEN SOURCE», nous avons choisis de l utiliser dans notre Station de Météo. Pour l implémenter, on sait que sur la datasheet de la Grove Nest, sur le port DIG1 : D1=p2(Flyport) et D2=p4(Flyport). G.Linyon 9
III. Programmation a) Initialisation des librairies : Taskflyport.c : - lib_grovesensors.h: librairie de tous les produits GROVE répertoriés. - rht01.h : librairie développée spécialement pour le capteur grove SEN11301P. Les variables externes sont déclarées dans le fichier HTTPApp.c, elles sont utilisées pour afficher les valeurs mesurées sur le webserver du Flyport. /**************************************************************************** * Weither Station * * ************************************************************************** * Author Rev. Date Comment * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *Gilbert Linyon 1.0 24/10/2012 G-Media Demo * ****************************************************************************/ #include "taskflyport.h" #include "lib_grovesensors.h" #include "rht01.h" #define Digital Dig_io extern char WLight[],WTemp[],WAir[],WHumi[]; // variable initialized in HTTPApp.c b) Initialisation du Flyport, de la Grove Nest et de ses PORTs : void FlyportTask() { WFConnect(WF_DEFAULT); while (WFStatus!= CONNECTED); UARTWrite(1,"Flyport connected... hello world!\r\n"); // Initialization of the grove nest void *board = new(board); // Initialization of all sensors and actuators G.Linyon 10
void *lightsensor = new(an_i); void *temperature = new(an_temp); void *airquality = new(an_i); void *display = new(oled,oledadd0); //specify I2C address // Initialization of grove nest PORT attachsensortoboard(board,lightsensor,an1); attachsensortoboard(board,temperature,an2); attachsensortoboard(board,airquality,an2); attachsensortoboard(board,display,i2c); c) Capteur de luminosité SEN11302P On souhaite afficher la luminosité en pourcentage, alors on utilise la valeur max. mesurée par le capteur (variable b). // LUMINOSITE *************/ float a = get(lightsensor); float b = 602.0; // full scale double Light; // Brightness intensity (%) Light = (a/b) * 100; sprintf(wlight,"%3.0f\n\r",light); UARTWrite(1,WLight); vtaskdelay(50); *************/ d) Capteur analogique de température SEN23292P Cette partie du programme s occupe de l acquisition et du traitement du signal mesuré pour la température. //TEMPERATURE *************/ sprintf(wtemp,"%.0f\n\r",(double)(get(temperature))); UARTWrite(1,WTemp); vtaskdelay(50); *************/ G.Linyon 11
e) Capteur de qualité de l air SEN01111P Concernant le capteur de qualité de l air (SEN01111P), il n y a pas encore de bibliothèque, donc selon la datasheet du capteur, nous avons développé un algorithme permettant de traiter le signal reçu. *************/ unsigned int Firstvol,Lastvol,Stdvol; Firstvol = get(airquality); Lastvol = Firstvol; Stdvol = Lastvol; // Test of the voltage value measured on the output A/Q sensor if ( Firstvol-Lastvol>400 Firstvol>700) { sprintf(wair,"high pollution! Force signal active."); UARTWrite(1,WAir); vtaskdelay(50); } else if (( Firstvol-Lastvol>400 && Firstvol<700 ) Firstvol-Stdvol>150) { sprintf(wair,"high pollution!"); UARTWrite(1,WAir); vtaskdelay(50); } else if (( Firstvol-Lastvol>200 && Firstvol<700 ) Firstvol-Stdvol>50 ) { sprintf(wair,"low pollution!"); UARTWrite(1,WAir); vtaskdelay(50); } else { sprintf(wair,"air fresh"); UARTWrite(1,WAir); vtaskdelay(50); } *************/ G.Linyon 12
f) Capteur Température et Humidité SEN11301P Dans cette partie, on a assigné la pin2 du Flyport au capteur SEN11301P. Si il y a une erreur lors de l acquisition de données ou lors du traitement de celle-ci, la LED «OUT4» du Flyport s allumera. Dans le cas contraire, on aura recevra la valeur de la température mesurée et du taux d humidité. //RHT01 *************/ double t = 0.0; double rh = 0.0; BOOL err = FALSE; vtaskdelay(200); // Clear the error condition and switch off the Flyport led if (err) { err = FALSE; IOPut(o4,OFF); } if (ReadRHT01(i5, &t,&rh)==0) { #if defined(stack_use_uart) UARTWrite(1,"Bad reading from RHT01\r\n"); #endif // We are in an error condition, so light up the Flyport led err = TRUE; IOPut(o4,ON); continue; } #if defined(stack_use_uart) else { sprintf(whumi,"%.0f\r\n",rh); UARTWrite(1,WHumi); } #endif *****************/ G.Linyon 13
g) Ecran OLED OLE35046P Dans cette partie, on veut juste afficher toutes les valeurs mesurées et traitées par le Flyport. A la place des chaines de caractère on peut mettre ce qu on veut. //Display *****************/ char DLight[10],DTemp[10],DHumi[10],p[3]={"%"},d[4]={"*C"}; int i; for (i=0;i<10;i++) // Just for use a good format with the OLED { DLight[i] = WLight[i]; // shows the brightness of light in "%" (XX%) DTemp[i] = WTemp[i]; // the temperature XX*C DHumi[i] = WHumi[i]; // the humidity XX% } strcat(dlight,p); strcat(dtemp,d); strcat(dhumi,p); configure(display);vtaskdelay(10); set(display,"**************",string,black,0,1);vtaskdelay(10); set(display,"giga-concept",string,black,1,2);vtaskdelay(10); set(display,"weither station",string,black,2,0);vtaskdelay(10); set(display,dlight,string,white,3,5);vtaskdelay(10); set(display,dtemp,string,black,4,5);vtaskdelay(10); set(display,wair,string,black,5,2);vtaskdelay(10); set(display,dhumi,string,black,6,5);vtaskdelay(10); set(display,"**************",string,black,7,1);vtaskdelay(10); vtaskdelay(300); *****************/ G.Linyon 14
h) Webserver Nous voulons afficher toutes nos mesures sur le webserver et pouvoir y accéder à distance, pour cela il faut déclarer les variables qu on utilisera sur le webserver dans HTTPApp.c, ensuite dans la page html utiliser les variables variable dynamique. HTTPApp.c : /*************************************************************************** SECTION Dynamic Variable Callback Functions In this section are managed the "dynamic variables" of the webserver. Dynamic variables are contained in the status.xml file requested by the webpage. For each dynamic variable a callback function named HTTPPrint_varname must be created. ****************************************************************************/ char WTemp[10],WLight[10],WAir[10],WHumi[10]; void HTTPPrint_WTemp() { TCPPutString(sktHTTP,(BYTE *)WTemp); } void HTTPPrint_WLight() { TCPPutString(sktHTTP,(BYTE *)WLight); } void HTTPPrint_WAir() { TCPPutString(sktHTTP,(BYTE *)WAir); } void HTTPPrint_WHumi() { TCPPutString(sktHTTP,(BYTE *)WHumi); } G.Linyon 15
A la racine du dossier «Web pages», il faut créer un fichier «status.xml». On associe chaque variable dynamique à son id dans le fichier «index.html». <response> <temp>~wtemp~</temp> <light>~wlight~</light> <humi>~whumi~</humi> <air>~wair~</air> </response> Index.html : Début du code html, avec l emplacement des scripts (fourni). <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>gc-weither Staition</title> <link rel="shortcut icon" href="./images/logo_icon.ico" /> <link href="style/style.css" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="scripts/mchp.js"></script> </head> On associe chaque id à sa variable dynamique : <span id="temp">~wtemp~</span> C</p> <span id="humi">~whumi~</span>%</p> <span id="light">~wlight~</span>%</p> <span id="air">~wair~</span>"</p> On retrouve ici la fonction servant à mettre à jour nos variables : <script type="text/javascript"> function updatestatus(xmldata) { document.getelementbyid('temp').innerhtml = getxmlvalue(xmldata, 'temp'); document.getelementbyid('humi').innerhtml = getxmlvalue(xmldata, 'humi'); document.getelementbyid('light').innerhtml = getxmlvalue(xmldata, 'light'); document.getelementbyid('air').innerhtml = getxmlvalue(xmldata, 'air'); } settimeout("newajaxcommand('status.xml', updatestatus, true)",500); </script> G.Linyon 16
IV. Support & Contacts Maintenant que vous avez tous les outils en poche pour développer toutes vos applications, n hésitez pas à revenir vers nous pour nous les présenter. Nous proposons également un support technique pour vous accompagner dans vos développements. support@giga-concept.fr Site marchand : www.g-media.fr G.Linyon 17