Tous les capteurs reliés au RPI par Wifi avec module ESP8266

Parce que les applications du Raspberry Pi sont illimités...

Modérateur : Francois

Veloce
Messages : 79
Enregistré le : sam. 24 janv. 2015 20:12

Re: Tous les capteurs reliés au RPI par Wifi avec module ESP

Message par Veloce » sam. 21 févr. 2015 23:22

Jean-Marie a écrit :L'adaptateur USB-serial TTL sort du 5V mais aussi du 3.3V. J'ai bien sûr alimenté le ESP8266 avec le 3.3V mais j'ai hésité pour Tx/Rx car je n'ai pas de documentation prouvant que le Tx de l'adaptateur a un niveau logique en 3.3V. J'ai eu plus confiance en lisant cette page web.
Ah oui, ils branchent l'adaptateur en direct, mais en disant qu'il doit être "compatible 3,3v".
Puisque ça marche, ça doit être bon.
En tous cas pour brancher sur le Uno il faudra absolument un convertisseur de niveau.
Je sais envoyer ou recevoir des données par liaison série en langage C ou en assembleur mais je n'y connais rien à ce vocabulaire de "socket", "port réseau", "Telnet" ou "serveur web". Aurais-tu une bonne adresse où me familiariser un peu avec ces notions ?
Je vais regarder. Il y a bien une traduction du bouquin dont je t'ai parlé, mais même en français c'est ardu :

http://www.advancedlinuxprogramming-fr. ... us#sockets
Merci pour l'info. En ce qui concerne Linux, je suis seulement en train d'apprendre le niveau "basic". Peut-être un jour serai-je à même d'aborder le niveau "advanced".
Ah non, mais alors rassure-toi, moi non plus je n'y connais rien : Quand ils disent "advanced" c'est juste qu'il faut déjà connaître le langage C.

Ce bouquin est intéressant, parce que quand on veut faire des montages sur le Raspberry Pi on rencontre vite des problèmes. Je m'explique:
- d'un côté on a notre programme qui gère les entrées-sorties électroniques. Comme sur un Arduino, c'est une boucle sans fin. Au lieu de loop() on met while(1).
- de l'autre côté, on a Linux, ses applications, son serveur web, son interface graphique, etc.

Ce sont des "processus" différents, et on aimerait bien pouvoir échanger des données de l'un à l'autre. Si on commande un moteur, ou une horloge dont l'affichage change toutes les secondes, on ne va pas s'arrêter pour attendre que l'utilisateur presse une touche. On va donc utiliser un signal (un "sémaphore") pour indiquer qu'un processus veut parler à un autre. Puis on va échanger des données par un canal ("pipe") ou une zone de mémoire partagée, ou, si l'autre processus est situé sur une autre machine, un "socket".

Un serveur web est un très très bon exemple de socket. On a un programme, qui s'appelle Apache, et qui doit communiquer avec des machines à l'autre bout du monde. Il crée donc un socket, c'est à dire une "prise" sur laquelle on va pouvoir se brancher pour établir une communication. Si tu as Apache sur ton PC, tu peux taper
telnet 127.0.0.1 80
Et ça y est, la communication avec le socket est établie.
Apache écoute sur le port 80. Sur un serveur, il y a une adresse IP mais plein de services (http, FTP, telnet, SSH, samba, que sais-je). Pour savoir sur quel service on se connecte, on utilise le numéro de "port".
Donc ça y est, on est bien connecté sur Apache, on peut donc discuter avec lui. Si on tape:

Code : Tout sélectionner

GET / HTTP/1.1
HOST:Framboise
(Framboise étant le nom du PC)
Apache va répondre en envoyant la page d'accueil en html. Puis il va te raccrocher au nez, ben oui, il n'a pas que ça à faire, il y a des milliards d'internautes qui attendent la place.

Bien. Maintenant revenons à nos ESP.
Imaginons un Arduino au fond du jardin, qui écoute sur le port 8888 (ou n'importe quel port libre). Sur le Raspberry Pi, on va ouvrir un socket, et envoyer sur ce socket un message en texte (genre "allume GPIO 1") et sur l'Arduino le programme répondra "OK".
Dans le bouquin ils expliquent les commandes read et write pour lire et écrire sur un socket, et aussi comment lire ou écrire un buffer de texte mais ça tu connais mieux que moi.

Veloce :?

Avatar du membre
vague nerd
Modérateur
Messages : 1473
Enregistré le : mar. 14 oct. 2014 11:42
Localisation : France !

Re: Tous les capteurs reliés au RPI par Wifi avec module ESP

Message par vague nerd » dim. 22 févr. 2015 00:31

Bonjour.

J'ai commencé à regarder le bouquin. Quand j'ai lu :
Je vais regarder. Il y a bien une traduction du bouquin dont je t'ai parlé, mais même en français c'est ardu :
http://www.advancedlinuxprogramming-fr. ... us#sockets
j'ai cru que j'allai dépenser une seconde forêt amazonienne pour imprimer le tout. Main non ! je préfère qu'on me parle de "pipe" et pas de "tube" !

C'est vrais que c'est ardu, mais c'est clair...
En tout cas merci pour la référence.

Cdt.
Cordialement,

Vague Nerd

Avatar du membre
Jean-Marie
Raspinaute
Messages : 240
Enregistré le : sam. 24 janv. 2015 18:01
Localisation : Arlon, Belgique
Contact :

Re: Tous les capteurs reliés au RPI par Wifi avec module ESP

Message par Jean-Marie » dim. 22 févr. 2015 15:16

Hello Veloce,

Although I don't have too much problem reading the Shakespeare's language, the Voltaire's language keeps an unequalled flavour for me (even if I am Belgian).

Je suis d'accord qu'il vaut mieux se faire faire une pipe que de se faire entuber :lol: mais j'apprécie néanmoins la traduction.

Ceci dit, au tout début du premier chapitre, on dit ceci: "Dans la suite de ce livre, nous supposerons que vous êtes familier avec le langage de programmation C ou C++ et avec les fonctions les plus courantes de la bibliothèque C standard"...
Malheureusement, je suis presque aussi novice en C qu'en Linux. J'ai acquis un Arduino dans le courant de 2014 et j'ai suivi un petit cours online sur les rudiments du C. J'ai vite abandonné l'environnement de programmation de l'Arduino car appliquer des librairies externes sans en connaître le fonctionnement intime ne me plaisait guère. En effet, il n'est pas agréable de vouloir utiliser dans son programme telle interruption ou tel timer et de constater que le programme ne fonctionne plus car on a modifié un registre nécessaire à une librairie. De plus, beaucoup de fonctions de base de l'Arduino sont loin d'être du C standard. Je me suis donc plutôt tourné vers GCC que j'utilise dans l'environnement de développement Studio d'Atmel. Mais j'en suis toujours au stade de débutant.
_______________________________________________________________________________________________________

Pour en revenir à l'ESP8266, je suis dans la lecture de cet "Instructable" qui m'a déjà fait pas mal progresser.

Pour résumer, une fois le contact établi avec le module, le site propose de lancer les commandes suivantes:
  • AT+CWMODE=3 ====================> Fonctionnement du wifi en Access Point + Mode Station. (j'ignore le sens du 'Mode Station')
  • AT+CWLAP ========================> Donne la liste des Points d'Accès (ou réseaux) disponibles.
    AT+CWMODE=3 & AT+CWLAP.jpg
    AT+CWMODE=3 & AT+CWLAP.jpg (19.6 Kio) Vu 7127 fois
  • AT+CWJAP="SSID choisi","Password" ===> Connexion au Point d'Accès choisi
  • AT+CIFSR =========================> Donne l'adresse IP du ESP8266
    AT+CWJAP & AT+CIFSR.jpg
    AT+CWJAP & AT+CIFSR.jpg (6.9 Kio) Vu 7127 fois
    L'adresse de mon ESP8266 est 192.168.0.100
    J'ignore ce que l'autre adresse représente.
Voilà où j'en suis pour le moment.
Ensuite l'auteur crée un serveur web mais je dois encore examiner cette partie.

Veloce
Messages : 79
Enregistré le : sam. 24 janv. 2015 20:12

Re: Tous les capteurs reliés au RPI par Wifi avec module ESP

Message par Veloce » dim. 22 févr. 2015 16:55

Hé mais ça se présente bien, bravo !

Il y a en effet 3 modes :

1- Station, où l'ESP est un client qui va se connecter à un réseau existant comme ta box ADSL par exemple.
Si tu prévois de faire un réseau de capteurs pour ton chauffage, c'est plutôt ça que tu vas choisir.

2- Access Point, c'est à dire que l'ESP se comporte comme un point d'accès sur lequel les PC vont se connecter.
Il crée un nouveau réseau Wifi. Intéressant pour se connecter à un appareil isolé, dans un lieu où il n'y a pas déjà un réseau.
Par exemple c'est ce qu'il faut pour un robot, ou un appareil de mesure dans un véhicule, etc.

3- Mixte, où l'ESP est ambivalent, à la fois client et serveur. Sauf vouloir faire un prolongateur de réseau, je ne vois pas l'intérêt ?

Les deux adresses IP correspondent sans doute aux deux réseaux puisque tu as choisi le mode 3.

Enfin je suis déçu, personne n'a relevé alors que je vous avais tendu une perche énorme en disant c'est ardu...

Veloce :roll:

Avatar du membre
Jean-Marie
Raspinaute
Messages : 240
Enregistré le : sam. 24 janv. 2015 18:01
Localisation : Arlon, Belgique
Contact :

Re: Tous les capteurs reliés au RPI par Wifi avec module ESP

Message par Jean-Marie » dim. 22 févr. 2015 21:19

Hello Veloce,

Je nage un peu dans le flou.
J'ai essayé d'avancer dans l'instructable mentionné plus haut (en particulier, avec les commandes AT+CIPMUX=1 et AT+CIPSERVER=1,80) et de me connecter au module avec le webbrowser et l'adresse IP du module mais tout ce que j'obtiens est "page inaccessible".

Voici de manière imagée ce que je voudrais faire:
Montage de base.jpg
Montage de base.jpg (60.08 Kio) Vu 7119 fois
On commence par la droite de l'image.
L'atmega saisit les mesures de T° et d'humidité.
Il met en forme un string du genre "Capteur N°1 22/02/2015 T°=21°C H=54%".
Il s'assure par la liaison série que l'ESP est connecté au réseau du RPI puis il envoie le string par wifi, probablement avec la commande AT+CIPSEND=<longueur du string> suivi du string lui-même.
Comment le RPI reçoit-il le string ? Celui-ci est-il nécessairement inclus dans une page HTML ? Comment l'en extraire ? N'est-ce pas justement la question que tu te posais il y a quelques jours ?

J'ai du mal à voir clair car toute cette matière est absolument nouvelle pour moi.

Veloce
Messages : 79
Enregistré le : sam. 24 janv. 2015 20:12

Re: Tous les capteurs reliés au RPI par Wifi avec module ESP

Message par Veloce » dim. 22 févr. 2015 21:51

Tu y es presque !

sauf que ça ne marche pas comme ça. Si tu veux accéder à ton Arduino, essaye plutôt telnet au lieu du navigateur web.

Le navigateur attend une page HTML, qui contient au minimum:

Code : Tout sélectionner

<html>
<head>
<title>La fête du string </title>
</head>
<body>
La température extérieure est de -2°C<BR>
</body>
</html>
Et l'Arduino ne doit lui envoyer la page que quand il reçoit la commande "GET /"
(c'est ce que le navigateur envoie au serveur quand tu tapes l'adresse dans la barre d'adresse)

Ouvre un telnet, et arrange toi pour que l'Arduino te réponde quand tu lui envoies une commande simple, genre "T=\n"
Dès que tu reçois un retour chariot, tu considères que le client a envoyé une commande.

Tiens nous au courant !

Veloce

Avatar du membre
Jean-Marie
Raspinaute
Messages : 240
Enregistré le : sam. 24 janv. 2015 18:01
Localisation : Arlon, Belgique
Contact :

Re: Tous les capteurs reliés au RPI par Wifi avec module ESP

Message par Jean-Marie » dim. 22 févr. 2015 22:49

Merci, Veloce, pour ta réponse plus que rapide !

Je vais creuser demain du côté de Telnet.
Je tiendrai bien sûr le forum au courant de la suite.

Pour ceux qui se débrouillent en anglais parlé, voici une vidéo d'introduction bien faite et pas trop rapide.

Si on veut surveiller des paramètres à distance par Internet, par exemple pour une résidence secondaire, il y a peut-être mieux à faire que de créer son propre serveur Internet. Un site gratuit avec des applications open source est à notre disposition ICI. Les pages web peuvent être mises à jour avec l'ESP8266.

Avatar du membre
Jean-Marie
Raspinaute
Messages : 240
Enregistré le : sam. 24 janv. 2015 18:01
Localisation : Arlon, Belgique
Contact :

Re: Tous les capteurs reliés au RPI par Wifi avec module ESP

Message par Jean-Marie » lun. 23 févr. 2015 12:09

Hello Veloce

Après quelques googlesearch et lectures, mon problème s'est peut-être quelque peu précisé.

Du côté de la sonde, du microcontrôleur et du module ESP, les choses semblent claires : le microcontrôleur peut transmettre ses données par liaison série.

Par contre, de l'autre côté du réseau wifi, le RPI ou le PC doit ouvrir soit un explorateur Internet, soit un programme du style Putty ou TeraTerm pour envoyer des commandes ou recevoir les données du microcontrôleur. Cela nécessite l'intervention d'un opérateur. Dans certains cas, c'est souhaitable. Mais dans d'autres cas, les données devraient plutôt être reçues par un programme (en C, en Python, en assembleur, peu importe) et être intégrées à un processus de décision programmée, tenant éventuellement compte d'autres capteurs.

Afin de rendre cela possible, la solution ne serait-elle pas de remplacer le dongle wifi du RPI par un autre ESP8266. Dans ce cas, le RPI central pourrait converser tranquillement avec chaque microcontrôleur périphérique (en se connectant aux diverses adresses IP) par simple liaison série et de manière transparente en ce qui concerne la transmission wifi.

Une autre voie possible serait peut-être d'apprendre à programmer les sockets. A ce propos, j'ai trouvé ce bouquin (de 95 pages !) disponible gratuitement online. Il existe une soi-disant traduction française mais je soupçonne le traducteur Google d'être passé par là.

Veloce
Messages : 79
Enregistré le : sam. 24 janv. 2015 20:12

Re: Tous les capteurs reliés au RPI par Wifi avec module ESP

Message par Veloce » lun. 23 févr. 2015 13:26

Moi je vote pour les sockets :
1) tu peux brancher ton Raspberry Pi sur une prise Ethernet, et laisser tes Arduinos (Arduini au pluriel ?) se connecter à ton réseau Wi-fi existant.
2) tu bénéficies de tous les développements déjà réalisés par des gens très compétents, notamment au niveau sécurité
3) tu peux porter ton programme du Raspberry sur un PC, un Mac, ou n'importe quel système à base d'Unix.
4) une fois que tu sais utiliser les sockets, tu peux faire des montages d'enfer, par exemple qui récupèrent la météo sur Internet, ou les cours de bourse, ou les horaires des trains en temps réel...
5) si ça marche tu pourras m'expliquer comment tu as fait :mrgreen:

Au fait merci pour le lien, je vais jeter un œil.

Veloce

philippe_PMA
Messages : 13
Enregistré le : lun. 22 sept. 2014 09:42

Re: Tous les capteurs reliés au RPI par Wifi avec module ESP

Message par philippe_PMA » lun. 23 févr. 2015 14:11

Pour ceux et celles qui ont du mal avec les socket, ça peut aider : http://www.spi.ens.fr/beig/systeme/sockets.html

Répondre

Retourner vers « Et tout le reste »