miércoles, 1 de julio de 2026

aprende hacer serigrafia screen con materiales caseros imprime en pcb camisetas y pcb

 

 hola amigos y seguidores, en este tutorial todo de mi tras mucho tiempo de experimentacion, prueba y error hasta lograr una mezcla con materiales caseros faciles de adquirir, ver como se hace se ve facil, ver como les sale se ve facil, pero si no haces exactamente lo que se indica es lo mas frustante del mundo ver que no funciona, aui te resumo en un super tutorial todo lo que aprendi, aprovechalo por que esto vale oro.

domingo, 18 de enero de 2026

control y monitoreo por mensajeria de telegram curso iot con esp32 No16



codigo bien explicado
/*************************************************
 * ESP32 - CONTROL DE LED Y PULSADOR CON TELEGRAM
 * Código educativo y fácil de explicar
 * Repositorio de la librería Telegram usada:
 * https://github.com/witnessmenow/Universal-Arduino-Telegram-Bot
 * https://t.me/botfather
 * Bot para obtener tu Chat ID:
 * https://t.me/myidbot  → escribe /getid
 * Repositorio de ArduinoJson:
 * https://github.com/bblanchon
 *************************************************/

// ---------- LIBRERÍAS ----------

// Librería para manejar la conexión WiFi del ESP32
#include <WiFi.h>

// Librería para manejar conexiones seguras HTTPS (necesaria para Telegram)
#include <WiFiClientSecure.h>

// Librería para interactuar con bots de Telegram
#include <UniversalTelegramBot.h>

// ---------- WIFI ----------

// Nombre de la red WiFi a la que se conectará el ESP32
const char* ssid = "NOMBRE_DE_TU_WIFI";

// Contraseña de la red WiFi
const char* password = "CONTRASEÑA_DE_TU_WIFI";

// ---------- TELEGRAM ----------

// Token del bot de Telegram (entregado por BotFather)
#define BOT_TOKEN "AQUI_TU_TOKEN"

// ID del chat autorizado para controlar el ESP32
#define CHAT_ID "AQUI_TU_CHAT_ID"

// Cliente seguro para comunicación HTTPS
WiFiClientSecure client;

// Objeto bot que manejará la comunicación con Telegram
UniversalTelegramBot bot(BOT_TOKEN, client);

// ---------- PINES ----------

// Pin donde está conectado el LED (GPIO 2)
const int ledPin = 2;

// Pin donde está conectado el pulsador (GPIO 4)
const int buttonPin = 4;

// ---------- VARIABLES ----------

// Guarda el estado anterior del botón (HIGH = no presionado)
bool estadoBotonAnterior = HIGH;

// Variable para controlar el tiempo entre lecturas de Telegram
unsigned long lastTime = 0;

// Intervalo de tiempo para revisar mensajes (1000 ms = 1 segundo)
const unsigned long intervalo = 1000;

// ---------- FUNCIÓN SETUP ----------
void setup() {

  // Inicializa la comunicación serial para depuración
  Serial.begin(115200);

  // Configura el pin del LED como salida
  pinMode(ledPin, OUTPUT);

  // Configura el pin del pulsador como entrada con resistencia pull-up interna
  pinMode(buttonPin, INPUT_PULLUP);

  // Asegura que el LED inicie apagado
  digitalWrite(ledPin, LOW);

  // Mensaje en el monitor serial indicando inicio de conexión WiFi
  Serial.print("Conectando a WiFi");

  // Inicia la conexión WiFi con SSID y contraseña
  WiFi.begin(ssid, password);

  // Espera hasta que el ESP32 se conecte al WiFi
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);            // Espera 500 ms
    Serial.print(".");     // Muestra puntos mientras conecta
  }

  // Indica que la conexión WiFi fue exitosa
  Serial.println("\n WiFi conectado");

  // Muestra la IP asignada al ESP32
  Serial.println(WiFi.localIP());

  // Desactiva la verificación del certificado HTTPS (simplifica el uso de Telegram)
  client.setInsecure();

  // Envía un mensaje inicial al chat de Telegram indicando que el ESP32 está listo
  bot.sendMessage(
    CHAT_ID,
    "🤖 ESP32 listo\n"
    "Comandos:\n"
    "/on  Encender LED\n"
    "/off Apagar LED",
    ""
  );
}

// ---------- FUNCIÓN LOOP ----------
void loop() {

  // ---------- REVISAR MENSAJES DE TELEGRAM ----------

  // Verifica si ya pasó el intervalo de tiempo definido
  if (millis() - lastTime > intervalo) {

    // Obtiene los nuevos mensajes desde el último recibido
    int numMensajes = bot.getUpdates(bot.last_message_received + 1);

    // Mientras existan mensajes pendientes
    while (numMensajes) {

      // Procesa los mensajes recibidos
      manejarMensajes(numMensajes);

      // Vuelve a verificar si llegaron más mensajes
      numMensajes = bot.getUpdates(bot.last_message_received + 1);
    }

    // Actualiza el tiempo de la última revisión
    lastTime = millis();
  }

  // ---------- REVISAR PULSADOR ----------

  // Lee el estado actual del pulsador
  bool estadoBotonActual = digitalRead(buttonPin);

  // Detecta la transición de NO presionado (HIGH) a presionado (LOW)
  if (estadoBotonAnterior == HIGH && estadoBotonActual == LOW) {

    // Envía un mensaje a Telegram indicando que el botón fue presionado
    bot.sendMessage(CHAT_ID, "🔘 Pulsador presionado", "");

    // Retardo simple para evitar rebotes del pulsador
    delay(300);
  }

  // Guarda el estado actual del botón para la próxima lectura
  estadoBotonAnterior = estadoBotonActual;
}

// ---------- FUNCIÓN PARA MANEJAR MENSAJES DE TELEGRAM ----------
void manejarMensajes(int numMensajes) {

  // Recorre todos los mensajes recibidos
  for (int i = 0; i < numMensajes; i++) {

    // Obtiene el ID del chat que envió el mensaje
    String chat_id = bot.messages[i].chat_id;

    // Obtiene el texto del mensaje recibido
    String texto = bot.messages[i].text;

    // ---------- SEGURIDAD BÁSICA ----------

    // Si el mensaje no proviene del chat autorizado
    if (chat_id != CHAT_ID) {

      // Envía mensaje de acceso denegado
      bot.sendMessage(chat_id, "⛔ Acceso no autorizado", "");

      // Salta al siguiente mensaje
      continue;
    }

    // ---------- COMANDO /on ----------

    // Si el usuario escribe "/on"
    if (texto == "/on") {

      // Enciende el LED
      digitalWrite(ledPin, HIGH);

      // Envía confirmación por Telegram
      bot.sendMessage(chat_id, "💡 LED ENCENDIDO", "");
    }

    // ---------- COMANDO /off ----------

    // Si el usuario escribe "/off"
    if (texto == "/off") {

      // Apaga el LED
      digitalWrite(ledPin, LOW);

      // Envía confirmación por Telegram
      bot.sendMessage(chat_id, "🌑 LED APAGADO", "");
    }
  }
}