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.
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
Vá em
https://github.com/KenjutsuGH/Adafruit-ST7735-Library e faça download do zip.
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); }
4 Comentários
ResponderExcluirSTM32
é mais poderoso do que o ESP32?
ResponderExcluirOi Fernando, ótimo projeto. Esta library esta correta? Não seria esta ;
ResponderExcluirE esta library, onde vc conseguiu?
Oi Fernando, ótimo projeto. Esta library esta correta? Não seria esta ;
ResponderExcluirE esta library, onde vc conseguiu?