[ad_1]
Las plantas de interior necesitan atención y cuando estás sentado en tu escritorio trabajando, a veces te olvidas de cuidarlas. Nuestro paciente es “Gary” una suculenta de Gasteria de Ikea que necesita muy pocos cuidados, y eso hace que me olvide de regarlo. Entonces, ¿cómo puede el Frambuesa Pi Pico W ayudarme a cuidar mejor de Gary?
Los sensores de humedad del suelo miden la conductividad del suelo y envían el valor a la Raspberry Pi Pico W (u otro microcontrolador) como voltaje. Este voltaje es leído por un pin GPIO analógico y convertido a un valor entre 0 y 65535. Cuanto más bajo es el número, más seco está el suelo. Esto se puede usar como disparador para enviar un mensaje.
En este tutorial, aprenderemos cómo tomar una serie de lecturas de sensores, calcular su valor medio y usarlo para determinar si Gary necesita un trago. Gary luego nos enviará un mensaje a través de un Telegram Bot.
Para este proyecto necesitarás
Construyendo el circuito
El circuito es extremadamente simple. Tenemos un sensor de humedad del suelo conectado a tres pines del GPIO. Los dos primeros pines, alimentación 3V3 y GND, proporcionan al sensor la alimentación que necesita.
El tercer pin, Signal, es un pin de salida que envía un valor a Raspberry Pi Pico. La salida es un voltaje que el GPIO correspondiente lee como un valor entre 0 y 65535. Este valor luego se usa en el código para determinar si la planta tiene sed.
El sensor de humedad del suelo se conecta de la siguiente manera.
Color | Sensor de humedad del suelo | Frambuesa Pi Pico |
---|---|---|
Rojo | + / VCC | 3V3 (Pin físico 36) |
Amarillo | S / señal | GP26 |
Negro | – / TIERRA | Cualquier pin de tierra/GND |
Configuración de un bot de Telegram
Telegram es un servicio de mensajería instantánea fácil de usar que tiene un medio refrescantemente simple en el que podemos comunicarnos desde un Raspberry Pi Pico W. Usando un Bot, podemos crear un canal dedicado a las plantas de nuestra casa o incluso a la seguridad del hogar.
Crear un bot de Telegram es un proceso simple y, afortunadamente, tenemos a The BotFather disponible para ayudarnos.
1. Inicie sesión en su cuenta de Telegram. Utilizamos el cliente de Windows para facilitar el flujo de trabajo.
2. Crea un chat con BotPadre. BotFather es un bot que se utiliza para crear y administrar bots.
3. Cree un nuevo bot usando el comando /newbot y presione Entrar. BotFather creará un asistente para guiarlo a través del proceso de creación del bot.
/newbot
4. Tome nota de la clave API, es necesario para el proyecto. Sin esto no podemos comunicarnos con el bot usando nuestro código.
5. En Telegram, crea un nuevo chat con IDBot, solicita tu ID. Tome nota de la identificación.
/getid
Escribir el código
Todo el código del proyecto está escrito en MicroPython, usando la última versión de MicroPython para Raspberry Pi Pico W. Usamos Thonny para escribir y probar el código directamente en Raspberry Pi Pico W.
1. 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.
2. abierto thony y haga clic en el botón Detener para actualizar la conexión. Esto asegura que Python Shell esté abierto y funcionando correctamente.
3. Crear un nuevo archivo y pega el contenido de este enlace. Guarde el archivo como statistics.py en la raíz de Raspberry Pi Pico W. Este archivo es un módulo que contiene todas las funciones estadísticas necesarias para seleccionar el valor de la mediana de una lista de datos. El proyecto fue creado por Roberto Colistete Júnior.
4. Crear un nuevo archivo y allí cree cuatro objetos, SSID, CONTRASEÑA, API e ID.
5. Para el objeto SSID, asígnele el nombre de su punto de acceso / enrutador Wi-Fi.
SSID = “YOUR WI-FI AP NAME HERE”
6. Para la contraseña, asigne la contraseña de Wi-Fi.
PASSWORD = “YOUR SECRET PASSWORD”
7. Para la API, asigne la clave API de Telegram Bot. Asegúrese de que la llave esté dentro del “ “.
API = "YOUR TELEGRAM BOT API KEY"
8. Para el ID, asigna tu ID de usuario de Telegram. Asegúrese de que el ID esté dentro de » «, ya que esto establecerá el valor como una cadena.
ID = “YOUR USER ID HERE”
9. Guarde el archivo en Raspberry Pi Pico W como secrets.py.
SSID = “YOUR WI-FI SSID”
PASSWORD “YOUR WI-FI PASSWORD”
API = “YOUR TELEGRAM BOT API KEY”
ID = “YOUR TELEGRAM USER ID”
10 Cree un nuevo archivo e importe una serie de módulos de Python.
a. Máquina contiene funciones y clases necesarias para usar el GPIO (Pin) y las entradas analógicas (ADC).
b. Tiempo se utiliza para agregar un retraso al código.
C. Red hace conexiones Wi-Fi.
d. Urequests (microsolicitudes) es una versión MicroPython de solicitudes que se utilizan para enviar y recibir datos a través de una red.
mi. Estadísticasun módulo que contiene funciones para realizar análisis estadísticos de datos.
F. Misteriosun módulo que contiene todos nuestros detalles de Wi-Fi y claves API.
from machine import Pin, ADC
import time
import network
import urequests
import statistics
import secrets
11 Cree un objeto, sensor y cree una conexión con el sensor de humedad del suelo en GPIO 26. Este objeto configurará la entrada del sensor como analógica, usando un valor entre 0 y 65535 para representar la conductividad del suelo. Cuanto mayor sea el número, mejor será la conductividad.
sensor = ADC(Pin(26))
12 Cree un objeto, wlan, y utilícelo para establecer una conexión con su punto de acceso Wi-FI. La conexión se activa, luego, utilizando el SSID y la CONTRASEÑA almacenados en secrets.py, nos conectamos al punto de acceso. Una pausa de cinco segundos permite que la conexión se estabilice, luego imprimimos el estado actual de la conexión. Si está conectado vemos VERDADERO, si falla, vemos FALSO.
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(secrets.SSID, secrets.PASSWORD)
time.sleep(5)
print(wlan.isconnected())
13 Cree una lista vacía llamada «lecturas». Una lista también se conoce como matriz y la usamos para almacenar múltiples valores en un formato fácil de leer.
readings = []
14 Cree la primera parte de una instrucción try, excepto y configure el código para ejecutar un ciclo while True. Try, excepto es una declaración de manejo de errores. El código intentará ejecutar lo que contiene, pero si hay una excepción o un error, pasará de forma predeterminada a una sección de código que se ocupará de ello.
try:
while True:
15. Con un bucle for, recopile cinco lecturas del sensor de humedad del suelo y agregue cada lectura a la lista de lecturas en intervalos de un segundo. Esta sección de código leerá el pin GPIO conectado al sensor y luego tomará el valor y lo almacenará en la lista. Imprimir las lecturas es útil para depurar cualquier problema.
for i in range(5):
reading = sensor.read_u16()
readings.append(reading)
print(readings)
time.sleep(1)
dieciséis. Fuera del bucle for, cree un objeto, valor_medio y allí almacenar el valor de la mediana (punto medio) de la colección de lecturas.
median_value = statistics.median(readings)
17 Use una declaración condicional para comparar el valor de la mediana con un valor codificado. En nuestras pruebas elegimos 400 como el punto en el que nuestra planta de gastería requeriría agua. Modifique este valor para satisfacer las necesidades de su planta.
if median_value < 400:
18 Si la planta requiere agua, mediante urequests envíe un mensaje a Telegram y luego imprima un mensaje en el shell de Python. Tenga en cuenta que usamos secrets.API para insertar nuestra clave API y secrets.ID para enviar nuestra ID de usuario. El mensaje real está aquí sendMessage?text=Gary tiene sed.
urequests.get("https://api.telegram.org/bot"+secrets.API+"/sendMessage?text=Gary is thirsty&chat_id="+secrets.ID)
print("Message Sent")
19 Usando else, la planta determina que tiene suficiente agua y que no la necesita en este momento. Esto desencadena un retraso de una hora en el código.
else:
print("Gary has enough water")
time.sleep(3600)
20 Cree un controlador de excepciones, diseñado para manejar un error del sistema operativo (sin conexión Wi-Fi) que imprima un mensaje en el shell de Python. Las líneas de impresión («@»*68) crean bordes decorativos encima y debajo del mensaje.
except OSError:
print("@"*68)
print("@ Cannot connect to the Wi-Fi, please check your SSID and PASSWORD @")
print("@"*68)
21 Guarde el código como main.py en Raspberry Pi Pico W. Esto obligará al Pico W a cargar el código cada vez que se encienda y encienda.
22 Apague y encienda el Pico W ¡y espera a que las plantas de tu casa exijan su agua!
Listado completo de códigos
from machine import Pin, ADC
import time
import network
import urequests
import statistics
import secrets
sensor = ADC(Pin(26))
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(secrets.SSID, secrets.PASSWORD)
time.sleep(5)
print(wlan.isconnected())
readings = []
try:
while True:
for i in range(5):
reading = sensor.read_u16()
readings.append(reading)
print(readings)
time.sleep(1)
median_value = statistics.median(readings)
if median_value < 400:
urequests.get("https://api.telegram.org/bot"+secrets.API+"/sendMessage?text=Gary is thirsty&chat_id="+secrets.ID)
print("Message Sent")
else:
print("Gary has enough water")
time.sleep(3600)
except OSError:
print("@"*68)
print("@ Cannot connect to the Wi-Fi, please check your SSID and PASSWORD @")
print("@"*68)
[ad_2]
Source link-41