Entradas e Saídas digitais no MicroPython com ESP8266

Entradas e Saídas digitais
Este post faz parte da série MicroPython com ESP8266

Agora que já temos nossa placa de desenvolvimento montada, com ESP8266 vamos explorar os periféricos, aproveitando os recursos do MicroPython.

Como de costume, vamos iniciar pelos pinos de entrada e saída.

A seguir são apresentados as funções para escrita e leitura dos pinos de I/O do ESP8266 com o MicroPython.

Pinos de I/O da placa nodeMCU

Antes de iniciarmos a manipulação dos pinos através do MicroPython, é importante entender como os pinos estão mapeados na placa nodeMCU (ou na placa que você está usando).

A figura a seguir exibe o pinout da nodeMCU:

Os pinos são nomeados GPIOX, ou seja, GPIO0, GPIO1, GPIO2, …  e assim por diante.

No código MicroPython, vamos usar apenas o número: 0, 1, 2,..etc.

É importante também, caso você esteja usando a placa de desenvolvimento do artigo anterior, saber onde os pinos estão ligados através do esquemático da placa:

Pronto, agora que já sabemos como usar os pinos e onde os mesmos estão ligados, vamos para a programação.

Classe para manipulação de pinos de Entradas e Saídas digitais no MicroPython

Para manipulação dos pinos de I/O vamos usar a classe machine.Pin. Essa classe irá nos ajudar a ler os pinos de entrada e saídas digitais do ESP8266. Os pinos podem operar como entrada ou saída, conforme a sua configuração. Quando o pino está configurado como saída ele fornecerá uma tensão de saída, 0 ou 3,3 V no caso do ESP8266. A corrente máxima de saída no pino é de 12 mA e a corrente de entrada máxima é de 20 mA. Quando o pino é configurado como entrada, ele fica em alta impedância e a tensão presente no pino é lida pelo periférico de I/O.

A classe pino possui os métodos para configuração, escrita, leitura, etc, que facilitam a manipulação dos pinos. A seguir são apresentadas a funções:

# importa a biblioteca para trabalhar com os pinos:
from machine import Pin

# cria um pino de saída no GPIO0
p0 = Pin(0, Pin.OUT)

# coloca o pino em nível baixo(0V)
p0.value(0)

# coloca o pino em nível alto(3,3V)
p0.value(1)

# cria uma entrada no pino GPIO2 com resistor de pull up interno habilitado
p2 = Pin(2, Pin.IN, Pin.PULL_UP)

# Lé e imprime o valor presente no pino GPIO2
print(p2.value())

# reconfigura o pino GPIO0 como uma entrada digital
p0.mode(p0.IN)

# configura uma interrupção(irq) para o pino GPIO0 com uma função de callback
p0.irq(lambda p:print(p))

Exemplos de manipulação de pinos de Entradas e Saídas digitais com scripts MicroPython

Para nosso primeiro exemplo, vamos piscar o LED do módulo ESP-12E em intervalos de 1 segundo, o famoso blink:

from machine import Pin  #importa biblioteca para trabalhar com os pinos
from time import sleep   #importa biblioteca para delay

led = Pin(2, Pin.OUT)    #define o pino do LED(2) como saída

while True:                     #loop infinito
  led.value(not led.value())    #inverte o estado do LED
  sleep(1.0)                    #aguarda 1 segundo

Podemos definir uma função para inverter o estado do pino passado como parâmetro:

from machine import Pin  #importa biblioteca para trabalhar com os pinos
from time import sleep   #importa biblioteca para delay

#função para inverter estado de um pino definido como saída
def toggle(p):
   p.value(not p.value())   #inverte o estado do pino

led = Pin(2, Pin.OUT)    #define o pino do LED(2) como saída

while True:                     #loop infinito
  toggle(led)                   #inverte o estado do LED
  sleep(1.0)                    #aguarda 1 segundo

Outra forma de alterar o estado do pino é usar os métodos on() e off():

from machine import Pin  #importa biblioteca para trabalhar com os pinos
from time import sleep   #importa biblioteca para delay

#função para inverter estado de um pino definido como saída
def toggle(p):
   p.value(not p.value())   #inverte o estado do pino

led = Pin(2, Pin.OUT)    #define o pino do LED(2) como saída

while True:                     #loop infinito
  led.on();                     #coloca o pino em nivel alto
  sleep(1.0)                    #aguarda 1 segundo
  led.off();                    #coloca o pino em nivel baixo
  sleep(1.0)                    #aguarda 1 segundo

Agora vamos criar uma função beep() que usaremos em nossas aplicações para emitir um beep quando alguma tecla for pressionada ou para alguma sinalização.

from machine import Pin  #importa biblioteca para trabalhar com os pinos
from time import sleep   #importa biblioteca para delay

#função para beep p é o pino do buzzer e t é tempo de intervalo de beep
def beep(p,t):
  p.on()
  sleep(t)
  p.off()  
 
led = Pin(2, Pin.OUT)           #define o pino do LED(2) como saída
buzzer = Pin(15, Pin.OUT)       #define o pino do buzzer(15) como saída

beep(buzzer,0.2)                #beep inicial ao ligar a placa 

while True:                     #loop infinito
  for i in range(5):
    led.on();                     #coloca o pino em nivel alto
    sleep(0.5)                    #aguarda 1 segundo
    led.off();                    #coloca o pino em nivel baixo
    sleep(0.5)                    #aguarda 1 segundo
 
  beep(buzzer,0.5)               #aciona o beep a cada 5 piscadas do LED

Infelizmente a nossa placa de testes não tem um dispositivo para entrada digital, para testarmos. As teclas estão ligadas ao expansor de I/O PcF8574 e serão lidas de outra forma, como veremos em um artigo futuro. De qualquer forma, deixo a seguir um exemplo para leitura de uma tecla, caso você precise dessa rotina em algum projeto.

Para leitura do estado de um pino usamos o método value(). O exemplo a seguir exibe a leitura de uma tecla e acionamento de um LED quando ela for pressionado:

from machine import Pin  #importa biblioteca para trabalhar com os pinos

led = Pin(2, Pin.OUT)    #define o pino do LED(2) como saída
tecla = Pin(5,Pin.IN, Pin.PULL_UP)  #define o pino da TECLA (5) e habilita resistor de PULL_UP

while True:                     #loop infinito
  if tecla.value() == 0:
    led.off();                     #coloca o pino em nivel baixo (liga o LED)
  else:
    led.on();                    #coloca o pino em nivel alto (apaga o LED)

Conclusão

Os exemplos apresentados exibem como fazer a manipulação de pinos de entrada e saídas usando o MicroPython. Altere os exemplos ou crie novos exemplos para a leitura e escrita de valores digitais em sua placa ou projeto.

Caso tenha ficado alguma dúvida ou sugestão, deixe seu comentário abaixo.

MicroPython com ESP8266

Placa de testes para MicroPython com ESP8266 Entrada analógica com MicroPython no ESP8266
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
4 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Nilson Santos
Nilson Santos
30/12/2019 08:17

Há um erro na linha 10 do último script

Fabio Roberto Vieira da Silva
Fabio Roberto Vieira da Silva
22/02/2019 17:18

é possível criar um arquivo .py e executar no boot?

Nilson Santos
Nilson Santos
Reply to  Fabio Roberto Vieira da Silva
30/12/2019 08:18

Sim

Home » Software » Entradas e Saídas digitais no MicroPython com ESP8266

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: