Errores típicos de la BIOS


En el terreno de los PC compatibles IBM, el sistema básico de entrada-salida o BIOS es un estándar de facto que define la interfaz de firmware para computadoras IBM PC compatibles.​ También es conocido como BIOS del sistema, ROM BIOS​ y BIOS de PC.  Siempre que encendamos un ordenador  PC compatible el modo que tiene la placa base de transmitir el estado del sistema es por medio de pitidos. Esto es especialmente importante cuando  hay algun problema hardware importante que impide al ordenador arrancar el sistema operativo. 

Ciertamente en  los manuales de las placas madre  suele  venir información al respecto de los códigos de pitidos , pero habitualmente sobre todo si el ordenador es algo antiguo no solemos tener esa  información a mano ( incluso el tipo o marca de la placa).

Veamos algunos de las frecuencias de pitidos mas frecuentes  usadas en la mayoría de las placas madre, su posible interpretación y como solucionar el problema.

no arranca mi pc

Tono continuo

ERROR: Error en el suministro eléctrico.
CAUSA: llega mal la corriente, o la caja de suministro esta fastidiada, no hay más que cambiarla.

SOLUCION: La solución sería testear todos los cables que van a la motherboard o placa base, revisar que la conexión AC de la fuente este bien, si esto no funciona la única solución sería reparar la fuente  de a alimentación o cambiarla por una nueva.

 El pitido es un tono largo.

CAUSA: Error de memoria RAM

SOLUCION: Lo que debemos de hacer es revisar que la memoria RAM este bien insertada en los slots de memoria. Si con esto el problema todavía sigue debemos de limpiar los slots de memoria y las memorias.

Si nuestra placa madre tiene uno o más slots y tenemos dos o mas memorias, probar arrancar el sistema con un modulo sólo: si el pc enciende con normalidad quiere decir que la memoria que quitamos es la que esta mal y deberíamos adquirir una nueva del mismo tipo. Podria suceder que en caso de tener solo dos memorias ambas este mal, por lo que lo ideal seria probar con otras nuevas o de otro equipo que funcione . Si tuviéramos otro equipo similar para descartar nuestras memorias dañadas podríamos probar estas sobre ese equipo para asegurarnos de que efectivamente estan mal.

Tonos de la BIOS AMI

AMIBIOS es una de las marcas originales de chip de sistema básico de entrada / salida (BIOS) y es probablemente el chip BIOS más comúnmente instalado en las computadoras personales de hoy. El nombre «AMIBIOS» es uno de los mensajes que pueden aparecer en la pantalla cuando enciende la computadora. AMIBIOS está fabricado por American Megatrends en Norcross, Georgia, que también produce una matriz redundante de sistemas de discos independientes, placas base y otros productos.

Sus pitidos son fáciles de identificar, su interfaz gráfico ha sido mejorado y los parámetros son más parecidos a los de AWARD. Estos son principales secuencias de pitidos:

  • Ningún pitido. Esto significa varias cosas. Primeramente nos aseguramos de que el altavoz esté bien conectado, luego revisamos el cable de alimentación. En caso de estar todo bien y la configuración de swichers y jumpers es correcta, en el caso de qeu la fuente este operativa ( podemos medir con un polimetros las principales tensiones de 5 y 12V DC, deberíamos cambiar la placa por defectuosa. Ese fallo se debe en la mayoría de las veces por fallos de corriente.
  • Un pitido. Este pitido indica que todo esta correcto. En caso de no dar imagen revisaremos la tarjeta grafica y la memoria RAM.
  • Dos o tres pitidos. Es un problema de memoria en tarjeta de video o en la RAM. Si vemos imagen nos aparecerá un mensaje de error. Si es así cambiaremos la memoria RAM de posición en los zócalos que ocupa ya que existe un problema de paridad, o en los primeros 64Kbytes de memoria. Si el problema persiste cambiaremos la placa.
  • Cuatro pitidos. Lo mismo que ocurre con dos y tres pitidos. En este caso además puede ser un error en el reloj del sistema
  • Cinco pitidos. La placa base no ha detectado memoria RAM, o no es compatible procedemos a cambiarla de posición o a cambiarla por otra. En muchos casos la marca de la RAM influye mucho.
  • Seis pitidos. La controladora de teclado estropeada, hay que cambiar de placa.
  • Siete pitidos. No se ha podido detectar el procesador o no funciona. Lo cambiamos o revisamos la configuración.
  • Ocho pitidos. No se ha detectado tarjeta de video o no funciona. Cambiamos de slot la tarjeta o revisamos al memoria de video.
  • Nueve pitidos. El código de la BIOS está corrupto, procedemos a flasearla si podemos, o a reemplazar el chip.
  • Diez pitidos. La BIOS no puede leer / escribir los datos almacenados en la CMOS. Intentamos borrar estos datos puenteando el jumper “Clean CMOS” o quitando la pila, e intentamos salvar los valores de nuevo en la CMOS. Si el problema persiste tendremos que cambiar la placa ya que este chip viene siempre soldado.
  • Once pitidos. La memoria caché del sistema (640Kbytes en la placa) esta dañada o no pude acceder a ella . Podemos reactivar la caché mediante la combinación Control + Alt + Shift + I

Tonos de la BIOS AWARD

Muchos usuarios desconocen el nombre de su placa base clónica. Esto se debe a que el nombre de la compañía no se menciona en ninguna parte del manual, o en la placa base. Si quieres actualizar tu BIOS realmente tienes que conocer el fabricante de la placa base, porque si flasheas la actualización de BIOS equivocada tu sistema podría dejar de arrancar.

Por suerte, las BIOS Award y AMI tienen un ID de BIOS único (= Número de BIOS) que identifica el fabricante y el chipset de la placa. Las BIOS Phoenix, en la mayoría de los casos, NO lo tienen.

El ID de la BIOS AMI o Award aparece en la parte inferior de la pantalla después del encendido, durante el recuento de memoria. La tecla PAUSE debería funcionar en ese momento, permitiéndote anotar el número de la BIOS, la fecha de la BIOS y la versión. Debes copiarlo exactamente.

Si poseemos esta BIOS ya nos vale agudizar el oído. En la mayoría de los pitidos se les acompaña un mensaje de error.

Tono ininterrumpido. Fallo en el suministro eléctrico. Revisamos las conexiones y la fuente de alimentación.

Tonos cortos constantes. Sobrecarga eléctrica, chips defectuosos, placa mal… A modo de resumen estos son los diferentes posibilidades:

  • 1 largo. Si aparece esto en la pantalla “RAM Refresh Failure”, significa que los diferentes componentes encargados del refresco de la memoria RAM fallan o no están presentes. Cambiar de banco la memoria y comprobar los jumpers de buses.
  • 1 largo y 1 corto. El código de la BIOS esta corrupto o defectuoso, probaremos a flasear o reemplazamos el chip de la BIOS sino podemos cambiamos de placa.
  • 1 largo y dos cortos. No da señal de imagen, se trata de que nuestra tarjeta de vídeo esta estropeada, probaremos a pincharla en otro slot o probaremos otra tarjeta gráfica.
  • 1 largo y 2 cortos. Si aparece por pantalla este mensaje: “No video card found”, este error solo es aplicable a placas base con tarjetas de vídeo integradas. Fallo en la tarjeta gráfica, probaremos a desabilitarla y pincharemos una nueva en cualquier slot libre o cambiaremos la placa madre.
  • 1 largo y 3 cortos. Si aparece este mensaje por pantalla “No monitor connected” Idem que el anterior.
  • 1 largo y varios cortos. Mensaje de error. “Video related failure”. Lo mismo que antes. Cada fabricante implanta un código de error según el tipo de tarjeta de video y los parámetros de cada BIOS
  • 2 largos y 1 corto. Fallo en la sincronización de las imágenes. Cargaremos por defecto los valores de la BIOS e intentaremos reiniciar. Si persiste nuestra tarjeta gráfica o placa madre están estropeadas.
  • 2 cortos. Vemos en la pantalla este error: “Parity Error”. Se trata de un error en la configuración de la BIOS al no soportar la paridad de memoria, la deshabilitamos en al BIOS.
  • 3 cortos. Vemos en la pantalla este error. Base 64 Kb “Memory Failure”, significa que la BIOS al intentar leer los primeros 64Kbytes de memoria RAM dieron error. Cambiamos la RAM instalada por otra.
  • 4 cortos. Mensaje de error; “Timer not operational”. El reloj de la propia placa base esta estropeado, no hay mas solución que cambiar la placa. No confundir con “CMOS cheksum error” una cosa es la pila y otra el contador o reloj de la placa base.
  • 5 cortos. Mensaje por pantalla “Processor Error” significa que la CPU ha generado un error porque el procesador o la memoria de vídeo están bloqueados.
  • 6 cortos. Mensaje de error: “8042 – Gate A20 Failure”, muy mítico este error. El controlador o procesador del teclado (8042) puede estar en mal estado. La BIOS no puede conmutar en modo protegido. Este error se suele dar cuando se conecta/desconecta el teclado con el ordenador encendido.
  • 7 cortos. Mensaje de error: “Processor Exception / Interrupt Error” Descripción. La CPU ha generado una interrupción excepcional o el modo virtual del procesador está activo. Procesador a punto de morirse.
  • 8 cortos. Mensaje de error: “Display Memory Read / Write error”. La tarjeta de video esta estropeada, procedemos a cambiarla.
  • 9 cortos. Mensaje de error: “ROM Checksum Error”; el valor del checksum (conteo de la memoria) de la RAM no coincide con el valor guardado en la BIOS. Reseteamos los valores de la CMOS y volvemos a configurar y si persiste tendremos la RAM o la BIOS estropeadas.
  • 10 cortos. Si vemos por pantalla esto; “CMOS Shutdown Register / Read/Write Error”: el registro de la CMOS RAM falla a la hora de la desconexión. En otras palabras que no puede escribir en la CMOS cuando salimos de configurar la BIOS.
  • 11cortos. Mensaje de error: “Cache Error / External Cache Bad” la memoria caché (L1o L2) del procesador están fallando. También se aplica a la cache de la placa.
  • 1 pitido largo + 8 pitidos cortos. Error en la verificación de tarjeta de video, esta está defectuosa, procedemos a cambiarla
  • 1 pitido largo + 3 pitidos cortos. Fallo en la comprobación de la RAM (Reemplazar la memoria) posiblemente porque los ciclos de reloj de esa memoria no se corresponden con los de la placa o no son compatibles (memoria de marca o no ).

Tonos de la BIOS Phoenix

Phoenix BIOS es una pequeña aplicación que se ejecuta al arrancar el ordenador. Contiene información importante sobre su hardware, tales como la ubicación del dispositivo de inicio, configuración de los puertos y de la información. La duración de los pitidos se mide de uno a cuatro. Esta BIOS es propiedad desde hace dos años de AWARD y estaba muy presente en equipos portátiles. Estos son las principales secuencias:

  • 1-2-2-3: error del código de verificación de la ROM. En otras palabras BIOS corrupta
  • 1-3-1-1: fallo en el testeo del refresco de la memoria DRAM. Revisamos que la memoria RAM este bien instalada y su configuración de BUS sea correcta.
  • 1-3-1-3: error en el test de del controlador del teclado. Procedemos a conectarlo bien, si persiste cambiaremos la placa ya que la controladora de teclado esta mal.
  • 1-3-4-1: error en una dirección de memoria. Evidentemente el testeo de la RAM ha fallado tendremos que reemplazarla o revisaremos si estaba bien instalada.
  • 1-3-4-3: error en una dirección del área de memoria baja. Idem
  • 2-1-2-3: error en la ROM del sistema .La BIOS esta corrupta o no se ha podido acceder a ella( leer / escribir).Tratamos de flasearla, o de sustituir el chip de la BIOS por otro idéntico.
  • 2-2-3-1: problemas con interrupciones de sistema. Entramos en la BIOS la procedemos a configurar correctamente.

Errores en pantalla

Otras veces no oímos ningún pitido y si nos parece en la pantalla alguno de estos errores. Estos errores no dependen del tipo de BIOS. Y son comunes a todos ellos:

  • *BIOS ROM checksun error – system halted: el código de control de la BIOS es incorrecto, lo que indica que puede estar corrupta. En caso de reiniciar y repetir el mensaje, tendremos que reemplazar al BIOS.
  • *CMOS battery failed: la pila de la placa base que alimenta la memoria CMOS ha dejado de suministrar corriente. Es necesario cambiar la pila inmediatamente.
  • *CMOS checksum error – Defaults loaded: el código de control de la CMOS no es correcto, por lo que se procede a cargar los parámetros de la BIOS por defecto. Este error se produce por que la información almacenada en la CMOS es incorrecta, lo que puede indicar que la pila está empezando a fallar.
  • *Display switch is set incorrectly: el tipo de pantalla especificada en la BIOS es incorrecta. Esto puede ocurrir si hemos seleccionado la existencia de un adaptador monocromo cuando tenemos uno en color, o al contrario. Bastará con poner bien este parámetro para solucionar el problema
  • *Floppy disk(s) Fail ( code 40/38/48 dependiendo de la antigüedad de la bios): Disquetera mal conectada, verificamos todos los cables de conexión.
  • *Hard disk install failure: la BIOS no es capaz de inicializar o encontrar el disco duro de manera correcta. Debemos estar seguros de que todos de que todos los discos se encuentren bien conectados y correctamente configurados.
  • *Keyboard error or no keyboard present: no es posible inicializar el teclado. Puede ser debido a que n se encuentre conectado, este estropeado e incluso porque mantenemos pulsada alguna tecla durante el proceso de arranque.
  • *Keyboard error is locked out – Unlock the key: este mensaje solo aparece en muy pocas BIOS, cuando alguna tecla ha quedado presionada.
  • *Memory Test Fail: el chequeo de memoria RAM ha fallado debido probablemente, a errores en los módulos de memoria. En caso de que nos aparezca este mensaje, hemos de tener mucha precaución con el equipo, se puede volver inestable y tener perdidas de datos. Solución, comprobar que banco de memoria esta mal, y ustituirlo inmediatamente.
  • *Override enabled – Defaults loaded: si el sistema no puede iniciarse con los valores almacenados en la CMOS, la BIOS puede optar por sustituir estos por otros genéricos diseñados para que todo funcione de manera estable, aunque sin obtener las mayores prestaciones.
  • *Primary master hard diskfail: el proceso de arranque ha detectado un fallo al iniciar el disco colocado como maestro en el controlador IDE primario. Para solucionar comprobaremos las conexiones del disco y la configuración de la BIOS.

Sistema de domótica Alexa con Arduino IoT y ESP8266


En este post vamos a ver un sistema de automatización del hogar Alexa con la nube Arduino IoT.  Esta vez usaremos, una vez más, el famoso módulo ESP8266 NodeMCU, el cual es algo más económico que el ESP32, y es mas que suficiente para esta aplicación que únicamente trata de operar 4 electrodomésticos, aunque pueden modificarse según sus necesidades, todo ello a través del panel de Arduino IoT Cloud, Alexa e interruptores mecánicos. 

esp8266 por arriba

La placa AZDelivery NodeMCU Amica V2 es la clásica placa de desarrollo ESP caracterizándose por su sencillo uso (se maneja fácilmente desde el IDE de Arduino) contando con un potente procesador ESP8266-12F de Espressif y una WLAN integrada, por lo que este controlador ofrece una sencilla introducción al desarrollo del IoT. Hay disponibles varias versiones de firmware del fabricante, que se pueden flashear cómodamente a través del puerto micro-USB.A diferencia de modelos anteriores, si usa el chipset CP2102 modificado (por ejemplo la azdelivery) se permite una mayor velocidad de transferencia. Además, este modulo cuenta con una relativa gran memoria y también con una reserva de potencia del procesador.

Este es el resumen de las características mas significativos:

Voltaje de alimentación (USB)5V DC
Voltaje de Entrada/Salida3.3V DC
Frecuencia de reloj80MHz / 160MHz
Instrucción RAM32kB
Datos RAM96kB
UART2
Pines digitales GPIO17 (configurable como PWM a 3,3V)
Pin analógico ADC1 (el rango de voltaje es: 0 – 1V)
Memoria flash externa4MB

Es interesante destacar que gracias a la interactividad con la nube de Amazon, también podemos operar este sistema controlando los relés desde la app de Alexa desde cualquier lugar del mundo siempre que haya conectividad a Internet (aun así, también se ha previsto para esos casos, operar esos electrodomésticos con interruptores manuales).

En efecto en este diseño , puede controlar los aparatos con pulsadores de modo que si no tiene WiFi o conexión a Internet, puede controlarlo manualmente usando este método. Estas son resumidamente algunas características de este circuito:

  • Puede encender/apagar interruptores y enchufes inteligentes usando su voz.
  • Aumente o disminuya el brillo de las luces de su habitación.
  • También puede cambiar el color de las luces.
  • Puede comprobar la temperatura ambiente mediante sensores.
  • Vea la actividad de movimiento de los sensores en su habitación.

El circuito

El circuito propuesto es bastante sencillo utilizando los pines GPIO digitales D1, D2, D5 y D6 para controlar el módulo de relé de 4 canales. El SD3, D3, D7 y RX están conectados con los botones para controlar este proyecto manualmente. Obviamente el modulo de relés se puede realizar por ejemplo con una placa de puntos siguiendo el esquema de mas bajo o bien comprarlo ya montado.( por unos 11€)

modulo de reles

Los relés los conectamos al GPiO4, GPIO 5, GPIO 14 y GPIO 12 . En caso de realizar nosotros mismos el circuito usaremos cuatro transistores típicos de pequeña señal BC547B con sus correspondientes resistencias de base y diodos de protección en las bobinas de los relés. Además el circuito de los relés se puede complementar con sendos leds indicadores de estado, así como de leds de presencia de energía con sus respectivas resistencias limitadoras de 100 ohmios.

La función INPUT_PULLUP en Arduino IDE se usa aquí en lugar de usar resistencias pull-up con cada interruptor. Desde el código fuente, cuando los pines de control de los módulos de relé reciben una señal BAJA, el relé se encenderá y para la señal ALTA se apagará.

Por último el suministro de alimentación para el circuito es de de 5V 2Amp bien mediante el propio conector micro-usb del ESP32 o bien mediante alimentación común.

Este es el simple diagrama de circuito:

Sistema de domótica 4 reles , esp8266 con Alexa

Este el listado de componentes:

  • ESP8266 NodeMCU
  • Relé de 5V (x4)
  • Transistores BC547 (x4)
  • Diodo 1N4007 PN (x4)
  • LED verde (x4)
  • LED rojo (x4)
  • Resistencia 1K (x4)
  • Resistencia de 100 ohmios (x8)
  • Pulsador (x4)
  • Fuente de 5 V CC

Esta es la imagen del circuito completo donde el circuito completo se han montado sobre una PCB a medida:

Foto del montaje

Configuración y software

En resumen estos son los pasos para construir el sistema de automatización del hogar Alexa

  • Al principio, cree una cuenta en Arduino IoT Cloud.
  • Configure todo para Dashboard.
  • Configure Arduino IoT Cloud para ESP8266.
  • Programa NodeMCU con Arduino IDE.
  • Conexión de la aplicación IoT Cloud y Alexa.

A continuación veamos en mas detalle los pasos anteriormente enunciados:

1-Regístrese para obtener una cuenta gratuita de Arduino IoT Cloud

Para este proyecto de domótica, tenemos que configurar una cuenta gratuita de Arduino IoT Cloud. Gracias a esta configuración conecta ESP8266 para controlar dispositivos con Alexa de modo que crearemos una nube Arduino IoT. Estos son los pasos a seguir:

  1.  Al principio, debe hacer clic en el siguiente enlace
    https://create.arduino.cc/iot/things .
  2. Haga clic en Crear uno.
  3. Ingrese todos los detalles requeridos que quiere. Luego haga clic en Siguiente.
  4. En la página siguiente, requiere correo electrónico, nombre de usuario y contraseña para su
    cuenta Arduino IoT Cloud. Después de completar todos estos, debe aceptar todos los términos y condiciones.
  5. Ahora haga clic en el botón Registrarse.
  6. Luego revise su correo electrónico. El correo electrónico de verificación será enviado a su cuenta. Haga clic en el enlace del correo electrónico y verifíquelo.
  7. Luego regrese a Arduino IoT Cloud y actualice la página.
  8. Por último, haga clic en IoT Cloud.

2-Agregar un dispositivo

Estos son los pasos a seguir para agregar un dispositivo a la nube de Arduino:

  1. Haga clic en seleccionar dispositivo.
  2. Luego haga clic en configurar un dispositivo de terceros.
  3. Ahora seleccione el dispositivo (ESP8266) y seleccione el modelo (NodeMCU 1.0).
  4. Allí puede ver todas las placas compatibles con Arduino Cloud en el menú.
  5. Haga clic en Continuar.
  6. Ingrese un nombre para su dispositivo y haga clic en Siguiente.
  7. Después de eso, obtiene la identificación y la clave secreta de su dispositivo. Puede guardar los detalles haciendo clic en descargar el PDF.
  8. Por último, haga clic en Continuar y se agregará su dispositivo.

3- Agregar variables en proyectos Arduino IoT Cloud

Para controlar sensores o relés, debe obtener datos de estos. Estos datos pueden ser capturados por variables. En este proyecto, necesitamos cuatro variables. Para un plan gratuito, puede agregar hasta cinco variables. Estos son los pasos a seguir:

  1. Haga clic en Agregar variables.
  2. Asigne un nombre a la variable y seleccione el tipo como interruptor compatible con Alexa.
  3. Haga clic en Permiso variable como Lectura y escritura y actualice la política como Al cambiar
  4. Haga clic en Agregar variables.
  5. En este proceso puede agregar todo tipo de Variables.

4-Creación de un panel web para Arduino IoT Cloud

Estos son los pasos a seguir para crear un panel web en la nube de Arduino :

  1. Al principio, haga clic en Tablero y luego en ‘Crear tablero‘.
  2. Haga clic en el botón editar. Luego haga clic en Agregar y allí puede seleccionar el widget de cambio.
  3. Luego asigne un nombre al interruptor y haga clic en el botón Vincular variable que está visible a la derecha.
  4. Como ya creamos una variable en el paso anterior, enlaze este con el widget.
  5. Ahora haga clic en Vincular variable. Luego haga clic en Listo.
  6. Ahora puede agregar todos los widgets necesarios. En este proyecto, necesitamos cuatro widgets Switch. Después de agregar esto, haga clic en Cosas para salir del tablero.

5-Instalar boceto para Arduino IoT Cloud

Después de agregar cualquier variable en esto, se guardará automáticamente en la pestaña de boceto. Si desea editar esto pulse en más donde puede abrir un editor completo. Desde allí puede descargar el boceto del programa para el microcontrolador. Para este proyecto, el boceto descargado se abre en Arduino IDE.

Instalación de bibliotecas

Estos son los pasos a seguir en caso desde que no tenga instaladas las bibliotecas del ESP8266:

  1. En este paso, vamos a instalar todas las bibliotecas y otras dependencias. En este proyecto, necesitamos una biblioteca para ESP8266.
  2. Al principio, ve al botón de boceto.
  3. Luego haga clic en incluir bibliotecas.
  4. Haga clic en administrar bibliotecas en Arduino IDE.
  5. Allí pedirá instalar todas las dependencias. Haga clic en Instalar todo.

Actualizar el boceto del proyecto

Para actualizar Sketch, abra el archivo .ino en el IDE de Arduino. Allí puede ingresar la ID de la cosa, la ID del dispositivo, las credenciales de WiFi y la clave secreta.

Puede copiar el Thing ID desde la esquina inferior derecha de esta ventana. Ahora pegue la ID de la cosa y la ID del dispositivo en el archivo thingProperties.h en el IDE de Arduino. Luego pegue las credenciales de WiFi y la clave secreta en el archivo arduino_secrets.h .
Ahora cargue el código para ESP8266 en Arduino IDE.

Cómo usar el control remoto en la nube de Arduino

Primero, instale ‘Arduino IoT Cloud Remote‘ desde Google Play Store. Luego inicie sesión en la aplicación con el correo electrónico que usa en la cuenta de Arduino IoT Cloud. Introduzca el nombre de la cosa para abrir el panel.

Programar ESP8266 NodeMCU

  1. Al principio, actualice las preferencias -> URL del administrador de tableros adicionales: https://dl.espressif.com/dl/package_esp32_index.json y http://arduino.esp8266.com/stable/package_esp8266com_index.json
  2. Luego instale la placa ESP8266 desde el administrador de la placa.
  3. Luego instale todas las bibliotecas y dependencias requeridas.

Código para NodeMCU

Cuando cargue el código a ESP8266, puede conectar la aplicación Alexa con él. Los pasos para conectar la cuenta de Arduino IoT Cloud con la aplicación Amazon Alexa los veremos mas abajo.

#include "thingProperties.h"
 
// define the GPIO connected pins with relays and switches
#define RelayPin1 5  //D1
#define RelayPin2 4  //D2
#define RelayPin3 14 //D5
#define RelayPin4 12 //D6
 
#define SwitchPin1 10  //SD3
#define SwitchPin2 0   //D3 
#define SwitchPin3 13  //D7
#define SwitchPin4 3   //RX
 
#define wifiLed   16   //D0
 
int toggleState_1 = 0; //Define integer to remember the toggle state for relay 1
int toggleState_2 = 0; //Define integer to remember the toggle state for relay 2
int toggleState_3 = 0; //Define integer to remember the toggle state for relay 3
int toggleState_4 = 0; //Define integer to remember the toggle state for relay 4
 
void relayOnOff(int relay) {
 
  switch (relay) {
    case 1:
      if (toggleState_1 == 0) {
        digitalWrite(RelayPin1, LOW); // Turn on relay 1
        toggleState_1 = 1;
        Serial.println("Device1 ON");
      }
      else {
        digitalWrite(RelayPin1, HIGH); // Turn off relay 1
        toggleState_1 = 0;
        Serial.println("Device1 OFF");
      }
      delay(100);
      break;
    case 2:
      if (toggleState_2 == 0) {
        digitalWrite(RelayPin2, LOW); // Turn on relay 2
        toggleState_2 = 1;
        Serial.println("Device2 ON");
      }
      else {
        digitalWrite(RelayPin2, HIGH); // Turn off relay 2
        toggleState_2 = 0;
        Serial.println("Device2 OFF");
      }
      delay(100);
      break;
    case 3:
      if (toggleState_3 == 0) {
        digitalWrite(RelayPin3, LOW); // Turn on relay 3
        toggleState_3 = 1;
        Serial.println("Device3 ON");
      } else {
        digitalWrite(RelayPin3, HIGH); // Turn off relay 3
        toggleState_3 = 0;
        Serial.println("Device3 OFF");
      }
      delay(100);
      break;
    case 4:
      if (toggleState_4 == 0) {
        digitalWrite(RelayPin4, LOW); // Turn on relay 4
        toggleState_4 = 1;
        Serial.println("Device4 ON");
      }
      else {
        digitalWrite(RelayPin4, HIGH); // Turn off relay 4
        toggleState_4 = 0;
        Serial.println("Device4 OFF");
      }
      delay(100);
      break;
    default : break;
  }
}
 
void manual_control() {
  //Manual Switch Control
  if (digitalRead(SwitchPin1) == LOW) {
    delay(200);
    relayOnOff(1);
  }
  else if (digitalRead(SwitchPin2) == LOW) {
    delay(200);
    relayOnOff(2);
  }
  else if (digitalRead(SwitchPin3) == LOW) {
    delay(200);
    relayOnOff(3);
  }
  else if (digitalRead(SwitchPin4) == LOW) {
    delay(200);
    relayOnOff(4);
  }
}
 
void setup() {
  // Initialize serial and wait for port to open:
  Serial.begin(9600);
 
  delay(1500);
 
  // Define thingProperties.h
  initProperties();
 
  // Connect to Arduino IoT Cloud
  
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);
 
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();
 
  pinMode(RelayPin1, OUTPUT);
  pinMode(RelayPin2, OUTPUT);
  pinMode(RelayPin3, OUTPUT);
  pinMode(RelayPin4, OUTPUT);
 
  pinMode(wifiLed, OUTPUT);
 
  pinMode(SwitchPin1, INPUT_PULLUP);
  pinMode(SwitchPin2, INPUT_PULLUP);
  pinMode(SwitchPin3, INPUT_PULLUP);
  pinMode(SwitchPin4, INPUT_PULLUP);
 
  //During Starting all Relays should TURN OFF
  digitalWrite(RelayPin1, HIGH);
  digitalWrite(RelayPin2, HIGH);
  digitalWrite(RelayPin3, HIGH);
  digitalWrite(RelayPin4, HIGH);
 
  digitalWrite(wifiLed, HIGH);  //Turn OFF WiFi LED
}
 
void loop() {
  ArduinoCloud.update();
  
  manual_control(); //Control relays manually
 
  if (WiFi.status() != WL_CONNECTED)
  {
    digitalWrite(wifiLed, HIGH); //Turn OFF WiFi LED
  }
  else{
    digitalWrite(wifiLed, LOW); //Turn ON WiFi LED
  }
}
 
void onSwitch1Change() {
  if (switch1 == 1)
  {
    digitalWrite(RelayPin1, LOW);
    Serial.println("Device1 ON");
    toggleState_1 = 1;
  }
  else
  {
    digitalWrite(RelayPin1, HIGH);
    Serial.println("Device1 OFF");
    toggleState_1 = 0;
  }
}
 
void onSwitch2Change() {
  if (switch2 == 1)
  {
    digitalWrite(RelayPin2, LOW);
    Serial.println("Device2 ON");
    toggleState_2 = 1;
  }
  else
  {
    digitalWrite(RelayPin2, HIGH);
    Serial.println("Device2 OFF");
    toggleState_2 = 0;
  }
}
 
void onSwitch3Change() {
  if (switch3 == 1)
  {
    digitalWrite(RelayPin3, LOW);
    Serial.println("Device2 ON");
    toggleState_3 = 1;
  }
  else
  {
    digitalWrite(RelayPin3, HIGH);
    Serial.println("Device3 OFF");
    toggleState_3 = 0;
  }
}
 
void onSwitch4Change() {
  if (switch4 == 1)
  {
    digitalWrite(RelayPin4, LOW);
    Serial.println("Device4 ON");
    toggleState_4 = 1;
  }
  else
  {
    digitalWrite(RelayPin4, HIGH);
    Serial.println("Device4 OFF");
    toggleState_4 = 0;
  }
}

Este código de Arduino está diseñado para controlar cuatro relés y cuatro interruptores manuales, además de conectarse a la nube de Arduino IoT. Aquí tienes una explicación detallada de lo que hace cada parte del código:

  1. Definición de Pines:
    • Se definen los pines GPIO a los que están conectados los relés y los interruptores manuales.
    • También se define un pin para un LED que indica el estado de la conexión WiFi.
  2. Variables de Estado:
    • Se crean variables para recordar el estado de cada relé (encendido o apagado).
  3. Función relayOnOff:
    • Esta función controla el encendido y apagado de los relés. Dependiendo del estado actual del relé, lo cambia y actualiza la variable de estado correspondiente.
  4. Función manual_control:
    • Esta función permite el control manual de los relés mediante los interruptores. Si se detecta que un interruptor está presionado, se llama a la función relayOnOff para el relé correspondiente.
  5. Función setup:
    • Inicializa la comunicación serial y espera a que el puerto se abra.
    • Inicializa las propiedades de la nube y conecta el dispositivo a la nube de Arduino IoT.
    • Configura los pines de los relés y el LED de WiFi como salidas, y los pines de los interruptores como entradas con resistencia pull-up.
    • Apaga todos los relés y el LED de WiFi al inicio.
  6. Función loop:
    • Actualiza la conexión con la nube de Arduino.
    • Llama a la función manual_control para permitir el control manual de los relés.
    • Controla el estado del LED de WiFi dependiendo de la conexión.
  7. Funciones de Cambio de Estado (onSwitch1Change, onSwitch2Change, etc.):
    • Estas funciones se llaman cuando hay un cambio en el estado de los interruptores en la nube. Actualizan el estado de los relés y las variables de estado correspondientes.

Este código pues permite controlar los relés tanto manualmente mediante interruptores físicos como remotamente a través de la nube de Arduino IoT.

6-Conectar la aplicación Amazon Alexa con ESP8266

Para conectar nuestro circuito con la aplicación Alexa, en la app móvil Amazon Alexa realizaremos los siguientes pasos:

  1. Al principio, haga clic en Más en la aplicación Amazon Alexa.
  2. Luego seleccione Habilidades y juegos.
  3. En la opción de búsqueda, puede encontrar Arduino.
  4. Haga clic en Habilitar para usar.

Ahora necesitemos agregar un dispositivo en la aplicación Alexa

  1. En la aplicación Alexa, inicie sesión con el correo electrónico y la contraseña que utilizó para iniciar sesión en la cuenta Arduino IoT Cloud.
  2. Luego ciérralo.
  3. Haga clic en Descubrir dispositivos. El nombre de su dispositivo es visible allí en unos segundos.
  4. Luego haga clic en su dispositivo. A continuación, seleccione todos los interruptores.
  5. Si ESP8266 está conectado con su WiFi, puede controlar todos los dispositivos desde la aplicación Alexa.
  6. Ahora solo tiene que decir «Alexa, enciende la luz». La luz esta encendida. Con este comando de voz, puede controlar los electrodomésticos con su voz.

Fuente https://circuitdiagrams.in/alexa-home-automation-system/