Arduino, Internet das Coisas e Computação vestível |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Display Oled 0,96 128x64 (Branco)Descrição
Caracteristicas:
Pinagem:
Biblioteca:
|
// Projeto: Desenhando na Tela OLED 0,96" I2C // Autor: André Silveira // Data: 14/06/2019 #include "Adafruit_GFX.h" // Biblioteca para processamento gráfica #include "Adafruit_SSD1306.h" // Biblioteca do controlador SSD1306 (128x64 e 128x32) Adafruit_SSD1306 display(128, 64); // Cria objeto display #include "Fonts/FreeMonoBold12pt7b.h" // Adiciona fonte #include "Fonts/FreeMono9pt7b.h" // Adiciona fonte int Contador; // Cria uma variável dinâmica void setup() { delay(100); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Inicializa a tela com endereço I2C 0x3C display.clearDisplay(); // Limpa a tela display.setTextColor(WHITE); // Define cor do texto display.setRotation(0); // Configura orientação 0, 1, 2 ou 3 /* Por padrão, linhas longas de texto são definidas para "quebrar" automaticamente na coluna mais à esquerda. Para substituir esse comportamento, útil em efeitos de seleção de rolagem, use setTextWrap (false). O comportamento normal de quebra automática é restaurado */ display.setTextWrap(false); display.dim(0); // Define brilho (0 é máximo e 1 é um pouco escuro) } void loop() { Contador = Contador + 1; // Incrementa variável em 1 if (Contador > 150) { Contador = 0; } /* Cria uma matriz de 10 caracteres para converte Contador float em uma string para alinhar o texto à direita */ char string[10]; dtostrf(Contador, 3, 0, string); // (<variável>,<dígitos usados>,<dígitos decimais>,<nome da string>) display.clearDisplay(); // Limpa a tela display.setFont(&FreeMono9pt7b); // Define uma fonte display.setTextSize(0); // Define o tamanho da fonte (Personalizada é 0) /* ------ Imprime texto ------ */ display.setCursor(0, 10); // Define posição para escrever na tela (x,y) display.println("Ola!!"); /* ------ Desenha um triângulo ------ */ display.drawTriangle(35,45,45,25,55,45, WHITE); // Draw triangle (X, Y dos 3 vértices do triângulo e após cor) /* ------ Desenha um triângulo preenchido ------ */ display.fillTriangle(0,63,15,45,30,63, WHITE); // Draw Fill triangle (X, Y dos 3 vértices do triângulo e após cor) /* ------ Desenha uma linha ------ */ display.drawLine(40,63,70,63, WHITE); // Draw line (x0,y0,x1,y1,color) /* ------ Desenha um circulo ------ */ display.drawCircle(47,36,20,WHITE); // Draw circle (x,y,radius,color). X e Y centro do circulo /* ------ Desenha um circulo preenchido ------ */ display.fillCircle(12, 27, 10, WHITE); // Draw filled circle (x,y,radius,color). X e Y centro do circulo /* ------ Desenha um retângulo com bordas arredondadas e com preenchimento ------ */ display.fillRoundRect(58, 0, 18, 18, 5, WHITE); // Draw filled rounded rectangle (x,y,width,height,color) /* ------ Desenha um retângulo ------ */ display.drawRect(79, 0, 49, 27, WHITE); // Draw rectangle (x,y,width,height,color) /* ------ Imprime variavel com alinhamento a esquerda ------ */ display.setFont(&FreeMonoBold12pt7b); // Configura a Fonte display.setCursor(83, 20); // Define posição para escrever na tela (x,y) display.println(Contador); // Valor impresso /* ------ Desenha retangulo com cantos arredondados ------ */ display.drawRoundRect(79, 37, 49, 27, 8, WHITE); // Draw rounded rectangle (x,y,width,height,radius,color) /* ------ Imprime variavel com alinhamento a direita ------ */ display.setCursor(83, 57); // Define posição para escrever na tela (x,y) display.println(string); // Valor impresso display.display(); // Imprime tudo que foi setado acima delay(1500); // Aguarda intervalo de 1,5 segundos } |
O projeto utiliza um Arduino Uno R3, Display Oled 0,96 128x64 e Módulo Acelerômetro e Giroscópio MPU-6050 para informar valores referentes a posição espacial do sensor. Este é um bom exemplo de como usar conjuntamente a tela OLED 128x64 "I2C" no endereço "0x3C" e o Giroscópio MPU-6050 "I2C" no endereço "0x68". O I2C é um protocolo de comunicação que visa conectar diversos dispositivos (periféricos) utilizando as linhas de dados Serial Data (SDA) e Serial Clock (SCL) . A ideia é definir um endereço hexadecimal para cada dispositivo conectado e no momento de comunicação somente o dispositivo solicitado responderá.
// Projeto: acelerômetro e giroscópio // Autor: André Silveira // Data: 14/06/2019 #include "Adafruit_GFX.h" // Biblioteca para processamento gráfico #include "Adafruit_SSD1306.h" // Biblioteca do controlador SSD1306 #include "GY6050.h" // Biblioteca do Acelerometro e Giroscópio /* --- Variaveis globais --- */ float acelX, acelY, acelZ; float giroX, giroY, giroZ; float tempCelsius, tempFarenheit; char string[10]; GY6050 gyro(0x68); // Cria um objeto gyro com endereço I2C "0x68" Adafruit_SSD1306 display(128, 64); // Cria objeto display void setup() { delay(100); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Inicializa a tela com endereço I2C "0x3C" display.clearDisplay(); // Limpa a tela display.setTextColor(WHITE); // Define cor do texto display.setRotation(0); // Configura orientação 0, 1, 2 ou 3 display.setTextWrap(false); display.setTextSize(1); // Define tamanho da fonte do texto display.dim(0); // Define brilho (0 é máximo) gyro.initialisation(); // Inicializa giroscópio } void loop() { /* --- Obtem dados do sensor --- */ acelX = gyro.refresh('A', 'X'); // Obtém o eixo "X" do Acelerometro acelY = gyro.refresh('A', 'Y'); // Obtém o eixo "Y" do Acelerometro acelZ = gyro.refresh('A', 'Z'); // Obtém o eixo "Z" do Acelerometro tempCelsius = gyro.refresh('T', 'C'); // Obtém a temperatura em Graus Celsius tempFarenheit = gyro.refresh('T', 'F'); // Obtém a temperatura em Farenheit giroX = gyro.refresh('G', 'X'); // Obtém o eixo "X" do Giroscópio giroY = gyro.refresh('G', 'Y'); // Obtém o eixo "Y" do Giroscópio giroZ = gyro.refresh('G', 'Z'); // Obtém o eixo "Z" do Giroscópio /* --- Desenha dados na tela do acelerometro --- */ display.clearDisplay(); display.drawRoundRect(20,0,40,54,4, WHITE); display.drawLine(20,16,60,16, WHITE); display.setCursor(28,6); display.println("Acel"); display.setCursor(32,22); dtostrf(acelX, 3, 0, string); display.println(string); display.setCursor(32,32); dtostrf(acelY, 3, 0, string); display.println(string); display.setCursor(32,42); dtostrf(acelZ, 3, 0, string); display.println(string); /* --- Desenha dados na tela do giroscópio --- */ display.drawRoundRect(64,0,40,54,4, WHITE); display.drawLine(64,16,104,16, WHITE); display.setCursor(72,6); display.println("Gyro"); display.setCursor(76,22); dtostrf(giroX, 3, 0, string); display.println(string); display.setCursor(76,32); dtostrf(giroY, 3, 0, string); display.println(string); display.setCursor(76,42); dtostrf(giroZ, 3, 0, string); display.println(string); display.display(); delay(1500); } |
O projeto usa WeMos D1 Wifi ESP8266 ou ESP8266 NodeMCU, Módulo Sensor DHT11 e Display Oled 0,96 128x64 para informar a temperatura e umidade através de IP da Internet (Servidor Web) em uma relação Servidor/Cliente. Quanto utilizar a placa WeMos D1 Wifi ESP8266 configurar a placa no Arduino IDE como WebMos D1 R1. Quanto utilizar a placa ESP8266 NodeMCU configurar a placa no Arduino IDE como NodeMCU 0.9 (ESP-12 Module).
O que é um Servidor Web?
Um computador responsável por fornecer e receber dados dos diversos clientes, atuando como centralizador de informação na Rede. Para tanto, utiliza um conjunto de protocolos de comunicação entre computadores chamado de TCP/IP (Protocolo de controle de transmissão): TCP (Transmission Control Protocol) e IP (Internet Protocol).
A relação Servidor/Cliente
A relação entre os computadores que hospedam sites (Servidores) e os navegadores que utilizamos em nossos computadores ou celulares (Clientes) é chamada de Servidor/Cliente. Neste tipo de relação, utiliza-se o procotolo o HTTP (Hypertext Transfer Protocol) para estabelecer a comunicação. Ele é responsável pelo tratamento dos pedidos e respostas entre cliente e servidor na World Wide Web. Nesse contexto, chamamos os servidores de Servidores Web.
/* Programa: Servidor Web para uma estação Metereológica com sensor DHT11 Autor: André Luis Marques da Silveira Data: 22/09/2019 */ #include "Wire.h" // Biblioteca para enviar e receber dados TWI/I2C #include "Adafruit_GFX.h" // Biblioteca para processamento gráfico #include "Adafruit_SSD1306.h" // Biblioteca do controlador SSD1306 #include "ESP8266WiFi.h" #include <DHT.h> #define DHTPIN D5 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); Adafruit_SSD1306 display(128, 64); // Cria objeto display const char* ssid = "NOME DO SERVIDOR"; const char* password = "SENHA DO SERVIDOR"; int porta = 80; // --- Caso ocorra problemas com a porta 80, utilize 8082 ou 8089 ---- // // --- A chamada, por exemplo fica: http://192.168.0.15:8082 ---- // WiFiServer server(porta); void setup() { // --- Inicializa Sensor DHT11 ---- // dht.begin(); // Inicializa biblioteca WIRE Wire.begin(); // Inicializa biblioteca sensor DHT11 pinMode(DHTPIN, INPUT); // Define pino do Sensor DHT11 // ---- Inicializa tela Oled ---- // display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Inicializa a tela com endereço I2C "0x3C" display.setTextColor(WHITE); // Define cor do texto display.setRotation(0); // Configura orientação display.setTextWrap(false); display.setTextSize(1); // Define tamanho da fonte do texto display.dim(0); // Define brilho (0 é máximo) display.clearDisplay(); // Limpa a tela display.drawRect(0,0,128,15,WHITE); // Posição (x0,y0,x1,y1) display.setCursor(4,4); // Posição do cursor na tela display.print("Rede:"); // Escreve texto no display display.println(ssid); // Escreve no da Rede Wifi display.display(); // Mostra texto no display // ---- Inicializa serial ---- // Serial.begin(9600); Serial.print("Conectando a rede Wifi "); Serial.println(ssid); // Escreve nome da Rede Wifi na Serial // --- Conecta Rede Wifi ---- // int a = 0; WiFi.begin(ssid, password); // Passa parâmetros para fazer conexão com a Rede sem fio while (WiFi.status() != WL_CONNECTED) { // Testa status da conexão a = a + 1; if (a < 60) { Serial.print("."); } else { Serial.println("."); a = 0; } delay(100); } Serial.println("Conectado a rede"); Serial.println(""); Serial.println("Servidor iniciado"); // ---- Inicia Servidor Web para receber dados em "WiFiServer server(porta)" ---- // server.begin(); // ---- Escreve na serial o IP recebido da rede sem fio (AUTOMÁTICO) ---- // Serial.print("IP para se conectar ao NodeMCU: "); Serial.print("http://"); Serial.println(WiFi.localIP()); // ---- Escreve na tela Oled o IP recebido da rede sem fio (AUTOMÁTICO) ---- // display.setCursor(0,25); display.print("IP:"); display.print(WiFi.localIP()); display.print(":"); display.println(porta); display.display(); } void loop() { WiFiClient client = server.available(); // Verifica se algum cliente está conectado ao servidor if (!client) { // Cliente não conectado, reexecuta processo delay(10); return; } // --- lê sensor DHT11 - temperatura e umidade --- // float h = dht.readHumidity(); // Temperatura em Celsius float t = dht.readTemperature(); // Temperatura em Fahrenheit (isFahrenheit = true) float f = dht.readTemperature(true); Serial.println("Novo cliente se conectou!"); Serial.print(" Temperatura: "); Serial.print(t); Serial.print(" Umidade: "); Serial.println(h); display.fillRect(0,40,128,64,BLACK); // fillRect(x,y,width,height,color) display.setCursor(11,42); // Posição do cursor na tela display.print("Temperatura:"); // Escreve texto no display display.setCursor(85,42); // Posição do cursor na tela display.print(t); // Escreve texto no display display.setCursor(24,52); // Posição do cursor na tela display.print("Umidade:"); // Escreve texto no display display.setCursor(76,52); // Posição do cursor na tela display.print(h); // Escreve texto no display display.display(); // Mostra texto no display // ---- Enquanto cliente estiver conectado aguarda 1 milisegundo ---- // while(!client.available()){ delay(1); } String request = client.readStringUntil('\r'); // Faz leitura da primeira linha da requisição Web Serial.println(request); // Escreve requisição na Serial client.flush(); // Aguarda até todos dados serem enviados ao cliente // ---- Monta protocolo de comunicação HTTP e conteúdo HTML para cliente ---- // client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(""); client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.println("<HEAD>"); client.println("<TITLE>Leitura da temperatura</TITLE>"); client.println("<META http-equiv=Content-Type content='text/html; charset=iso-8859-1'>"); client.println("<META HTTP-EQUIV='refresh' CONTENT='5'>"); client.println("</HEAD>"); client.println("<body>"); client.println("<h1><center>Bom-dia!</center></h1>"); client.println("<h2><center>Data e Hora</center></h2>"); client.println("<p><center id='datetime'></center></p>"); client.println("<script>"); client.print("var dt = new Date();"); client.print("document.getElementById('datetime').innerHTML = (('0'+dt.getDate()).slice(-2))+'/'+"); client.print("(('0'+(dt.getMonth()+1)).slice(-2))+'/'+(dt.getFullYear())+' - "); client.print("'+(('0'+dt.getHours()).slice(-2))+':'+(('0'+dt.getMinutes()).slice(-2));"); client.println("</script>"); client.println("<h2><center>Temperatura</center></h2>"); client.println("<p><center>"); client.println(t); client.println("Celsius</center></p>"); client.println("<p><center>"); client.println(f); client.println("Fahrenheit </center></p>"); client.println("<h2><center>Umidade</center></h2>"); client.println("<p><center>"); client.println(h); client.println("</center></p>"); client.println("</body>"); client.println("</html>"); Serial.println("Cliente desconectado "); Serial.println(""); delay(20); } |
O projeto utiliza Arduino Uno R3, Módulo display Oled 0,96 128x64 e Shield Arduino Multifunções com Sensores e I/O´s para informar a temperatura, umidade e luminosidade do meio-ambiente.
/* Programa: Informa temperatura, umidade e luminosidade através do Shield Arduino Multifunções Autor: André Luis Marques da Silveira Data: 23/03/2019 Objetivo: Manipular sensores 1. Sensor de temperatura e umidade DHT11 (porta D4) 2. Sensor de temperatura LM35 (A2) 3. Sensor de Luz LDR (A1) */ #include "Wire.h" // Biblioteca para enviar e receber dados TWI/I2C #include "Adafruit_GFX.h" // Biblioteca para processamento gráfica #include "Adafruit_SSD1306.h" // Biblioteca do controlador SSD1306 (128x64 e 128x32) #include "DHT.h" // Biblioteca sensor DHT11 // Variáveis de luminosidade, temperatura, etc. float luminosidade = 0; float temperatura = 0; float DHT11_temperatura = 0; float DHT11_umidade = 0; int PINO_DTH11 = 4 int PINO_LDR = A1; int PINO_LM35 = A2; Adafruit_SSD1306 display = Adafruit_SSD1306(); // Cria objeto Adafruit_SSD1306 DHT dht(PINO_DTH11, DHT11); // Cria objeto para sensor DHT11T void setup() { pinMode(PINO_DTH11, INPUT); // Define pino do Sensor DHT11 pinMode(PINO_LM35, INPUT); // Define pino do Sensor LM35 pinMode(PINO_LDR, INPUT); // Define pino do Sensor LDR dht.begin(); // Inicializa biblioteca WIRE Wire.begin(); // Inicializa biblioteca sensor DHT11 display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Inicializa dysplay com endereço I2C 0x3C display.setTextColor(WHITE); // Define cor do texto display.setTextSize(1); // Define tamanho da fonte do texto display.clearDisplay(); // Limpa as informações do display } void loop() { display.setCursor(0,0); // Posição do cursor na tela display.clearDisplay(); // Limpa display display.print("Sistema"); // Escreve texto no display // --- lê sensor LM35 - temperatura --- temperatura = ( 5.0 * analogRead(A2) * 100.0) / 1024.0; // --- lê sensor DHT11 - temperatura e umidade --- DHT11_temperatura = dht.readTemperature(); DHT11_umidade = dht.readHumidity(); display.setCursor(10,8); // Posição do cursor na tela display.print("Temp.:"); // Escreve texto no display display.setCursor(55,8); // Posição do cursor na tela display.print(DHT11_temperatura); // Escreve texto no display display.setCursor(10,16); // Posição do cursor na tela display.print("Umid: "); // Escreve texto no display display.setCursor(55,16); // Posição do cursor na tela display.print(DHT11_umidade); // Escreve texto no display // --- lê sensor LDR - Luminosidade --- luminosidade = map(analogRead(PINO_LDR), 0, 1023, 255, 0); display.setCursor(10,24); // Posição do cursor na tela display.print("Lumis: "); // Escreve texto no display display.setCursor(55,24); // Posição do cursor na tela display.print(luminosidade); // Escreve texto no display display.display(); // Mostra texto no display delay(1500); // Aguarda intervalo de 1,5 segundos } |
O projeto informar a temperatura, umidade e luminosidade do meio-ambiente.
A versão usa Arduino Uno R3, Display LCD 16x2 (+ resistores de 200Ω), potenciometro e sensor TMP36 para informar a temperatura e umidade do meio-ambiente.
/* Projeto: Informa temperatura e umidade Autor: André Silveira Data: 20/09/2020 */ #include "LiquidCrystal.h" int Pino_temperatura=A0; int Pino_umidade=A1; int TemperaturaTensao; float Tensao; float TemperaturaC; float TemperaturaF; // Inicializa instancia de classe do LiquidCrystal LiquidCrystal lcd(5,6,A2,A3,A4,A5); void setup() { Serial.begin(9600); Serial.println("Temp. e Umidade"); lcd.begin(16,2); lcd.clear(); lcd.setCursor(0,0); lcd.print("Temp. e Umidade:"); } void loop() { // --- Leitura da tensao no Sensor de Umidade --- // float umidade = analogRead(Pino_umidade); umidade = (umidade/1023); umidade = umidade*100.; // --- Faz a leitura da tensao no Sensor de Temperatura --- // TemperaturaTensao=analogRead(Pino_temperatura); Tensao=TemperaturaTensao*5; Tensao=Tensao/1024; // --- Converte a tensao lida em Graus Celsius --- // TemperaturaC=(Tensao-0.5)*100; // --- Converte a tensao lida em Fahrenheit --- // TemperaturaF=(TemperaturaC*9/5)+32; lcd.setCursor(0,1); lcd.print(TemperaturaC); lcd.print(" C"); lcd.setCursor(8,1); lcd.print(umidade); lcd.print(" % "); } |
A versão usa Arduino Uno R3, Display Oled 0,96 128x64, Módulo Sensor DHT11 e Módulo Sensor de Luz LDR KY-018 para informar a temperatura, umidade e luminosidade do meio-ambiente.
/* Programa: Informa temperatura, umidade e luminosidade com sensor DHT11 e LDR Autor: André Luis Marques da Silveira Data: 23/03/201 */ #include "Wire.h" // Biblioteca para enviar e receber dados TWI/I2C #include "Adafruit_GFX.h" // Biblioteca para processamento gráfica #include "Adafruit_SSD1306.h" // Biblioteca do controlador SSD1306 (128x64 e 128x32) #include "DHT.h" // Biblioteca sensor DHT11 // Variáveis de luminosidade, temperatiura, etc. float luminosidade = 0; float temperatura = 0; float DHT11_temperatura = 0; float DHT11_umidade = 0; int PINO_DTH11 = 2; int PINO_LDR = A0; Adafruit_SSD1306 display = Adafruit_SSD1306(); // Cria objeto Adafruit_SSD1306 DHT dht(PINO_DTH11, DHT11); // Cria objeto para sensor DHT11T void setup() { pinMode(PINO_DTH11, INPUT); // Define pino do Sensor DHT11 pinMode(PINO_LDR, INPUT); // Define pino do Sensor LDR dht.begin(); // Inicializa biblioteca WIRE Wire.begin(); // Inicializa biblioteca sensor DHT11 display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Inicializa dysplay com endereço I2C 0x3C display.setTextColor(WHITE); // Define cor do texto display.setTextSize(1); // Define tamanho da fonte do texto display.clearDisplay(); // Limpa as informações do display } void loop() { display.setCursor(0,0); // Posição do cursor na tela display.clearDisplay(); // Limpa display display.print("Sistema"); // Escreve texto no display // --- lê sensor DHT11 - temperatura e umidade --- DHT11_temperatura = dht.readTemperature(); DHT11_umidade = dht.readHumidity(); display.setCursor(10,8); // Posição do cursor na tela display.print("Temp.:"); // Escreve texto no display display.setCursor(55,8); // Posição do cursor na tela display.print(DHT11_temperatura); // Escreve texto no display display.setCursor(10,16); // Posição do cursor na tela display.print("Umid: "); // Escreve texto no display display.setCursor(55,16); // Posição do cursor na tela display.print(DHT11_umidade); // Escreve texto no display // --- lê sensor LDR - Luminosidade --- luminosidade = map(analogRead(PINO_LDR), 0, 1023, 255, 0); display.setCursor(10,24); // Posição do cursor na tela display.print("Lumis: "); // Escreve texto no display display.setCursor(55,24); // Posição do cursor na tela display.print(luminosidade); // Escreve texto no display display.display(); // Mostra texto no display delay(1500); // Aguarda intervalo de 1,5 segundos } |
[Voltar] |
[Avançar] |