Cours du Bitcoin avec Arduino

Affichage de plusieurs cryptomonnaies

Il n’y a pas que le Bitcoin dans la vie ! Il y a aussi les Altcoins !

Je ne sais pas vous mais pour ma part je possède d’autre cryptomonnaies que le Bitcoin. Le cours de ces cryptomonnaies fluctue également beaucoup. Dans ce paragraphe je vous propose d’ajouter le suivi de l’Ethereum, du Binance Coin, du Tether, du Cardano, du Ripple et du Dodgecoin à notre programme.

Dans un premier temps il est nécessaire d’avoir un logo de la monnaie en noir et blanc et dans un format correspondant à l’écran OLED 0,96 pouces. N’ayant pas trouvé sur le internet d’icônes correspondantes, je les ai dessinée moi-même :

Logo de L'Ethereum Logo du BinanceCoin Logo du Tether Logo du Cardano Logo du Ripple

En utilisant la procédure vue au chapitre précédent, nous obtenons les tableaux hexadécimaux suivants que nous ajoutons au fichier “image.h” du projet:

const uint8_t ImageEthereum [] PROGMEM =
{
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF0, 0xF8, 0xFE,
  0xFE, 0xFC, 0xF0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF8, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xF8, 0xF0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x33, 0x73, 0xE7, 0xE7, 0xCF, 0x9F, 0x9F, 0x3F,
  0x3F, 0x9F, 0xDF, 0xCF, 0xE7, 0xE7, 0x73, 0x1B, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x1F, 0x3F, 0x7F,
  0x7F, 0x3F, 0x0F, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

const uint8_t ImageBinanceCoin [] PROGMEM =
{
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0x7F,
  0x7F, 0xFE, 0xFC, 0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x80, 0xC0, 0xE0, 0xE0, 0xC0, 0x82, 0x07, 0x0F, 0x1F, 0x0F, 0x07, 0x03, 0x81, 0xC0, 0xE0,
  0xE0, 0xC0, 0x81, 0x03, 0x07, 0x0F, 0x1F, 0x0F, 0x07, 0x82, 0xC0, 0xE0, 0xE0, 0xC0, 0x80, 0x00,
  0x00, 0x01, 0x03, 0x07, 0x07, 0x03, 0x41, 0xE0, 0xF0, 0xF8, 0xF0, 0xE0, 0xC0, 0x81, 0x03, 0x07,
  0x07, 0x03, 0x81, 0xC0, 0xE0, 0xF0, 0xF8, 0xF0, 0xE0, 0x41, 0x03, 0x07, 0x07, 0x03, 0x01, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFE,
  0xFE, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

const uint8_t ImageTether [] PROGMEM =
{
  0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0xFE, 0xFE, 0xFE,
  0xFE, 0xFE, 0xFE, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00,
  0xC0, 0xE0, 0xA0, 0x30, 0x10, 0x10, 0x10, 0x18, 0x08, 0x08, 0x08, 0x08, 0x08, 0x7F, 0x7F, 0x7F,
  0x7F, 0x7F, 0x7F, 0x08, 0x08, 0x08, 0x08, 0x08, 0x18, 0x10, 0x10, 0x10, 0x30, 0xA0, 0xE0, 0xC0,
  0x00, 0x01, 0x01, 0x03, 0x03, 0x03, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0E, 0xFE, 0xFE, 0xFE,
  0xFE, 0xFE, 0xFE, 0x0E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x03, 0x03, 0x03, 0x01, 0x01, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F,
  0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

const uint8_t ImageCardano [] PROGMEM =
{
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x80,
  0x84, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x80, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x08, 0x1C, 0x88, 0xC0, 0xC0, 0x9C, 0x1C, 0x1C, 0x00,
  0x00, 0x1C, 0x1C, 0x9C, 0xC0, 0xC0, 0x88, 0x1C, 0x08, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x10, 0x38, 0x11, 0x03, 0x03, 0x39, 0x38, 0x38, 0x00,
  0x00, 0x38, 0x38, 0x39, 0x03, 0x03, 0x11, 0x38, 0x10, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x01,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x21,
  0x01, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

const uint8_t ImageRipple [] PROGMEM =
{
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0xE0, 0xF8, 0xFC, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFC, 0xF8, 0xE0, 0x00, 0x00,
  0x00, 0xE0, 0xF0, 0xF8, 0xFC, 0xFC, 0xFE, 0xFE, 0xFE, 0xFC, 0xFC, 0xF8, 0xF0, 0xE0, 0xC0, 0xC0,
  0xC1, 0xE7, 0xFF, 0xFF, 0x7F, 0x3F, 0x3F, 0x3F, 0x3F, 0x1F, 0x1F, 0x0F, 0x07, 0x01, 0x00, 0x00,
  0x00, 0x07, 0x1F, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x7F, 0x3F, 0x3F, 0x1F, 0x1F, 0x07, 0x03, 0x03,
  0x83, 0xE7, 0xFF, 0xFF, 0xFE, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xF8, 0xF0, 0xE0, 0x80, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x07, 0x1F, 0x3F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x3F, 0x1F, 0x07, 0x00, 0x00
};

const uint8_t ImageDogecoin [] PROGMEM =
{
  0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C,
  0x3C, 0x3C, 0x3C, 0x7C, 0x7C, 0xF8, 0xF8, 0xF8, 0xF0, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
  0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x03, 0x03, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x03, 0x03, 0x03, 0x03,
  0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C,
  0x3C, 0x3C, 0x3C, 0x3E, 0x3E, 0x1F, 0x1F, 0x0F, 0x0F, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
};

Maintenant que nous suivons plusieurs cryptomonnaies dans notre programme Arduino, le tableau “cryptos” de structure de type “crypto_t” prend tout son sens :

crypto_t cryptos[] =
{
  {"Bitcoin", ImageBitcoin},
  {"Ethereum", ImageEthereum},
  {"BinanceCoin", ImageBinanceCoin},
  {"Tether", ImageTether},
  {"Cardano", ImageCardano},
  {"Ripple", ImageRipple},
  {"Dogecoin", ImageDogecoin}
};

Afin de pouvoir réaliser l’interrogation de l’API CoinGecko et l’affichage du cours actuel pour chaque cryptomonnaie l’une après l’autre, j’ai choisi d’utiliser une variable statique à la fonction loop nommée “index_l”. Cette variable sera utilisée pour balayer de façon circulaire le tableau “cryptos” que nous avons déclaré plus haut.

Pour cela, nous allons :

  • initialiser “index_l” à la valeur 0 au début du programme
  • l’incrémenter à chaque appel de la fonction “loop
  • la réinitialiser à 0 si nous avons atteint le dernier élément du tableau

La fonction “loop” du paragraphe précédent devient donc:

// Fonction principale du programme, s'exécute en boucle:
void loop()
{
    // Variables de la fonction
    char cours_l[20], reponse_coingecko[150];
    static int index_l = 0;

    GestionConnexionWifi();
    DemandeCoinGecko(reponse_coingecko, cryptos[index_l].id);
    if (ExtractionCours(cours_l, reponse_coingecko))
    {
      AfficherCrypto(cours_l, cryptos[index_l]);
    }
    delay(10000); // Attente de 10 secondes avant d'afficher la cryptomonnaie suivante
    if(index_l<(sizeof(cryptos) / sizeof(cryptos[0])-1))
    {
      // On passe à la crypto suivante
      index_l++;
    }
    else
    {
      // La dernière crypto a été atteinte, on repasse à la première
      index_l = 0;  
    }
}

L’affichage du nom de la cryptomonnaie varie au cours du temps. Afin de ne pas superposer les caractères au précédent affichage, nous ajoutons l’effacement de cette zone d’écran à la fonction “AfficherCrypto”:

Afficheur_G.fillRect(0, 0, 94, 63);

Maintenant notre programme est prêt ! Si vous voulez télécharger les sources complètes, elles sont ici. N’oubliez pas de renseigner le nom et le mot de passe de votre accès Wi-Fi lignes 9 et 10 du programme.

Ce tutoriel est maintenant terminé. J’ai choisi de vous présenter ma démarche étape par étape en apportant le code logiciel Arduino morceau par morceau afin de guider les plus novices d’entre-vous. Je vous remercie par avance pour vos commentaires.

Pour continuer:

Pour continuer avec Arduino, voici deux projets qui pourraient vous intéresser:

Laisser un commentaire