Sniffer MQTT V1

Réalisez un « Sniffer » MQTT avec un écran TFT tactile

A l’aide d’un Arduino UNO R3 et d’un ESP8266 ou d’un « CYD » avec ESP32 aussi nommé « Cheap Yellow Display »


Objectif

Capturer, afficher et éventuellement d’enregistrer sur carte SD, tous les messages MQTT échangés sur un réseau.

Fonctionnement

L’écran tactile résistif affiche le menu et permet de choisir le mode de fonctionnement. Après quoi, il affiche les messages et le cas échéant, les enregistre sur une carte SD dans un fichier CSV.

Réalisation

Dans la version 1, il est basé sur un Arduino UNO r3 et le bouclier (shield) comprenant un écran TFT 2.4″ et un connecteur pour carte SD micro.
J’avais cela en stock et ne les avais jamais utilisés !
L’UNO ne possédant pas de puce wifi, un esp8266 gère la partie WiFi/MQTT.

Ce n’est clairement pas la meilleure solution ! Il est assez facile de réaliser le même équipement avec un ESP32, un écran TFT tactile et un adaptateur pour une carte SD.

Dans la version 2, j’ai opté pour un « CYD » 2.8 pouces.
En plus de l’affichage plus grand, il a la possibilité de se connecter sur un réseau choisi.
Ce module de développement comprend un esp32 double coeur à 240 MHz, un écran TFT tactile résistif de 320/240 pixels, une interface Carte SD, une LDR et une LED RVB.

Le projet est facilement adaptable à un ensemble esp32 différent, d’un écran TFT tactile SPI et une interface carte SD SPI. Il convient juste de s’assurer que le microcontrôleur possède assez de GPIO pour les différents SPI

Schémas

Version 1 ( UNO et esp8266)

Version 2 (CYD 2.8″)

Code

Fichier « platformio.ini »
[env:esp32doit-devkit-v1]
platform = espressif32
board = esp32doit-devkit-v1
framework = arduino
lib_deps = 
	bodmer/TFT_eSPI@^2.5.43
	PaulStoffregen/XPT2046_Touchscreen@^1.4
	marvinroger/AsyncMqttClient@^0.9.0
monitor_speed = 115200
Fichier « reseau.h »

Il y a lieu de remplacer les caractères en italique gras par les valeurs correspondant à vos propres réseaux !

#ifndef reseau_h
#define reseau_h

struct reseau_config
{
    const char *sid;
    const char *wifi_sesame;
    IPAddress ip;
    IPAddress gw;
    IPAddress mask;
    IPAddress ns;
    const char *mqtt_serveur;
    uint16_t mqtt_port;
    const char *mqtt_identifiant;
    const char *mqtt_sesame;
};

const reseau_config reseaux[] =
{
    {
        "SSID du premier réseau",
        "Mot de passe du premier réseau",
        IPAddress(x, x, x, x),
        IPAddress(x, x, x, x),
        IPAddress(x, x, x, x),
        IPAddress(x, x, x, x),
        "x.x.x.x",
        x,
        "Identifiant MQTT du premier réseau",
        "Mot de passe MQTT du premier réseau"
    },
    {
        "SSID du second réseau",
        "Mot de passe du premier réseau",
        IPAddress(x, x, x, x),
        IPAddress(x, x, x, x),
        IPAddress(x, x, x, x),
        IPAddress(x, x, x, x),
        "x.x.x.x",
        x,
        "Identifiant MQTT du second réseau",
        "Identifiant MQTT du second réseau"
    }
};

#endif
Boîtier

J’ai imprimé le boîtier en PLA d’après ce modèle que j’ai publié sur ce site.
Les schémas, codes et 3D sont disponibles sur demande.

Améliorations

Le programme est basique et il serait intéressant d’ajouter des fonctions :
de filtrage pour n’afficher que les sujets (topic) et/ou les messages (payload) souhaités
de mise en couleur de certains sujets et/ou messages

Vous êtes intéressé par l’objet de cet article ?
Laissez-moi un message via le formulaire en bas de page!
Je vous enverrai le lien pour télécharger le code.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *