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 Gasteria de Ikea que necesita muy pocos cuidados, por lo que me olvido de regarlo. Entonces, ¿cómo 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 valencia a la Raspberry Pi Pico W (u otro microcontrolador) como voltaje. Este voltaje es conocedor por un pin GPIO semejante y convertido a un valencia 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 despachar un mensaje.
En este tutorial, aprenderemos cómo tomar una serie de lecturas de sensores, determinar su valencia 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 esquema necesitarás
Construye el circuito
El circuito es extremadamente simple. Tenemos un sensor de humedad del suelo conectado a tres pines del GPIO. Los dos primeros pines, comida 3V3 y GND, proporcionan al sensor la comida que necesita.
El tercer pin, Signal, es un pin de salida que envía un valencia a Raspberry Pi Pico. La salida es un voltaje que el GPIO correspondiente lee como un valencia entre 0 y 65535. Este valencia luego se usa en el código para determinar si la planta tiene sed.
El sensor de humedad del suelo se conecta de la sucesivo modo.
Color | Sensor de humedad del suelo | Frambuesa Pi Pico |
---|---|---|
Rojo | + / VCC | 3V3 (pin físico 36) |
AMARILLO | S/Señal | GP26 |
Frito | -/tierra | Cualquier pin de tierra/GND |
Configurar un bot de Telegram
Telegram es un servicio de correo instantánea realizable de usar que tiene una forma refrescantemente simple en la que podemos comunicarnos desde una Raspberry Pi Pico W. Usando un bot podemos crear un canal dedicado a nuestras plantas de interior o incluso a la seguridad del hogar.
Crear un bot de Telegram es un proceso sencillo y, a Dios gracias, tenemos a The BotFather acondicionado para ayudarnos.
1. Inicie sesión en su cuenta de Telegram. Utilizamos el cliente de Windows para simplificar el flujo de trabajo.
2. Crea una conversación con BotPadre. BotFather es un bot que se utiliza para crear y llevar la batuta 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. Anote la secreto API, es necesario para el esquema. Sin él, no podemos comunicarnos con el bot usando nuestro código.
5. En Telegram, crea un nuevo chat con IDBot, solicita tu ID. Anote la identificación.
/getid
escribe el codigo
Todo el código del esquema está escrito en MicroPython, usando la última lectura 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 lectura 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 es opcional.
2. rajado thony Y haga clic en el yema de parada para poner al día la conexión. Esto garantiza que Python Shell esté rajado y funcione 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 escoger el valencia de la mediana de una relación de datos. El esquema 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 acercamiento/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 secreto API de Telegram Bot. Asegúrese de que la secreto esté interiormente de " ".
API = "YOUR TELEGRAM BOT API KEY"
8. Para ID, asigne su ID de sucesor de Telegram. Asegúrese de que el ID esté interiormente de " ", ya que esto establecerá el valencia como una prisión.
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”
diez. Cree un nuevo archivo e cuantía una serie de módulos de Python.
A. Máquina contiene las funciones y clases necesarias para usar el GPIO (Pin) y las entradas analógicas (ADC).
b. Tiempo se utiliza para unir un retraso al código.
contra Red establece conexiones Wi-Fi.
d. Peticiones (microconsultas) es una lectura de MicroPython de consultas que se utiliza para despachar y acoger datos a través de una red.
mi. Estadísticasun módulo que contiene funciones para realizar descomposición 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, un sensor y cree una conexión con el sensor de humedad del suelo en GPIO 26. Este objeto establecerá la entrada del sensor en analógica, usando un valencia entre 0 y 65535 para representar la conductividad del suelo. Cuanto longevo sea el número, mejor será la conductividad.
sensor = ADC(Pin(26))
12 Cree un objeto, wlan, y utilícelo para conectarse a su punto de acercamiento Wi-Fi. La conexión se activa, luego usando el SSID y la CONTRASEÑA almacenados en secrets.py, nos conectamos al punto de acercamiento. Una pausa de cinco segundos permite que la conexión se estabilice y luego imprimimos el estado presente de la conexión. Si está conectado, vemos VERDADERO, si defecto, 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 relación vacía indicación "lecturas". Una relación todavía se conoce como matriz y la usamos para acumular múltiples títulos en un formato de realizable recitación.
readings = []
14 Cree la primera parte de una instrucción try, excepto y establezca el código para ejecutar un caracolillo True while. Try, excepto es una explicación de manejo de errores. El código intentará ejecutar lo que contiene, pero si hay una excepción o un error, pasará por defecto a una sección de código que se ocupará de ello.
try:
while True:
15. Usando un caracolillo for, recopile cinco lecturas del sensor de humedad del suelo y agregue cada recitación a la relación de lecturas en intervalos de un segundo. Esta sección de código leerá el pin GPIO conectado al sensor, luego tomará el valencia y lo almacenará en la relación. Imprimir 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 caracolillo for, cree un objeto, valor_medio y almacene el valencia medio (punto medio) de la colección de lecturas allí.
median_value = statistics.median(readings)
17 Utilice una explicación condicional para comparar el valencia de la mediana con un valencia codificado. En nuestras pruebas, elegimos 400 como el punto en el que nuestra planta de gastería necesitaría agua. Ajuste este valencia para satisfacer las deyección de su planta.
if median_value < 400:
18 Si la planta necesita 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 secreto API y secrets.ID para despachar nuestra ID de sucesor. El cierto mensaje 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 Al usar else, la planta determina que tiene suficiente agua y no la necesita en este momento. Esto desencadena un retraso de una hora para el código.
else:
print("Gary has enough water")
time.sleep(3600)
20 Cree un regulador de excepciones, diseñado para manejar un error del sistema eficaz (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á a Pico W a cargar el código cada vez que se encienda.
22 Reiniciar el Pico W ¡y dilación a que tus plantas de interior clamen por agua!
Índice completa 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)
Deja una respuesta