![]() |
Librairie "lib_1306_rot" |
Février 2021 |
Documentation "lib_1306_rot" |
Ici la librairie est utilisée avec un montage (câblage) un peu plus complexe, puisqu'une interface I/O sur I2C (PCF85741) est ajoutée au montage.
Son but est de libérer des gpios du processeur (ici un 8266-12). Dans ce cas on voit que seulement 2 fils partent de l'ESP (mis à part ceux de l'alim)
L'ESP dialogue avec l'afficheur OLED et l'encodeur rotatif avec son interface I2C, les signaux de l'encodeur sont raccordés sur le PCF85741.
Ceci est totalement transparent pour le programmeur grâce à la librairie et cela permet d'avoir une IHM (Interface Homme Machine) sur 2 fils.
Cela présente également deux avantages, on a libéré des gpios sur l'ESP pour d'autres tâches mais on a également à disposition 5 ports supplémentaires
à disposition sur le PCF85741 qui sont gérable depuis des fonctions de la librairie.
|
Le schéma dont l'interface se résume ainsi le + (3v3 ou 5v) la masse, scl et sda.
L'encodeur rotatif est ici connecté sur un PCF85741 celui-ci ainsi que l'écran OLED ssd1306 sont ensuite raccordés sur le bus I2C.
Le câblage est vraiment rapide et si il est souvent utilisé peut être câblé sur un petit PCB.
(erreur sur image c'est bien PCF85741)
Ici sur le schéma ci-dessus on utilise un PCF85741, sur le processeur (arduino ou ESP8266-1 ou ESP8266-12 ou ESP32) seulement 2 gpios seront necessaires.
La syntaxe de déclaration de l'objet va donc être :
util_1306 Uoled(adr_i2c_io, encod_clk, encod_dt, encod_sw, display);
adr_i2c_io => Adresse du circuit PCF85741
encod_clk, encod_dt, encod_sw => Chaque signal de l'encodeur est associé à un numéro de sortie du PCF85741
display => correspont à l'objet qui a été créé pour l'écran OLED.
L'encodeur rotatif est disponible en brut ou sur plaquette qui doit inclure 3 résistances de rappel au + (positif).
Différents Encodeurs rotatifs sont supportés mais l'objet a été créée avec un KY-040 30 pas.
Cette librairie a été développée avec un encodeur qui comporte bien une résistance de rappel au positif sur les trois signaux. Il existe cependant sur le marché des
encodeurs sur plaquette ou la résistance sur le signal "SW" n'a pas été installée. Cette librairie prend donc en charge ce cas et les trois entrées de l'encodeur sont déclarée en PULLUP dans le cas
ou vous n'utilisez pas de PCF85741 (param adresse à 0). L'utilisation de résistances n'est donc plus nécessaire. Quelques explications supplémentaires sur l'encodeur et le PULLUP sont disponibles
ici en bas de page.
uint8_t bouton = 3; // permet de tester la lecture d'un bouton sur P3 du PCF85741
uint8_t led_1 = 4; // test avec une led de l'écriture sur P4 du PCF85741
if(Uoled.li_eb_rot(bouton)){ // Lecture d'un eb sur une entrée du circuit i2c I/O
display.drawString(64, 30, "Bouton ok !");
delay(20);
Uoled.ecri_eb_rot(led_1, false); // Ecriture d'un eb sur une sortie du circuit i2c I/O
}
Uoled.init_eb_rot(); // Remise dans un état stable de l'encodeur rotatif (nécessaire pour rattraper le timing)
Exemple de câblage suivant préconisations du
datasheet PC8574
de led ou de bouton
(risque de problème de fonctionnement en cas de non respect).
Une alternative au PCF85741 (fond de tirroir) les circuits I2C qui sont conçus pour le raccordement des anciens LCD 2 lignes genre "1602".
On peut donc utiliser la petite carte code 4585 équipée du PCF8574...
Attention brochage particulier des sorties P0 à P..
P0 P1 P2 P3 P4 P5 P6 P7
4 5 6 NC 11 12 13 14