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

Répondre
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. 1 mars 2015 23:03

Veloce a écrit :Euh, sinon ton ESP8266 est alimenté comment, côté PC ?
C'est que ça consomme ces petites bêtes, jusqu'à 215mA !
Si tu prends l'alim sur ton interface TTL, elle n'est pas assez puissante et c'est pour ça que le port série disparaît.
Effectivement, je prends le 3.3V sur le convertisseur USB-TTL série. Je n'y avais pas pensé ! C'est peut-être l'idée géniale. J'essaye ça demain.

En tout cas, je ne suis pas près d'abandonner. Je viens de recommander 5 ESP8266 du type ESP-12 (prix de revient < 2€ par module, envoi compris) et des pin headers mâles et femelles en 2 mm de manière à faire des petits circuits imprimés sur lesquels les ESP sont enfichables. C'est pratique pour faire des tests sur breadboard mais sur les circuits définitifs, c'est plus pratique de souder directement les modules.

Veloce, tu penses que je me complique la vie avec mes deux ESP. Mais selon mon niveau de connaissance, j'ai l'impression qu'il me sera plus facile de faire communiquer deux ESP ensemble avec des commandes AT que de les faire dialoguer l'un avec les commandes AT et l'autre avec le protocole Telnet dont je ne connais rien. Ceci dit peut-être que je changerai d'avis après une série d'échecs insurmontables, mais je demande quand même à voir.

Allez, c'est reparti demain pour de nouvelles aventures.

Quelque chose d'embêtant : depuis au moins une semaine, je ne suis plus jamais averti par mail des nouveaux messages malgré que j'ai coché "M'avertir lorsqu'une réponse est postée".

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. 2 mars 2015 11:39

Veloce, tu m'as sauvé !
Au lieu d'alimenter le module par l'intermédiaire du convertisseur USB-Série, je l'ai alimenté par le 3.3V d'une vieille alimentation de PC.
Cette fois, le Port COM virtuel est bien stable et je peux sans problème envoyer des commandes AT au module.

Je vais enfin pouvoir commencer à expérimenter la communication entre deux ESP8266.

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 » lun. 2 mars 2015 12:21

Pour info,
[Administration] en cours sur le sujet. Contrôle de l'envoi de mail.
Cdt.
Cordialement,

Vague Nerd

smba38
Modérateur
Messages : 193
Enregistré le : mar. 24 févr. 2015 09:28
Localisation : Bourgoin

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

Message par smba38 » mar. 3 mars 2015 09:20

Bonjour a tous ,

J'ai cru comprendre en lisant les sujets de ce forum consacrés à la puce esp8266 que les sockets posaient quelques soucis à certains (quelques dizaines de pages à digérer).

Pour info, voici une façon simple de faire communiquer via les DatagramSockets UDP des esp8266 avec un serveur qui doit traiter les informations des capteurs connectés aux petites puces.
A lire : http://www.enib.fr/~harrouet/Data/Cours ... ockets.pdf

Avec les DatagramSockets UDP, la conversation est unidirectionnelle (Envoyer ou recevoir).
Pour un conversation bidirectionnelle, il faut utiliser les Sockets TCP.

Voici la douzaine de lignes nécessaire en lua coté client (esp8266) et en python coté serveur (raspberry):

Coté lua

Code : Tout sélectionner

wifi.setmode(wifi.STATION)  -- Wifi en mode station 
cfg = { ip="192.168.1.157", netmask="255.255.255.0", gatway="192.168.1.1"}
wifi.sta.setip(cfg)  -- on force l'adresse IP en dehors de la plage du DHCP
wifi.sta.config("WRT54G_409B","clef wifi")
cu=net.createConnection(net.UDP)  -- connexion Socket UDP
cu:connect(5005,"192.168.1.22")      --  Port d'écoute 5005  et adresse du serveur 

tmr.alarm(0,2000, 1, function() cour=adc.read(0)   --envoi toutes les 2 secondes
  cu:send("capteur1=" .. cour ) end)  -- lecture capteur 
-- A la place de l'alarme trm  on peut mettre en veille l'esp8266 par dsleep, mais au reveil reboot 
-- node.dsleep(60000000) -- reveil dans n microseconds (PIN32(RST) et PIN8(XPD_DCDC)  reliées)
 print ("En cours")  -- le programme continue à s'executer en attente de l'alarme
et coté serveur, un raspberry dans mon cas

Code : Tout sélectionner

import socket
UDP_IP = "192.168.1.22"
UDP_PORT = 5005

sock = socket.socket(socket.AF_INET, # Internet
                  socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
while True:
    data, addr = sock.recvfrom(1024) # buffer de 1024 bytes
    if not data: break
    print "Message de l'esp8266 ", data
conn.close() # pour info jamais possible car boucle infinie sur while True
Et voici la trace coté Raspberry

Code : Tout sélectionner

pi@raspberrypi:~/esp8266$ python serveur_udp.py
Message de l'esp8266  capteur1=236
Message de l'esp8266  capteur2=51
Message de l'esp8266  capteur1=65
Message de l'esp8266  capteur2=51
Le serveur python peut écouter plusieurs esp8266 ( dans l'exemple capteur1 et capteur2 sont sur deux esp8266 différents).

Remarque: la ligne adc.read(0)
permet la lecture d'un capteur analogique, attention possible seulement sur certaines puces
Par exemple la carte de tests nodemcu ou la puce ESP-12

En utilisant node.dsleep, on peut mettre l'esp8266 en veille pour qu'il ne consomme pas trop.
Au réveil l'esp8266 effectue un reboot.
Je n'ai pas testé cette possibilité mais d'après la documentation il faut relier les pins PIN32(RST) et PIN8(XPD_DCDC).

Je trouve pour ma part que lua est un langage assez facile à apprendre.
Pour python c'est un poil plus compliqué.

Comme on dispose du code source en C de l'interpréteur lua, il est toujours possible en recompilant le projet nodemcu:
de rajouter des modules accessibles en lua pour disposer d'une puissance de calcul.
Mais ça, c'est une autre histoire.

SMBA38
Modifié en dernier par smba38 le mar. 3 mars 2015 19:17, modifié 1 fois.

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 » mar. 3 mars 2015 16:03

Jean-Marie a écrit :Veloce, tu m'as sauvé !
Au lieu d'alimenter le module par l'intermédiaire du convertisseur USB-Série, je l'ai alimenté par le 3.3V d'une vieille alimentation de PC.
Cette fois, le Port COM virtuel est bien stable et je peux sans problème envoyer des commandes AT au module.

Je vais enfin pouvoir commencer à expérimenter la communication entre deux ESP8266.
Chouette ! Je suis bien content pour toi.

Attention quand même aux alims de PC, qui peuvent sortir 20A :
Pour mon projet de fin d'études on avait fait un montage en wrapping sur une carte ISA.
Il y avait un bête fil en court-circuit (le fil blanc, sur le bouton blanc).
Le PC a démarré normalement, mais le fil est devenu incandescent, et il a fait fondre tous les fils de notre montage.
Ça a fait une fumée incroyable et le PC a failli prendre feu. Maintenant je sais pourquoi il faut mettre un fusible !

Veloce :oops:

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 » mar. 3 mars 2015 20:58

Hello Veloce, smba38 et les autres

Je commence à penser que ma méthode n'est pas évidente mais je n'ai pas encore tout essayé.
Je dispose donc de 2 PC en Windows XP.
Le PC N°1 (192.168.0.103) est connecté par wifi à un routeur (SSID: Wifi Collette Adresse: 192.168.0.1) et par liaison série à un ESP (SSID: ESP_AO45F représentant la fin du N° MAC))
Le PC N°2 (192.168.0.101) est connecté par wifi au même routeur et par liaison série à un autre ESP (SSID: ESP_AO4603).

Voici le scan des réseaux wifi:
481.jpg
481.jpg (44.55 Kio) Vu 8080 fois
Chacun des ESP est configuré en mode Wifi comme Station et Access Point (AT+CWMODE=3)

Lorsqu'on lance la commande AT+CWLAP (donnant la liste des AP disponibles), chaque ESP voit le routeur "Wifi Collette" et lui-même mais ne voit pas l'autre ESP. Sur un forum, j'ai trouvé quelqu'un qui mentionnait ce fait et on lui a répondu que c'était normal car les ESP ne sont pas des routeurs.
483.jpg
483.jpg (82.47 Kio) Vu 8080 fois
J'ai ensuite connecté chacun des ESP au réseau "Wifi Collette" par la commande AT+CWJAP="Wifi Collette","" (le réseau est sans password !)
La commande AT+CIFSR donne les résultats suivants:
  • Pour l'ESP_A0459F: 192.168.4.1 et 192.168.0.102
  • Pour l'ESP_A04603: 192.168.4.1 et 192.168.0.100
La première adresse est fixe et correspond à l'AP. La seconde est attribuée par le routeur "Wifi Collette"

Je cherche à envoyer des caractères de l'ESP_A0459F vers l'ESP_A04603. La commande AT+CIPSEND ne comporte pas l'adresse du destinataire dans ses paramètres. Cette adresse doit donc être précisée avant avec la commande AT+CIPSTART. Cette commande exige aussi de préciser le type de connexion "TCP" ou "UDP". Mes essais avec "TCP" on échoué. Je recevais le message ERROR UNLINK.
J'ai obtenu OK avec la commande AT+CIPSTART="UDP","192.168.0.100","23". Le port 23 associé à UDP correspond si je ne me trompe à une connexion Telnet.
J'ai ensuite lancé la commande AT+CIPSEND=7 et j'ai obtenu comme réponse >
J'ai poursuivi en envoyant Bonjour et la réponse a été SEND OK

Donc, c'est bien parti.....mais je ne sais pas où !!! car l'autre ESP n'a pas montré d'arrivée de caractères. Je m'en doutais un peu puisque rien n'avait été préparé de ce côté pour l'arrivée d'un envoi Telnet.
Voilà où j'en suis.
Modifié en dernier par Jean-Marie le mar. 3 mars 2015 21:34, modifié 1 fois.

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 » mar. 3 mars 2015 21:32

J'ai essayé de préparer une session Telnet sur le PC N°2 avec Putty.
484.jpg
484.jpg (58.25 Kio) Vu 8080 fois
Quand je clique sur Open, j'obtiens ceci:
485.jpg
485.jpg (22.63 Kio) Vu 8080 fois
Dois-je ajouter ou modifier un paramètre ?

smba38
Modérateur
Messages : 193
Enregistré le : mar. 24 févr. 2015 09:28
Localisation : Bourgoin

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

Message par smba38 » mar. 3 mars 2015 21:59

Coucou Jean-Marie et les autres.

Avec putty en mode Telnet je pense que putty vérifie que le protocole Telnet est respecté.
Putty essaye de se connecter sur un serveur Telnet, ce serveur doit répondre d'une façon bien précise.

Essaye une de ces trois possibilités:
1) Putty en mode RAW.
2) depuis une console dos CMD -> telnet 192.168.0.100 5000 (n'utilise pas le port 23)
3) essaye le logiciel " Packet Sender" sous Windows qui permet d'envoyer des paquets sur le réseau.
http://PacketSender.com


Pour info, Telnet port 23, c'est du TCP.

UDP = transmission unidirectionnelle sous forme de DATAGRAMs (Sans contrôle).
TCP= transmission bidirectionnelle sous forme de paquets (avec des contrôles de l'ordre des paquets)

Je pense que tu es bientôt mur pour l'utilisation de Lua et python.

A+
SMBA38

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 » mar. 3 mars 2015 23:30

Merci pour tes conseils smba38.

J'ai essayé Putty en mode raw. Je reçois le même message d'erreur.

J'ai essayé la console DOS: échec
486.jpg
486.jpg (22.51 Kio) Vu 8077 fois
J'ai été voir la page de PacketSender.com et la documentation.
Cependant, je n'ai rien à envoyer depuis le PC. Je voudrais seulement un moyen de recevoir les caractères que l'ESP envoie.

Je n'ai toujours pas compris comment je peux envoyer "Bonjour" depuis un ESP et recueillir ces caractères non pas sur une page web mais à l'intérieur d'un programme, de préférence en C, tournant sur un RPI ou un Arduino. Je pensais qu'il était facile d'envoyer des caractères d'un ESP à un autre. Cela ne semble pas être aussi évident.

Je suis d'accord avec toi que je pourrais bien me rapprocher petit à petit de Lua et Python, du moins si ces outils permettent d'atteindre mon but.

smba38
Modérateur
Messages : 193
Enregistré le : mar. 24 févr. 2015 09:28
Localisation : Bourgoin

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

Message par smba38 » mar. 3 mars 2015 23:50

Bonsoir Jean-Marie.

Dans un de mes messages j'ai indiqué mes essais sur les commandes AT.

J'ai utilisé la commande netcat sur Windows pour récupérer les données envoyées d'un esp8266 par des commande AT.
http://sourceforge.net/projects/nc110/

Voici un extrait.

Code : Tout sélectionner

AT+CIPMUX=1  ->multi connexions
OK
Sur le pc d’adresse IP 192.168.1.30 lancer la commande netcat pour écouter sur l’IP 192.168.1.17 port 4444
nc -l 192.168.1.17 -p 4444

AT+CIPSTART=0,"TCP","192.168.1.30",4444 -> connexion au PC d’adresse IP 192.168.1.30 sur le port 4444
0,CONNECT
OK

AT+CIPSEND=0,5 -> envoi sur canal 0, sur 5 octets
> aaaaa
SEND OK
A+
SMBA38

Répondre

Retourner vers « Et tout le reste »