Un écran OLED 128*64

Introduction

Comment suivre les connexions à un réseau TCP/IP avec des led, comment afficher des messages d'erreur sur les lectures RFID.

Après avoir pensé aux Leds ( moins de 10 centimes pour 5 leds), je regarde du coté des écrans OLED qui pourraient permettre une meilleure interface avec les joueurs et les "administrateurs", ainsi que la diffusion de message personnalisée par exemple.


Présentation

 l’écran OLED I2C SSD1306 128x64p 0.96″

L’utilisation de l’interface I2C permet de réduire très fortement le câblage de cet écran OLED. Cet écran n’étant pas disponible dans la librairie d’Adafruit, je l’ai remplacé par son cousin plus petit, 128 x 32 pixels. L’écran est alimenté en 3.3V, il utilise le même micro-contrôleur SSD1306.

 

Caractéristiques

  • Modèle SSD1306 JY-MCU Oled module, v1.5
  • Ecran graphique de 128 x 64 pixels
  • Technologie OLED (organic leds)
  • Bicolore jaune / bleu (haut et bas de l'écran)
  • Taille 0.96 "
  • Taille 26.70 x 19.26 x 11.2 mm
  • Zone active 21.74 mm x 11.2 mm
  • Alimentation 3,3v ou 5v

Cet écran est séparé en deux zones verticales
- Une zone de 16 px de haut avec des pixels jaunes
- Une zone de 48 px de haut avec des pixels bleus
Les deux zones sont séparées d’une largeur d’environ
1 pixel qui apparaît donc toujours noire.


Tutoriels :


Installation et parametrage

Le câblage

 

Which pins to use for this differs on some arduino models, but on the UNO and NANO you use pin A4 (SDA) and A5 (SCL). If you’re using another arduino, google the pinout and look for SDA and SCL pins. (For example, google “arduino mega pinout”, and check the images).

I first attempted to power my display from my arduinos 5v. This worked, but only halfway – the display fired up, and started cycling the demos in the sketch we will see later on, and then froze after a few seconds.

I then powered my display from my external 5v supply (with common ground to the arduino), which did the trick – the display is now working properly.

The connections from the display:

  • VCC to external 5v
  • GND to external GND
  • SCL to arduino pin A5 (or the SCL pin for your arduino)
  • SDA to arduino pin A4 (or the SDA pin for your arduino)
  • arduino GND pin to external psu GND

Arduino is connected to the computer via an USB cable. The USB powers the arduino.


Trouver le port sur lequel est branché l'I2C

 

Pour cela, il faut utiliser le petit programme ci dessous

 

Télécharger
Programme pour Arduino de recherche des adresses des ports I2C
Recherche Port I2C.pdf
Document Adobe Acrobat 20.2 KB

Installer les librairies dans l'IDE Arduino

Vous allez devoir ajouter de nouvelles librairies à votre IDE Arduino. Après avoir récupéré le ZIP, allez dans Croquis -> Inclure une librairie -> Ajouter la bibliothèque .ZIP et choisissez le zip contenant la librairie à importer.

Vous pouvez maintenant aller dans Fichier -> Exemples pour découvrir les exemples proposés dans la librairie.

Pour utiliser une librairie dans vos projets, déclarez la en début de projet, par exemple #include

Pour faire votre premier test, vous pouvez aller à l'étape suivante, tout est possible depuis votre navigateur grâce à Codebender !


Utiliser La Librairie Adafruit_SSD1306 Et Adafruit_GFX

 

C'est la librairie la plus employée car elle offre de nombreuses fonctions pour réaliser des tracés facilement (lignes, rectangles, cercles, triangles...).

Pour plus de détail sur la librairie, 

http://www.projetsdiy.fr/ssd1306-mini-ecran-oled-i...

REMARQUES

Si vous avez le message ci contre, il faut modifier la librairie comme suit  :
Il faut éditer le fichier Adafruit_SSD1306.h de la manière suivante :
- À la ligne 69, décommenter le code `#define SSD1306_128_64`
- À la ligne 70, commenter le code `#define SSD1306_128_32`

 

 

 

 

 

 

 

 

Chargement de l'exemple :

test basic- affichage d'un texte uniquement

 

Télécharger
oled - test basic
oled test basic.pdf
Document Adobe Acrobat 22.6 KB

On voit que rien que pour quelques lignes de textes, on atteint les limites de la memoire de l'arduino UNO.


Autres bibliothèques OLED

Sparkfun - micro_oled

 

https://github.com/sparkfun/SparkFun_Micro_OLED_Arduino_Library

 

Il faut modifier les exemples, en activant les lignes I2C et désactivant les ligne SPI.

On peut aussi mettre en commentaire le chargement de la bibliotheque Wire.h

 

La mémoire est beaucoup moins sollicitée, mais la bibliotheque n'adresse pas tout l'ecran, je dirais que c'est plutot du 64*x48

Ce qui est confirmé à la lecture du fichier cpp

 

"OLED_I2C_128x64_Monochrome.h"
Source : https://deloarts.wordpress.com/2015/06/17/
oled-i%C2%B2c-128x64-monochrome-library
/

Exemple : Oled_draw image

 

Du code très simple, et peu de mémoire consommée, mème pour un bitmap

Une utilisation des 128*64

 

Exemple de code pour écrire du texte :

    lcd.init(true);
    lcd.printString("Hello!", 0, 0);

 

je recommande

 

Télécharger
test des pixels de l'ecran.pdf
Document Adobe Acrobat 13.9 KB

u8g2

Source Wiki  : https://github.com/olikraus/u8g2/wiki

Cette librairie remplace la librairie u8glib

 

La librairie est disponible a :

http://www.arduinolibraries.info/libraries/u8g2

 

J'ai essayé, trop complexe.

 

 

La librairie OZ

Source : https://oscarliang.com/arduino-oled-display-library/

Ne marche Pas

 

La librairie evilOled

https://github.com/evilnick/evilOLED

evilOLED is an Arduino library for efficient use of SSD1306 based
displays, specifically 128x64 pixel ones using the I2C 2-wire
interface. This driver does not use a framebuffer, therefore
leaving you with plenty of dynamic memory for your own code!
Written by Nick Veitch, 2014 <veryevilnick@gmail.com>
Released under MIT license

 

L'adresse de l'esclave est 0x78 par defaut dans le fichier.h.

Meme apres correction en 0x3C, il gère l'adressage sur 8 bits, alors que mon module fonctionne sur 7 bits.

 

 

La libraire SSD1306ascii

https://github.com/greiman/SSD1306Ascii

une li

 


Une video qui reprend les tests....



Convertir des Bitmap

Image2cpp

Image2cpp

 

image2cpp est un utilitaire de conversion d'image sur internet

http://javl.github.io/image2cpp/

Il vous permettra :

  • De choisir une taille de génération différente du fichier image
  • De mettre à l'échelle l'image avant de générer la chaine hexa
  • D'ajuster le niveau de gris de seuillage (Brightness threshold)
  • De re-centrer l'image verticalement et/ou horizontalement.
  • D'inverser les couleurs
  • D'ajouter du code Arduino

Un autre fonction très pratique et la possibilité de visualiser l'image qui sera produite par l'écran OLED en collant la chaine Hexa dans la zone "Paste byte array". Rechargez la page si vous aviez fait une conversion d'image avant.

 

Lcd assistant

Source : http://en.radzio.dxp.pl/bitmap_converter/

Pour windows

Converti des fichiers au format bitmap pour insertion dans les programmes



Creer notre logo pour ecran oled

Principes

L'ecran oled est composé de 128*64 pixels. (8192)

chaque pixel va prendre la valeur 0 pour eteint, ou 1 pour allumer

Chaque pixel va etre regroupée par Octet

par exemple, pour un pixel sur 2 allumés, on obtient

1010 1010 qui une fois converti en Hexa donne :

   A       A

Ensuite les données sont regroupées sur 16 colonnes et 64 lignes

vérification : 16*64*8=8162 ... good job

 

Donc ca c'est l'explication theorique pour comprendre ce que l'on recupere en sortie des convertisseur et qu'on copie/colle dans les programmes.

creer son logo

Lancer "Paint", présent sur tous les windows

- afficher le quadrillage

-redimensionner l'image pour obtenir 128*64pxl (en bas)

-zoomer pour dessiner tranquillement

-Enregistrer le fichier au format BMP

-lancer LCD assistant

-Selectionner le fichier BMP

-Sauvegarder l'output

-L'ouvrir avec notepad++ et copier/coller

- Dans l'IDE arduino, ouvrir l'exemple "draw-bitmap" de la bibliotheque : OLED_2IC_138*64_Monochrome_library-master

-Remplacer toutes les lignes à partir de

PROGMEM const unsigned char bitmap [] = {

-Deverser le programme dans l'arduino

 

Le code du Logo

Télécharger
Code Logo pour OLED 128x64 pixels
Code logo OLED.pdf
Document Adobe Acrobat 12.8 KB


Alléger la librairie ?

Suppression du traitement des nombres

La nouvelle librairie :

\Documents\Arduino\libraries\OLED_I2C_128x64_Monochrome_Library-master

 

Télécharger
OLED_I2C_128x64_Monochrome.pdf
Document Adobe Acrobat 17.2 KB
Télécharger
Fichier .cpp
OLED_I2C_128x64_Monochrome.ccp.pdf
Document Adobe Acrobat 20.0 KB

Mesure du gain

Le programme de test  :

 

#include <OLED_I2C_128x64_Monochrome.h>
#include <Wire.h>
#include <avr/pgmspace.h>
void setup()
{
    lcd.init(true);
    lcd.printString("Hello!", 0, 0);
}
void loop()
{
    // Nothing to do here
}

 

 

Conclusion :

Tant que la fonction n'est pas appelée, elle ne consomme pas de ressource lors de la compilation.

 



Gerer 6 lignes de textes

identification des coordonnées

ou se trouve le point 0,0 et le point 128,64

Télécharger
oled Code test Texte.pdf
Document Adobe Acrobat 15.1 KB


Code pour affichage de l'adresse Ip

Dans ce tutoriel, nous allons apprendre comment utiliser un écran OLED monochrome 0.96′‘ (basé sur le chip SSD1306) avec un module ESP8266 et plus particulièrement le module ESP-01. Nous allons utiliser les 2 ports GPIO disponibles sur l’ESP-01 pour relier l’écran OLED SS1306 à l’aide du bus I2C. Pour illustrer cet article, nous allons réaliser un petit projet de scanner WiFi qui se connecte à un réseau WiFi et affiche l’adresse ip attribuée à l’ESP-01 ainsi que la force du signal WiFi sur l’écran OLED.

 

On trouve sur des forums qu'il faut changer l'adresse indiquée à la ligne 61 de l'exemple (celui fournit avec la librairie) l'adresse I2C du module.

 

  display.begin(SSD1306_SWITCHCAPVCC, 0x3D);  // initialize with the I2C addr 0x3D (for the 128x64)

par

display.begin(SSD1306_SWITCHCAPVCC, 0x3C); 

Télécharger
Code OLED-ESP8266 - connexion au reseau
code Oled.pdf
Document Adobe Acrobat 271.6 KB

Brancher l’écran OLED SSD1303 et démarrer le scanner WiFi sur l’ESP-01

 

Maintenant que le programme est installé sur l’ESP8266, coupez l’alimentation du module.

Pour utiliser un écran OLED sur un ESP-01 nous allons utiliser les 2 GPIO disponibles sur le module pour les relier au bus I2C qui équipe le SSD1306. Le branchement est très simple. 

Retirez le câble reliant le GPIO0 au GND et branchez l’écran OLED I2C ainsi :

SDA <–> GPIO0

SCK <–> GPIO2

GND <–> GND

VCC <–> 3.3V

Vous pouvez inverser le câblage. Dans ce cas, modifiez les paramètres dans le programme et réinstallez ce dernier.



gérer l’écran en HTTP avec ESP easy

 

Une autre fonction très intéressante, c’est la possibilité de commander ou d’afficher du texte à l’aide d’une simple requête HTTP. On pourrait par exemple récupérer la météo sur un service en ligne et l’afficher sur l’écran depuis un serveur domotique, un script Mode-Red…

 

La requête HTTP est de la forme suivante :

 

http://<ESP IP address>/control?cmd=oled,<row>,<col>,<text>

 

  • row : ligne d’affichage
  • col : colonne d’affichage
  • text : texte à afficher

 

Limitations :

 

  • Il faut d’abord vider l’écran (clear) avant d’envoyer un nouveau texte
  • Le texte sera affiché jusqu’au prochaine rafraichissement (Delay)

 

Autres commandes disponibles :

 

  • Allumer l’écran : http://<ESP IP address>/control?cmd=oledcmd,on
  • Eteindre l’écran : http://<ESP IP address>/control?cmd=oledcmd,off
  • Vider l’écran : http://<ESP IP address>/control?cmd=oledcmd,clear

 

Source originale de l’article : http://www.esp8266.nu/index.php/OLEDDisplay



Utilisation avancée : Utiliser 2 devices I2C en meme temps