Descrição da biblioteca OLED i2c. Criando imagens rasterizadas

Descrição da biblioteca OLED i2c.  Criando imagens rasterizadas
Descrição da biblioteca OLED i2c. Criando imagens rasterizadas

Introdução: Introdução ao display OLED I2C 128*64/128*32.

Olá! Sendo um entusiasta amador da eletrônica, tenho certeza de que tudo o que fazemos são brinquedos eletrônicos - caseiros ou grandes projetos, tudo isso por curiosidade e preguiça. A curiosidade se esforça para compreender e compreender o vasto e desconhecido, para descobrir como ali funciona, o que faz, como se move. E a preguiça inventa alguma coisa para inventar, para não se levantar, para não se aproximar, para não levantar, para não se sujar ou qualquer outra coisa importante.

Como ver informações é melhor do que descobrir o que está prestes a acontecer em nosso dispositivo, ou já aconteceu, ou está acontecendo, com certeza desejaremos obter isso muito bem. informação útil de nossos microcontroladores, sensores ou outros dispositivos. E de qualquer forma, quero receber mensagens, como perguntas, avisos, lembretes, emoticons, estrelas, corações e assim por diante.

Para quem também tem um desejo semelhante, aqui está: guia rápido na conexão e teste de telas OLED pequenas e baratas.
A seguir falaremos sobre um dos modelos de display OLED amplamente disponíveis para rádios amadores, controlado pelo chip SSD1306, com tela de 0,96 polegadas e resolução de 128 * 64 ou 128 * 32 pixels. Esses monitores são ideais para pequenos projetos de rádio amador e produtos caseiros.

Etapa 1: Conceitos Básicos

Vamos conectá-lo a Arduino UNO/ NANO, bem, também iremos programá-lo via Arduino.
  • OLED é um diodo emissor de luz orgânico, ou seja, dispositivo semicondutor de compostos orgânicos, que começa a emitir luz quando uma corrente elétrica passa por ele.
  • ARDUINO é uma plataforma para treinamento e construção de sistemas de automação e robótica.
  • ArduinoIDE - ambiente de desenvolvimento. Esse programa gratuito para programar Arduino.
  • I2C – Circuitos Interintegrados, linha de comunicação entre chips.
  • Sketch, também conhecido como código, também conhecido como programa - terminologia do Arduino.
Siga as instruções para entender como conectar e configurar corretamente o display OLED ao Arduino e como exibir uma mensagem personalizada em seu display.
Fazemos tudo passo a passo.

Etapa 2: Acessórios

Precisamos apenas de quatro coisas:
  • 1. O display OLED em si tem 0,96” (você pode comprá-lo no Aliexpress ou Ebay, é longo, mas barato!).
  • 2. Arduino UNO/Nano (mesmo local do display).
  • 3. Conectando fios (ibid.).
  • 4. Computador ou laptop com ArduinoIDE instalado.


Em geral, a compra de peças para vários projetos Aliexpress e Ebay são uma coisa muito legal, enquanto você trabalha em um projeto, os detalhes de outro já estão a caminho. O principal é não esquecer de fazer o pedido.

Etapa 3: Conectando o monitor

A tela é controlada por um chip SSD1306, que suporta cinco protocolos de comunicação, um dos quais é I2C. Os dados que usam este protocolo são transmitidos por apenas dois fios, e quanto menos fios no caso, melhor, por isso é muito adequado para nós. Mas! Existem módulos com Protocolo SPI e até troca de protocolos, então tome cuidado ao adquirir este módulo.


Pinos usados:
Display OLED - SCL/SCK (relógio) e SDA (dados), potência “Plus” (VCC) e potência “Minus” (GND).


Pinos usados:
Arduino UNO - SCL/SCK em A5 e SSD em A4, potência “Plus” (+5V) e potência “Minus” (GND).
Conectando o monitor ao Arduino:
  • Vcc - 5V
  • GND - GND
  • SDA-A4
  • SCL-A5

Etapa 4: scanner I2C

Cada dispositivo no barramento I2C possui um endereço hexadecimal, não pode ser alterado, é cabeado, todo fabricante responsável deve indicá-lo em algum lugar da caixa ou nas instruções. Existem módulos com interruptores e jumpers que podem ser usados ​​para alterar o endereço, mas... se os dispositivos são baratos ao ponto da desgraça, então o fabricante pode não se preocupar em lidar com um detalhe tão pequeno, então você terá que determine você mesmo.

No total, até 127 endereços podem ser usados ​​no barramento – 119 para dispositivos e 8 endereços de serviço. A comunicação é realizada nesses endereços. Existe um principal, também conhecido como Mestre, e existe um escravo, também conhecido como Escravo - os Mestres perguntam, os escravos respondem, tudo é simples.
Como nosso display OLED usa o protocolo de comunicação I2C e o endereço pode não ser especificado, tentaremos descobrir esse endereço nós mesmos.

Você pode fazer isso enviando um pequeno esboço para sua placa Arduino com o OLED conectado. MAS!
Não se apresse em enviar o esboço para o Arduino imediatamente! Vamos primeiro baixar os “drivers”, ou seja, vamos conectar as bibliotecas, e para fazer isso iremos imediatamente para a “Etapa No. 5”, e depois voltaremos e continuaremos.

Etapa 4: Continuação:

Baixe CODE Finder_I2C_Hex_Address.ino, carregue para Arduino.
Abra “Port Monitor”, defina a velocidade para 9600 e se tudo estiver conectado corretamente o programa mostrará o endereço do dispositivo, no meu caso OLED com endereço 0x3F.

Etapa 5: Baixe e conecte bibliotecas

Para que tudo funcione corretamente e você não precise reinventar a roda, é necessário conectar algumas bibliotecas ao ambiente ArduinoIDE, a saber: ADAFRUIT GFX e ADAFRUIT SSD1306, são necessárias para que o Arduino possa se comunicar de forma independente com o display OLED.
Você pode incluir essas bibliotecas seguindo estas etapas.
  • 1. No ArduinoIDE, acesse o menu Sketch.
  • 2. Selecione “Incluir Bibliotecas”.
  • 3.Selecione “Gerenciar Bibliotecas”.
  • 4. Encontre ADAFRUIT GFX e instale-os.
  • 5. Encontre ADAFRUIT SSD1306 e instale-os.
Com as versões mais recentes das bibliotecas, meu display funcionou torto, é claro que isso pode ser devido à curvatura das minhas mãos, mas depois que instalei as primeiras versões dessas bibliotecas, tudo começou a parecer liso e bonito. Por alguma razão, as falas de Pushkin vêm à mente:
...e experiência, filha de erros difíceis,
e gênio, amigo dos paradoxos.

Outra maneira de instalar bibliotecas é encontrar, baixar e instalar você mesmo essas bibliotecas.
Para exemplo do Github:
https://github.com/adafruit/Adafruit-GFX-Library
https://github.com/adafruit/Adafruit_SSD1306

Estas são as mesmas bibliotecas Adafruit, mas bibliotecas semelhantes podem ser facilmente pesquisadas em motores de busca, a pedido do OLED I2C. Muitos entusiastas escrevem bibliotecas “para si próprios” e depois as publicam na web. Qual biblioteca usar depende de você.
Para que o display exiba letras russas, também são necessárias bibliotecas especiais, mas este é um tópico separado para um artigo separado.
Após a instalação das bibliotecas, você pode retornar ao passo 4 e finalmente descobrir o endereço hexadecimal do seu display.

Etapa 6: teste de exibição

Para verificar se tudo funciona conforme o esperado, execute o exemplo de teste do ArduinoIDE.
Por esta:
Vá para ARQUIVO > EXEMPLOS > SSD 1306 > Selecione 128x64 i2c
Se você receber "Erro", tente selecionar SSD 1306 > 128x32 i2c.
Se o "Erro" ocorrer novamente, tente alterar o endereço I2C na linha 61 do código de demonstração e substitua-o pelo endereço do seu display que você determinou na etapa 4.
Se o erro ocorrer novamente, você pode tentar editar o arquivo Adafruit_SSD1306.h, ele está localizado na pasta de bibliotecas do Arduino.


Abra o arquivo Adafruit_SSD1306.h em editor de texto e encontre as linhas:
//#define SSD1306_128_64 #define SSD1306_128_32 // #define SSD1306_96_16
Remova o comentário da linha:
#define SSD1306_128_64.
Deveria ficar assim:
#define SSD1306_128_64 //#define SSD1306_128_32 // #define SSD1306_96_16
Se o erro ocorrer novamente, será necessário verificar as conexões corretas.
Assim que o download for concluído, você verá uma animação de teste na tela, o que significa que configurou seu display OLED com sucesso.

Depois de desfrutar completamente desta animação, você pode passar para a próxima etapa.

Passo 7: Escreva sua própria mensagem

Para escrever sua própria mensagem, primeiro crie um novo esboço no ambiente de programação ArduinoIDE.
No cabeçalho incluímos 4 bibliotecas:
#incluir #incluir #incluir #incluir
Então escrevemos o protocolo de redefinição:
#define display OLED_RESET 4 Adafruit_SSD1306(OLED_RESET);
No VOID SETUP indicamos o endereço hexadecimal do nosso display 0x3C, que aprendemos no “Passo No. 4”.
Em seguida, inicializamos o display e o limpamos:
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay();
A seguir, em VOID LOOP escrevemos o código principal, ou seja, a nossa mensagem que queremos exibir no display.
Para fazer isso, descrevemos o tamanho do texto, a cor do texto, a posição do cursor e, por fim, exibimos a mensagem usando o comando println:
display.setTextSize(2); display.setTextColor(BRANCO); display.setCursor(0,0); display.println("Muito bem!"); display.display();
No final não esqueça de escrever display.display para que a imagem seja exibida na tela, caso contrário você ficará vazio.
Se você fez tudo corretamente, uma mensagem aparecerá nos displays.

O artigo discute monitores OLED monocromáticos com resolução de 128x64 e 128x32 pixels.

Estas são telas pequenas, sua diagonal é de apenas 1”. Sua principal vantagem é a facilidade de leitura devido ao alto contraste do display OLED. Cada display OLED é feito de LEDs orgânicos brancos (OLEDs) individuais de 128x64 ou 128x32. Cada LED é ligado/desligado usando um chip de controle. Como a tela em si é uma fonte de luz, nenhuma luz de fundo adicional é necessária. Em primeiro lugar, isto garante um elevado contraste do ecrã e, em segundo lugar, reduz significativamente os custos de energia necessários para o alimentar.

O display usa um chip SSD1306 como driver, que permite a transferência de dados via I2C, SPI e protocolo paralelo de 8 bits. Normalmente, uma escolha tão ampla de interfaces fornece uma tela com resolução de 128x64 pixels. Em monitores OLED com resolução de 128x32, apenas o protocolo SPI está disponível. O artigo abaixo utiliza SPI para conexão, por ser o mais universal e requer um pequeno número de contatos.

Fonte de alimentação para monitores OLED

O display OLED e o driver requerem energia de 3,3 V e 3,3 V para alimentar a lógica para transmitir dados. A fonte de alimentação dos monitores depende de como a tela é carregada, mas geralmente consome cerca de 20 mA e requer uma tensão de alimentação de 3,3 V. O driver integrado é uma chave simples que converte 3,3 V - 5 V em um sinal de controle para o Visor OLED. Você pode operar a tela com uma única fonte de alimentação de 3,3 V ou usar 3,3 V para alimentar o chip e até 4,5 V para alimentar a própria tela. Ou você pode conectar 3,3 V ao chip e fornecer 7-9 V diretamente ao pino de alimentação do display OLED.

OLED 128x64 e 128x32 com saída pronta para 5V

Se você tiver uma versão do display OLED anterior à v1 128x64, talvez não seja necessário ler a próxima subseção. Você já tem a capacidade de fornecer 5 V. Todos os SPI e I2C de 1,3 "128x64 e pequenos 128x32 têm 5 V integrados. Se você tiver um display OLED modelo v2 de 0,96" 128x64 com uma marca de 5 V na frente, ele também pode ser conectado a 5 V Se você tiver uma versão mais antiga do display OLED - 0,96" (veja abaixo), você precisa ter cuidado ao conectar ao microcontrolador de 5 V. O display OLED foi projetado de forma que seja compatível com alimentação de 5 V. Ou seja, você pode fornecer energia na faixa de 3 a 5 V, e o regulador embutido fará todo o resto do “trabalho sujo” para você.

Todas as telas OLED podem ser usadas com alimentação e lógica de 3,3 V.


Basta conectar o pino GND ao terra e o pino Vin a uma fonte de alimentação na faixa de 3-5V. Isso resultará em um pino 3Vo de 3,3V.

0,96 128x64 OLED

Versões mais antigas de monitores OLED de 0,96" 128x64 são mais difíceis de usar porque não são compatíveis com 5V por padrão. Ou seja, você precisa fornecer energia de 3,3V para eles.


  • VDD - para alimentação lógica de 3,3 V. O valor da tensão deve ser 3 ou 3,3 V.
  • VBAT é uma entrada para alteração de tensão na faixa de 3,3 a 4,2 V.
  • VCC é o pino de alta tensão para uma tela OLED. Se você estiver usando um conversor de tensão integrado, este contato não precisa estar conectado. Se você não estiver usando um conversor interno, conecte-o a uma fonte de alimentação de 7 a 9 Vcc.

Biblioteca e exemplos do Arduino

Para usar pequenos displays OLED monocromáticos, você precisará instalar as bibliotecas do Arduino. O código da biblioteca abaixo suporta o trabalho com qualquer modelo de placa Arduino. Além disso, pode ser facilmente adaptado a outros microcontroladores. Para transferência de dados, é usado o padrão de transferência de dados SPI.

Você pode baixar a biblioteca para operar o display OLED no Github - biblioteca Adafruit SSD1306. Clique no botão DOWNLOAD à esquerda canto superior, extraia o arquivo e renomeie a pasta para Adafruit_SSD1306. Verifique se a pasta contém os arquivos Adafruit_SSD1306.cpp e Adafruit_SSD1306.h, além de uma pasta de exemplos.

Mova a pasta Adafruit_SSD1306 para a pasta Arduino/libraries. Se a pasta não existir, você precisará criá-la. No Windows o caminho será: (pasta inicial)\Meus Documentos\Arduino\libraries, e para Mac ou Linux: (pasta inicial)/Documents/Arduino/libraries. Caso você tenha alguma dificuldade com bibliotecas, confira o guia completo para trabalhar e instalar bibliotecas em nosso site.

Você precisará realizar um procedimento semelhante com o Github - biblioteca Adafurit_GFX.

Após instalar as bibliotecas Adafruit_SSD1306 e Adafruit_GFX, reinicie o Arduino IDE. Você pode baixar um esboço de exemplo através do menu: Arquivo→Sketchbook→Bibliotecas→Adafruit_SSD1306→SSD1306...

Depois de concluir a conexão do display de acordo com as recomendações acima, você pode fazer upload do esboço para o seu Arduino.

A biblioteca não será capaz de determinar o tamanho da tela no nível do código. O tamanho deve ser especificado no arquivo de cabeçalho. Vá para a pasta da sua biblioteca e abra o arquivo Adafruit_SSD1306.h. No topo há explicações para adaptar a biblioteca a diversas exibições.



Criando imagens rasterizadas

Você pode criar facilmente imagens bitmap para exibição em um display OLED usando o software LCD Assistant. Primeiro, crie uma imagem usando qualquer editor de fotos (Photoshop, Paint, etc.). Salve esta imagem no formato Bitmap monocromático (bmp):


Defina as seguintes opções:


E importe seu bitmap monocromático. Salve-o (salve a saída) em um arquivo cpp:

O código fornecido no exemplo pode ser usado para processar a imagem resultante


Conectando um display OLED 128x64

Contatos de soldagem

Antes de conectar, você precisa instalar e soldar os contatos no display OLED. Os contatos não funcionarão sem fiação!

Comece instalando os trilhos de 8 pinos em seu placa de circuito. O trilho é instalado na placa de ensaio com suas pernas longas.


Coloque o display OLED em cima para que as pernas curtas dos trilhos se encaixem nos orifícios do display


Agora solde 8 pinos em 8 furos!


I2C ou SPI

Um de bons recursos As telas OLED têm 128x64 porque podem usar protocolos I2C ou SPI. SPI é mais rápido que I2C, mas requer mais pinos para conectar. Além disso, configurar o SPI em alguns microcontroladores é mais fácil do que configurar o I2C.

Conectando OLED via I2C

A tela pode ser conectada via protocolo I2C a qualquer microcontrolador que suporte este formato. Como a interface I2C é usada apenas para “conectar” o display, você terá 512 bytes de memória RAM no microcontrolador. Mas não será possível transferir dados de um display OLED.

Primeiro, você precisa conectar dois pinos na parte traseira da placa da tela OLED. Ambos os pinos devem estar em "curto-circuito" (usando um fio) para que o I2C funcione!


  • GND vai para GND (terra)
  • Vin vai para 5V
  • Dados para I2C SDA (no Uno é A4, no Mega é 20 e no Leonardo é digital 2)
  • Clk para I2C SCL (no Uno é A5, no Mega é 21 e no Leonardo é digital 3)
  • RST para 4 (você pode alterar este pino posteriormente no código do programa)

Esta conexão corresponde ao exemplo que está na biblioteca. Após a opção proposta funcionar, você pode tentar outro contato para Reset (não é possível alterar os contatos SCA e SCL).

O exemplo está em: Arquivo→Sketchbook→Bibliotecas→Adafruit_SSD1306→SSD1306_128x64_i2c exemplo

Conexão OLED via SPI

Por padrão, a placa usa SPI, mas se você usou I2C anteriormente, você precisa abrir os contatos que fechou no parágrafo anterior!


Depois disso, conecte os pinos ao Arduino

  • GND vai para o chão
  • Vin vai para 5V
  • Dados para digital 9
  • CLK para digital 10
  • D/C para digital 11
  • RST para digital 13
  • CS para digital 12

Esta conexão corresponde ao esboço de exemplo fornecido na biblioteca. Após iniciar e verificar, você pode alterar os pinos e o programa.

O exemplo está em: Arquivo→Sketchbook→Bibliotecas→Adafruit_SSD1306→SSD1306_128x64_spi exemplo

Conectando um display OLED 128x32

Conectando uma tela OLED 128x32 via SPI

A tela OLED 128x32 é muito fácil de conectar via SPI, pois possui um módulo de correspondência de nível integrado. Primeiro pegue um trilho de 0,1" e 8 pinos.


Coloque os pinos na placa de ensaio com o lado comprido e a tela OLED por cima. Depois disso, solde o trilho ao PCB OLED.


Depois disso, conecte o Arduino - GND conecta ao terra, Vin conecta ao 5V, DATA ao digital 9, CLK ao digital 10, D/C ao digital 11, RST ao digital 13 e CS ao digital 12.

O esboço segue como você conectou o escudo ao Arduino. Depois de verificar a funcionalidade, você pode tentar conectar outros contatos.

O exemplo está em: Arquivo→Sketchbook→Libraries→Adafruit_SSD1306→SSD1306_128x32_SPI exemplo

Se você estiver usando uma tela OLED de 128x32, descomente a linha "#define SSD1306_128_32" na parte superior do esboço Adafruit_SSD1306.h. Ao remover o comentário desta linha, você altera o tamanho do buffer.

Conectando uma tela OLED 128x32 via I2C

A tela OLED 128x32 pode ser facilmente conectada via I2C. Novamente, o motivo é a presença de um módulo de correspondência de nível e de um regulador. Primeiro pegue um trilho de 0,1" e 6 pinos.

Instale o trilho com pinos longos na placa de ensaio


Instale uma tela OLED na parte superior


Solde o trilho ao PCB OLED


Agora conecte os pinos ao Arduino

  • GND para GND
  • Vin para 5V
  • Dados SDA para I2C (no Uno é A4, no Mega é 20 e no Leonardo é digital 2)
  • SCL para I2C Clock (no Uno é A5, no Mega é 21 e no Leonardo é digital 3)
  • RST para 4 (você pode alterar esses pinos posteriormente no esboço)

Esta conexão corresponde à necessária para que o esboço de exemplo funcione. Depois que o exemplo funcionar, você poderá alterar o pino RST. Você não pode alterar os pinos I2C porque eles são “fixos” no nível do circuito.

O exemplo está em: Arquivo→Sketchbook→Bibliotecas→Adafruit_SSD1306→SSD1306_128x32_i2c exemplo

Conectando uma tela OLED antiga de 128x64 V 1.0

Este diagrama de fiação foi projetado para telas OLED de 0,96" mais antigas que vêm com um módulo de correspondência de nível. Se você tiver a V2.0, use um diagrama de fiação diferente.

A versão V1 da tela OLED 128x64 opera a 3,3V e não possui módulo de correspondência de nível integrado, portanto, para usar esta tela com um microcontrolador de 5V, você precisará de um módulo de condicionamento externo. Se o seu microcontrolador suportar 3,3 V, você pode pular as próximas etapas.

Presume-se que você usará uma placa de circuito. Pegue um trilho de 0,1" com 10 pinos


Instale os contatos com pernas longas na placa de ensaio e, em seguida, no topo - o trilho esquerdo dos contatos da tela OLED.


Solde os contatos


Conecte VDD e VBAT (eles se conectarão a 3,3V). GND se conecta ao GND.


Instale o módulo de correspondência de nível CD4050 de forma que o pino 1 fique no topo


Conecte o pino 10 ao pino D/C, o pino 12 ao CLK (tempo SPI) e o pino 15 ao DAT (dados SPI).


Conecte o pino 2 ao RES (reset) e o pino 4 ao CS (seleção de chip). O pino 1 vai para 3,3 V e o pino 8 para o terra.


Você pode conectar as entradas do módulo de correspondência de nível a qualquer contato, mas em nesse caso conectamos o digital 13 ao pino 3 do módulo correspondente, 12 ao pino 5, 11 ao pino 9, 10 ao pino 11 e 9 ao pino 14. Esta conexão corresponde ao esboço do exemplo. Depois que a conexão acima funcionar, você poderá experimentar outros contatos/pinos.


Deixe seus comentários, dúvidas e compartilhe experiência pessoal abaixo. Novas ideias e projetos muitas vezes nascem em discussões!

(gráfico), mas não será usado nesta lição.
A biblioteca gráfica suporta todas as funções da biblioteca de texto e possui funções adicionais para trabalhar com imagens e gráficos, mas ao mesmo tempo leva mais memória, RAM e memória de programa.

Você pode descobrir como instalar bibliotecas na página Wiki - Instalando bibliotecas no Arduino IDE.

Diagrama de conexão:

Código do programa:

#incluir // Inclui a biblioteca iarduino_OLED_txt. iarduino_OLED_txt meuOLED(0x78); // Declara o objeto myOLED, indicando o endereço de exibição no barramento I2C: 0x78 (considerando o bit RW=0). //extern uint8_t SmallFontRus; // Conecte a fonte SmallFontRus. // void setup())( // myOLED.begin(); // Inicia o trabalho com o display. myOLED.setFont(SmallFontRus); // Especifique a fonte que precisa ser usada para exibir números e texto. // myOLED .setCoding(TXT_UTF8) ; // Especifique a codificação do texto no esboço. Se o alfabeto russo não for exibido, então... ) // remova o comentário da função setCoding e substitua o parâmetro TXT_UTF8 por TXT_CP866 ou TXT_WIN1251. // void loop())( // myOLED.clrScr(); // Limpa a tela. myOLED.print("Maiúsculas:" , 0, 0); // Imprime texto começando na coluna 0, linha 0. myOLED .print( "ABCDEFGHIJKLM" , OLED_C, 2); // Exibe o texto no centro de 2 linhas. ); // Exibe o texto no centro da linha 5. myOLED.print("РСТУФХШШШШШШШШШХИУЯ" , OLED_C, 6); // Exibe o texto no centro da linha 6. delay(3000); (); // Limpa a tela. myOLED.print("Letras minúsculas:" , 0, 0); // Imprime o texto a partir da coluna 0, linha 0. myOLED.print("abcdefghijklm" , OLED_C, 2); texto no centro da 2ª linha.myOLED.print("rstufhhshshshyuya", OLED_C, 6); Exibe o texto no centro da 6ª linha delay(3000); // Aguarde 3 segundos. //Limpa a tela. myOLED.print("Caracteres:" , 0, 0); // Texto de saída começando na coluna 0, linha 0. meuOLED.print("()()<>?!#$%&*" , OLED_C, 3); // Exibe o texto no centro da 3ª linha. myOLED.print("~`"\"^_-+=,.:;|/" , OLED_C, 5) ; // Exibe o texto no centro da linha 5. delay(3000); // Aguarde 3 segundos. linha 0. myOLED.print("1234567890" , 6, 2); // Imprime o texto a partir da coluna 6, linha 2. myOLED.print(- 6 colunas 3 linhas). 1234567890 , 0, 4); // Imprime o número a partir de 0 coluna 4 linhas. 3 segundos) //

Algoritmo de operação do programa:

No código setup(), o display é inicializado (preparando o display para operação) e a fonte “SmallFontRus” é conectada (a biblioteca possui várias fontes pré-instaladas que são conectadas antes do uso). Uma lista de fontes e uma descrição de todas as funções das bibliotecas iarduino_OLED e iarduino_OLED_txt podem ser encontradas na seção Wiki - Tela OLED 128×64 / 0,96”.

O código loop() é dividido em 4 partes. Cada parte começa com a função de limpeza de tela clrScr() seguido por várias funções print() para imprimir texto ou números na tela. Todas as partes são executadas uma após a outra com um atraso de 3 segundos executado pelas funções delay().

Como resultado, o seguinte aparecerá alternadamente no visor: letras grandes (incluindo russo), letras minúsculas (incluindo russo) , símbolos e números .

Problemas ao enviar letras russas:

Codificação:

O primeiro e principal problema é a codificação na qual o esboço é passado ao compilador. Diferentes versões do Arduino IDE armazenam o esboço em diferentes codificações. Até última versão Arduino IDE 1.8.5 (no momento em que esta lição foi escrita) para sistema operacional Windows, passa o esboço para o compilador na codificação UTF-8 (se o esboço foi salvo em um arquivo *.ino) ou na codificação Windows-1251 (se o esboço não foi salvo). Mas nem o esboço nem as bibliotecas nele utilizadas sabem em que codificação serão transmitidos ao compilador. Acontece que o mesmo esboço, usando letras russas, pode funcionar de maneiras diferentes.

Observação:

O que é codificação?
O computador, assim como o controlador (incluindo o Arduino), armazena, recebe e transmite dados na forma de 1 e 0. A partir de um conjunto de 1 e 0, você pode formar números com precisão, mas não pode formar letras de forma inequívoca. Codificação é a representação de letras por números (de acordo com seu número de série), que um computador ou controlador já pode operar. Por exemplo, “A” - 1, “B” - 2, “C” - 3, etc., então a palavra “OLÁ” pode ser transmitida, recebida ou armazenada como um conjunto de números: 17,18,10,3 ,6 ,20. Como as letras podem ser organizadas de diferentes maneiras (primeiros símbolos ou números, ou letras de outro idioma, etc.), os números de série (números) das letras serão diferentes, então muitas codificações foram inventadas. Historicamente, as letras latinas têm os mesmos números de série na maioria das codificações: “A”...“Z” = 65...90, “a”...“z” = 97...122, e letras cirílicas não apenas têm números diferentes, mas podem estar dispersos ou totalmente ausentes nas codificações.

Nas bibliotecas iarduino_OLED e iarduino_OLED_txt, fornecemos a função setCoding (), que pode tomar como único argumento um dos seguintes valores: TXT_UTF8, TXT_CP866, TXT_WIN1251, que determina a codificação atual do sketch. Esta função está comentada na linha 3 do código de configuração desta lição. Se o texto russo não for exibido corretamente no display, remova o comentário da linha com a função setCoding e substitua o parâmetro TXT_UTF8 por TXT_CP866 ou TXT_WIN1251. Na maioria dos casos isto resolverá o problema de codificação.

MyOLED.setCoding(TXT_WIN1251); // Indicamos que o texto do esboço é apresentado na codificação Windows-1251.

Se a função setCoding () Não te ajudou então chame a função setCoding () com o parâmetro falso, e indique as letras russas com seu código, conforme mostrado na próxima seção desta lição: “Memória insuficiente”. Se desejar, indique nos comentários da lição sua versão do SO, a versão do Arduino IDE e qual codificação seu Arduino IDE usa (se você não sabe qual codificação o Arduino IDE usa, escreva quais caracteres são exibidos em a exibição em vez de letras russas minúsculas e maiúsculas). Tentaremos adicionar sua codificação às bibliotecas.

Insuficiente memória de acesso aleatório:

Em segundo lugar, mas não menos problema importanteé que as strings ocupam muita RAM. Cada letra de uma string ocupa pelo menos 1 byte. Este problema é especialmente relevante ao criar vários itens de menu.

Solução:

Maioria solução eficaz Esse problema é o armazenamento de strings não na área de RAM, mas sim na área de memória de programa, já que a quantidade de memória de programa é muito maior. Para fazer isso, forneça strings como argumentos para a função F(). As linhas especificadas desta forma serão armazenadas na área de memória do programa:

MyOLED.print(F("Linha para exibição")); // Envia a string para o display. Serial.print(F("Linha para monitor")); // Envia uma string para o monitor da porta serial.

RAM ou memória de programa insuficiente:

Se você trabalha com strings em russo no Arduino IDE, que armazena o esboço na codificação UTF-8. Você já armazena strings na área de memória do programa (ou deixou strings na área RAM). Você ainda pode liberar até metade da memória ocupada pelas strings!

O fato é que na codificação UTF-8, cada letra russa ocupa 2 bytes. Se você especificar caracteres russos na codificação onde eles ocupam 1 byte, poderá liberar metade da memória ocupada por strings, independentemente do tipo de memória em que estão armazenados.

Os caracteres nas fontes das bibliotecas iarduino_OLED e iarduino_OLED_txt são organizados de acordo com a codificação CP866, o que significa que suas strings podem ser armazenadas e exibidas na tela nesta codificação:

MyOLED.setCoding(falso); // Cancela a codificação atual, pois indicaremos letras russas com código. myOLED.print("\200\340\244\343\250\255\256 iArduino"); // Exibe o texto "Arduino iArduino". Em vez de letras russas, usamos seu código na codificação CP866.

Observação:

Como indicar um símbolo ou letra pelo seu código em linhas de esboços?
Primeiro você precisa descobrir os códigos de todos os caracteres da codificação na qual deseja especificá-los; tabelas de símbolos de várias codificações podem ser encontradas na Internet. Para codificação CP866, os caracteres russos possuem os seguintes códigos:

A 128
\200
E 136
\210
R 144
\220
Sh 152
\230
A 160
\240
E 168
\250
R 224
\340
c 232
\350
Ei 240
\360
B 129
\201
S 137
\211
COM 145
\221
SCH 153
\231
b 161
\241
º 169
\251
Com 225
\341
sch 233
\351
e 241
\361
EM 130
\202
PARA 138
\212
T 146
\222
Kommersant 154
\232
V 162
\242
Para 170
\252
T 226
\342
você 234
\352

242
\362
G 131
\203
eu 139
\213
você 147
\223
S 155
\233
G 163
\243
eu 171
\253
no 227
\343
é 235
\353

243
\363
D 132
\204
P 140
\214
F 148
\224
b 156
\234
d 164
\244
eu 172
\254
f 228
\344
b 236
\354

244
\364
E 133
\205
N 141
\215
X 149
\225
E 157
\235
e 165
\245
n 173
\255
X 229
\345
uh 237
\355

245
\365
E 134
\206
SOBRE 142
\216
C 150
\226
VOCÊ 158
\236
e 166
\246
Ó 174
\256
ts 230
\346
Yu 238
\356

246
\366
Z 135
\207
P 143
\217
H 151
\227
EU 159
\237
h 167
\247
P 175
\257
h 231
\347
EU 239
\357

247
\367

Para exibir qualquer caractere você precisa indicar seu código no sistema numérico octal, que deve ser precedido por uma barra invertida " \ ». Esta regra Válido para qualquer string no Arduino IDE. Na linha "Arduino iArduino" do exemplo acima, a primeira letra é "A", tem o código 128. Se você converter 128 para octal, obterá (200) 8. Isso significa que a letra “A” pode ser escrita como “\200”, a letra “p” como “\340”, a letra “d” como “\244”, etc.

Introdução: Introdução ao display OLED I2C 128*64/128*32.

Olá! Sendo um amador - um entusiasta da electrónica, tenho a certeza que tudo o que fazemos - brinquedos electrónicos - produtos caseiros, ou grandes projectos - é tudo por curiosidade e preguiça. A curiosidade se esforça para compreender e compreender o vasto e desconhecido, para descobrir como ele funciona ali, o que faz, como se move. E a preguiça inventa alguma coisa para inventar, para não se levantar, para não se aproximar, para não levantar, para não se sujar ou qualquer outra coisa importante.

Como ver informações é melhor do que descobrir o que está para acontecer em nosso dispositivo, ou já aconteceu, ou está acontecendo, definitivamente desejaremos receber essas informações mais úteis de nossos microcontroladores, sensores ou outros dispositivos. E de qualquer forma, quero receber mensagens, como perguntas, avisos, lembretes, emoticons, estrelas, corações e assim por diante.

Para aqueles que também desejam o mesmo, aqui está um breve guia para conectar e testar monitores OLED pequenos e baratos.

A seguir falaremos sobre um dos modelos de display OLED amplamente disponíveis para rádios amadores, controlado pelo chip SSD1306, com tela de 0,96 polegadas e resolução de 128 * 64 ou 128 * 32 pixels. Esses monitores são ideais para pequenos projetos de rádio amador e projetos caseiros.

Etapa 1: Conceitos Básicos

Iremos conectá-lo ao Arduino UNO / NANO, e também iremos programá-lo através do Arduino.

  • OLED é um Diodo Emissor de Luz Orgânico, ou seja, um dispositivo semicondutor feito de compostos orgânicos que começa a emitir luz quando uma corrente elétrica passa por ele.
  • ARDUINO é uma plataforma para treinamento e construção de sistemas de automação e robótica.
  • ArduinoIDE é um ambiente de desenvolvimento. Este é um programa de programação Arduino gratuito.
  • I2C – Circuitos Interintegrados, linha de comunicação entre chips.
  • Sketch, também conhecido como código, também conhecido como programa - terminologia do Arduino.

Siga as instruções para entender como conectar e configurar corretamente o display OLED ao Arduino e como exibir uma mensagem personalizada em seu display.

Fazemos tudo passo a passo.

Etapa 2: Acessórios

Precisamos apenas de quatro coisas:

  • 1. O display OLED em si tem 0,96” (você pode comprá-lo no Aliexpress ou Ebay, é longo, mas barato!).
  • 2. Arduino UNO/Nano (mesmo local do display).
  • 3. Conectando fios (ibid.).
  • 4. Computador ou laptop com ArduinoIDE instalado.

Em geral, comprar peças para vários projetos no Aliexpress e no Ebay é uma coisa muito legal, enquanto você está trabalhando em um projeto, peças para outro já estão a caminho. O principal é não esquecer de fazer o pedido.

Etapa 3: Conectando o monitor

A tela é controlada por um chip SSD1306, que suporta cinco protocolos de comunicação, um dos quais é I2C. Os dados que usam este protocolo são transmitidos por apenas dois fios, e quanto menos fios no caso, melhor, por isso é muito adequado para nós. Mas! Existem módulos com protocolo SPI e até com comutação de protocolo, portanto tome cuidado ao adquirir este módulo.

Pinos usados:

Display OLED – SCL/SCK (relógio) e SDA (dados), potência “Mais” (VCC) e potência “Menos” (GND).

Pinos usados:

Arduino UNO - SCL/SCK em A5 e SSD em A4, fonte de alimentação “Plus” (+5V) e fonte de alimentação “Minus” (GND).

Conectando o monitor ao Arduino:

  • Vcc - 5V
  • GND - GND
  • SDA-A4
  • SCL-A5

Etapa 4: scanner I2C

Cada dispositivo no barramento I2C possui um endereço hexadecimal, não pode ser alterado, é cabeado, todo fabricante responsável deve indicá-lo em algum lugar da caixa ou nas instruções. Existem módulos com interruptores e jumpers que podem ser usados ​​para alterar o endereço, mas... se os dispositivos são baratos ao ponto da desgraça, então o fabricante pode não se preocupar em lidar com um detalhe tão pequeno, então você terá que determine você mesmo.

No total, até 127 endereços podem ser usados ​​no barramento – 119 para dispositivos e 8 endereços de serviço. A comunicação é realizada nesses endereços. Existe um principal, também conhecido como Mestre, e existe um escravo, também conhecido como Escravo - os Mestres perguntam, os escravos respondem, tudo é simples.

Como nosso display OLED usa o protocolo de comunicação I2C e o endereço pode não ser especificado, tentaremos descobrir esse endereço nós mesmos.

Você pode fazer isso enviando um pequeno esboço para sua placa Arduino com um OLED conectado. MAS!

Não se apresse em enviar o esboço para o Arduino imediatamente! Vamos primeiro baixar os “drivers”, ou seja, conectar as bibliotecas, e para isso iremos imediatamente para a “Etapa nº 5”, e depois voltar e continuar.

Etapa 4: Continuação:

Baixe CODE Finder_I2C_Hex_Address.ino, carregue para Arduino.

Abra “Port Monitor”, defina a velocidade para 9600 e se tudo estiver conectado corretamente o programa mostrará o endereço do dispositivo, no meu caso OLED com endereço 0x3F.

Etapa 5: Baixe e conecte bibliotecas

Para que tudo funcione corretamente e você não precise reinventar a roda, é necessário conectar algumas bibliotecas ao ambiente ArduinoIDE, a saber: ADAFRUIT GFX e ADAFRUIT SSD1306, são necessárias para que o Arduino possa se comunicar de forma independente com o display OLED.

Você pode incluir essas bibliotecas seguindo estas etapas.

  • 1. No ArduinoIDE, acesse o menu Sketch.
  • 2. Selecione “Incluir Bibliotecas”.
  • 3. Selecione “Gerenciar Bibliotecas”.
  • 4. Encontre ADAFRUIT GFX e instale-os.
  • 5. Encontre ADAFRUIT SSD1306 e instale-os.

Com as versões mais recentes das bibliotecas, meu display funcionou torto, é claro que isso pode ser devido à curvatura das minhas mãos, mas depois que instalei as primeiras versões dessas bibliotecas, tudo começou a parecer liso e bonito. Por alguma razão, as falas de Pushkin vêm à mente:

... e experiência, filha de erros difíceis,

e gênio, amigo dos paradoxos.

Outra maneira de instalar bibliotecas é encontrar, baixar e instalar você mesmo essas bibliotecas.

Estas são as mesmas bibliotecas Adafruit, mas bibliotecas semelhantes podem ser facilmente pesquisadas em motores de busca, a pedido do OLED I2C. Muitos entusiastas escrevem bibliotecas “para si próprios” e depois as publicam na web. Qual biblioteca usar depende de você.

Para que o display exiba letras russas, também são necessárias bibliotecas especiais, mas este é um tópico separado para um artigo separado.

Após a instalação das bibliotecas, você pode retornar ao passo 4 e finalmente descobrir o endereço hexadecimal do seu display.

Etapa 6: teste de exibição

Para verificar se tudo funciona conforme o esperado, execute o exemplo de teste do ArduinoIDE.

Por esta:

Vá para ARQUIVO > EXEMPLOS > SSD 1306 > Selecione 128x64 i2c

Se você receber "Erro", tente selecionar SSD 1306 > 128x32 i2c.

Se o "Erro" ocorrer novamente, tente alterar o endereço I2C na linha 61 do código de demonstração e substitua-o pelo endereço do seu display que você determinou na etapa 4.

Se o erro ocorrer novamente, você pode tentar editar o arquivo Adafruit_SSD1306.h, ele está localizado na pasta de bibliotecas do Arduino.

Abra o arquivo Adafruit_SSD1306.h em um editor de texto e encontre as linhas:

//#define SSD1306_128_64

#define SSD1306_128_32

// #define SSD1306_96_16

Remova o comentário da linha:

#define SSD1306_128_64.

Deveria ficar assim:

#define SSD1306_128_64

//#define SSD1306_128_32

// #define SSD1306_96_16

Se o erro ocorrer novamente, será necessário verificar as conexões corretas.

Assim que o download for concluído, você verá uma animação de teste na tela, o que significa que configurou seu display OLED com sucesso.

Depois de desfrutar completamente desta animação, você pode passar para a próxima etapa.

Passo 7: Escreva sua própria mensagem

Para escrever sua própria mensagem, primeiro crie um novo esboço no ambiente de programação ArduinoIDE.

No cabeçalho incluímos 4 bibliotecas:

#incluir<SPI.h >

#incluir<Fio.h >

#incluir<Adafruit_GFX.h >

#incluir<Adafruit_SSD1306.h >

Então escrevemos o protocolo de redefinição:

#define OLED_RESET 4 Tela Adafruit_SSD1306 (OLED_RESET);

No VOID SETUP indicamos o endereço hexadecimal do nosso display 0x3C, que aprendemos no “Passo No. 4”.

Em seguida, inicializamos o display e o limpamos:

display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

Para fazer isso, descrevemos o tamanho do texto, a cor do texto, a posição do cursor e, por fim, exibimos a mensagem usando o comando println:

display.setTextSize(2);

display.setTextColor(BRANCO);

display.setCursor(0,0);

display.println("Muito bem!");

display.display();

No final não esqueça de escrever display.display para que a imagem seja exibida na tela, caso contrário você ficará vazio.

Se você fez tudo corretamente, uma mensagem aparecerá nos displays.

Os displays OLED são um dos displays mais atraentes e modernos, com tamanhos pequenos e o display OLED de baixo consumo de energia oferece contraste rico. Os monitores estão disponíveis principalmente no chip SSD1306 rodando na interface I2C, que requer apenas 2 fios para operar, permitindo que você conecte e comece a usar rapidamente. Neste artigo vou explicar como conectar um display OLED com diagonal de 0,96 polegadas e extensão de 128 x 64 pixels.

Especificações técnicas

Tecnologia de exibição: OLED
Resolução da tela: 128 x 64 pixels
Diagonal da tela: 0,96 polegadas
Alcance de visão: 160°
Tensão de alimentação: 2,8 V ~ 5,5 V
Potência: 0,08W
Dimensões: 27,3 mm x 27,8 mm x 3,7 mm

Informações gerais sobre display OLED

O que é? Tecnologia OLED? Significa Diodo Emissor de Luz Orgânico, o display consiste em número grande LEDs orgânicos, a principal diferença de tela de LCD, é que cada LED brilha sozinho e não precisa de iluminação de fundo separada. Graças a isso, o display apresenta vantagens significativas em relação aos LCDs convencionais, como contraste, ângulo de visão e baixo consumo de energia, claro que também apresenta desvantagens, curta vida útil e alto custo.

Um módulo OLED com extensão de 128×64 (0,96 polegadas) é composto por duas partes, o próprio display, que por sua vez pode ser dividido em duas partes, um display gráfico e um controlador SSD1306 de onde sai um cabo flexível para lado reverso tarifas. A segunda parte do módulo é uma placa de circuito impresso (que é essencialmente um adaptador), na qual é instalada uma fiação elétrica mínima, um conector de linha única com passo de 2,54 mm e quatro furos de montagem.
Os módulos OLED estão disponíveis com várias resoluções 128×64, 128×32 e 96×16 (no artigo e exemplo é usado um display com expansão de 128×32), o próprio controlador SSD1306 pode trabalhar com matrizes OLED com expansão máxima de 128×64, também, os módulos são brancos, azuis e azul-amarelos (acima, faixa amarela, 15 pixels de largura). Cada fabricante produz seu próprio placa de circuito impresso com layouts diferentes componentes eletrônicos e a interface de saída, já que o controlador SSD1306 suporta três protocolos operacionais ao mesmo tempo:

Interface paralela série 6800/8080 de 8 bits
Interface periférica serial de 3/4 fios
I2C

Para alterar o protocolo operacional, são fornecidas três linhas BS0, BC1 e BS2 com a ajuda das quais o controlador de display determina qual protocolo irá utilizar. No meu caso, o display OLED foi projetado para operar usando um protocolo I2C, em outras opções é possível alterar o protocolo de operação usando resistores zero ou chaves DIP;

Abaixo está diagrama de circuito Display OLED no chip SSD1306, operando via interface I2C, pode-se observar que o chip U2 atua como estabilizador de tensão (3,3V), o capacitor C8 é necessário para suavizar a tensão de saída. Os resistores R6 e R7 desempenham a função de puxar as linhas SCL e SAD, caso mais de um dispositivo esteja conectado ao barramento I2C, é necessário utilizar resistores pull-up em apenas um dispositivo; Usando um resistor de 0 Ohm (sem designação), você pode alterar o endereço 0x78 ou 0x7A.

Atribuição do pino J2:
SCL: Relógio serial
SDA: linha de dados (Serial Dфta)
VCC: potência "+"
GND: fonte de alimentação "-"

Conectando ao Arduino

Peças necessárias:
Arduino UNO R3 x 1 unidade.
Visor LCD 1602A (2×16, 5V, Azul) x 1 unid.
Fio DuPont, 2,54 mm, 20 cm, FM (fêmea - macho) x 1 unid.
cabo USB 2,0 AB x 1 unid.

Conexão:
No exemplo usarei a placa Arduino UNO R3 e um display OLED (extensão 128x64), como falei anteriormente, é utilizada a interface I2c, são necessários apenas dois fios para conexão, conectamos o SDA do display no pino A4 (Arduino) e SCL para fixar A5 (Arduino). Ao utilizar outras plataformas Mega ou Nano, é necessário utilizar outras portas para maior comodidade, irei disponibilizar uma tabela de conexões para diversas placas; A seguir é necessário conectar a alimentação, GND ao GND e VCC a 5 V ou 3,3 V, o circuito está montado, agora só falta fazer o upload do esboço.


Tabela de conexão

Para trabalhar com um display OLED é necessária uma biblioteca, pois existem várias bibliotecas, vou mostrar um exemplo de trabalho utilizando a biblioteca OLED_I2C (você pode baixar a biblioteca no final do artigo)
O programa exibe apenas texto no display e não oferece nenhuma outra funcionalidade, baixe o esboço e carregue-o na placa Arduino UNO R3.

/* Testado no Arduino IDE 1.8.0 Data do teste 27/01/2017 */ #incluir // Conecta a biblioteca OLED OLED_I2C myOLED(SDA, SCL, 8); // Seleção de porta, UNO é SDA de 8 pinos, SCL é de 9 pinos. externo uint8_t SmallFont; // Conecta a fonte void setup() ( myOLED.begin(); // inicializa a tela myOLED.setFont(SmallFont); ) void loop() ( myOLED.clrScr(); // Limpa a tela myOLED.print(" Olá!" , CENTER, 24); // Imprime o texto: no centro, linha 24 myOLED.print("www.robotchip.ru", CENTER, 40); // Imprime o texto: no centro, linha 40 myOLED.update();

Testado em Arduino IDE 1.8.0

Data do teste: 27/01/2017

#incluir //Conecta a biblioteca OLED_I2C

OLED myOLED (SDA, SCL, 8); // Seleção de porta, UNO é SDA de 8 pinos, SCL é de 9 pinos.

extern uint8_t SmallFont; //Conecta a fonte

configuração nula()

meuOLED. começar(); // inicialização da tela

meuOLED. setFont(FontePequena);

loop vazio()

meuOLED. clrScr(); //Limpa a tela

meuOLED. print("Olá!", CENTRO, 24); // Texto de saída: no centro, linha 24

meuOLED. imprimir ("www.robotchip.ru" , CENTRO , 40 ) ; // Texto de saída: no centro, linha 40

meuOLED. atualizar(); //

atraso(500); //pausa 0,5s

Baixar esboço