Codigo en cpp de Nodemcu ESP32 con detector de movimiento:
#include <Arduino.h>
#include <WiFi.h>
#include <esp_now.h>
const int pir = 25;
uint8_t broadcastAddress[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
char inputLine[100];
String frase = "Detectando presencia en el comedor ";
typedef struct struct_message
{
char a[100];
} struct_message;
struct_message myDataEnv;
esp_now_peer_info_t peerInfo;
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status)
{
}
void setup()
{
Serial.begin(9600);
pinMode(pir, INPUT_PULLDOWN);
WiFi.mode(WIFI_STA);
frase.toCharArray(inputLine, sizeof(inputLine));
if (esp_now_init() != ESP_OK)
{
Serial.println("Error initializing ESP-NOW");
return;
}
esp_now_register_send_cb(OnDataSent);
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
if (esp_now_add_peer(&peerInfo) != ESP_OK)
{
Serial.println("Failed to add peer");
return;
}
}
void loop()
{
if (digitalRead(pir) == HIGH)
{
strcpy(myDataEnv.a, inputLine);
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *)&myDataEnv, sizeof(myDataEnv));
delay(2000);
}else if (digitalRead(pir) == LOW){
delay(2000);
}
}
Codigo en cpp, de la Nodemcu ESP32 que recoge la información y la envia el ordenador
#include <Arduino.h>
#include <WiFi.h>
#include <esp_now.h>
uint8_t broadcastAddress[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
typedef struct struct_message
{
char a[100];
} struct_message;
struct_message myDataRec;
esp_now_peer_info_t peerInfo;
void OnDataRecv(const uint8_t *mac, const uint8_t *incomingData, int len)
{
memcpy(&myDataRec, incomingData, sizeof(myDataRec));
String strMessage;
for (int i = 0; i < strlen(myDataRec.a); i++) {
strMessage += myDataRec.a[i];
}
Serial.println(strMessage);
}
void setup()
{
Serial.begin(9600);
WiFi.mode(WIFI_STA);
if (esp_now_init() != ESP_OK)
{
Serial.println("Error initializing ESP-NOW");
return;
}
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
if (esp_now_add_peer(&peerInfo) != ESP_OK)
{
Serial.println("Failed to add peer");
return;
}
esp_now_register_recv_cb(OnDataRecv);
}
void loop()
{
}
Codigo en python en el ordenador que recoge el codigo de la Nodemcu ESP32 e imprimir el resultado en un archivo de texto
import serial
from datetime import datetime
ser = serial.Serial("/dev/tty.usbserial-0001", 9600, timeout=0.5)
file = open("/Users/cesarhernandez/Documents/PlatformIO/Projects/Agentes/datos_de_casa.txt", "a")
while True:
if ser.in_waiting:
line = ser.readline().decode('utf-8', 'ignore').rstrip()
fecha = datetime.now().strftime("%Y-%m-%d")
hora = datetime.now().strftime("%H:%M:%S")
linea_completa = line + " el dia " + fecha + " a la hora " + hora
file.write(linea_completa + '\n')
file.flush()
Codigo en python que ejecuta ChatGPT con un asistente que leera el archivo txt y te dara la información que necesites
from openai import OpenAI
import time
from voz import play_audio
import streamlit as st
import funciones
api_key=st.secrets["openai_apikey"]
assistant_id=st.secrets["assistant_id"]
thread_id=st.secrets["thread_id"]
#file_id=st.secrets["file_id"]
client=OpenAI(api_key=api_key)
my_assistant=client.beta.assistants.retrieve(assistant_id)
#thread=client.beta.threads.retrieve(thread_id)
thread = client.beta.threads.create()
file1 = client.files.create(
file=open("datos_de_casa.txt", "rb"),
purpose='assistants'
)
while True:
user_input = input("You: ")
if user_input.lower() == "salir":
#play_audio("adios")
funciones.delete_file(file1.id)
break
if user_input.lower().startswith("escribir datos "):
phrase_to_remember = user_input[len("escribir datos "):].strip()
funciones.save_cesar(phrase_to_remember)
play_audio("Información guardada, " + phrase_to_remember)
else:
message = client.beta.threads.messages.create(
thread_id=thread.id,
role="user",
content=user_input,
file_ids=[file1.id]
)
run = client.beta.threads.runs.create(
thread_id=thread.id,
assistant_id=assistant_id
)
while run.status == "queued" or run.status == "in_progress":
run=client.beta.threads.runs.retrieve(
thread_id=thread.id,
run_id=run.id
)
time.sleep(0.5)
# Retrieve all the messages added after our last user message
messages = client.beta.threads.messages.list(
thread_id=thread.id, order="asc", after=message.id
)
print(messages.data[0].content[0].text.value)
respuesta=messages.data[0].content[0].text.value
play_audio(respuesta)
Codigo en python que contiene las fuciones de la libreria «funciones», donde podremos añadir instrucciones al archivo .txt
from openai import OpenAI
import streamlit as st
api_key=st.secrets["openai_apikey"]
assistant_id=st.secrets["assistant_id"]
thread_id=st.secrets["thread_id"]
#file_id=st.secrets["file_id"]
client=OpenAI(api_key=api_key)
def delete_file(file_id):
client.files.delete(file_id)
#print(f"File with ID {file_id} has been deleted.")
def save_cesar(information):
with open("datos_de_casa.txt", "a", newline="") as file: # Open in append mode
file.write(information + "\n")
file.close()
Codigo en python que reproduce por voz lo que dice ChatGPT
import os
from gtts import gTTS
from pydub import AudioSegment
from pydub.playback import play
def play_audio(text):
try:
tts = gTTS(text=text, lang="es")
tts.save("temp.mp3")
# Abre el archivo mp3 con pydub
audio = AudioSegment.from_mp3("temp.mp3")
fast_audio = audio.set_frame_rate(audio.frame_rate * 1)
# Reproduce el audio
play(fast_audio)
# Elimina el archivo temporal
os.remove("temp.mp3")
except Exception as e:
print(f"Error reproduciendo el audio: {e}")
# Ejemplo de uso
#play_audio("¡Hola! Esto es una prueba de audio.")
Archivo de texto .txt que recoge la información que queremos que sepa ChatGPT y la información recogida por los sensores ESP32 de forma automatica, ChatGPT tiene acceso a este archivo y puede leer y comprender el contenido donde luego podras hacerle cualquier pregunta sobre él
Recordar que debo terminar proyecto en diseño de placa electronica
Tengo 3 proyectos en marcha con automatizacion de tareas y robotica
La luz delantera esta estropeada
Temperatura de 7 grados centigrados el 2024-03-13
Recordar actualizacion del temario del libro de electricidad-electronica
Detectando presencia en el comedor el dia 2024-03-13 a la hora 21:43:14
Detectando presencia en el comedor el dia 2024-03-13 a la hora 21:44:56
Detectando presencia en el pasillo el dia 2024-03-13 a la hora 21:44:58
Detectando presencia en el pasillo el dia 2024-03-13 a la hora 21:45:08
Detectando presencia en el comedor el dia 2024-03-13 a la hora 21:46:16
Detectando presencia en el comedor el dia 2024-03-13 a la hora 21:46:18
Detectando presencia en el comedor el dia 2024-03-13 a la hora 21:53:48
Detectando presencia en el comedor el dia 2024-03-13 a la hora 21:53:50
Detectando presencia en el comedor el dia 2024-03-13 a la hora 21:53:58
Deja una respuesta Cancelar la respuesta