Bonjour à tous,
Même si le développement du protocole MySensors est à l’arrêt depuis quelques années, je l’utilise encore et j’ai une partie de ma domotique qui est basé sur ce protocole. Pour une question de pérennité j’ai voulu me séparer du plugin du même nom afin de pouvoir continuer à utiliser et fabriquer des nœuds MySensors.
C’est pour cela que je me suis tournés vers le protocole MQTT qui est très en vogue en ce moment et qui, je pense, à un avenir certain pour notre domotique.
Avant de communiquer en MQTT, il y a un prérequit ! A savoir que les nœuds de votre installation doivent avoir un ID défini car contrairement à une gateway classique, celle-ci n’attribue pas des numéros au nœuds.
#define MY_NODE_ID 6 //exemple
Nous pouvons déjà retrouver une Gateway sur les page du site MySensors, mais j’ai voulu allé plus loin. J’ai créée un PCB pour pouvoir faire 2 gateway différent : NRF24L01 et PJON vers MQTT
La Gateway NRF24L01
Basé sur un Mega 2650 Pro Mini pour le micro contrôleur, un W5500 pour l’Ethernet et 1 E01-2G4M27D (NRF24L01) pour la communication avec les nœuds.
Comme sa petite sœur, la gateway est équipé d’une antenne de routeur WIFI 2.4Ghz. Sur la photo si dessous, elle a évolué par rapport au départ. J’ai rajouté une DS18b20, ainsi qu’un diviseur de tension à résistance pour la monitorer. Oui la monitorer, car la gateway peut avoir des capteurs.
Voici le sketch de base sans les capteurs, pour avoir qu’un seul topic pour la gateway j’ai précisé comme ceci
// Set this node's subscribe and publish topic prefix
#define MY_MQTT_PUBLISH_TOPIC_PREFIX "nrf24l01"
#define MY_MQTT_SUBSCRIBE_TOPIC_PREFIX "nrf24l01/cmd"
Le sketch complet :
//#define MY_DEBUG
#define MY_RADIO_RF24
#define MY_RF24_PA_HIGH // Options: MY_RF24_PA_MAX | MY_RF24_PA_HIGH | MY_RF24_PA_LOW | MY_RF24_PA_MIN
#define W5500_RESET_PIN 4
#define MY_GATEWAY_MQTT_CLIENT
#define MY_SOFTSPI
#define MY_SOFT_SPI_SCK_PIN 34 //34
#define MY_SOFT_SPI_MISO_PIN 32 //32
#define MY_SOFT_SPI_MOSI_PIN 36 //36
#define MY_RF24_CE_PIN 49
#define MY_RF24_CS_PIN 53
//#define MY_SECURITY_SIMPLE_PASSWD "pass"
//#define MY_SIGNING_SIMPLE_PASSWD
//#define MY_ENCRYPTION_SIMPLE_PASSWD
//#define MY_DEBUG_VERBOSE_SIGNING
#define NODE_NAME "Gateway NRF24L01 -> MQTT"
#define NODE_VERSION "1.1"
// Enable these if your MQTT broker requires username/password
//#define MY_MQTT_USER "user"
//#define MY_MQTT_PASSWORD "mdp"
// If using static ip you can define Gateway and Subnet address as well
#define MY_IP_GATEWAY_ADDRESS 192, 168, 1, 1
#define MY_IP_SUBNET_ADDRESS 255, 255, 255, 0
// Set this node's subscribe and publish topic prefix
#define MY_MQTT_PUBLISH_TOPIC_PREFIX "nrf24l01"
#define MY_MQTT_SUBSCRIBE_TOPIC_PREFIX "nrf24l01/cmd"
// Set MQTT client id
#define MY_MQTT_CLIENT_ID "nrf24l01"
// Enable MY_IP_ADDRESS here if you want a static ip address (no DHCP)
#define MY_IP_ADDRESS 192, 168, 1, 115
// MQTT broker ip address or url. Define one or the other.
//#define MY_CONTROLLER_URL_ADDRESS "m20.cloudmqtt.com"
#define MY_CONTROLLER_IP_ADDRESS 192, 168, 1, 36
// The port to keep open on node server mode / or port to contact in client mode
#define MY_PORT 1883
// The MAC address can be anything you want but should be unique on your network.
//#define MY_MAC_ADDRESS 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
#include <Ethernet.h>
#include <MySensors.h>
#define IP_ID 0
MyMessage msgIp(IP_ID, V_TEXT);
// Fonction pour convertir l'adresse IP en chaîne
void getIpString(char* buffer) {
snprintf(buffer, 16, "%d.%d.%d.%d", MY_IP_ADDRESS);
}
void before() {
pinMode(W5500_RESET_PIN, OUTPUT);
digitalWrite(W5500_RESET_PIN, LOW);
delay(10);
digitalWrite(W5500_RESET_PIN, HIGH);
delay(1000);
}
void setup() {
}
void presentation() {
// Envoyer les informations du sketch à la passerelle et au contrôleur
sendSketchInfo(NODE_NAME, NODE_VERSION);
present(IP_ID, S_INFO, "Adresse IP");
char ipStr[16];
getIpString(ipStr); // Convertir l'adresse IP en chaîne
send(msgIp.set(ipStr)); // Envoyer l'adresse IP
}
void loop() {
}
Les PIN pour la gateway NRF24L01:
Pour le NRF24L01:
CNS 53
CE 49
MOSI 36
SCK 34
MISO 32
Pour le W5500:
RST 4
MISO 50
INT 2
CS 10
SCK 52
MOSI 51
Le topic est construit comme ça :
MY_MQTT_PUBLISH_TOPIC_PREFIX/FROM-NODE-ID/SENSOR-ID/CMD-TYPE/ACK-FLAG/SUB-TYPE
La gateway PJON (en cours de développement)
Pour faire court, le PJON est un protocole filaire à un fil comme le 1Wire. Il faut utiliser une librairie spéciale qui intègre le protocole.
J’ai fait cette passerelle pour l’intégrer dans un tableau électrique pour pouvoir piloter des cartes relais, cartes entrées ,…
La gateway PJON embarque un INA226 pour monitorer les conso électrique, car l’alimentation des cartes filles passeront par la gateway.
Voici le fichier Gerber du PCP, il n’y a pas de schéma !
Gerber_MySensors-Gateway-MQTT-v2.zip.txt (142,0 Ko)
Les PIN sont marqués au dos du PCB