Micropython ESP32: Parte 2

Exemplos de programação em projetos simples

Continuando a série de tutoriais sobre Micropython ESP32, iremos desenvolver alguns projetos para exemplificar o seu uso. Em todos os exemplos, estaremos utilizando o uPyCraft IDE. O entendimento do artigo anterior sobre MicroPython é, portanto, um pré-requisito para a execução dos destes projetos.

Os materiais utilizados estão listados a seguir:

Projeto 1 Micropython ESP32 – Controlando o brilho de uma LED com um potenciômetro

 

Nesse projeto aprenderemos a utilizar funções de leitura analógica e de saída PWM. As conexões estão ilustradas na figura abaixo. É utilizado um potenciômetro de 10k ohms ligado na GPIO 36 e uma LED ligada a GPIO 22. O resistor que foi utilizado é de 150 ohms. O fio vermelho indica a conexão entre o potenciômetro e a porta de 3.3 V. O fio preto indica a conexão entre o potenciômetro e a LED com a porta GND da ESP32.

 

 

Semelhante ao “#include” que utilizamos no Arduino, agora vamos usar o “import” para incluir as bibliotecas necessárias no nosso código Micropython ESP32. A estrutura “from …  import …” indica de que conjunto de bibliotecas está se importando a classe indicada. No exemplo abaixo, importamos “ADC”, “Pin” e “PWM”, para, respectivamente, controlar uma ler um sinal analógico, controlar um pino e acionar um pino com PWM. Vejamos:

 

 

Após, vamos fazer o upload do código para a placa, o potenciômetro pode ser usado para ajustar a intensidade da LED, conforme ilustra o gif abaixo.

 

 

Na variável “potenciometro” instanciamos um objeto da classe ADC, passando como GPIO o pino 36.

É importante destacar que, atualmente, essa biblioteca tem implementado as funções ADC para somente 5 pinos:

  • A0 – IO36
  • A1 – IO39
  • A2 – IO34
  • A3 – IO35
  • A4 – IO15

A seguir, a função .atten define a taxa de atenuação do pino (ou seja, 3,3V). A lista abaixo indicam as possíveis constantes que podem ser usadas e sua correspondência.

  • ADC.ATTN_0DB = 0 — faixa de tensão até: 1.2v
  • ADC.ATTN_2_5DB = 1 — faixa de tensão até: 1.5v
  • ADC.ATTN_6DB = 2 — faixa de tensão até: 2.0v
  • ADC.ATTN_11DB = 3 — faixa de tensão até: 3.3v

A função seguinte, .width, especifica o tamanho dos dados. A lista abaixo indicam as possíveis constantes que podem ser usadas e sua correspondência.

  • ADC.WIDTH_9BIT = 0 — 9 bits
  • ADC.WIDTH_10BIT = 1 — 10 bits
  • ADC.WIDTH_11BIT = 2 — 11 bits
  • ADC.WIDTH_12BIT = 3 — 12 bits

Na variável LED, instanciamos um objeto da classe PWM no pino 22 e a seguir, com a função .duty, definimos o duty-cycle da LED. É importante destacar que, atualmente, essa biblioteca tem implementado as funções PWM para somente os seguintes pinos: Pin(0), Pin(2), Pin(4), Pin(5), Pin(10), Pin(12~19), Pin(21), Pin(22), Pin(23) e Pin(25~27).

No while, que corresponde ao “void loop” no Arduino, é inicialmente feita a leitura do potenciômetro com a função .read().  Convertemos esse valor à um valor compatível com o duty-cycle da LED para então acioná-la, através da função .duty(). O time.sleep(0.1) no final corresponde a um delay(100) no Arduino, ou seja, uma parada de 100 milissegundos.

 

Projeto 2 Micropython ESP32 – Controlando um servo com dois push buttons

 

 

Nesse projeto veremos como controlar um servo motor utilizando Micropython ESP32. As conexões estão ilustradas na figura abaixo.  Tome cuidado com o servo que você vai utilizar. Nesse tutorial, para fins didáticos, utilizamos o servo motor SG90, que tem um consumo de corrente baixo. Caso você for usar um servo mais potente ou que mova uma grande carga em sua haste, use uma fonte externa para alimentá-lo. O fio amarelo ilustra a conexão entre o servo e a GPIO 12 da ESP32. Os botões estão ligados às portas 25 e 26, representados pelos fios verdes. O resistor utilizado foi de 10k ohms. O fio preto indica GND. O fio vermelho que sai do servo motor indica a conexão desse com 5v. O outro fio vermelho (a esquerda) indica a conexão na porta de 3.3v.

 

O controle de um servo motor é feito através da modulação de largura de pulso. A classe PWM, da biblioteca machine, nos provém diversas funções úteis para que façamos esse controle. Inicialmente, instanciamos um objeto dessa classe na variável servo, passando como parâmetro a GPIO 12 e a frequência de 50 Hz (comumente utilizada para hobby servos). Definimos também uma variável para armazenar o ângulo. Com a função .duty(), passamos um valor entre 40 e 115 (pode variar de acordo com o servo utilizado) para movê-lo.

 

No while, teremos a verificação do estado dos push buttons através de duas estruturas if. A primeira para o botão da esquerda e a segunda para o botão da direita. Utilizei o da esquerda para incrementar o ângulo do servo de 5 em 5 graus. Antes, porém, é feita uma verificação do valor atual da variável angulo para que a mesma não ultrapasse o máximo de 115. O mesmo é feito para o botão da direita, observando-se um limite de 45 para tal.

Após incrementar o valor do ângulo e o servo se mover, utilizamos um time.sleep de meio segundo para que a ação seja executada não tão rapidamente. Observe que o último time.sleep, de 0.01 segundos acontece no fim do laço while, de acordo com a indentação exigida pela linguagem Python. O gif abaixo ilustra o projeto em funcionamento.

 

 

 

Conclusão

Nesse tutorial implementamos dois projetos que demonstram, de forma mais abrangente, a utilização da linguagem Python através do MicroPython ESP32. Devido a essa linguagem ser de alto nível de abstração, é muito interessante que, ao desenvolver projetos maiores, se utilize o conceito de orientação a objetos. Essa linguagem fornece excelente suporte para isso.

Conheça toda Linha de Produtos ESP32 na UsinaInfo.

Categorias
ESP32

Bacharel em Ciência da Computação pela URI – Campus de Santo Ângelo, com experiência no desenvolvimento de pesquisas em Robótica e prototipação de Sistemas Robóticos.
Um Comentário
  • Ivan de Almeida
    14 setembro 2019 at 16:35
    Deixe seu Comentário

    Olá Gustavo,

    Parabéns pelos projetos! Sinto falta de mais projetos com Micropython / ESP32. Temos ainda poucos comparados com Arduino.

  • Deixe seu Comentário

    *

    *

    Sobre nós

    Hoje a Usinainfo é um dos maiores ecommerces de Ferramentas, Peças para Eletrônica, Componentes Eletrônicos, Sensores e Arduino do Brasil, contando com uma grande diversidade de produtos na linha de eletrônica.

    Sugestões

    Artigos Relacionados