Los $8 Frambuesa Pi Pico W Es una pequeña tabla maravillosa. Durante la escasez mundial de chips, tapó un agujero bastante grande con forma de Raspberry Pi en el Inventario de frambuesa Pi y proporcionó a los fabricantes una plataforma IoT (Internet de las cosas) de bajo costo y fácil de usar. Seguro que no es el primer microcontrolador conectado a Internet (podemos hablar de ese honor en los comentarios), pero para muchos Frambuesa Pi fans, fue su primer paso en el maravilloso mundo de los microcontroladores.
Mientras que Raspberry Pi ejecuta un sistema operativo Linux completo, Raspberry Pi Pico W depende del firmware para proporcionar una capa en la que podemos escribir nuestro código. MicroPython es uno de los lenguajes oficialmente admitidos y ha experimentado muchas mejoras para adaptarse a Raspberry Pi Pico. Una mejora fue la inclusión de urequests (microsolicitudes) que permiten a nuestro Pico W enviar y recibir solicitudes HTTP.
En este procedimiento, usaremos urequests junto con ntfy.sh, un servicio y una aplicación gratuitos para dispositivos Android y Apple que pueden interceptar mensajes de dispositivos IoT y mostrarlos en su dispositivo. Lo vamos a utilizar para enviar alertas a nuestro móvil Android, alertas que se activan mediante un sensor PIR (Infrarrojos Pasivo) que detecta movimiento en una habitación.
Ntfy.sh es un servicio notablemente eficaz y sencillo. En lugar de instalar un módulo Python/MicroPython específico, funciona con solicitudes para enviar mensajes desde la Raspberry Pi Pico W usando un tema específico (muy similar a cómo funciona MQTT). Nuestro dispositivo Android/iOS está suscrito a este tema y recibe las notificaciones del Pico W.
Estamos limitados a enviar texto en Raspberry Pi Pico W, pero este proyecto también se puede usar con Raspberry Pi SBC y la cámara oficial Raspberry Pi para enviar imagenes (o cualquier otra forma de apego) cuando ocurre un evento. Indique si un pájaro se está alimentando de su comedero para pájaros o si hay alguien en su jardín trasero. Para ver un ejemplo sobre cómo usar imágenes con ntfy.sh, echa un vistazo a nuestro cómo usar diccionarios tutorial.
Construyendo el circuito
El circuito de este proyecto es increíblemente simple y está diseñado específicamente. Sólo hay tres conexiones entre el sensor PIR y la Raspberry Pi Pico.
Color del cable | Frambuesa Pi Pico | PIR |
Rojo | 5V (VBUS) | VCC |
Amarillo | GPIO 16 | AFUERA |
Negro | Tierra | Tierra |
Conecte los cables entre el Pico y el sensor PIR antes de continuar.
Codificando el proyecto
1. Instalar ntfy.sh para su dispositivo Android/iOS.
2. Abra la aplicación y haga clic en + para crear una nueva suscripción.
3. Crea un nuevo tema y haz clic en Suscribirse. Elegimos utilizar la prueba th. Crea un tema que sea personal para ti. También tenga en cuenta que es posible que los temas no estén protegidos con contraseña, así que no envíe datos confidenciales.
4. Deja la aplicación abierta en tu dispositivo.
Ahora pasamos a codificar la Raspberry Pi Pico W.
5. Sigue estos pasos para descargar la última versión de MicroPython para Raspberry Pi Pico W. Los pasos más importantes son descargar e instalar la imagen del firmware UF2 y configurar Thonny. El resto son opcionales.
6. Abierto Thonny y haga clic en el botón Detener para actualizar la conexión. Esto garantiza que Python Shell esté abierto y funcionando correctamente.
7. Crea un nuevo archivo en blanco.
8. Importe el módulo de red y luego importe urequests, renombrándolo a solicitudes. El módulo de red permite que nuestro Pico W se conecte a Internet. Urequests es una versión MicroPython del módulo de solicitudes de Python que usaremos para enviar un mensaje desde Pico W. Urequests ahora está preinstalado en la última versión del firmware UF2.
import network
import urequests as requests
9. Importe la función de suspensión desde el tiempo y Pin desde la máquina. La función de suspensión se utilizará para agregar una pausa al código del proyecto. El módulo de la máquina contiene funciones y clases que permiten que nuestro código controle y lea los pines GPIO.
from time import sleep
from machine import Pin
10. Cree un objeto, pir, y utilícelo para crear una conexión al pin de salida PIR en GPIO 16. El pin debe configurarse como entrada, y debemos colocar el pin GPIO hacia arriba (3V) para que cuando se active el PIR, la señal baje el pin.
pir = Pin(16, Pin.IN, Pin.PULL_UP)
11. Cree un objeto, wlan para representar la conexión Wi-Fi, luego encienda el Wi-Fi y conéctese a su punto de acceso Wi-Fi.
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("YOUR SSID","YOUR PASSWORD")
12. Agregue un retraso de tres segundos después de realizar la conexión Wi-Fi. Esto no es estrictamente necesario, el proceso de conexión es un «bloqueador», lo que significa que debe completarse antes de poder pasar a esta línea. Pero hemos tenido más suerte conectándonos cuando hay una pausa que sin ella.
sleep(3)
13. Imprime el estado de la conexión Wi-Fi. Verdadero significa que estamos conectados, Falso significa que no lo estamos.
print(wlan.isconnected())
14. Cree un bucle while True y utilícelo para imprimir el estado actual del pin PIR GPIO. Configuramos el pin para que esté alto (hacia arriba) en nuestro código, por lo que el valor debe ser 1.
while True:
print(pir.value())
15. Cree una declaración condicional que verifique si el sensor PIR se ha activado.Activar el sensor obligará al pin GPIO conectado al pin de salida del sensor a bajar (0) y nuestro código está buscando este cambio.
if pir.value() == 0:
dieciséis. Utilice solicitudes para publicar un mensaje en ntfy. Tenga en cuenta que debemos especificar el nombre del tema, en nuestro caso https://ntfy.sh/th-test, como parte del argumento de la función. El siguiente argumento, datos, es el mensaje que verá el usuario.
requests.post("https://ntfy.sh/th-test",
data="Movement detected by sensor",
17. Dentro de la solicitud, especifique «encabezados» que incluyan un título para la notificación.. Una prioridad (siendo 5 la prioridad más alta) y etiquetas, que se utilizan para agregar un emoji de luz giratorio.
headers=
"Title": "ALERT: MOVEMENT DETECTED",
"Priority": "5",
"Tags": "rotating_light",
)
18. Imprime un mensaje en el shell de Python. Esto es únicamente para fines de depuración.
print("Movement detected, notification sent")
19. Agregar una condición más que simplemente usa pass para permitir que el código se repita.
else:
pass
20. Agregue un retraso al código, dentro del bucle while True, pero fuera de las pruebas condicionales. Este retraso puede ser de 10 segundos u horas. Todo depende de la frecuencia con la que quieras recibir alertas.
sleep(10)
21. Guarde el código en Raspberry Pi Pico como alarm.py y haga clic en Ejecutar para comenzar. Si desea que este código se ejecute automáticamente cuando se encienda el Pico W, guarde el archivo como main.py. MicroPython está configurado para ejecutar main.py cada vez que se enciende la placa.
22. Coloque su mano frente al sensor para activar la alerta.
23. Su dispositivo Android/iOS recibirá una notificación.
Listado de códigos completo
import network
import urequests as requests
from time import sleep
from machine import Pin
pir = Pin(16, Pin.IN, Pin.PULL_UP)
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("YOUR SSID","YOUR PASSWORD")
sleep(3)
print(wlan.isconnected())
while True:
print(pir.value())
if pir.value() == 0:
requests.post("https://ntfy.sh/th-test",
data="Movement detected by sensor",
headers=
"Title": "ALERT: MOVEMENT DETECTED",
"Priority": "5",
"Tags": "rotating_light",
)
print("Movement detected, notification sent")
else:
pass
sleep(10)