Retour à l'accueil

Intégration d'un affichage vintage dans une maison intelligente | ESP8266 et MQTT

L'article décrit le processus d'adaptation d'un affichage de caisse vintage Wincor Nixdorf BA64-2 pour une utilisation dans des systèmes de maison intelligente. Modification matérielle, implémentation logicielle sur ESP8266 et intégration avec un courtier MQTT sont discutées en détail. La solution permet d'afficher des données critiques sans accès constant à l'interface principale.

Affichage de caisse vintage prend vie dans une maison intelligente : intégration étape par étape
Advertisement 728x90

# Afficheur Vintage de Caisse Enregistreuse dans une Maison Connectée : Intégration avec ESP8266 et MQTT

Les afficheurs à décharge de gaz vintage provenant de caisses enregistreuses constituent un matériau idéal pour créer des panneaux d'information compacts dans les systèmes de domotique. Cet article détaille l'adaptation de l'afficheur Wincor Nixdorf BA64-2 pour un contrôle via ESP8266 avec synchronisation NTP et intégration d'interface MQTT. Cette solution permet d'afficher des données critiques sans accès permanent à l'interface principale.

Analyse Matérielle et Brochage

L'afficheur Wincor Nixdorf BA64-2 est un indicateur à décharge de gaz à deux lignes (20×2 caractères) dans un boîtier compact. Le principal défi réside dans l'absence de documentation pour le connecteur RJ45 non standard. L'inspection initiale a révélé les caractéristiques suivantes :

  • Le connecteur est physiquement compatible Ethernet mais électriquement non conforme
  • Il prend en charge deux interfaces : USB et RS232 via un seul connecteur
  • Aucune marque de broche dans la fiche technique

Après démontage de l'appareil et analyse de la carte avec un voltmètre, le brochage a été déterminé :

Google AdInline article slot
  • Broche 1 : +5V (alimentation)
  • Broche 4 : GND
  • Broches 2-3 : USB Data±
  • Broches 6-8 : signaux RS232 (TxD/RxD)

Il est absolument crucial de vérifier les tensions avec un multimètre avant toute connexion, car les adaptateurs standards peuvent endommager l'appareil. Un oscilloscope a confirmé les niveaux RS232 (-7/+7V) sur les broches 6 et 8.

Modification pour Connexion Série TTL Directe

La puce ADM3232E — un convertisseur TTL-RS232 — a été identifiée sur la carte. Son retrait donne accès à l'interface série TTL native, simplifiant l'intégration avec les contrôleurs modernes. Les étapes sont les suivantes :

  • Dessouder la puce à l'aide d'un pistolet à air chaud à 350°C
  • Nettoyer les pastilles de contact des résidus de soudure
  • Identifier les lignes R2out/T2in (canal de transmission principal)
  • Souder des fils sur les pastilles : VCC (3.3V), GND, TX, RX
  • Fixer les connexions avec de la colle chaude

La connexion série TTL directe élimine le besoin de convertisseurs de niveau. Note : l'afficheur fonctionne en 3.3V, l'alimentation doit donc correspondre. Pour un fonctionnement stable, un délai de 4 ms est requis entre les octets transmis — cela compense la faible vitesse de traitement de l'afficheur.

Google AdInline article slot

Exemple de gestion des données :

bool outs = false;
void outString(char * buf, int length){
  if(outs) return;
  outs = true;
  for(int i=0; i< length; i++){
    Serial.write(buf[i]);
    delay(4);
  }
  outs = false;
}

Implémentation Logicielle et Intégration

Le micrologiciel, basé sur le Framework Arduino, implémente trois fonctions clés : connexion Wi-Fi, client MQTT et synchronisation NTP. L'architecture comprend :

  • Commutation automatique entre les modes (horloge/message d'info)
  • Gestion des séquences d'échappement pour le contrôle du curseur
  • Support des caractères UTF-8 (y compris °C)

Composants principaux du code :

Google AdInline article slot
#define CLEAR_SCREEN "\x1B[2J"
#define LINE1_0 "\x1B[1;0H"
#define INFO_PERIOD 60000

void drawClock(){
  time_t dtm = time(nullptr) + 10800; // UTC+3
  DateTime now = DateTime(dtm);
  char buf[21];
  sprintf(buf, "\x1B[1;0H%02d.%02d.%04d %02d:%02d:%02d",
    now.day(), now.month(), now.year(),
    now.hour(), now.minute(), now.second());
  outString(buf, strlen(buf));
}

void msg_callback(char* topic, byte* payload, unsigned int length){
  if(!strncmp((char *)payload, "line1 ", 6)){
    clock_mode = false;
    info_timer = millis();
    outString(LINE1_0, strlen(LINE1_0));
    outString((char*)&payload[6], length - 6);
  }
}

La synchronisation temporelle est gérée via un serveur NTP local. Au démarrage, le système attend jusqu'à 4 secondes pour l'acquisition de l'heure :

void TimeSetup(){
  configTime(0, 0, "ntpserver.home");
  int cnt = 4;
  while (!time(nullptr) && cnt > 0) {
    delay(1000);
    cnt--;
  }
}

Le mode message d'info se termine automatiquement après 60 secondes, revenant à l'affichage de l'horloge. Cela évite de bloquer l'interface principale.

Application Pratique dans les Systèmes de Domotique

L'intégration de l'afficheur dans les écosystèmes existants répond à deux besoins clés :

  • Surveillance en temps réel des paramètres critiques — température de la chaudière, humidité du sous-sol, état des panneaux solaires
  • Notifications sans smartphone — messages système (« Fuite de gaz », « Portail ouvert »)

Exemple pour suivre la température :

mosquitto_pub -h localhost -t "ba64/line1" -m "kotel 63.28/55.43\xC2\xB0C"

Le système est évolutif : plusieurs afficheurs peuvent afficher des informations différentes en s'abonnant à des topics spécifiques. Pour étendre les fonctionnalités, modifiez simplement le gestionnaire de messages MQTT pour supporter de nouvelles commandes.

Points Clés

  • Vérifications de tension obligatoires : mesurez toutes les broches avant connexion — les adaptateurs standards peuvent endommager l'afficheur.
  • Délai de transmission critique : sans delay(4) entre les octets, des pertes de données surviennent en raison des différences de vitesse de traitement.
  • Mises à jour OTA indispensables : conservez la possibilité de reflasher sans accès physique à l'appareil.
  • Séquences d'échappement : utilisez les codes de contrôle de la fiche technique pour un positionnement précis du curseur.
  • Serveur NTP local : les serveurs externes peuvent être indisponibles, perturbant le fonctionnement de l'horloge.

— Editorial Team

Advertisement 728x90

Lire ensuite