Arduino, DHT22 et écran OLED 128*64

Capteur de température et humidité, avec affichage sur un petit écran LCD.

Suite à mon article précédent sur l’écran OLED 0,96″ 128*64, j’ai ajouté sur mon Uno une sonde DHT22 afin de faire des relevés de température et d’humidité, puis de les afficher sur le petit écran.

L’afficheur OLED possède 4 connecteurs :

  1. VCC
  2. GND
  3. SCL
  4. SDA

Pour la sonde de température et humidité :

  1. + (positif)
  2. out (données)
  3. – (négatif)

Aussi bien le DHT22 que l’afficheur peuvent être alimentés en 3,3V comme en 5V, on a donc le choix avec l’Uno qui possède deux connecteurs 5V et un 3,3V !

J’ai donc connecté l’afficheur ainsi :
VCC sur 3,3V
GND sur GND
SCL sur SCL
SDA sur SDA

Pour la sonde:
+ sur 5V
– sur GND
out sur le port 6

Résultat, presque bien :

temp_utf8_2

Ah, l’UTF-8 vient nous embêter même ici 🙂

Une solution est de remplacer dans le code les caractères non standards (comme les accents, ou le signe « degré ») par leur code hexadécimal, comme indiqué dans le tableau suivant.

u8g_font_unifont

 

Pour obtenir « é » on prend donc l’avant-dernière ligne, puis on commence à 0xe0, puis on compte de 0 à 9 puis A à F (c’est de l’hexadécimal…) ce qui nous donne Oxe9.

La ligne suivante :

va devenir :

 

Une autre solution est de recompiler l’IDE Arduino en mode UTF-8. Un peu moins évident…

Voici le code modifié :

Si vous voulez le commander :
Ecran OLED 0.96″ 128X64 blanc pour Arduino

DHT22 Digital Temperature and Humidity Sensor AM2302 Module+PCB with Cable

8 comments

  • TarK`

    Petite modification du code, qui ne marchait pas.
    J’ai rajouté la ligne 42:
    int chk = DHT.read22(DHT22_PIN);
    Sans ça, les données ne sont pas lues sur le capteur.

    Aussi, la précision des données est de 1/10ème de degré et 0,1% d’humidité, donc nul beoin d’afficher deux chiffres après la virgule 🙂

  • Christian V

    Bonjour,
    Vous m’avez sauvé « la vie » en m’expliquant comment mettre des accents sur les « e »; Merci;
    Deux soucis toutefois. Un- si je fais \oxb7 j’obtiens bien un point (1 pixel) en hauteur. Si je fais \x2E j’obtiens non pas un point de 1 pixel mais une croix de 5 pixels !!!! Pourquoi ou alors où est le point ?
    Deux- je voudrais placer ce point de 1 pixel en séparateur décimal de coordonnées géographiques en degrés décimaux. (ex 45.14587). Actuellement mon écran 128×64 me fait une croix de 5 pixels idem que ci-dessus. Si !!! vous me donnez la solution pour avoir un vrai point comment l’insérer dans ma coordonnée.
    Merci.

    • TarK`

      1. Je n’ai pas testé le caractère \0x2e, je ne sais pas ce que ça donne sur l’écran… Mais pour le point, pourquoi ne pas taper un point normal (.) au clavier ?
      2. là sans le code je ne sais pas trop. J’ai l’impression qu’il s’agit simplement de manipulation de chaîne de caractères.

  • ChristianV

    De retour,
    J’ai avancé un peu …
    La police u8g.setFont(u8g_font_6x10); ne fait pas le point mais une croix même tapé au clavier. La police font_6x12 fait bien le point en 4 pixels carrés. Donc j’utilise cette police et c’est parfait.
    Le problème est aussi réglé pour le point décimal. En fait si la police 6×10 faisait ce point la combine aurait été de trouver une méthode pour insérer ce point entre deux parties d’un nombre décimal comme 43.56987
    je pense que c’est faisable avec un peu de sport mais l’affaire est réglée et bien réglée…
    Encore merci

Laisser un commentaire

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