Exibir valor do bitcoin no Arduino

Nesse penúltimo artigo relacionado ao mini-curso que será ministrado no Arduino Day em Agosto, exemplifico como exibir o valor do bitcoin no Arduino, utilizando um display Nokia 5110.

Display Nokia 5110

Já escrevi a respeito do display Nokia vermelho (que é 3v3), agora estou utilizando o display Nokia 5110 azul, que pode ser alimentado de 3v à 5v. O pinout é o mesmo. A diferença é que no outro artigo mostrei como manipular o display sem uso de biblioteca. Se desejar dar uma conferida, o artigo é esse.

Não vou me prolongar discorrendo sobre o display, que já é um grande conhecido de todos. Dessa vez utilizei uma biblioteca, a Nokia_5110, disponível no repositório do Arduino. Não é a da Adafruit, que normalmente é vista nos tutoriais por aí.

Quanto aos resistores (vários deles), dê uma checada no artigo supracitado para fazer o wiring.

Como estou utilizando a Waldunano para esse tutorial, os pinos 2 e 3 estão sendo utilizados para software serial, como detalhado no artigo “Como conectar o ESP-01 ao Arduino sem AT“. Por essa razão, remapeei os pinos, indo do 7 ao 11. A conexão é simples e o wiring está disponível no artigo sobre o display Nokia vermelho.

O objetivo do mini-curso é agregar recursos em uma oficina de 4 horas, portanto o tema sugerido pelo Nascimento Jr foi exibir o valor do bitcoin no display Nokia 5110. Como achei pouco, resolvi adicionar um gadget; um bitcômetro, para apontar alta e baixa do bitcoin. Esse dispositivo (bastante simplório) devo cortar em menos de 24 em minha CNC laser (da ECNC. Se não conhece e deseja uma CNC laser, apaixone-se). Tenho feito trabalhos muito bacanas em acrílico e descobri todo um universo nesse mundo, que tenho partilhado aos poucos com vocês, makers. Se quiserem dar uma conferida nos trabalhos, passem no nosso perfil do Instagram.

Nos artigos anteriores vimos como lidar com a API do Mercado Bitcoin para ler os valores do Bitcoin, também vimos como fazer HTTPS get com ESP8266 e ESP32, depois vimos como comunicar um ESP-01 com o Arduino sem usar a porcar… digo, sem usar comandos AT. Nesse penúltimo artigo relacionado ao mini-curso disponibilizo o código com todos os tratamentos anteriores e adicionalmente a escrita dos valores no display Nokia 5110.

//Esse include é necessário se for programar utilizando o PlatformIO.
#include <Arduino.h>
//Essa biblioteca é necessária para cria a comunicação serial por software.
//Prefira utilizar velocidades baixas nessa comunicação.
#include <SoftwareSerial.h>
#include "Nokia_5110.h"

//Defina os pinos. TX é Transmissão. Ele deve ir conectado ao RX, que é Recepção
#define SOFT_TX 3
//...e vice-versa.
#define SOFT_RX 2

//definição de linhas e colunas do display Nokia 5110
#define Nokia5110_X     84
#define Nokia5110_Y     48

//definição dos pinos do display
#define PIN_SCE   11  //display: 2
#define PIN_RESET 10  //display: 1
#define PIN_DC    9   //display: 3
#define PIN_SDIN  8   //display: 4
#define PIN_SCLK  7   //display: 5

//Instância de um objeto de comunicação serial, passando os pinos RX/TX como parâmetro.
//Se estiver utilizando outra placa, atente-se ao wiring.
SoftwareSerial SerialESP(SOFT_RX,SOFT_TX);

//Instância do objeto para manipulação do display
Nokia_5110 display = Nokia_5110(PIN_RESET, PIN_SCE, PIN_DC, PIN_SDIN, PIN_SCLK);

//Uma variável para guardar a leitura serial.
String values;

//Quando a leitura estiver concluída, um boolean libera a impressão na serial.
bool ok = false;


void formatValues(String valuesFor){
    String part_one   = valuesFor.substring(0,13);
    String part_two   = valuesFor.substring(15);

    display.clear();
    display.println("Valor atual");
    display.println(part_one);
    display.println("Abertura");
    display.println(part_two);

}
void setup() {
    //inicie ambas as seriais. A serial nativa pode estar na velocidade preferida.
    Serial.begin(9600);
    //A velocidade da softwareserial deve ser a mesma utilizada no ESP-01.
    SerialESP.begin(9600);
    //inicia a string com valor nulo.
    values = "";

    String teste = "Do bit Ao Byte";
    display.print(teste);
    delay(2000);
}

void loop() {
  /*Se houver dados advindos do ESP-01, lê até que encontre o final de linha.*/
  while (SerialESP.available()){
      
      values = SerialESP.readStringUntil('\n');
      //quando sair desse loop, o boolean garantirá que o valor seja impresso na serial do Arduino.
      ok = true;
  }

 //Se true, o resultado é impresso na serial do Arduino e a variável é zerada.
 if (ok){
     //Serial.println(values);
     formatValues(values);
     values = "";
     //garanta que não seja executada essa condicional novamente.
     ok = false;
 }
}

Pronto, agora já temos como resultado a imagem de destaque. No artigo final controlaremos o bitcômetro usando o próprio braço do servo-motor para apontar alta ou baixa.

Espero que estejam curtindo!

 

Djames Suhanko

Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.