O que é um micro:bit?
É um pequeno computador que pode ser utilizado para vários tipos de projetos, como robôs, carrinhos, instrumentos musicais, letreiros, etc…
Ele pode ser programado com Java, Python, C++, inclusive usando a própria IDE do Arduino, por meio de um computador (cabo + USB), ou um celular, por meio do bluetooth — BLE.
Para que seja possível fazer os projetos, o micro:bit conta com os seguintes componentes:
- 25 LEDs vermelhos e endereçáveis, ou seja, você pode ligar e desligar qualquer um.
- 2 botões programáveis, A e B.
- 25 conectores externos que são programáveis que podem ser utilizados para conectar diversos componentes, como motores, LEDs, LDRs, servo motor, etc…
- 3 desses conectores podem ser acessados com uso de jacarés e ele pode ser acessado como Entrada, Saída e Toque (como um makey makey).
- Um sensor de temperatura em Celsius, disponível no chip da placa (não é exatamente a temperatura externa, mas serve como base.
- Sensor de luminosidade para medir mudanças na luz ambiente (utilizado os 25 LEDs para esse propósito) – programação disponível somente com Java.
- Acelerômetro (mede a aceleração do componente, mostrando como ele se encontra nos eixos X, Y e Z)
- Bússola
- Bluetooth BLE (Bluetooth Low Energy) – somente acessado quando programado em Java – necessita que o computador possua BLE. O Bluetooth comum não é compatível.
- Rádio
- Conector USB
- Conector JST 2.0 PH 2-pinos para carregador externo de 3v.
Vamos conhecer algumas funcionalidades, para programação em Python:
Neste artigo veremos:
Primeiros Passos
Depois de ter o micro:bit em mãos, será necessário um editor de códigos como por exemplo: https://python.microbit.org
Estamos trabalhando em um editor offline que será disponibilizado em breve – acompanhem….
Estamos também finalizando uma extensão, desenvolvida pelo HackEduca, para funcionamento no Scratch 2.0 offline – em breve
Importar bibliotecas:
Normalmente pode se usar a opção from microbit import *
que já traz várias funcionalidades padrão da placa, mas é possível importar grupos de funcionalidades também, como por exemplo: from microbit import display, Image, button_a, sleep
, caso haja restrição de memória, causada pelo tamanho do programa.
Há também outras que são específicas, como por exemplo:
import music
import random
import radio
Comandos e sintaxes Básicas
While True:
Essa sintax é utilizada para fazer um loop infinito. Basicamente ela executa até que a condição seja verdadeira.
É possível sair do loop
com o comando break
If
,elif
,else
são comandos básicos para qualquer linguagem se programação, veja abaixo como ela funciona:
If
(Se) alguma condição tiver resultado True:
(Verdadeiro)
Execute o que estiver logo na sequencia
elif
(Se senão), verifique se o comando tiver resultado True:
Execute o que estiver logo na sequencia
else:
(senão)
Se nada acima for verdadeiro, execute o que estiver aqui
display.clear()
Apaga todos os LEDs
running_time()
Tempo de execução, desde que o micro:bit foi ligado. Este comando é executado quando se quer executar uma ação após um determinado número de tempo que ele está ligado.
''' This example was created by Edson Sidnei Sobreira for https://www.hackeduca.com.br It's a public domain Este exemplo foi criado por Edson Sidnei Sobreira para https://www.hackeduca.com.br Domínio público ------------------------------------------------------- ''' from microbit import * while running_time() < 5000: display.show(Image.HAPPY) display.clear()
def()
Cria uma função que pode ser chamada fora do loop
sleep()
Deixa o micro:bit dormindo por alguns milisegundos (cria uma pausa no sistema)
''' This example was created by Edson Sidnei Sobreira for https://www.hackeduca.com.br It's a public domain Este exemplo foi criado por Edson Sidnei Sobreira para https://www.hackeduca.com.br Domínio público ------------------------------------------------------- ''' from microbit import * def iniciar(): # while running_time() < 5000: display.show(Image.HAPPY) sleep(1000) display.clear() sleep(1000) display.show(Image.HAPPY) sleep(1000) display.clear() while True: if button_a.was_pressed(): iniciar()
print
Mostra resultado na saída serial (semelhante ao Arduino, inclusive pode se utilizar a serial da IDE do Arduino para obter essa saída)
A comunicação do micro:bit ocorre a 115.200 bauds.
''' This example was created by Edson Sidnei Sobreira for https://www.hackeduca.com.br It's a public domain Este exemplo foi criado por Edson Sidnei Sobreira para https://www.hackeduca.com.br Domínio público ------------------------------------------------------- ''' from microbit import * while True: print(temperature()) sleep(2000)
Imagens
O micro:bit, possui um banco de imagens pré-gravadas que podem ser acessadas através do seguinte comando:
from microbit import *
display.show(Image.HAPPY)
O que estiver dentro dos parênteses indica o grupo de imagens. Atualmente existem as seguintes imagens:
Image.HEART, Image.HEART_SMALL, Image.HAPPY, Image.SMILE, Image.SAD, Image.CONFUSED, Image.ANGRY, Image.ASLEEP, Image.SURPRISED, Image.SILLY, Image.FABULOUS, Image.MEH, Image.YES, Image.NO, Image.CLOCK12, Image.CLOCK11, Image.CLOCK10, Image.CLOCK9, Image.CLOCK8, Image.CLOCK7, Image.CLOCK6, Image.CLOCK5, Image.CLOCK4, Image.CLOCK3, Image.CLOCK2, Image.CLOCK1, Image.ARROW_N, Image.ARROW_NE, Image.ARROW_E, Image.ARROW_SE, Image.ARROW_S, Image.ARROW_SW, Image.ARROW_W, Image.ARROW_NW, Image.TRIANGLE, Image.TRIANGLE_LEFT, Image.CHESSBOARD, Image.DIAMOND, Image.DIAMOND_SMALL, Image.SQUARE, Image.SQUARE_SMALL, Image.RABBIT, Image.COW, Image.MUSIC_CROTCHET, Image.MUSIC_QUAVER, Image.MUSIC_QUAVERS, Image.PITCHFORK, Image.XMAS, Image.PACMAN, Image.TARGET, Image.TSHIRT, Image.ROLLERSKATE, Image.DUCK, Image.HOUSE, Image.TORTOISE, Image.BUTTERFLY, Image.STICKFIGURE, Image.GHOST, Image.SWORD, Image.GIRAFFE, Image.SKULL, Image.UMBRELLA, Image.SNAKE
Você também poderá fazer sua própria imagem da seguinte forma:
from microbit import *
barco = Image("05050:"
"05050:"
"05050:"
"99999:"
"09990")
display.show(barco)
Cada linha representa os 5 LEDs, onde 0 é desligado e de 1
a 9
, significa ligado, com intensidade luminosa diferente (1
= menos intenso; 9
= mais intenso).
Pode ser representado também da seguinte forma:
barco = Image("05050:05050:05050:99999:09990")
Botões
O microbit possui 2 botões que podem ser programados. Há 3 eventos relacionados a esses botões:
is_pressed()
:
Retorna True
quando estiver apertado e False
no estado normal
was_pressed()
:
Retorna True
quando ele ele foi apertado desde que o micro:bit foi ligado ou desde a última vez que ele foi apertado
get_presses():
Retorna quantas vezes o botão foi pressionado, depois retorna para zero, até que seja chamado novamente:
''' This example was created by Edson Sidnei Sobreira for https://www.hackeduca.com.br It's a public domain Este exemplo foi criado por Edson Sidnei Sobreira para https://www.hackeduca.com.br Domínio público ------------------------------------------------------- ''' from microbit import * while True: if button_a.is_pressed() and button_b.is_pressed(): sleep(10000) display.scroll(str(button_a.get_presses())) elif button_a.is_pressed(): display.show(Image.HAPPY) elif button_b.is_pressed(): display.show(Image.SAD) else: display.clear()
Pinos Entradas e Saídas – I/O
São 25 pinos disponíveis, mas somente 5 são facilmente utilizados por meio de jacarés, Pino 0, Pino 1, Pino 2, 3v e Gnd.
Os pinos digitais podem ser manipulados com os seguintes comandos:
read_digital
()
Pino digital configurado como entrada, a leitura poderá ser 1 ou 0.
write_digital
(value)
Pino configurado como saída: 1 é ligado (pino com 3v) e 0 é desligado.
read_analog
()
Pino analógico configurado como entrada, a leitura poderá ser 0 ou 1023
write_analog
(value)
Pino analógico configurado como saída, poderá ser 0 ou 1023 – usar função PWM.
is_touched
()
Retorna valor true
ou (Verdadeiro) quando se toca no Gnd e no pino selecionado (0, 1 ou 2) ou false
(falso) quando não há contato.
''' This example was created by Edson Sidnei Sobreira for https://www.hackeduca.com.br It's a public domain Este exemplo foi criado por Edson Sidnei Sobreira para https://www.hackeduca.com.br Domínio público ------------------------------------------------------- ''' from microbit import * while True: if pin0.is_touched(): display.show(Image.HAPPY) elif button_a.is_pressed(): display.show(Image.SAD) elif button_b.is_pressed(): display.show(Image.HEART) else: display.clear()
Música
O micro:bit vem com uma biblioteca grande com música pré-definidas.
Para uso é necessário conectar um alto falante entre os pinos 0 e Gnd e importar a biblioteca music.
''' This example was created by Edson Sidnei Sobreira for https://www.hackeduca.com.br It's a public domain Este exemplo foi criado por Edson Sidnei Sobreira para https://www.hackeduca.com.br Domínio público ------------------------------------------------------- ''' from microbit import * import music while True: if button_a.is_pressed(): display.show(Image.HEART) music.play(music.BIRTHDAY)
As seguintes músicas estão disponíveis:
music.DADADADUM, music.ENTERTAINER, music.PRELUDE, music.ODE, music.NYAN, music.RINGTONE, music.FUNK, music.BLUES, music.BIRTHDAY, music.WEDDING, music.FUNERAL, music.PUNCHLINE, music.PYTHON, music.BADDY, music.CHASE, music.BA_DING, music.WAWAWAWAA, music.JUMP_UP, music.JUMP_DOWN, music.POWER_UP,
Randômico
A função pode ser utilizada para deixar que o microbit escolha algo dentre algumas opções indicadas.
É importante considerar que para mostrar no display através da função display.show()
ou display.scroll()
é necessario tranformar números em String usando a função srt()
random.choice()
Seleciona valores que estão em uma lista específica:amigos = ["Leticia", "Julia", "Elaine", "Edson", "Veronica"]
random.randint(x, y)
Retorna valores inteiros entre dois argumentos informados: display.show(str(random.randint(50, 100)))
random.randrange(x)
Retorna valores entre 0 e o número especificado: display.show(str(random.randrange(100)))
random.random()
Retorna valores decimais entre 0,0 e 1,0
''' This example was created by Edson Sidnei Sobreira for https://www.hackeduca.com.br It's a public domain Este exemplo foi criado por Edson Sidnei Sobreira para https://www.hackeduca.com.br Domínio público ------------------------------------------------------- ''' from microbit import * import random while True: if button_a.is_pressed(): amigos = ["Leticia", "Julia", "Elaine", "Edson", "Veronica"] display.scroll(random.choice(amigos)) elif button_b.is_pressed(): display.show(str(random.randint(1, 6))) elif pin0.is_touched(): decimal = random.randrange(100) + random.random() display.scroll(str(decimal))
Movimento
O micro:bit possui um acelerômetro que indica o movimento nos 3 eixos:
- X – inclinação para direita e esquerda:
accelerometer.get_x()
- Y – inclinação para frente e para traz:
accelerometer.get_y()
- Z – movimento para cima e para baixo:
accelerometer.get_z()
''' This example was created by Edson Sidnei Sobreira for https://www.hackeduca.com.br It's a public domain Este exemplo foi criado por Edson Sidnei Sobreira para https://www.hackeduca.com.br Domínio público ------------------------------------------------------- ''' from microbit import * while True: reading = accelerometer.get_x() if reading > 20: display.show("D") elif reading < -20: display.show("E") else: display.show("o")
''' This example was created by Edson Sidnei Sobreira for https://www.hackeduca.com.br It's a public domain Este exemplo foi criado por Edson Sidnei Sobreira para https://www.hackeduca.com.br Domínio público ------------------------------------------------------- ''' from microbit import * while True: reading = accelerometer.get_y() if reading > 20: display.show("T") elif reading < -20: display.show("F") else: display.show("o")
''' This example was created by Edson Sidnei Sobreira for https://www.hackeduca.com.br It's a public domain Este exemplo foi criado por Edson Sidnei Sobreira para https://www.hackeduca.com.br Domínio público ------------------------------------------------------- ''' from microbit import * while True: reading = accelerometer.get_z() if reading > 20: display.show("B") elif reading < -20: display.show("C")
A função accelerometer.get_values()
retorna uma lista ordenada com informações do eixo X, Y e Z respectivamente.
Gestos
Assim como nas funções de movimentos, o acelerômetro do micro:bit possui uma biblioteca de gestos pré definidos. Os gestos são expressos em String e possuem os seguintes nomes:
**** Para explicar os gestos, vamos usar como referencia o painel de LEDs (local onde os botôes são visíveis.
accelerometer.current_gesture()
accelerometer.was_gesture("gesture")
up
– cima
Esse gesto é retornado quando o micro:bit está na posição vertical, com o conector USB para cima
down
– baixo
Esse gesto é retornado quando o micro:bit está na posição vertical, com o conector USB para baixo
left
– esquerda
Esse gesto é retornado quando o micro:bit está inclinado para esquerda, com o botão A em direção ao chão
right
– direita
Esse gesto é retornado quando o micro:bit está na posição horizontal, com o botão B em direção ao chão
face up
– face para cima
Esse gesto é retornado quando o micro:bit está na posição horizontal, com o painel de LEDs para cima
face down
– face para baixo
Esse gesto é retornado quando o micro:bit está na posição horizontal, com o painel de LEDs para baixo
freefall
– queda livre
Esse gesto é retornado quando o micro:bit está na posição vertical, com o conector USB para cima e ele cai em direção ao chão, nesta direção.
shake
– chacoalhar
Esse gesto é retornado quando o micro:bit está chacolhando a placa. (Muito cuidado, é necessário segurar a placa e bateria)
3g
,6g
,8g
Esse gesto é retornado quando o micro:bit excede em qualquer direção a gravidade em um determinado número de vezes: 3g
(3x), 6g
(6x) e 9g
(9x), se você for para o espaço ou pilotar um carro de fórmula 1 (chegará até 6,5 g) ou um caça de guerra (chegará até 9g), poderá testar essa funcionalidade. Eu não consegui obter resultado.
''' This example was created by Edson Sidnei Sobreira for https://www.hackeduca.com.br It's a public domain Este exemplo foi criado por Edson Sidnei Sobreira para https://www.hackeduca.com.br Domínio público ------------------------------------------------------- ''' from microbit import * while True: gesture = accelerometer.current_gesture() print(gesture) sleep(1000)
Bússola
Essa função faz com que o micro:bit, após calibração, mostre a posição Norte, após calibração.
compass.calibrate()
Função utilizada para calibrar o micro:bit, quando ela é chamada ela irá mostrar a seguinte mensagem: DRAW A CIRCULE
em português significa desenhe um círculo.
Você terá que fazer um movimento circular com o micro:bit, se tudo deu certo, você verá um rosto feliz. (Image.HAPPY
).
compass.heading()
Essa função retorna valores entre 0° (Norte) e 360° (Noroeste)
''' This example was created by Edson Sidnei Sobreira for https://www.hackeduca.com.br It's a public domain Este exemplo foi criado por Edson Sidnei Sobreira para https://www.hackeduca.com.br Domínio público ------------------------------------------------------- ''' from microbit import * compass.calibrate() while True: posicao = (compass.heading()) if posicao < 45: display.show("N") elif posicao < 135: display.show("L") elif posicao < 225: display.show("S") elif posicao < 315: display.show("O")
O Exemplo abaixo simula a agulha da bússola:
# Original Example from https://microbit-micropython.readthedocs.io/en/latest/tutorials/direction.html from microbit import * compass.calibrate() while True: needle = ((15 - compass.heading()) // 30) % 12 display.show(Image.ALL_CLOCKS[needle])
Rádio
Infelizmente, até o momento não é possível utilizar o módulo Bluetooth BLE incorporado na placa do micro:bit, por uma restrição de memória quando ele for programado em Python. Mas não impede que um micro:bit se comunique com outro.
Para que isso seja possível temos o módulo de rádio NRF24L01 que pode ser acessado da seguinte forma:
import radio
Importa a biblioteca necessária para que a função rádio funcione.
radio.on()
Liga a função rádio
radio.off()
Desliga a função rádio – muito importante, caso a placa esteja sendo energizada via pilhas, pois esse procedimento economiza energia e memória.
Importante considerar que todas as sintaxes relacionas ao rádio se tornam inválidas, apresentando falha no programa.
radio.config(channel="83")
Define o canal de comunicação entre os micro:bit. Pode ser selecionado de 0 até 83. O padrão é 7, quando não for informado nada.
O uso desse argumento faz com que um micro:bit envie mensagens para até 84 micro:bits diferentes.
radio.send("xyz")
Envia uma mensagem para ser recebida por outro micro:bit
radio.receive()
Recebe uma mensagem enviada por outro micro:bit
radio.reset()
Retorna a configuração padrão dos argumentos, por exemplo radio.config(channel="7")
''' This example was created by Edson Sidnei Sobreira for https://www.hackeduca.com.br It's a public domain Este exemplo foi criado por Edson Sidnei Sobreira para https://www.hackeduca.com.br Domínio público ------------------------------------------------------- ''' from microbit import * import radio radio.on() radio.config(channel=83) while True: mensagem = radio.receive() # Button A sends a "hackeduca" message. if button_a.was_pressed(): radio.send('hackeduca') # Button B change channel for standard - 7 and while is pressed can receive message in the standard channel. if button_b.is_pressed(): radio.config(channel=7) if mensagem is not None: display.scroll(mensagem) else: radio.config(channel=83) # If "hackeduca" is received happy face shows up and keeps for 1s, display is cleared and a message is sent if mensagem == 'hackeduca': display.show(Image.HAPPY) sleep(1000) display.clear() radio.send('hackeduca') # If "10" is received they will scroll the same income data and will transmit if mensagem == '10': display.scroll(mensagem) radio.send(mensagem) # If "20" is received they will scroll the same income data if mensagem == '20': display.scroll(mensagem) radio.send(mensagem)
Caso seja necessário programar o Python em blocos, há disponível uma extensão no para Scratch que pode ser encontrado aqui em nosso website.
Usamos como inspiração a seguinte referência: http://microbit-micropython.readthedocs.io/en/latest/#
No Comments