# Jugando fuerte con Python # Ventajas y desventajas Python {{@12287}} # Editores {{@12291}} # Introducción al Python {{@12327}} # Micropython de microbit {{@12433}} # Solo placa: Hola Mundo {{@12288}} # Solo placa: Imágenes {{@12289}} # Solo placa: Imágenes estáticas y animadas {{@12441}} # Solo placa: Eventos para los botones {{@12443}} # Solo placa: Botones {{@12292}} # Solo sensores de la placa Podríamos continuar, pero **solo con la placa** podemos hacer muchos más programas con Python #### [Nivel de luz](https://libros.catedu.es/books/microbit-y-python/page/nivel-de-luz) Página extraída de Federico Coca Guia de Trabajo de Microbit CC-BY-SA Vamos a ver como utilizar ... #### [Temperatura](https://libros.catedu.es/books/microbit-y-python/page/temperatura) La función en micropython para leer la temperatura de la placa en ºC interna y devuelve un valor ... #### [Magnetómetro](https://libros.catedu.es/books/microbit-y-python/page/magnetometro) Página extraída de Federico Coca Guia de Trabajo de Microbit CC-BY-SA Este módulo permite accede... #### [Acelerómetro](https://libros.catedu.es/books/microbit-y-python/page/acelerometro) Página extraída de Federico Coca Guia de Trabajo de Microbit CC-BY-SA Este objeto permite accede... #### [Micrófono](https://libros.catedu.es/books/microbit-y-python/page/microfono) Página extraída de Federico Coca Guia de Trabajo de Microbit CC-BY-SA ATENCIÓN SÓLO VÁLIDO PARA ... #### [Radio](https://libros.catedu.es/books/microbit-y-python/page/radio) Página extraída de Federico Coca Guia de Trabajo de Microbit CC-BY-SA El módulo de radio permite... #### [Pines de Entrada/salida](https://libros.catedu.es/books/microbit-y-python/page/pines-de-entradasalida) Página extraída de Federico Coca Guia de Trabajo de Microbit CC-BY-SA En MicroPython, cada pin e... #### [Input output](https://libros.catedu.es/books/microbit-y-python/page/input-output) Una manera rápida de probar las entradas y salidas de microbit es utilizar el código predefinido ... #### [Música predefinida o crea tu música](https://libros.catedu.es/books/microbit-y-python/page/musica-predefinida-o-crea-tu-musica) SALIDAS DE AUDIO La placa Microbit v2 tiene un altavoz incorporado que se puede anular o activar... #### [Musica](https://libros.catedu.es/books/microbit-y-python/page/musica) Página extraída de Federico Coca Guia de Trabajo de Microbit CC-BY-SA MicroPython de BBC micro:b... #### [Putty](https://libros.catedu.es/books/microbit-y-python/page/putty) Putty es un programa que nos permite realizar comunicaciones, normalmente se usa en protocolo SSH... #### [UART](https://libros.catedu.es/books/microbit-y-python/page/uart) Página extraída de Federico Coca Guia de Trabajo de Microbit https://fgcoca.github.io/Guia-de-tr... #### [Registro de datos](https://libros.catedu.es/books/microbit-y-python/page/registro-de-datos) Página extraída de Federico Coca Guia de Trabajo de Microbit CC-BY-SA Grabar datos Para utiliza... # Solo placa: Música Tan fácil como elegir la música y arrastrar el código: [![2026-01-08 22_32_49-Greenshot.png](https://libros.catedu.es/uploads/images/gallery/2026-01/scaled-1680-/2026-01-08-22-32-49-greenshot.png)](https://libros.catedu.es/uploads/images/gallery/2026-01/2026-01-08-22-32-49-greenshot.png) Si te sabe a poco aquí tienes más - [Música predefinida o crear tu música](https://libros.catedu.es/books/microbit-y-python/page/musica-predefinida-o-crea-tu-musica) - [Más música](https://libros.catedu.es/books/microbit-y-python/page/musica) # Maqueta: Intermitente led amarillo Nos vamos a [https://python.microbit.org/](https://python.microbit.org/) y ponemos este código: ```python from microbit import * display.show(Image.HOUSE) pin16.write_digital(0) while True: pin16.write_digital(1) sleep(1000) pin16.write_digital(0) sleep(1000) ``` [![2025-11-06 14_56_27-Mattermost Desktop App.png](https://libros.catedu.es/uploads/images/gallery/2025-11/scaled-1680-/2025-11-06-14-56-27-mattermost-desktop-app.png)](https://libros.catedu.es/uploads/images/gallery/2025-11/2025-11-06-14-56-27-mattermost-desktop-app.png) # Maqueta: LED amarillo intermitente gradual Vamos a hace lo mismo pero que el brillo vaya del mínimo 0 al máximo 255 y viceversa, aprovechando las señales PWM ``` from microbit import * display.show(Image.HOUSE) pin16.write_digital(0) brillo=0 while True: for brillo in range (0, 255): pin16.write_analog(brillo) sleep(5) while brillo >0 : pin16.write_analog(brillo) brillo = brillo -1 sleep(5) ``` ##### **¿Qué es eso de señal PWM?** {{@2946}} # Maqueta: Neopixel RGB Vamos a hacer una discoteca !!! ``` from microbit import * import neopixel NEOPIXEL = neopixel.NeoPixel(pin14, 4) from random import randint while True: for index in range(0, 4): NEOPIXEL.clear() NEOPIXEL[index] = (randint(10, 255), randint(10, 255), randint(10, 255)) NEOPIXEL.show() sleep(100) ``` # Maqueta : Sensor PIR Vamos a visualizar la lectura del sensor PIR por el puerto serie: ``` from microbit import * DETECTO = 0 display.show(Image.SILLY) while True: DETECTO = pin15.read_digital() print("digital signals:", DETECTO) sleep(100) ``` El resultado : [![2025-11-06 14_58_25-Mattermost Desktop App.png](https://libros.catedu.es/uploads/images/gallery/2025-11/scaled-1680-/2025-11-06-14-58-25-mattermost-desktop-app.png)](https://libros.catedu.es/uploads/images/gallery/2025-11/2025-11-06-14-58-25-mattermost-desktop-app.png) # Servos Hay varias opciones para manejar servos con micro:bit y python ##### **Opción A: Lo más sencillo enviar un pulso adecuado** Los servos funcionan según la anchura del pulso que se envía, siendo los pulsos de 20mseg. Se explica mejor con una imagen : [![arduino-servo-funcionamiento.webp](https://libros.catedu.es/uploads/images/gallery/2025-11/scaled-1680-/arduino-servo-funcionamiento.webp)](https://libros.catedu.es/uploads/images/gallery/2025-11/arduino-servo-funcionamiento.webp) Autor Luis Llamas CC-BY-SA [https://www.luisllamas.es/controlar-un-servo-con-arduino/](https://www.luisllamas.es/controlar-un-servo-con-arduino/) 1. Por lo tanto podríamos establecer primero pulsos de 20 mseg con la instrucción adecuada (por ejemplo en la pueta pin 8 sería **pin8.set\_analog\_period(20)** ) 2. Enviar pulsos de forma adecuada. Ejemplo en puerta pin 8 1. si queremos 0º enviamos pulsos de 1mseg que equivale a **pin8.write\_analog(50)** 2. si queremos 90º enviamos pulsos de 1.5mseg que equivale a **pin8.write\_analog(75)** 3. si queremos 180º enviamos pulsos de 2mseg que equivale a **pin8.write\_analog(100)**

Los valores no responden a una regla de tres (en teoría 20mseg serían 255 en formato PWM) sino a **la experiencia-ensayo-prueba-error**. Hemos probado que para la puerta los valores 50-75-100 son correctos. Para la ventana que se ve bien la apertura y cierre los valores son 30-60-100

Mas info en [https://support.microbit.org/support/solutions/articles/19000101864-using-a-servo-with-the-micro-bit](https://support.microbit.org/support/solutions/articles/19000101864-using-a-servo-with-the-micro-bit) ##### **Opción B Cargar una librería servo.py** 1. Nos vamos a [https://github.com/microbit-playground/microbit-servo-class](https://github.com/microbit-playground/microbit-servo-class) y descargamos servo.py 2. Lo grabamos en la carpeta /mu\_code/ donde se ha instalado el editor Mu 3. Utilizamos el código usando esta librería y poniendo los grados como grados Por ejemplo para la puerta pin 8 ``` sv1 = Servo(pin8) sv1.write_angle(50) # turn servo to 50 degrees ```

Si quieres saber cómo se instala una librería, consulta la página LCD que ahí se ha instalado una librería [https://libros.catedu.es/books/smart-home-para-microbit/page/maqueta-lcd](https://libros.catedu.es/books/smart-home-para-microbit/page/maqueta-lcd)

##### **Opción C Crea tu una librería en tu programa** Esta opción esta extraída del tutorial del fabricante [https://docs.keyestudio.com/projects/KS4027-KS4028/en/latest/Python.html#project-6-servo](https://docs.keyestudio.com/projects/KS4027-KS4028/en/latest/Python.html#project-6-servo) No explicamos el código pues se extiende de los objetivos del curso ``` from microbit import * class Servo: def __init__(self, pin, freq=50, min_us=600, max_us=2400, angle=180): self.min_us = min_us self.max_us = max_us self.us = 0 self.freq = freq self.angle = angle self.analog_period = 0 self.pin = pin analog_period = round((1/self.freq) * 1000) # hertz to miliseconds self.pin.set_analog_period(analog_period) def write_us(self, us): us = min(self.max_us, max(self.min_us, us)) duty = round(us * 1024 * self.freq // 1000000) self.pin.write_analog(duty) sleep(100) self.pin.write_analog(0) def write_angle(self, degrees=None): if degrees is None: degrees = math.degrees(radians) degrees = degrees % 360 total_range = self.max_us - self.min_us us = self.min_us + total_range * degrees // self.angle self.write_us(us) Servo(pin8).write_angle(0) display.show(Image.HAPPY) while True: Servo(pin8).write_angle(0) sleep(1000) Servo(pin8).write_angle(45) sleep(1000) Servo(pin8).write_angle(90) sleep(1000) Servo(pin8).write_angle(135) sleep(1000) Servo(pin8).write_angle(180) sleep(1000) ``` # Maqueta puerta Utilizaremos la versión sencilla de manejo de los servos : ``` from microbit import * pin8.set_analog_period(20) # pulsos de 20 milisegundos cada uno while True: pin8.write_analog(50) #equivale a 1mseg de pulso a la derecha sleep(1000) pin8.write_analog(75) #equivale a a 1.5mseg sleep(1000) pin8.write_analog(100) #equivale a 2mseg de pulso todo a la izquierda sleep(1000) ``` # Maqueta: Ventana Para la ventana hemos usado el mismo código pero jugando, hemos visto que la ventana cierra mejor a valores más bajos - **pin9.write\_analog(30)** todo abierto - **pin9.write\_analog(60)** media ventana - **pin9.write\_analog(100)** ventana cerrada el código ``` from microbit import * pin9.set_analog_period(20) # pulsos de 20 milisegundos cada uno while True: pin9.write_analog(30) #equivale a 1mseg de pulso a la derecha sleep(1000) pin9.write_analog(60) #equivale a a 1.5mseg sleep(1000) pin9.write_analog(100) #equivale a 2mseg de pulso todo a la izquierda sleep(1000) ``` # Maqueta: Motor El motor tiene un sencillo funcionamiento:
PIN12PIN13MOTOR
00PARADO
01ROTACIÓN SENTIDO RELOJ
10ROTACIÓN SENTIDO ANTIRELOJ
11PARADO
Pero con Pytho no sólo podemos poner los pines 12 y 13 a 0 o 1 sino también podemos poner su potencia Valora qué pasa en cada una de las 4 situaciones siguiente ```python from microbit import * pin12.write_digital(0) pin13.write_digital(0) while True: # 1 Que pasa 1 ##########♥1 display.scroll('1') pin12.write_digital(1) pin13.write_analog(50) sleep(5000) # Paramos pin12.write_digital(0) pin13.write_analog(0) sleep(1000) # 2 Que pasa 2 ##########♥2 display.scroll('2') pin12.write_digital(1) pin13.write_analog(255) sleep(5000) # Paramos pin12.write_digital(0) pin13.write_analog(0) sleep(1000) # 3 Que pasa 3 ##########♥3 display.scroll('3') pin12.write_digital(1) pin13.write_digital(0) sleep(5000) # Paramos pin12.write_digital(0) pin13.write_analog(0) sleep(1000) # 4 Que pasa 4 ##########♥4 display.scroll('4') pin12.write_digital(1) pin13.write_digital(1) sleep(5000) # Paramos pin12.write_digital(0) pin13.write_analog(0) sleep(1000) # 5 Que pasa 5 ##########♥5 display.scroll('5') pin12.write_digital(0) pin13.write_digital(1) sleep(5000) # Paramos pin12.write_digital(0) pin13.write_analog(0) sleep(1000) ``` # Maqueta: LCD El display LCD no es nativo, y no hay una solución simple como en los servos (ver [https://libros.catedu.es/books/smart-home-para-microbit/page/servos](https://libros.catedu.es/books/smart-home-para-microbit/page/servos)) luego tenemos que incorporar **UNA LIBRERIA EXTERNA** para LCS 16x2 (16 columnas 2 filas) ##### **La librería mb\_i2c\_lcd1602.py** La puedes descargar aquí [https://github.com/Pratt-Institute/MicroPython4MicroBit/blob/master/mb\_i2c\_lcd1602.py](https://github.com/Pratt-Institute/MicroPython4MicroBit/blob/master/mb_i2c_lcd1602.py) [![2025-11-06 14_04_54-Configuración.png](https://libros.catedu.es/uploads/images/gallery/2025-11/scaled-1680-/2025-11-06-14-04-54-configuracion.png)](https://libros.catedu.es/uploads/images/gallery/2025-11/2025-11-06-14-04-54-configuracion.png) Vamos a utilizar el editor Python online [https://python.microbit.org/](https://python.microbit.org/) Abrimos un nuevo proyecto y le damos a **Open** [![2025-11-06 14_07_22-Configuración.png](https://libros.catedu.es/uploads/images/gallery/2025-11/scaled-1680-/2025-11-06-14-07-22-configuracion.png)](https://libros.catedu.es/uploads/images/gallery/2025-11/2025-11-06-14-07-22-configuracion.png) Abrimos el fichero **mb\_i2c\_lcd1602.py** que hemos descargado anteriormente

nos pide si queremos reemplazar el contenido de main.py **LE DECIMOS QUE NO**, que añada un nuevo fichero mb\_i2c\_lcd1602.py **OJO QUE HAY QUE DAR AL ICONO PEQUEÑO** que pone en esa imagen

**[![2025-11-06 14_08_31-Configuración.png](https://libros.catedu.es/uploads/images/gallery/2025-11/scaled-1680-/2025-11-06-14-08-31-configuracion.png)](https://libros.catedu.es/uploads/images/gallery/2025-11/2025-11-06-14-08-31-configuracion.png)** ##### **Nuestro programa** **Confirmamos**, vamos al **main.py** y pegamos este código ``` from mb_i2c_lcd1602 import * l = LCD1620() l.puts("Hola microbit!") ``` Y **send to micro:bit** [![2025-11-06 14_15_04-Configuración.png](https://libros.catedu.es/uploads/images/gallery/2025-11/scaled-1680-/2025-11-06-14-15-04-configuracion.png)](https://libros.catedu.es/uploads/images/gallery/2025-11/2025-11-06-14-15-04-configuracion.png) **Resultado** [![2025-11-06 14_16_34-WhatsApp.png](https://libros.catedu.es/uploads/images/gallery/2025-11/scaled-1680-/2025-11-06-14-16-34-whatsapp.png)](https://libros.catedu.es/uploads/images/gallery/2025-11/2025-11-06-14-16-34-whatsapp.png) # Maqueta Sensor lluvia No necesitamos ninguna librería especial. Simplemente leer los valores analógicos del Pin 0. En este caso lo visualizamos por el puerto serie : ``` from microbit import * while True: val = pin0.read_analog() print("Humedad=", val) sleep(100) ``` Para leer el puerto serie en [https://python.microbit.org/](https://python.microbit.org/) lo tienes aquí : [![2025-11-06 14_24_00-Configuración.png](https://libros.catedu.es/uploads/images/gallery/2025-11/scaled-1680-/2025-11-06-14-24-00-configuracion.png)](https://libros.catedu.es/uploads/images/gallery/2025-11/2025-11-06-14-24-00-configuracion.png) ##### **ALARMA LLUVIA** El proyecto pide una alarma. El siguiente código es extraído de [https://docs.keyestudio.com/projects/KS4027-KS4028/en/latest/Python.html#project-11-rains-alarm](https://docs.keyestudio.com/projects/KS4027-KS4028/en/latest/Python.html#project-11-rains-alarm) ``` from microbit import * import music display.show(Image.HAPPY) pin16.write_digital(0) while True: if pin0.read_analog() > 500: music.play("C5:4") pin16.write_digital(1) sleep(100) music.reset() pin16.write_digital(0) sleep(100) music.play("C5:4") pin16.write_digital(1) sleep(100) music.reset() pin16.write_digital(0) sleep(100) else: music.reset() pin16.write_digital(0) ``` Una vez mojado el sensor, si se seca y queda por debajo de 500 se apaga la alarma: # Maqueta: Sensor Gas Vamos a realizar un detector de gas ``` from microbit import * import music pin16.write_digital(0) while True: if pin1.read_digital() == 0: music.play("C4:4") pin16.write_digital(1) sleep(100) music.reset() pin16.write_digital(0) sleep(100) else: music.reset() pin16.write_digital(0) ``` En este caso acercamos una botella de Alcohol

RETO visualiza la lectura del sensor gas por el pueto serie: Solución [https://docs.keyestudio.com/projects/KS4027-KS4028/en/latest/Python.html#project-12-analog-gas-mq-2-sensor](https://docs.keyestudio.com/projects/KS4027-KS4028/en/latest/Python.html#project-12-analog-gas-mq-2-sensor)

# Maqueta DHT11 Se ha intentado el código de [fgcoca ](https://fgcoca.github.io/Guia-de-trabajo-para-microbit/actividades/A26/)y no ha resultado Se ha intentado con la librería [version\_2 ](https://github.com/rhubarbdog/microbit-dht11/blob/master/version_2.py)y con el siguiente código ``` # Imports go at the top from microbit import * from version_2 import * SENSOR = DHT11(pin2) while True: display.show(Image.HEART) t , h = SENSOR.read() print("Temperatura=",t) print("Humedad=",h) sleep(2000) ``` Y tampoco ha funcionado, el error lo sigue dando el chequeo de error. Si en la librería version\_2 se anula, por el puerto serie no salen los valores correctos.

Si consigues hacer funcionar el DHT11 de la maqueta con Python dínoslo, [https://catedu.es/informacion/](https://catedu.es/informacion/)

🤔🤔Que curioso que el fabricante no ha puesto código Python en su tutorial [https://docs.keyestudio.com/projects/KS4027-KS4028/en/latest/Python.html#expansion-projects](https://docs.keyestudio.com/projects/KS4027-KS4028/en/latest/Python.html#expansion-projects) [![2025-11-08 12_59_46-Configuración.png](https://libros.catedu.es/uploads/images/gallery/2025-11/scaled-1680-/2025-11-08-12-59-46-configuracion.png)](https://libros.catedu.es/uploads/images/gallery/2025-11/2025-11-08-12-59-46-configuracion.png)