Arduino + ESP8266-01 + Eedomus

Partagez ici vos astuces et idées d'utilisation d'eedomus

Arduino + ESP8266-01 + Eedomus

Messagepar jcmontigny » 09 Août 2019 10:34

Bonjour à tous,

Après avoir galéré plusieurs semaines, je tenais à vous partager mon expérience sur la commande et la récupération d'information d'un contrôleur Arduino avec l'eedomus et son API.

Cela à travers l'utilisation d'un module ESP8266-01 pour ajouter une connexion Wifi à votre Arduino et des commandes AT (fonctionnement de base des ESP8266).

Je me suis penché sur ce problème car je souhaite piloter à distance mon SPA Intex: j'ai acquis une carte développée par Jean-Paul Marechal (que je remercie chaleureusement, voir forum Jeedom pour information); celle-ci décode le multiplexage entre le panneau de commande et la carte contrôleur afin d'interagir avec votre SPA (toutes les fonctions du panneau de commande) via l'application REmoteXY (payante).

L'idée est de remplacer RemoteXY par l'eedomus afin de tout centraliser.


Pourquoi les commandes AT:

1) Parce que je n'ai pas le choix avec la carte de contrôle du SPA, crée avec un Arduino Nano et un ESP8266-01,

2) Parce qu'il existe déjà un tas de projet DIY à base d'Arduino, il est alors possible de les rendre communicant uniquement par l'ajout d'un ESP01 à 2€.

3) Parce que j'ai passé des heures sur les forums, je n'ai pas trouvé de tutos traitant le pilotage et la récupération d'information en même temps via des commandes AT.


Remarques:

1) Les modules ESP peuvent être directement programmées en Arduino (les commandes AT sont alors remplacées par des librairies plus faciles à programmer) et remplacer le module Arduino.

2) Ce sujet n'est pas un tutoriel complet, je souhaite juste partager mon programme (lui même adapté de plusieurs sources web) qui permettra à chacun de se lancer dans l'interface de modules Arduino et l'eedomus.

3) Je ne me prétends pas expert programmation Arduino ni électonicien, juste amateur passionné, merci pour votre indulgence.

Le code suivant permet de
- initialiser la connexion Wifi de votre ESP8266
- remonter la température d'une sonde DS18B20 toutes les 5 minutes sur un capteur http de l'eedomus
- commander l'allumage d'une led via des requêtes http de type GET depuis un actionneur HTTP de l'eedomus: http://ADRESSE_IP/?etat=0 ou http://ADRESSE_IP/?etat=1

A adapter dans celui-ci (désolé ce n'est pas variabilisé):
- SSID : à remplacer par le SSID de votre connexion wifi
- PASSWORD_SSID: à remplacer par votre clé wifi
- ID_DU_CAPTEUR_HTTP: à remplacer par l'iD du capteur HTTP crée dans eedomus
- XXXXX : à remplacer par votre user ID eedomus
- YYYYY: à remplacer par votre clé API eedomus
- \"192.168.0.180\",\"192.168.0.1\",\"255.255.255.0\" à remplacer par une adresse IP, la passerrelle et le masque cohérente à votre réseau WLAN
- 0x28, 0xEE, 0x4D, 0x6, 0x1, 0x16, 0x2, 0x79 : à remplacer par l'adresse de votre sonde DS18B20 (il y a des tutos sur le net pour la trouver).



Code : Tout sélectionner
 
#include <SoftwareSerial.h>
// Librairies pour la sonde DS18B20
#include <OneWire.h>
#include <DallasTemperature.h>

// GPIO 10 et 11 pour le TX et RX de l'ESP
SoftwareSerial espSerial(10,11);

// Création de la commande à envoyer à l'eedomus
const char* TEMP_EEDOMUS_D= "GET /api/set?action=periph.value&periph_id=ID_DU_CAPTEUR_HTTP&value=";
const char* TEMP_EEDOMUS_F= "&api_user=XXXXX&api_secret=YYYYY\r\n\r\n";

// Initialisation de la variable pour envoi toutes les 5 minutes
#define EedomusInterval 300000

// Initialisation du debuggage pour des commandes sendData
#define DEBUG true

// GPIO 12 pour la led
#define led 12

// GPIO 6 pour la sonde DS18B20
#define ONE_WIRE_BUS 6
#define TEMPERATURE_PRECISION 10

//déclaration des autres variables
unsigned long Timer;
int etat;
String req;
int taille_req;

//Initialisation de l'instance Dallas
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

//Adresse sonde
DeviceAddress sonde = { 0x28,  0xEE,  0x4D,  0x6,  0x1,  0x16,  0x2,  0x79 };

void setup()
{
      Serial.begin(9600);
     
      // Démarrage de la communication avec la sonde
      sensors.begin();

      // Vérifie si la sonde est connectée
      if (!sensors.getAddress(sonde, 0)) Serial.println("Impossible de trouver la sonde");

      // Résolution à 9 bit
      sensors.setResolution(sonde, TEMPERATURE_PRECISION);

      // Affiche la température sur la console
      Serial.println("");
      Serial.print("Température: ");
      sensors.requestTemperatures();
      Serial.println(sensors.getTempC(sonde));
      Serial.println("");     

      // Démmarrage de l'ESP8266
      Serial.println("Start ESP\r\n\r\n");
      espSerial.begin(115200);
 
      // reset the ESP8266
      Serial.println("reset the module");
      sendData("AT+RST\r\n",2000,DEBUG); 
 
      Serial.println("Change to station mode");
      sendData("AT+CWMODE=1\r\n",1500,DEBUG);
 
      Serial.println("Connect to a network ");
     
      sendData("AT+CWJAP=\"SSID\",\"PASSWORD_SSID\"\r\n",6000,DEBUG);
     
      Serial.println("Set Static IP to 192.168.0.180");
     
      sendData("AT+CIPSTA=\"192.168.0.180\",\"192.168.0.1\",\"255.255.255.0\"\r\n",2000,DEBUG);
 
      Serial.println("Get the ip address assigned ny the router");
      sendData("AT+CIFSR\r\n",1000,DEBUG);
 
      Serial.println("Set for multiple connections");
      sendData("AT+CIPMUX=1\r\n",1500,DEBUG);
       
      Serial.println("Start the Web server");
      sendData("AT+CIPSERVER=1,80\r\n",1500,DEBUG);
 
      Serial.println("");

      // Initialisation du timer
      Timer=millis();
}
 
 
void loop()
{

  // **** Gestion des requetes entrantes ****
 
if(espSerial.available()) // teste si l'ESP envoi un message
{
  if(espSerial.find("+IPD,")) // avance jusqu'a trouver +IPD
  {
    delay(1000);
    int connectionId = espSerial.read()-48;
    // soustrait 48 parceque la fonction read() retournela valeur ASCII decimale , zero (0) par exemple vaut 48 en ASCII decimal

    // Permet de controler plusieurs led si besoin en indiquant le pin dans la requête http
        //espSerial.find("pin="); // avance le curseur to "pin="
        //int pinNumber = (espSerial.read()-48)*10; // get first number i.e. if the pin 13 then the 1st number is 1, then multiply to get 10
        //pinNumber += (espSerial.read()-48); // get second number, i.e. if the pin number is 13 then the 2nd number is 3, then add to the first number
   
    espSerial.find("etat="); //avance le curseur to etat
   
    etat = (espSerial.read()-48);

    if (etat==0) digitalWrite(led, LOW);
    if (etat==1) digitalWrite(led, HIGH);

    Serial.println((String)"La led est " + etat);

    String webpage = "<h1>Etat de la led</h1><h2>La Led est ";
    webpage += etat;

    String cipSend = "AT+CIPSEND=";
    cipSend += connectionId;
    cipSend += ",";
    cipSend +=webpage.length();
    cipSend +="\r\n";
    sendData(cipSend,1000,DEBUG);
    sendData(webpage,1000,DEBUG);
     

    // Fermeture de mla connexion connectionId 
    String closeCommand = "AT+CIPCLOSE=";
    closeCommand+=connectionId;
    closeCommand+="\r\n";
    sendData(closeCommand,3000,DEBUG);

  }
 
}
  // **** Gestion des requetes sortante ****

  //Envoi de la température toutes les 5 minutes
  if ((millis()  - Timer) > EedomusInterval) {
    Timer=millis();
    sensors.requestTemperatures();
    float tempC = sensors.getTempC(sonde);
    req=TEMP_EEDOMUS_D + String(tempC) + TEMP_EEDOMUS_F;    //req contient la requête http à envoyer
   

    sendData("AT+CIPSTART=1,\"TCP\",\"192.168.0.206\",80\r\n",1500,DEBUG); // 1 étant le numéro d'ID pour cette connexion, ID obligatoire car AT+CIPMUX=1
   
    taille_req=req.length();
    String cipSend2 = "AT+CIPSEND=1,";
    cipSend2 += taille_req;
    cipSend2 +="\r\n";
    sendData(cipSend2,1500,DEBUG);
 
    sendData(req,2000,DEBUG);
    sendData("AT+CIPCLOSE=1\r\n",1500,DEBUG);
   
  }

}
 // fonction sendData utilisee pour initialiser l'ESP
String sendData(String command, const int timeout,boolean debug)
{
  String response = "";
  espSerial.print(command); // envoi le caractere a l' esp8266
  long int time = millis();
  while( (time+timeout) > millis())
  {
      while(espSerial.available())
      {
      char c = espSerial.read(); // lit le caractere suivant
      response+=c;
      }
  }
  if(debug) {Serial.println(response);}
  return response;
}




Voila, a adapter suivant vos besoins.

Maintenant que j'arrive a communiquer dans les deux sens, il me reste à adapter le code que m'a fourni le concepteur de la carte de pilotage de Spa Intex, c'est à dire remplacer la communication RemoteXY par des requêtes http.
jcmontigny
 
Messages : 423
Inscription : 30 Juin 2012

Re: Arduino + ESP8266-01 + Eedomus

Messagepar Dominic » 09 Août 2019 11:11

@ jcmontigny,

Très intéressant, je vais regarder cela de près.
Je suis actuellement obligé de vider mon SPA à chaque fois que je pars plusieurs jours et de le remplir à mon retour, car impossible de le piloter à distance (filtration, désinfection,...).
Donc c'est sans doute une bonne solution :D
A suivre...
Et merci pour ce travail !

Dominic
Eedomus+ - RFXcom USB - RFPlayer - Onduleur - Clé4G - NAS Qnap - Caméras Foscam et Réolink - Modules Fibaro - Modules 433Mhz - Prises POPP - Stores orientables Somfy - Pergola bioclimatique moteurs Somfy - Impérihome
Dominic
 
Messages : 310
Inscription : 09 Sep 2016

Re: Arduino + ESP8266-01 + Eedomus

Messagepar mickey2209 » 19 Août 2019 09:16

salut
j'ai egalement une eddomus (je debute)
et un spa intex j'aimerai egalement pouvoir faire tourner la filtration et la chauffe en heure creuse, mais avant de me lancer dans un tel projet j'ai quelques questions car mes connaissances sont limités peut tu me dire dans un premier temps a combien t'es revenu ton installation pour domotiser ton spa?
y ' t 'il de la programmation a faire?(je n'y connais rien)
j'ai regarder quelque tuto mais beaucoup sont avec jeedom et ca a l'air tellement complexe...
merci de tes reponses
mickey2209
 
Messages : 38
Inscription : 30 Mai 2018

Re: Arduino + ESP8266-01 + Eedomus

Messagepar jcmontigny » 26 Août 2019 07:22

Tout d'abord il faut aquérir la carte de Jean-Paul Marechal, qui la vend 60€ + frais de port (tout est livré avec)

Ensuite tu as deux options:

- Soit tu n'y connais rien en programmation, dans ce cas tu pilotes à distance le SPA de manière manuelle avec l'application RemoteXY pour smartphone.

- Soit tu connais la programmation Arduino (proche du langage C), dans ce cas la il faut ajouter l'achat du code de JPM (50€) à adapter pour pilotage par l'eedomus
jcmontigny
 
Messages : 423
Inscription : 30 Juin 2012

Re: Arduino + ESP8266-01 + Eedomus

Messagepar Michteedo » 26 Août 2019 15:36

Bonjour et merci de l info....
j'attend moi meme une paire d'Arduino pour démarrer différente chose...

Si je comprends bien avec l' Esp on peut communiqué depuis l 'Eedomus?

je vais voir; moi j'aimerais piloter qqls relais et avoir qqls sonde de température.

j'ai hate de pouvoir pratiquer mais au moi d'aout; j'ai qqls délai de livraison.

MI
Dernière édition par Michteedo le 26 Août 2019 16:03, édité 1 fois.
Michteedo
 
Messages : 107
Inscription : 24 Avr 2018

Re: Arduino + ESP8266-01 + Eedomus

Messagepar KikiFUNstyle » 26 Août 2019 15:47

Il existe un module 'tout fait' shelly https://shelly.cloud/shelly1-open-source/ qui comprend en fait un ESP8266 flashable.
ZWave / RFXCom / broadlink RM /Google Mini / Yeelight / Xiaomi Vacuum V1 / Shelly <3 / Node-RED <3 <3
[Store] Shelly
KikiFUNstyle
 
Messages : 908
Inscription : 24 Avr 2014
Localisation : Toulouse

Re: Arduino + ESP8266-01 + Eedomus

Messagepar Michteedo » 26 Août 2019 16:11

Hola cela va bien vite....merci du lien....super ces modules schelly....
je saisi pas bien comment cela se raccorde mais ...

MI
Michteedo
 
Messages : 107
Inscription : 24 Avr 2018

Re: Arduino + ESP8266-01 + Eedomus

Messagepar jcmontigny » 02 Sep 2019 16:29

Je n'ai pas fait le tour de tous les périphériques Shelly, mais d'après ceux que j'ai vu ca ne ressemble en rien à une carte Arduino avec sa multitude d'entrée/sortie et son prix intéressant.

Comme je le disais dans mon post initial, autant utiliser une carte ESP flashée (entre 2 et 5€) avec Arduino et utiliser les librairies "wifi" qui permettent d'utiliser la carte en client/serveur web, beaucoup plus simples et réactives que les commande ATs et facilement intégrale avec eedomus.

Dans mon projet je n'ai pas le choix d'utiliser les commandes AT.
jcmontigny
 
Messages : 423
Inscription : 30 Juin 2012

Re: Arduino + ESP8266-01 + Eedomus

Messagepar Cen » 08 Jan 2020 20:00

Bonjour,
Je ne vois que maintenant cette discussion. J'ai publié quelques montages à base d'un ESP8266, dans lesquels j'explique comment les intégrer dans la box eedomus. J'espère que cela peut vous être utile
Cen
 
Messages : 53
Inscription : 14 Oct 2015

Re: Arduino + ESP8266-01 + Eedomus

Messagepar doud18 » 19 Avr 2020 15:33

Bonjours a tous,

je vient aussi d acheté une carte la même que toi @jcmontigny ...

je voulais savoir as tu trouvé comment supprimé remote xy par un autre System

car oui c 'est bien de piloté son spa avec son téléphone mais en même temps tu ne sais faire que a avec cette application
doud18
 
Messages : 1
Inscription : 19 Avr 2020

Re: Arduino + ESP8266-01 + Eedomus HTTP actionneur

Messagepar stephane voillot » 02 Déc 2020 16:52

Bonjour à tous,
j'utilise eedomus depuis plus d'un anet en suis très satisfait
je veux maintenant (même si c'est pas trop la saison) piloter mon arrosage automatiquement à partir de ma box
pour cela j'utilise une carte Arduino Wemos D1 R2 Wifi et des relais
A partir des exemple trouvé sur le Web j'arrive sans problème à piloter la LED de la carte à partir d'une page web, et voudrai maintenant piloter cette même LED à partir d'Eedomus

sur Eedomus, j'ai créé un actionneur HTTP
dans les valeurs de cet actionneurs dans la partie URL j'ai renté:
http://192.168.86.60/ qui est l'IP forcée de ma Wemos
type = GET
paramètres = ?LED=OFF

idem pour l'état 1 avec LED = ON

en activant le bouton de test, la barre d'adresse est mise à jour avec des tas de choses, dans lesquels je retrouve mon IP de destination...rien n'arrive à ma carte Wifi( elle est en attente de réception)!
j'en déduit que la requette n'arrive pas et qu'elle est soit mal formulée, ou bloquée

étant a priori en local, la doc me dit que je n'ai pas besoin d'insérer mon API secret et celui du périphérique visé...est ce correct?

qu'est ce qui n'est pas bon dans ma démarche?
(j'ai pourtant beaucoup surfé, et de plus suis complètement novice dans ces histoire d'IP :x et autres.)
par avance merci pour vos explications
Stéphane
stephane voillot
 
Messages : 3
Inscription : 16 Oct 2019

Re: Arduino + ESP8266-01 + Eedomus

Messagepar Cen » 02 Déc 2020 17:54

Bonjour Stéphane,

J’ai une dizaine de capteurs basés sur des ESP8266 et ESP32, et je n’ai pas de problème pour les piloter depuis la box eedomus. En lisant ta description, j’ai l’impression que tout est correct.

La procédure est :
1) Créer un actionneur HTTP
2) Dans l’onglet “Etat”, créer par exemple deux états
0: Led On, et y mettre ton URL, par exemple http://192.168.86.60/LED=OFF
1: Led Off, et y mettre ton URL, par exemple http://192.168.86.60/LED=ON

Et ça devrait rouler.

J’ai publié quelques tutos, à base de 8266, dans lesquels tu devrais trouver tous les cas de figures désirés (le 8266 envoie de l’info à la box eedomus, ou, le 8266 reçoit des données de la box eedomus)
• Dois-je arroser ma plante chérie ?
• Tuto : Enfin un son remarquable pour la eedomus!!
• TUTO: Gamelle connectée pour chat
• Surveillance CO2

Amicalement
CEN
Cen
 
Messages : 53
Inscription : 14 Oct 2015

Re: Arduino + ESP8266-01 + Eedomus

Messagepar stephane voillot » 04 Déc 2020 17:59

Merci Cen!

finalement ça marche ..voilà l'exposé
j'ai à l'origine installé l'eedomus avec un modem routeur, et l'adresse IP s'est retrouvée en192.168.1.86
entre temps j'ai ajouté une free box crystal (8mbts) &2 PC alors qu'avec le modem je monte à 130M c'est mieux pour le télétravail, et mon réseau câblé est en 192.168.0.xx
constatant que mon eps8266 ne recevait jamais rien alors que sur une page web cela marchait je me suis dit que l'eedomus avait un pb d'adresse IP pour communiquer avec le reste des équipements du réseau
j'ai alors joué avec les pings et n'arrivais pas à pinger eedomus! donc pas visible de mon réseau local
on avance...

et l'adresse eedmus était en dehors de mon sous réseau...(je pense que c'est la raison mais j'aurais besoin d'une bonne formation sur le sujet)

j'ai voulu forcé l'adresse IP de l'eedomus (adr_ip_eedomus/config) pour la remettre dans le même sous réseau
patatra : plus de connexion web : Led clignote en bleu
après pleins de manipes je me suis décidé à re installer eedomus : tout est conservé, sauf l'adresse IP dans le cas ou elle était forcée..était bien ce qui m'intéressait
après qq minutes et plusieurs redémarrage, eedomus est en Vert , et mon adresse IP eedomus est bien dans mon sous réseau 192.168.0.xx
de là je peux piloter ma Led, et plus tard mes relais

me reste à forcer l'adresse IP eedomus au delà de la dernière adresse DHCP pour quelle reste constante
j'espère que cela peut être utile

pour info comme j'ai une carte Robotdyn (Uno + esp) également je compte faire de la safety en contrôlant esp8266 par le UNO et vice versa et commander un reset en cas de pb...

et merci encore pour ton retour rapide

Stéphane
stephane voillot
 
Messages : 3
Inscription : 16 Oct 2019

Re: Arduino + ESP8266-01 + Eedomus

Messagepar Cen » 04 Déc 2020 18:04

top!
Merci pour le retour
Cen
 
Messages : 53
Inscription : 14 Oct 2015


Retour vers Mes usages

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 14 invité(s)