banner

Ir para o Forum

O Barato e Poderoso STM32!



Quatro vezes mais poderoso que o Arduino Mega, hoje eu volto a falar do STM32 Maple Mini. Vocês sabem que eu gosto bastante desse “carinha” porque ele é um chip Arm, e, melhor ainda, aceita Arduino IDE. Ou seja, eu programo esse microcontrolador como se ele fosse um Arduino, mas posso dizer que o STM32 é muito mais poderoso.



STM32 Maple Mini que uso nesse vídeo:
http://s.click.aliexpress.com/e/uV7QZBI




Fizemos, então, uma montagem com um sensor, desta vez o BMP180. Somamos a isso um Display TFT 1.8”, de 160 pixels por 128, o que considero bastante para um dispositivo deste tamanho.
No vídeo de hoje, então, vamos fazer a leitura dos valores de temperatura e pressão utilizando o BMP180, exibir no display os dados lidos e fazer log destes dados lidos em um arquivo no cartão SD.


Pinagem

Confira aqui o pinout do Maple Mini que, além de ser incrível por ter muitas portas, é relativamente barato, pois o núcleo dele, SMT, custa centavos.



Montagem

Na nossa montagem temos um STM32 Maple Mini ligado via porta i2c a um BMP180, que é um sensor de temperatura e pressão. O circuito é alimentado pela porta USB. Determinamos a impressão de dados de temperatura em vermelho e, de pressão, em azul.



Instalar Biblioteca Adafruit Unified Sensor

Procure por Adafruit Unified Sensor e instale Adafruit Unified Sensor.




Instalar Biblioteca ST7735 Modificada para STM32

Descompacte o arquivo e coloque na pasta Documentos/Arduino/libraries




Biblioteca BMP085/BMP180

Procure por BMP085 e instale Adafruit BMP085 Library.




Biblioteca GFX

Procure por BMP085 e instale Adafruit BMP085 Library.




DisplaySTM32.ino

Primeiramente, importamos as libs do display, fonte do texto, sensor, comunicação e cartão SD. Definimos as configurações que usamos na montagem do display e o pino de ligação do SD.

//Importamos as libs do display, fonte do texto, 
//sensor, comunicação e cartão SD
#include <Adafruit_GFX_AS.h>
#include <Adafruit_ST7735.h>
#include <Fonts/FreeSans9pt7b.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP085.h>
#include <SPI.h>
#include <Wire.h>
#include <SD.h>

//Configuração que usamos na montagem
//do display
#define DISPLAY_CS     PA2
#define DISPLAY_RST    PA4
#define DISPLAY_DC     PA3

//Pino CS que o SD está ligado
#define SD_CS     PA8

#define ROW_SIZE 18
#define DISPLAY_WIDTH 160
#define LEFT_MARGIN 9

//Objeto responsável pelo display
Adafruit_ST7735 display = Adafruit_ST7735(DISPLAY_CS,  DISPLAY_DC, DISPLAY_RST);

//Objeto responsável pelo sensor
Adafruit_BMP085 bmp;




setup

Inicializamos o sensor, o SD e o display, e definimos a formatação desta tela.

void setup() {
  Serial.begin(115200);

  //Inicializa o sensor
  if (!bmp.begin()) {  
    Serial.println("Não achou o sensor BMP, verifique a montagem");
  }

  //Inicializa o SD
  if (!SD.begin(SD_CS)) {
    Serial.println("Erro ao inicializar lib SD!");
  }

  //Inicializa o display
  display.initR(INITR_BLACKTAB);
  //Rotaciona o conteúdo mostrado
  display.setRotation(1);
  //Configura a fonte do texto
  display.setFont(&FreeSans9pt7b);
  //Pinta a tela de branco
  display.fillScreen(ST7735_WHITE);
  //Configura e mostra o texto da temperatura
  display.setCursor(LEFT_MARGIN, 1*ROW_SIZE);
  display.setTextColor(ST7735_RED);
  display.print("Temperature:");
  //Configura e mostra o texto da pressão
  display.setCursor(LEFT_MARGIN, 4*ROW_SIZE);
  display.setTextColor(ST7735_BLUE);
  display.print("Pressure:");
}



Loop

Começamos o Loop com a leitura da temperatura, seguindo para pressão, e apontamos as Strings que serão exibidas no display e gravadas no log.

void loop() {
  //Faz a leitura da temperatura
  float temperature = bmp.readTemperature();

  //Faz a leitura da pressão
  int pressure = bmp.readPressure();

  //Strings que serão exibidas no display e gravadas no log
  String strTemp = String(temperature) + "C";
  String strPress = String(pressure) + "Pa";


Na sequência, definimos novas formatações do display.

//Limpa o texto da temperatura anterior
  display.fillRect(0, 1*ROW_SIZE + 2, DISPLAY_WIDTH, ROW_SIZE, ST7735_WHITE);
  //Posiciona o cursor no local correto
  display.setCursor(LEFT_MARGIN, 2*ROW_SIZE);
  //Configura a cor do texto como vermelho
  display.setTextColor(ST7735_RED);
  //Mostra a String da temperatura
  display.println(strTemp);
  //Limpa o texto da pressão anterior
  display.fillRect(0, 4*ROW_SIZE + 2, DISPLAY_WIDTH, ROW_SIZE, ST7735_WHITE);
  //Posiciona o cursor no local correto
  display.setCursor(LEFT_MARGIN, 5*ROW_SIZE);
  //Configura a cor do texto como azul
  display.setTextColor(ST7735_BLUE);
  //Mostra a String da pressão
  display.println(strPress);


Por fim, abrimos o arquivo de log para escrita e determinamos o comportamento conforme a necessidade.

//Abre o arquivo de log para escrita
  File dataFile = SD.open("log.txt", FILE_WRITE);
  
  //Se conseguiu abrir o arquivo
  if (dataFile) {
    //Escreve a String da temperatura
    dataFile.println(strTemp);
    //Escreve a String de pressão
    dataFile.println(strPress);
    //Fecha o arquivo
    dataFile.close();
  }

  //Espera 5 segundos
  delay(5000);
}



Faça o download dos arquivos:

INO

PDF


4 comentários:

  1. Oi Fernando, ótimo projeto. Esta library esta correta? Não seria esta ;
    E esta library, onde vc conseguiu?

    ResponderExcluir
  2. Oi Fernando, ótimo projeto. Esta library esta correta? Não seria esta ;
    E esta library, onde vc conseguiu?

    ResponderExcluir

Tecnologia do Blogger.