mardi 21 juin 2016

A la recherche d'un afficheur OLED

A la recherche d'un afficheur OLED


L'idée est de pouvoir ajouter un petit écran au module ESP8266 ! Et oui ici à l'association nous avons un projet de réalisation d'un jeu connecté collaboratif. Et pour cela nous avons prévu d'utiliser un anneau de Led NeoPixel déjà explorer, quelque boutons, maintenant nous passons à l'écran.
Pour faire plus smart, nous pensons utiliser un OLED monochrome pour limiter l'utilisation mémoire. En effet en regardant la documentation de l'ESP8266-12E, nous pouvons lire que nous ne disposons que d'environ 50Ko de RAM. Or pour gérer un écran, il est nécessaire d'avoir un buffer qui correspond au pixel que nous souhaitons afficher, ceci afin d'optimiser les accès lecture/écriture.

Donc partant de ce principe, si par exemple nous prenons un écran 128x128 en couleur codé sur 16bit, le buffer nécessitera : 128 x 128 x 2octets donc de 32Ko soit 64% de la mémoire... C'est définitivement trop !, donc pourquoi pas utiliser un écran OLED monochrome de  128x64 (qui utilisera que 1Ko (128x64 / 8 (hé oui nous pouvons placer 8 pixels par octet :-) ).

Il existe plusieurs tailles d'écran chez nous fournisseur mondial, notamment certain basé sur le chipset SSD1306 (0.96") et d'autre en général plus grand (1"5) basé sur le chipset SH1106.


Ce point du chipset est important car les librairies de pilotage sont plus ou moins aboutit en fonction du protocole de communication (SPI 3 Wire/ 4Wire ou I2C). Pour le Cas du SSD1306 nous trouvons de bonne librairie basé sur Adafruit (Environnement Arduino qui fonctionne parfaitement avec l'ESP8266). Par contre pour le chipset SH1106 en I2C c'est un peu plus compliqué. J'ai donc fini par prendre le code de Rene MT (et Daniel Eichhorn (@squix78) et Fabrice Weinberg (@FWeinb) en améliorant la partie driver I2C (publication à venir). Cette librairie apporte des outils sympathiques comme l'écriture de texte, l'import de bitmap et un mode de pagination.

Voici une petite démo en attendant la publication du code ;-) !



Le code est par ici.




mardi 15 décembre 2015

Ajouter de bouton à L'ESP8266

Suite de notre petit projet connecté

Pour que notre futur boitier de jeu puisse prendre en compte les réaction du joeur, nous allons le doté de 4 boutons poussoirs.

Solution classique

Pour ce faire nous pourrions utiliser 4 entrées GPIO de l'ESP, mais cela est un peu beaucoup par rapport au nombre d'entrée/sortie disponible sur le micro-contrôleur. Nous pourrions également faire un multiplexage, et là encore cela occuperait au moins 3 entrées :
Le fonctionnement est relativement simple. Le micro-contrôleur envoie alternativement la valeur 1 et 0 à la borne E0 (programmé en sortie), puis lit les signaux disponibles sur S0 et S1.
Par exemple si E0 est l'état bas (c'est à dire autour de 0V), alors la colonne des boutons B2 et B4 sera alimentée, car E0 est connecté à une porte inverseur (le triangle). Par contre la colonne des boutons B1 et B3 sera pas alimentée.
Et si au même moment j'appuie sur B2 ou B4 alors respectivement les signaux S0 et S1 seront à l'état haut. Donc le micro-contrôleur pourra déduire que les boutons B2 et/ou B4 sont activés.
Ensuite le micro-contrôleur va positionner E0 à l'état haut, dans ce cas le colonne des boutons B1 et B3 sera alimentée, par contre l'autre colonne ne le sera plus. Si au même moment j'appuie sur les bouton B1 ou B3 alors les signaux S0 et S1 seront à l'état haut (quelque soit l'état des bouton B2 et B4).
Le schéma est relativement simplifié, car il faudrait ajouter des diodes de protection, car si nous appuyons à la fois sur B1 et B2 par exemple, avec ce schéma nous faisons un court-circuit ! c'est pas bien :-)...

Solution Analogique

Une autre solution serait d'utiliser l'entrée analogique de notre microcontrôleur ! En effet il est possible de faire un pont diviseur de tension avec nos quatre boutons puis de mesurer la tension aux bornes du pont diviseur et en déduire la combinaison des boutons :

Dans ce montage le pont diviseur est composé de la résistance Ra et de la somme des résistances R1...R4, que nous appellerons Re :

Re = R1 + R2 + R3 + R4 (si aucun bouton n'est activé)

La tension mesurée au point de mesure sera égale à :

V = Ra / (Ra+Re) * 3,3 V

Le principe de fonctionnement, c'est que nous pouvons changer la valeur de Re en court-circuitant une ou plusieurs résistances (R1...R4) en appuyant sur le bouton correspondant.
Par exemple si j'appuie sur le bouton B1, alors la résistance équivalente au niveau de  B1  sera :

   RB1 = (0 Ohm en parallèle avec une résistance R1)  =  0 Ohm.

NDR: R équivalent parallèle = Ra * Rb / (Ra + Rb)

Donc Re sera égale à 0 Ohm +  R2 + R3 + R4. Ce principe fonctionne de la même manière pour les autres boutons.
Il suffit maintenant de choisir les résistances R1, R2, R3 et R4 de manière que quelque soit la combinaison des boutons nous ayons une valeur différente de Re. Ceci nous rappel le codage binaire, en effet chaque bouton peut avoir que 2 états (On ou Off).
Donc si nous utilisons R1 = 1K, R2 = 2 x R1 = 2K, R3 = 2 x R2 = 4K et R4 = 2 x R3 = 8K, nous aurons comme un décodage binaire de l'état des bouton.
Par exemple si R1 = ON, R2 = OFF, R3 = OFF, R4 = OFF, alors Re = 0 + 2K + 4K + 8K = 14K, si R1 = OFF, R2 = ON, R3 =ON, R4 = OFF alors Re = 1K + 0 + 0 + 8K = 9K.

Avec un peu de Excel voici le calcul pour toutes les combinaisons (avec comme hypothèse que la tension d'alimentation est de 3,3 V).

Ensuite il ne reste plus qu'à connecter le point de mesure à l'entrée de l'ADC de l'ESP8266 et faire un petit programme pour détecter quels boutons sont appuyés en fonction de la tension mesurée. Je vous invite à regarder le programme disponible sur GitHub.

Bon bidouillage !

Edit: Et la petite vidéo de démo



mercredi 28 octobre 2015

Deuxième démo - Un anneau de LED NeoPixel connecté


Nous avons reçu les anneaux de 16 Led NeoPixel, et donc il faut tester ça :


Le détail de la réalisation est par ici.
C'est la toute première expérience... TODO: Animer les LED :-) !

jeudi 22 octobre 2015

Première démo d'une LED connectée

Ça y est nous avons reçu les modules ESP8266-12E, et pour préparer la prochaine session j'ai fait un petit test de LED Connectée :

 

Vous trouverez tous les détails dans la page dédiée à la découverte du module ESP8266-12E

jeudi 1 octobre 2015

Nouveau compagnon pour l'IoT

Arduino Yun Mini

Ca y est il est disponible chez RS, et ce n'est pas donné environ 70 € , comparer à l'ESP8266 qui est à 10 €....

Arduino Yun MiniCe module est l'addition d'un ATmega32u4 d'Amtel à un SoC (System on Circuit) Atheros AR9331 qui assure la gestion du Wifi et du serveur WEB. Enfaite le composant embarque un Linux Linino basée sur OpenWRT (proche de ceux qui sont utilisés dans les Box ADSL)

Le module est petit, et embarque les habituelles interfaces d'un Arduino (Entrée/Sortie numériques, avec PWM, entrées analogiques etc...) et biensûre tout l'environnement de développement propre à Arduino.

Des extensions sympathiques sont proposées:
  • un port Ethernet RJ45 peut être ajouté
  • le dogUSB qui ajoute un port USB 2.0 et un slot pour un mini SD
  • le dogUSB eMMC est un port USB accompagné de 4Go de Flash

Pour plus de détails voir le sites suivants :

mercredi 30 septembre 2015

Quelques liens autour de NodeMCU

NodeMCU

NodeMCU est un des firmware développé pour l'ESP8266-12. Il facilite grandement la programmation autour du kit de dévelopement Nodejs et de l'ESP. Entre autre il permet l'accès à la couche réseau et au WIFI, il embarque une API qui assure la gestion des GPIO, de l'USB. Propose des fonctions pour réaliser un serveur Web, Telnet etc...
Pour plus de détail se rendre directement sur leur site

NodeMCU - Builder

Du fait que le code source du firmware est open source, un site c'est spécialisé dans la génération du firmware en fonction de paramètre d'activation ou pas des différentes fonctionnalités. Cela permet de générer un firmware adapté aux besoins le plus prêt possible. Le nombre d'option permet de voir l'étendu des fonctions supportée par le firmware. Le site est propre et donne des liens vers les documentations des fonctionnalités. Très intéressant donc : C'est  NodeMCU custom builds (http://frightanic.com)