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