logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 02-02-2019 10:52:05

Debian Alain
Membre
Lieu : Bretagne
Distrib. : sid (unstable) / bullseye (stable)
Noyau : Linux sid 6.4.0-3-amd64
(G)UI : Gnome X.org (X11) / GDM3
Inscription : 11-03-2017
Site Web

[clos] MQTT nodeMcu

bonjour les gars .

bon , comme suggéré par bendia , je me penche sur le mqtt .

donc ,

soit le programme suivant :


#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <PubSubClientTools.h>

#include <Thread.h>             // https://github.com/ivanseidel/ArduinoThread
#include <ThreadController.h>

#define WIFI_SSID "Bbox-xxxxxxxxx"
#define WIFI_PASS "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
#define MQTT_SERVER "broker.mqtt-dashboard.com"

WiFiClient espClient;
PubSubClient client(MQTT_SERVER, 1883, espClient);
PubSubClientTools mqtt(client);

ThreadController threadControl = ThreadController();
Thread thread = Thread();

int value = 0;
String s = "";

void setup() {
  Serial.begin(115200);

  // Connect to WiFi
  Serial.print(s+"Connecting to WiFi: "+WIFI_SSID+" ");
  WiFi.begin(WIFI_SSID, WIFI_PASS);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println(s+" connected with IP: "+WiFi.localIP());

  // Connect to MQTT
  Serial.print(s+"Connecting to MQTT: "+MQTT_SERVER+" ... ");
  if (client.connect("ESP8266Client")) {
    Serial.println("connected");

    mqtt.subscribe("test/inTopic1", topic1_subscriber);
    mqtt.subscribe("test/inTopic2", topic2_subscriber);
  } else {
    Serial.println(s+"failed, rc="+client.state());
  }

  // Enable Thread
  thread.onRun(publisher);
  thread.setInterval(2000);
  threadControl.add(&thread);
}

void loop() {
  client.loop();
  threadControl.run();
}

void publisher() {
  ++value;
  mqtt.publish("test/outTopic", s+"hello world "+value);
}
void topic1_subscriber(String topic, String message) {
  Serial.println(s+"Message arrived in function 1 ["+topic+"] "+message);
}
void topic2_subscriber(String topic, String message) {
  Serial.println(s+"Message arrived in function 2 ["+topic+"] "+message);
}
 



accompagné du gestionnaire de mqtt suivant :

1549100968.png


question : c'est quoi le "topic to subscribe" ?

que dois je rentrer ? où le trouver ?

Dernière modification par Debian Alain (25-12-2019 18:50:58)

Hors ligne

#2 02-02-2019 14:15:23

Debian Alain
Membre
Lieu : Bretagne
Distrib. : sid (unstable) / bullseye (stable)
Noyau : Linux sid 6.4.0-3-amd64
(G)UI : Gnome X.org (X11) / GDM3
Inscription : 11-03-2017
Site Web

Re : [clos] MQTT nodeMcu

toujours pas compris ce que sont les

- topic to subscribe
(apparemment le retour des données dans le MQTT)

- topic to publish
(apparemment les données à envoyer au broker)

le programme suivant fonctionne :
(testé)


/*  ___   ___  ___  _   _  ___   ___   ____ ___  ____  
 * / _ \ /___)/ _ \| | | |/ _ \ / _ \ / ___) _ \|    \
 *| |_| |___ | |_| | |_| | |_| | |_| ( (__| |_| | | | |
 * \___/(___/ \___/ \__  |\___/ \___(_)____)___/|_|_|_|
 *                  (____/
 * Use NodeMCU to drive DHT11 and send temperature/humidity value to MQTT server
 * Tutorial URL http://osoyoo.com/2016/11/24/use-nodemcu-to-send-temperaturehumidity-data-to-mqtt-iot-broker/
 * CopyRight www.osoyoo.com
 */
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include<dht.h>
dht DHT;

// Define NodeMCU D3 pin to as temperature data pin of  DHT11
#define DHT11_PIN D3

// Update these with values suitable for your network.
const char* ssid = "Bbox-xxxxxxx";
const char* password = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
const char* mqtt_server = "broker.mqtt-dashboard.com";
//const char* mqtt_server = "iot.eclipse.org";

WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;

void setup_wifi() {
   delay(100);
  // We start by connecting to a WiFi network
    Serial.print("Connecting to ");
    Serial.println(ssid);
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED)
    {
      delay(500);
      Serial.print(".");
    }
  randomSeed(micros());
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void callback(char* topic, byte* payload, unsigned int length)
{
  Serial.print("Command is : [");
  Serial.print(topic);
  int p =(char)payload[0]-'0';
  int chk = DHT.read11(DHT11_PIN);
  // if MQTT comes a 0 message, show humidity
  if(p==0)
  {
    Serial.println("to show humidity!]");
    Serial.print(" Humidity is: " );
    Serial.print(DHT.humidity, 1);
    Serial.println('%');
  }
  // if MQTT comes a 1 message, show temperature
  if(p==1)
  {
  // digitalWrite(BUILTIN_LED, HIGH);
    Serial.println(" is to show temperature!] ");
  int chk = DHT.read11(DHT11_PIN);
   Serial.print(" Temp is: " );
   Serial.print(DHT.temperature, 1);
   Serial.println(' C');
  }
  Serial.println();
} //end callback

void reconnect() {
  // Loop until we're reconnected
  while (!client.connected())
  {
    Serial.print("Attempting MQTT connection...");
    // Create a random client ID
    String clientId = "ESP8266Client-";
    clientId += String(random(0xffff), HEX);
    // Attempt to connect
    //if you MQTT broker has clientID,username and password
    //please change following line to    if (client.connect(clientId,userName,passWord))
    if (client.connect(clientId.c_str()))
    {
      Serial.println("connected");
     //once connected to MQTT broker, subscribe command if any
      client.subscribe("AlainCommand");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 6 seconds before retrying
      delay(6000);
    }
  }
} //end reconnect()

void setup() {
  Serial.begin(115200);
  setup_wifi();
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
  int chk = DHT.read11(DHT11_PIN);
  Serial.print(" Starting Humidity: " );
  Serial.print(DHT.humidity, 1);
  Serial.println('%');
  Serial.print(" Starting Temparature ");
  Serial.print(DHT.temperature, 1);
  Serial.println('C');
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();
  long now = millis();
  // read DHT11 sensor every 10 seconds
  if (now - lastMsg > 10000) {
     lastMsg = now;
     int chk = DHT.read11(DHT11_PIN);
     String msg="Temperature temps reel : ";
     msg= msg+ DHT.temperature;
     msg = msg+" C ;Humidite temps reel : " ;
     msg=msg+DHT.humidity ;
     msg=msg+"%";
     char message[58];
     msg.toCharArray(message,58);
     Serial.println(message);
     //publish sensor data to MQTT broker
    client.publish("AlainData", message);
  }
}
 




console série (moniteur) :


13:46:41.514 ->  1384, room 16
13:46:41.514 -> tail 8
13:46:41.514 -> chksum 0x2d
13:46:41.514 -> csum 0x2d
13:46:41.514 -> v21db8fc9
13:46:41.514 -> ~ld
13:46:41.652 -> Connecting to Bbox-xxxxxxxx
13:46:42.149 -> .
13:46:42.149 -> WiFi connected
13:46:42.149 -> IP address:
13:46:42.149 -> 192.168.1.70
13:46:42.182 ->  Starting Humidity: 20.0%
13:46:42.182 ->  Starting Temparature 27.0C
13:46:42.182 -> Attempting MQTT connection...connected
13:46:42.281 -> Temperature temps reel : 27.00 C ;Humidite temps reel : 2
13:46:52.283 -> Temperature temps reel : 27.00 C ;Humidite temps reel : 2
13:47:02.286 -> Temperature temps reel : 27.00 C ;Humidite temps reel : 2
13:47:07.187 -> Command is : [AlainCommandto show humidity!]
13:47:07.220 ->  Humidity is: 20.0%
13:47:07.220 ->
13:47:11.594 -> Command is : [AlainCommand is to show temperature!]
13:47:11.660 ->  Temp is: 27.08259
13:47:11.660 ->
13:47:12.289 -> Temperature temps reel : 27.00 C ;Humidite temps reel : 2
13:47:16.828 -> Command is : [AlainCommandto show humidity!]
13:47:16.861 ->  Humidity is: 17.0%
13:47:16.861 ->
13:47:22.294 -> Temperature temps reel : 27.00 C ;Humidite temps reel : 2
13:47:23.387 -> Command is : [AlainCommand is to show temperature!]
13:47:23.420 ->  Temp is: 27.08259
13:47:23.420 ->
13:47:28.190 -> Command is : [AlainCommand is to show temperature!]
13:47:28.256 ->  Temp is: 27.08259
13:47:28.256 ->
13:47:32.297 -> Temperature temps reel : 27.00 C ;Humidite temps reel : 2
13:47:42.299 -> Temperature temps reel : 27.00 C ;Humidite temps reel : 1
13:47:52.301 -> Temperature temps reel : 27.00 C ;Humidite temps reel : 2
13:48:02.303 -> Temperature temps reel : 27.00 C ;Humidite temps reel : 2
13:48:12.308 -> Temperature temps reel : 27.00 C ;Humidite temps reel : 2
13:48:22.310 -> Temperature temps reel : 27.00 C ;Humidite temps reel : 2
... / ...
13:52:42.331 -> Temperature temps reel : 26.00 C ;Humidite temps reel : 2
13:52:52.330 -> Temperature temps reel : 26.00 C ;Humidite temps reel : 2
13:53:02.331 -> Temperature temps reel : 26.00 C ;Humidite temps reel : 2
13:53:12.332 -> Temperature temps reel : 26.00 C ;Humidite temps reel : 2
13:53:22.333 -> Temperature temps reel : 26.00 C ;Humidite temps reel : 2
13:53:32.335 -> Temperature temps reel : 26.00 C ;Humidite temps reel : 2
13:53:38.461 -> Command is : [AlainCommandto show humidity!]
13:53:38.494 ->  Humidity is: 21.0%
13:53:38.494 ->
13:53:42.336 -> Temperature temps reel : 26.00 C ;Humidite temps reel : 2
13:53:42.966 -> Command is : [AlainCommand is to show temperature!]
13:53:43.032 ->  Temp is: 26.08259
13:53:43.032 ->
13:53:52.337 -> Temperature temps reel : 26.00 C ;Humidite temps reel : 1
13:54:02.338 -> Temperature temps reel : 26.00 C ;Humidite temps reel : 2
13:54:12.339 -> Temperature temps reel : 26.00 C ;Humidite temps reel : 2
13:54:22.342 -> Temperature temps reel : 26.00 C ;Humidite temps reel : 2
13:54:32.347 -> Temperature temps reel : 26.00 C ;Humidite temps reel : 2
13:54:42.349 -> Temperature temps reel : 26.00 C ;Humidite temps reel : 2
13:54:52.350 -> Temperature temps reel : 26.00 C ;Humidite temps reel : 2
 



1549112326.png

en somme tout fonctionne bien . j'ai réussi à calibrer mon programme toutes les 10 secondes contre 6 à l'origine .

je râle un peu  : obligé d'utiliser un client spécial et non sur le web ... mais après tout ....
vu que c'est une apli domestique .... pourquoi pas ?

j'ai pas bien compris exactement ce qu'est mqtt et comment il fonctionne ???
dans les grandes lignes pour commencer .

Dernière modification par Debian Alain (03-02-2019 15:29:26)

Hors ligne

#3 02-02-2019 14:33:19

bendia
Chadministrateur
Distrib. : openSUSE Tumbleweed, Buster
Noyau : Linux 5.9.1-2-default + Linux 4.19.0-12-amd64
(G)UI : Gnome + Console et un peu Fluxbox
Inscription : 20-03-2012
Site Web

Re : [clos] MQTT nodeMcu

Debian Alain a écrit :

j'ai pas bien compris exactement ce qu'est mqtt et comment il fonctionne ???
dans les grandes lignes pour commencer .

Comme le forum wink

Voilà un début d'article qui t'explique en français, avec des petits schémas.

Rien ne t'impose de passer par un site extérieur, tout peut être chez toi sur ton RaspberryPi par exemple.

Mais, ça ne t'empêche pas de devoir mettre ton nodeMCU en veille. Et plus la veille sera longue, plus tu économisera la batterie. Dans l'idée d'une station météo, est-ce qu'une mesure toutes les 10 secondes est nécessaire ? A toi de déterminer le pas de mesure, mais chez moi, j'en fais une tous les 1/4 d'heure, et j'arrive déjà avec ça à voir la montée en température de la maison en fonction de l'heure de déclenchement de la chaudière wink


Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.

Hors ligne

#4 02-02-2019 15:58:25

Debian Alain
Membre
Lieu : Bretagne
Distrib. : sid (unstable) / bullseye (stable)
Noyau : Linux sid 6.4.0-3-amd64
(G)UI : Gnome X.org (X11) / GDM3
Inscription : 11-03-2017
Site Web

Re : [clos] MQTT nodeMcu

Et plus la veille sera longue, plus tu économisera la batterie. Dans l'idée d'une station météo, est-ce qu'une mesure toutes les 10 secondes est nécessaire ? A toi de déterminer le pas de mesure,



je m'en doute . mais c'est un galop d'essai , bendia . c'est mon tout premier I.O.T. .

comme tu le dis , tous les 15Min , ça devrai suffire .

j'ai essayé d'installer nodered  sur rpi . je crois que j'y suis arrivé . pas  sûr .
(sudo apt install nodered)

j'essaie d'installer mosquitto (sur rpi là aussi) . je crois que j'y suis arrivé mais j' hésite pour le paramétrage .

https://www.instructables.com/id/How-to … d-ESP8266/

Dernière modification par Debian Alain (02-02-2019 16:06:10)

Hors ligne

#5 03-02-2019 15:32:37

Debian Alain
Membre
Lieu : Bretagne
Distrib. : sid (unstable) / bullseye (stable)
Noyau : Linux sid 6.4.0-3-amd64
(G)UI : Gnome X.org (X11) / GDM3
Inscription : 11-03-2017
Site Web

Re : [clos] MQTT nodeMcu

bon , node réglé toutes les 15 min , on va voir . dans moins de 5 min , normalement ...

po po po po po , çà marche .

reste à me procurer des régulateurs 3.3Volts . en boitier TO 220 , ce serai super ...

Dernière modification par Debian Alain (03-02-2019 15:36:13)

Hors ligne

#6 03-02-2019 16:22:35

bendia
Chadministrateur
Distrib. : openSUSE Tumbleweed, Buster
Noyau : Linux 5.9.1-2-default + Linux 4.19.0-12-amd64
(G)UI : Gnome + Console et un peu Fluxbox
Inscription : 20-03-2012
Site Web

Re : [clos] MQTT nodeMcu

Debian Alain a écrit :

reste à me procurer des régulateurs 3.3Volts

Pour quoi faire ?


Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.

Hors ligne

#7 03-02-2019 16:26:40

Debian Alain
Membre
Lieu : Bretagne
Distrib. : sid (unstable) / bullseye (stable)
Noyau : Linux sid 6.4.0-3-amd64
(G)UI : Gnome X.org (X11) / GDM3
Inscription : 11-03-2017
Site Web

Re : [clos] MQTT nodeMcu

adapter l'alim par pile (4x1.5V. soit 6 volts ou pile carrée 9V) à 3.3 volts .

la connection 6 volts sur le V.in ne fonctionne pas très bien .

au contraire de la connection 5 volts sur la prise usb , donc 3.3 volts en sortie .

Dernière modification par Debian Alain (03-02-2019 16:31:16)

Hors ligne

#8 03-02-2019 16:32:40

bendia
Chadministrateur
Distrib. : openSUSE Tumbleweed, Buster
Noyau : Linux 5.9.1-2-default + Linux 4.19.0-12-amd64
(G)UI : Gnome + Console et un peu Fluxbox
Inscription : 20-03-2012
Site Web

Re : [clos] MQTT nodeMcu

Debian Alain a écrit :

la connection 6 volts sur le V.in ne fonctionne pas très bien .

C'est à cause de la chute de tension trop élevé du régulateur 3.3V de la carte du pense ?


Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.

Hors ligne

#9 03-02-2019 16:41:10

Debian Alain
Membre
Lieu : Bretagne
Distrib. : sid (unstable) / bullseye (stable)
Noyau : Linux sid 6.4.0-3-amd64
(G)UI : Gnome X.org (X11) / GDM3
Inscription : 11-03-2017
Site Web

Re : [clos] MQTT nodeMcu

je sais pas . ce que je sais c'est que certaines docs disent de pas dépasser 20 volts sur le V.in
d'autres disent de pas dépasser 9 Volts

certais prétendent qu'avec 5 Volts , çà marche très bien ...

vu la pagaille dans les donnees , je préfère alimenter soit en 5 volts sur V.in (idem usb)

soit en 3.3 volts sur les broches adéquates ...

mais , honnêtement , je ne sais que faire pour l'alim ....

le but est de mettre le node sur piles afin d'accéder à l'autonomie .

https://faire-ca-soi-meme.fr/domotique/ … ros-etude/

https://dziadalnfpolx.cloudfront.net/bl … 3-pins.jpg

https://easydomoticz.com/forum/viewtopic.php?t=6324

Dernière modification par Debian Alain (03-02-2019 16:52:56)

Hors ligne

#10 03-02-2019 16:50:59

bendia
Chadministrateur
Distrib. : openSUSE Tumbleweed, Buster
Noyau : Linux 5.9.1-2-default + Linux 4.19.0-12-amd64
(G)UI : Gnome + Console et un peu Fluxbox
Inscription : 20-03-2012
Site Web

Re : [clos] MQTT nodeMcu

Debian Alain a écrit :

le but est de mettre le node sur piles afin d'accéder à l'autonomie .

Il n'en reste pas moins qu'il faudra alors mettre la carte en veille pour atteindre cette autonomie wink

Il me semble avoir trouvé le datasheet du régulateur de tension de cette carte. La chute de tension max est de 1,2V, donc, en 6V sur Vin, ça devrait fonctionner. 4,5V aussi, mais c'est juste.


Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.

Hors ligne

#11 03-02-2019 17:03:52

Debian Alain
Membre
Lieu : Bretagne
Distrib. : sid (unstable) / bullseye (stable)
Noyau : Linux sid 6.4.0-3-amd64
(G)UI : Gnome X.org (X11) / GDM3
Inscription : 11-03-2017
Site Web

Re : [clos] MQTT nodeMcu

pour la mise en veille , j'ai suivi ton conseil :

- partage des donnees tous les 15 Min

- mode MQTT

reste l'alim à régler .

quand je dis  que ça marche pas , c'est faux , ça fonctionne mais très mal .

D1 est en fonction par défaut au lieu d' être à l'arrêt (si alimenté en 6 volts avec les piles sur V.in)

je supppose donc  que toutes les sorties logiques sont à "1" dans ce cas . pas vérifié .

c'est pour çà que je sais pas : alim 5 volts sur V.in ou 3.3 volts sur les bonnes broches ?

Hors ligne

Pied de page des forums