# Este proyecto es la base para la actividad Practica del modulo 2
# Importar librerias
import urequests
import network
import time
import ujson
# Conexion al servicio Wi-Fi Virtual de Wokwi para tener acceso a Internet
print("Connecting to WiFi", end="")
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('Wokwi-GUEST', '')
while not sta_if.isconnected():
print(".", end="")
time.sleep(0.1)
print(" Connected!")
# Clase que define como conectarse a la Base de Datos y como enviar datos.
class DbConnection():
ENDPOINT_DATA = '/api/data/'
ENDPOINT_AUTH = '/api/auth/login/'
BASE_HEADER = {
"Content-Type": "application/json"
}
def __init__(self, ip, usuario, contrasenia, proyecto):
self.url = f'http://{ip}'
self.usuario = usuario
self.proyecto = proyecto
response = urequests.post(
f'{self.url}{self.ENDPOINT_AUTH}',
json={'username':usuario, "password":contrasenia},
headers=self.BASE_HEADER
)
self.token = response.json().get('token')
def enviar_valor(self, magnitud, valor, log=True):
header = self.BASE_HEADER.copy()
header.update({
'Authorization': f'Token {self.token}'
})
data = {
'username': self.usuario,
'project': self.proyecto,
'data_type': magnitud,
'value': str(valor)
}
response = urequests.post(
f'{self.url}{self.ENDPOINT_DATA}',
json=data,
headers=header
)
if log:
if response.status_code == 201:
print('Dato subido correctamente!')
else:
print(f'ERROR: {response.status_code}')
# Magnitudes admitidas en la Base de Datos. Estas son todas, pero las que podran
# enviar dependen de como hayan configurado el proyecto.
class Magnitudes:
TEMPERATURA = 'temperatura' # valores flotantes
HUMEDAD = 'humedad' # valores flotantes
LUMINOSIDAD = 'luminosidad' # valores flotantes
ACELERACION = 'aceleracion' # valores flotantes
GRAVEDAD = 'gravedad' # valores flotantes
DISTANCIA = 'distancia' # valores flotantes
TENSION = 'tension' # valores flotantes
PESO = 'peso' # valores flotantes
ENCENDIDO = 'encendido' # valores True/False
# Variables para la conexion con la Base de Datos
# Completar con sus datos:
IP = '181.29.156.5'
USUARIO = 'iot1'
CONTRASENIA = 'iiot1234'
NOMBRE_PROYECTO = 'PRUEBA'
# Ejemplo de como enviar datos a un proyecto creado con la configuracion anterior
# pueden borrar estas lineas y escribir su propio codigo a partir de aqui
db = DbConnection(IP, USUARIO, CONTRASENIA, NOMBRE_PROYECTO)
import dht
import time
from machine import Pin
sensor = dht.DHT22(Pin(15))
sensor.measure()
db.enviar_valor(Magnitudes.TEMPERATURA, sensor.temperature())
db.enviar_valor(Magnitudes.HUMEDAD, sensor.humidity())