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

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. 2 juin 2015 09:13

Bonjour Korhm,

Le fichier Flag sert à indiquer à init.lua s'il doit doit lancer le programme (par exemple dofile("gestion_temp .lua") prévu en fonctionnement normal ou s'il doit se mettre en attente de commandes à interpréter .

Le fichier Flag pourrait même contenir le nom d'un fichier lua à lancer.
On peut également envoyer à l'interpréteur du source lua.
Voir
node.input()
node.output()
node.compile()
https://github.com/nodemcu/nodemcu-firm ... mcu_api_en

Avec lua configuré en serveur Telnet on peut à distance via le Wifi avoir la main sur la console Lua.

SMBA38.

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. 2 juin 2015 19:33

Hello Korhm,

Voici un exemple de commande à distance d'un esp8266 en Wifi via putty.
A la place du fichier flag indiqué dans mes posts précédents, , je suis passé par une variable r
depuis le client Telnet je peux saisir r=1 ou r=2 pour décider d'exécuter un traitement ou d'attendre des commandes Lua.
les prints depuis Lua sont envoyés sur Telnet.

On peut également tester les données envoyées via Telnet pour décider quel traitement faire dans ce cas on ne fait pas appel = node.input(str) pour envoyer les données l'interpréteur.

On peut via Telnet envoyer des ordre d'exécution de traitements, par exemple dofile("trait2.lua") ...
On a donc pas mal de possibilités , il suffit d'avoir des idées.

Fichier init.lua

Code : Tout sélectionner

--
--  Exemple de serveur Telnet pour prendre la main à distance via le WiFi sur un ESP8266  
--  SMBA38 06/2015
--
--  A partir d'un client Telnet (par exemple putty)
--   dans putty cocher Implicit CR in every LF dans les options du terminal
--  Depuis le Telnet client, envoi de la commande r=1 ou r=2  pour activer ou non des traitements

wifi.setmode(wifi.STATION)  -- Wifi en mode station 
cfg = { ip="192.168.1.154", netmask="255.255.255.0", gatway="192.168.1.1"}
wifi.sta.setip(cfg)  -- on force l'adresse IP
wifi.sta.config("WRT54G_409B","xxxxxxxxxxxxxxxxxxxxxx")
while (wifi.sta.getip() == nil) do  tmr.delay(100000) end  print(wifi.sta.getip())  -- Affichage adresse IP

--function tonet(str)
--      sk:send(str)
--      -- print(str) Attention , ne pas faire de print  dans cette function
--      -- Sinon appel récursif de fonction!!!
--    end


-- Serveur Telnet sur port 2323
    s=net.createServer(net.TCP) 
    s:listen(2323,function(c) 
       con_std = c 
       function s_output(str) 
          if(con_std~=nil) 
             then con_std:send(str) 
          end 
       end 
       node.output(s_output, 0)   -- redirection sortie vers la fonction s_ouput.
       c:on("receive",function(c,l) 
          node.input(l)           -- idem  pcall(loadstring(l)) avec plusieurs lignes possibles
       end) 
       c:on("disconnection",function(c) 
          con_std = nil 
          node.output(nil)        -- la sortie est de nouveau sur le port série
       end) 
    end)


x2=0
function trait(x)
   if x  ~=  x2 then
       if x==1 then
            print ("mode run")
       end
       if x== 2 then 
              print ("mode commande")
       end
       x2=x
    end
end

r=1
tmr.alarm(0,5000, 1,  function() trait(r)  end  )   -- boucle sur attente ordre via Telnet 

Et voici la trace dans putty sur le port 2323

Code : Tout sélectionner

>
> r=2
> mode commande
> r=1
> mode run
> r=2
> mode commande
> print (node.info())
0       9       6       10197774        1458415 4096    0       40000000
>-- majorVer, minorVer, devVer,  chipid,flashid , flashsize, flashmode, flashspeed
> print(node.heap())
16296
> print("aa");print("bb")
aa
bb
>
> aa
stdin:2: '=' expected near 'aa'
>
SMBA38
Modifié en dernier par smba38 le mer. 3 juin 2015 08:31, modifié 6 fois.

fidoboulettes
Messages : 33
Enregistré le : mar. 26 mai 2015 07:18

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

Message par fidoboulettes » mer. 3 juin 2015 07:29

Bonjour,
je reviens vers vous après quelques jours de test.... j'ai reçu mon esp-01, l'ai branché et ai fait les premières installes des scripts DS18B20 et cela à fonctionné sans problème en pluggant la sonde au GPIO 0... du coup, ne voulant pas rester sur un echec avec mon ESP-201, j'ai reflashé le tout, rebranché tout pareil et là miracle, ça roule (pour rappel, NodeMCU 0.9.5, les différents scripts + la sonde - GPIO 0). En fait, le soucis que je rencontre actuellement, c'est que lorsque je débranche l'ESP (01 ou 201) et que je le rebranche, ESplorer ou lua loader a les pires difficultés à communiquer avec le module... Ce que je suis obligé de faire, et c'est complètement aléatoire, c'est de débrancher la pin CH_PD et de la rebrancher au 3v3... et encore, cela ne marche pas à tous les coups... je suis souvent obligé de passer par la case reflasher le firmware pour reprendre la main sur le module... Je soupconne un pb de branchement mais n'en suis pas sur.
Vous auriez une idée de ce que cela pourrait être:

* Branché sur mon port USB (COM 4 ), une clé FDTI fournissant le 3V3, le VCC et les fils de communication.
* L'ESP est sur une Bredboard
* le 3v3 branché au 3v3 (logique :D ) ainsi que la broche 7 CHIP_EN (CH_PD????)
* Le GND au GND (re-logique :D ) ainsi que la broche 8 - IO 15 (j'avais lu ça je sais plus où)
* Enfin, uniquement pour flasher le FW (après je re-débranche), la broche 3 - IO 0 au GND.

Voilà, ça c'est le branchement de base....

Je me suis aussi demandé si je ne devais pas mettre la broche 32 - RST quelque part (3v3 ou GND) pour que l'ESP se comporte comme un arduino à chaque fois que l'on veux téléverser des données.

Voilà, j'espère avoir été clair dans mes explications...

Image

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 » mer. 3 juin 2015 08:23

Hello fidoboulettes,

Il faut ponter CH_PD sur VCC pour activer le module
Il faut ponter GPIO0 à la masse pour pouvoir flasher (ne pas oublier de supprimer le pontage une fois le flash terminé)
Relier le GPIO15 à la masse (si présent)
RST sur la masse pour faire un reset du module.

pour gérer l'ESP8266 en Lua j'utilise NodeMCU Studio build20150111.exe

Essaye de faire un reset avant de te connecter à l'ESP8266.

SMBA38.

Korhm
Raspinaute
Messages : 232
Enregistré le : ven. 19 sept. 2014 08:13
Localisation : Toulouse

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

Message par Korhm » mer. 3 juin 2015 11:10

Bonjour à tous

Merci pour l'exemple Telnet SMBA38, je testerais dès que.... j'aurais réglé mon problème avec le wifi :)

Donc j'ai bien réussi, via l'IDE Arduino, à modifier le SDK pour forcé l'utilisation du wifi mode G (cf posts précédents)
Mais comme j'aimerais bien tout faire marcher avec nodeMcu, je me suis penché sur deux points :

1. Recompiler le SDK après avoir fait la modif. J'ai bien réussi à créer des .bin et à flasher mon ESP-01, mais ça n'a pas l'air de très bien marcher.
J'ai compilé et installé la toolchain xtensa, mais au moment de complié le SDK, à la fin j'ai le message

Code : Tout sélectionner

Error calling xtensa-lx106-elf-nm, do you have Xtensa toolchain in PATH?
Alors que mon $PATH semble pas trop mal

Code : Tout sélectionner

$ echo $PATH
/home/damien/dev/esp-open-sdk/xtensa-lx106-elf/bin:/home/damien/bin:/home/damien/.nvm/v0.10.31/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
$
$ which xtensa-lx106-elf-nm
/home/damien/dev/esp-open-sdk/xtensa-lx106-elf/bin/xtensa-lx106-elf-nm
EDIT : J'avais ce message d'erreur en faisant un sudo make. Donc normal vu que le $PATH était celui de mon user principal.
Si je lance le make en normal, j'avais un message d'erreur IOError: [Errno 2] No such file or directory: '../bin/0x00000.bin'
Un simple mkdir bin et ça semble marcher sans erreur

Code : Tout sélectionner

$ tree bin/
bin/
├── 0x00000.bin
└── 0x10000.bin
J'ai pas le module sur moi pour tester, je vous en dirais plus ce soir :)
/EDIT



2. En voulant utiliser la dernière release de nodemcu 0.9.6-dev_20150406, qui semble donc avoir été compilé le 06/04/15, j'ai trouvé dans la doc la chose suivante (https://github.com/nodemcu/nodemcu-firm ... v_20150406)
wifi module

wifi.setmode()
wifi.getmode()
wifi.getchannel() --Added on 05/22/2015
wifi.setphymode() --Added on 04/30/2015
wifi.getphymode() --Added on 04/30/2015
wifi.startsmart()
wifi.stopsmart()
wifi.sleeptype()
Ca tombe bien j'ai des problème au niveau du mode physique.
Mais la release date du 6 Avril, et les fonctions ont été ajoutée le 30 Avril.
Et impossible de trouvé un binaire postérieur à cette date (et bien sur je n'arrive pas à compiler correctement ma release....)

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 » mer. 3 juin 2015 18:04

Bonsoir Korhm,


Pour recompiler NodeMcu j’utilise la machine virtuelle fournie par Espressif
https://drive.google.com/folderview?id= ... sp=sharing

Cette VM sous Ubuntu contient la toulchain Xtensa (Mot de passe sous linux -> espressif)

Cette VM est prévue à la base pour compiler le firmware des commandes AT

J’ai utilisé Virtualbox 4.3.28 sous W8.1 pour lancer la VM

Les sources sont à placer dans un répertoire Windows (nodemcu-firmware-0.9.6-dev_20150406 dans mon cas)

Ensuite il faut déclarer ce répertoire partagé dans la VM

Ensuite Sous linux
./mount.sh (Mot de passe expressif)
cd Share
cd nodemcu-firmware-0.9.6-dev_20150406/app

Pour éviter les erreurs, Il y a quelques ajouts avant de compiler nodemcu 0.9.6

Il faut ajouter include/xtensa/simcall-fcntl.h

Code : Tout sélectionner

/* File control operations for Xtensa ISS semihosting.  */

/* Copyright (c) 2003 by Tensilica Inc.  ALL RIGHTS RESERVED.
   These coded instructions, statements, and computer programs are the
   copyrighted works and confidential proprietary information of Tensilica Inc.
   They may not be modified, copied, reproduced, distributed, or disclosed to
   third parties in any manner, medium, or form, in whole or in part, without
   the prior written consent of Tensilica Inc.  */

#ifndef _SIMCALL_FCNTL_H
#define _SIMCALL_FCNTL_H

#define	_SIMC_O_APPEND		0x0008
#define	_SIMC_O_NONBLOCK	0x0080
#define	_SIMC_O_CREAT		0x0100
#define	_SIMC_O_TRUNC		0x0200
#define	_SIMC_O_EXCL		0x0400
#define _SIMC_O_TEXT		0x4000
#define _SIMC_O_BINARY		0x8000

#endif /* ! _SIMCALL_FCNTL_H */

I lfaut ajouter le package python serial -> sudo apt-get install python-serial

J’ai modifié le fichier app/lua.c -> Ajout du texte SMBA38
make clean all
make

dans bin deux fichiers binaires sont créés 0x00000.bin et 0x10000.bin

Lua se lance bien mais pb pour créer le fichier init.lua
J’ai remis la version 0.9.6 à partir du binaire unique (nodemcu_integer_0.9.6-dev_20150406.bin)
J’ai effacé les fichiers de la mémoire flash -> file.format()
J’ai remis la version 0.9.6 recompilée
Et ça à l’air de fonctionner.

Code : Tout sélectionner

NodeMCU 0.9.6 build 20150406  powered by SMBA38Lua 5.1.4
lua: cannot open init.lua
> print(node.info())
0	9	6	10197774	1458415	4096	0	40000000
> 
Sur le répertoire bin il existe deux autres fichiers (non issus de la compilation)
Sur le Firmware des commandes AT:
esp_init_data_default.bin à flasher en principe en 0x7C000
blank.bin à flasher en principe en 0x7E000
je n'ai pas utilisé ces fichiers
esp_init_data_default.bin fait un raz de la configuration utilisateur
blank.bin un raz de la configuration Wifi.

j’ai utilisé ESP8266Flasher03152015.exe pour flasher
j’ai utilisé les options
baudrate 115200 Flash size 4MBytes Flash Speed 40MHZ SPI Mode QIO

J’utilise le kit NodeMcu (10€ sur Internet):
Convertisseur usb /série intégré
A base de ESP-12
4MBytes de mémoire flash

Bonne recompilation
SMBA38

fidoboulettes
Messages : 33
Enregistré le : mar. 26 mai 2015 07:18

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

Message par fidoboulettes » mer. 3 juin 2015 18:24

smba38 a écrit :Hello fidoboulettes,

Il faut ponter CH_PD sur VCC pour activer le module
Il faut ponter GPIO0 à la masse pour pouvoir flasher (ne pas oublier de supprimer le pontage une fois le flash terminé)
Relier le GPIO15 à la masse (si présent)
RST sur la masse pour faire un reset du module.

pour gérer l'ESP8266 en Lua j'utilise NodeMCU Studio build20150111.exe

Essaye de faire un reset avant de te connecter à l'ESP8266.

SMBA38.
Hello SMBA,
j'ai tout bien fait comme expliqué mais rien a faire... je n'arrive pas à avoir la main de manière régulière sur l'ESP-201 alors qu'en procédant de même sur le 01 pas de soucis... j'ai même réussi maintenant à faire "parler" le module avec mon RPI et domoticz... ce qui est mon but final... bon c'est aps grave, je vais en restezr là pour l'instant... Voulant avancer, un de mes "buts" est de brancher un BMP085 sur le module.. or, si je ne me trompe pas, l'ESP-01 n'a pas de ports I2C... pourrais tu me confirmer cela? Si c'est effectif, quel serait l'ESP à acheter, qui soit facile à plugger sur une bredboard (sans faire trop de soudures quoi) et qui n'ai pas trop de GPIO (après qui peux le plus peux le moins.... :D ) et qui ai justement les ports I2C?

merci à toi

Korhm
Raspinaute
Messages : 232
Enregistré le : ven. 19 sept. 2014 08:13
Localisation : Toulouse

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

Message par Korhm » mer. 3 juin 2015 18:35

Bonsoir SMBA,

Merci beaucoup pour tout ces détails !
Personnellement j'ai compilé grâce à la toolchain Xtensa que j'ai installé sur mon serveur Debian.
J'ai bien l'air d'être arrivé à la même étape que toi :
dans bin deux fichiers binaires sont créés 0x00000.bin et 0x10000.bin
Je n'ai pas été plus loin dans le flashage pour le moment, mais je prends note de tout tes conseils ;)

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 » mer. 3 juin 2015 21:24

Bonsoir Fidoboulettes.

ESP-01 ne dispose que de deux GPIOs GPIO0 et GPIO2

Il me semble que l'on puisse utiliser l'I2C sur un esp-01.

Branche une puce I2C sur les GPIO0 et GPIO2 et essaye le scanner http://www.areresearch.net/2015/04/scan ... sp-01.html

Par contre il faut utiliser le GPIO0 pour Flasher mais après le flashage on peut utiliser le GPIO0 pour autre chose.

Les ESP-12 ou l'ESP-12E sont pas mal , en plus il disposent d'une entrée ADC.
Mais comme le pas des ESP-12 est de 2mn, il faut en plus acheter un PCB de conversion 2mn -> 2.54mn.
Sur Internet on trouve des kits ESP-12 + PCB de conversion.

Mais pour les tests j'utilise le kit NodeMcu (< 10€ sur Internet), c'est super car il a un convertisseur USB/Série intégré .
Et on est sur qu'il n'y aura pas de problème avec Lua puisque c'est NodeMcu qui est à l'origine de Lua sur ESP8266.

Je serais de retour sur le Forum dans quelques jours car Je pars en voyage à Dublin gouter quelques bières.

A+
SMBA38.
Modifié en dernier par smba38 le jeu. 4 juin 2015 08:49, modifié 1 fois.

fidoboulettes
Messages : 33
Enregistré le : mar. 26 mai 2015 07:18

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

Message par fidoboulettes » mer. 3 juin 2015 21:29

Merci SMBA,
je vais tester cela... bonnes binouzes alors.... :D

Répondre

Retourner vers « Et tout le reste »