DigitalSpirit / Blog

Un exemple d'utilisation de la bibliothèque Oled4d pour Arduino

Voici un exemple très simple expliquant l'utilisation de la bibliothèque libre Oled4D dont j'ai parlé dans un précédent billet.

Ce programme va afficher l'image ci-dessous :

Oled 4D démo pour Arduino

Le code source commenté est affiché en seconde partie de ce billet.

Plus d'informations :

Voici les étapes à suivre pour tester cette bibliothèque :

  1. Décompresser l'archive dans le dossier libraries
  2. Ouvrez l'environnement de développement Arduino
  3. Dans le menu Fichier > Exemples, il doit y avoir un menu Oled4D > Example > Demo, cliquez dessus pour l'ouvrir
  4. Compilez et chargez la cible

Voici une partie du code source (la déclaration de data_image à été tronquée volontairement), l'exemple va afficher un écran bleu, affiche un cercle jaune, 1 tux, réalise 4 copier / coller de l'image du tux, affiche du texte « Hello world ! » puis créé un polygone.

/*  Oled4d
    Programme d'exemple pour interface Arduino / Écran Oled de 4DSystems
 */
 
#define RED     RGB(255, 0, 0)
#define GREEN   RGB(0, 255, 0)
#define BLUE    RGB(0, 0, 255)
#define YELLOW  RGB(255, 255, 0)
#define WHITE   RGB(255, 255, 255)
#define BLACK   RGB(0, 0, 0)
 
#define SMALL   FONT_5X7
#define MEDIUM  FONT_8X8
#define BIG     FONT_8X12
 
#include <NewSoftSerial.h>
#include <HardwareSerial.h>
extern HardwareSerial Serial;
#include <Oled4d.h>
 
NewSoftSerial serial(2, 3);
 
// count : 1152
#define  DATA_IMG_WIDTH   24
#define  DATA_IMG_HEIGHT  24
char data_image[] = {
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
    0xc6, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbe, 0xbe, 
    [...]
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
};
 
void setup()
{  
    Serial.begin(9600);
 
    // Mode série
    pinMode(2, INPUT);
    pinMode(3, OUTPUT);
 
    // Configuration de l'interface série logicielle
    serial.begin(9600);
}
 
void loop()                     
{
    // Créer l'objet en interface série logiciel
    Oled4dSoft oled = Oled4dSoft(serial, 8);
 
    // Pour utiliser l'uart « hardware », procéder ainsi :
    //Oled4dHard oled = Oled4dHard(Serial, OLED_RESET_PIN);
 
    // Initialise l'écran
    oled.init();
 
    // Efface l'écran
    oled.clear();
 
    // Fond d'écran bleu
    oled.setBG(RGB(0, 0, 128));
 
    // Dessine un cercle
    oled.drawCircle(64, 64, 20, RGB(255, 255, 0));
 
    // Affiche l'image
    oled.displayImage(0, 0, DATA_IMG_WIDTH, DATA_IMG_HEIGHT, COLORMODE_65K, data_image);
 
    // Copier / coller de l'image 5 fois
    for (int i = 1; i < 5; i++) {
        oled.screenCopyPaste(0, 0, i * DATA_IMG_WIDTH, 0, DATA_IMG_WIDTH, DATA_IMG_HEIGHT);
    }
 
    // Affiche du texte
    oled.drawText(1, 3, SMALL, GREEN, "Hello world !");
 
    // Dessine un polygone
    char array[] = { 10, 32, 20, 64, 76, 120, 127, 64 };
    oled.drawPolygon(sizeof(array) / 2, array, RGB(255, 128, 0));
 
    while (1);
}

Voilà, je pense que le code est assez explicite, en cas de souci, n'oubliez pas le forum d'aide.

Ouvrir l'article

Librairie Arduino pour afficheur Oled : Oled4d

Voici une librairie libre de gestion d'afficheur OLED de la société 4D Systems pour Arduino.

Comme leur nom l'indique très bien, ils utilisent la technologie OLED avec tous les avantages de cette technologie : pas besoin d'un rétroéclairage, ils ont un angle de vue de 180°, bonne consommation, très bon contraste, vous pouvez les trouver entre autres chez Lextronic ou encore chez Sparkfun.

Le jeu d'instructions n'est pas toujours très logique mais est assez complet, le principal défaut de ces afficheurs est le prix, à 65€ l'unité, j'imagine mal comment espérer faire de la petite série...

Ces afficheurs sont pilotables directement par le biais d'une connection série dans lequel on envoie directement des commandes d'assez hauts niveaux :

  • Set Background Color
  • Put Pixel
  • Erase Screen
  • Draw Rectangle
  • Place String of ASCII Text
  • ...

Ils disposent également d'un port microSD permettant ainsi de charger des images ou encore des bouts de programmes, attention cependant, car n'espérez pas mettre des images jpg dans la microSD ou autre et les afficher comme ça, d'un coup, ça ne fonctionnera pas, tout d'abord, car le chip de 4D ne gère pas les images compressées mais uniquement des champs de bits et surtout car il n'y a aucune gestion de FAT gérée par le controleur, ainsi, il est possible d'accéder au contenu de la microSD depuis votre programme mais uniquement en brut : à nous de gérer la couche du système de fichiers...

Tester la libraire

Voici la marche à suivre pour tester cette librairie avec Arduino (la librairie peut parfaitement fonctionner hors du projet Arduino...) :

  1. Créer un dossier Oled4d dans le dossier Libraries de votre installation Arduino et copiez dedans le fichier Oled4d.h.
  2. Créez un nouveau projet Arduino et copiez le contenu du fichier oled4d.pde dedans.
  3. Compilez le source, envoyez dans la cible et voilà, vous devriez avoir quelque chose de ce genre s'afficher :

Oui, il s'agit bien de Tux ! ;)

Comment ça fonctionne ?

Voici un petit bout de code :

// Créer l'objet en interface série logiciel
Oled4dSoft oled = Oled4dSoft(serial, 8);

// Pour utiliser l'uart « hardware », procéder ainsi :
//Oled4dHard oled = Oled4dHard(Serial, OLED_RESET_PIN);

// Initialise l'écran
oled.init();

// Efface l'écran
oled.clear();

// Dessine un cercle
oled.drawCircle(64, 64, 20, RGB(255, 255, 0));

// Affiche du texte
oled.drawText(1, 3, SMALL, GREEN, "Hello world !");

Voilà, je pense que l'exemple est assez explicite et logique...

Vour remarquerez qu'il est possible de passer par l'uart intégré à l'Atmel ou de passer par l'uart logiciel avec la libraire NewSoftSerial (cette librairie dispose de fonctions avancées et est bien supérieure à la librairie d'uart fourni par défaut dans le projet Arduino).

Démo

Voici une petite démo affichant en vrac des lignes, des triangles, des cercles, des polygones, des rectangles...
La vidéo reflète assez mal les couleurs de l'écran qui sont bien vives en réel.

Écran Oled de 4D System piloté par Arduino

Futures évolutions

Actuellement, cette librairie supporte uniquement les instructions standards (General Command Set), les autres (Extended Command Set), qui permettent entre autre un accès au contenu de la microsd, ne sont pas encore gérées mais le plus gros du travail est fait...

Téléchargement

Cette librairie est mise à disposition sous license GPL.
Vous pouvez télécharger la toute dernière version de cette librairie depuis mon compte GitHub à l'adresse suivante : http://github.com/hugokernel/Oled4D

Je mettrai à jour également la page sur le wiki : /wiki/projets/oled4d.

Ouvrir l'article