Skip to main content

Jarvis Offline Voice-Controlled Light

DIY · Electronics · AI
Jarvis · Offline Voice Control

Jarvis Offline
Voice-Controlled Light

A completely offline AI voice assistant that controls your light with voice commands, speaks back with prerecorded responses, and shows animated expressions on an OLED display. No Wi-Fi, no internet, no cloud.

Offline
No Internet
ESP32-S3
Controller
Voice
Activated
OLED
Animated Face
System Overview

How the System Works

Jarvis is a fully offline voice assistant powered by the XIAO ESP32-S3 Sense. Everything runs on-device — no Wi-Fi, no internet, no cloud services.

01

Wake Word Detection

The onboard microphone on the XIAO ESP32-S3 Sense listens for the wake word "Jarvis". Once detected, it starts recognizing the following voice command.

02

Command Recognition

Say "Jarvis, turn on the light" or "Jarvis, good night". The ESP32-S3 recognizes the command entirely on-device — no internet needed.

03

Light Control

The ESP32-S3 changes the signal on D0 to activate the relay and switch the bulb on or off. The relay stays off when the board starts up.

04

Voice & OLED Feedback

Prerecorded voice clips play through the MAX98357A amplifier and 2W speaker. The 1.3-inch OLED shows Jarvis's animated face and expressions.

๐Ÿง 

100% Offline: All voice recognition, wake word detection, and command processing happens directly on the ESP32-S3. No Wi-Fi connection, no internet, no cloud service is required at any point.

๐Ÿ‘†

Touch Sensor Control: The TTP223 touch sensor provides manual control. Tapping it changes the light's state without speaking a command. Jarvis still plays a voice response when the light is switched using the touch sensor.

Bill of Materials

Components Required

Everything you need to build this Jarvis offline voice-controlled light.

ComponentPurposeBuy
Seeed Studio XIAO ESP32-S3 SenseMain controller with microphoneBuy →
1.3" OLED DisplayJarvis face & expressionsBuy →
MAX98357A AmplifierAudio output to speakerBuy →
5V Relay ModuleSwitches AC bulbBuy →
TTP223 Touch SensorManual light controlBuy →
2-Watt SpeakerVoice responsesBuy →
5V Boost & Charging ModulePowers the buildBuy →
3.7V Li-Po BatteryPortable powerBuy →
Jumper WiresConnectionsBuy →
Breadboard Hookup WireClean wiringBuy →
2× Mini BreadboardComponent mountingBuy →
Wiring Reference

Pin Connections

Every connection for the Jarvis voice-controlled light, mapped to the XIAO ESP32-S3 Sense pinout.

ComponentComponent PinXIAO ESP32-S3 PinNotes
OLED DisplaySDAD4I²C Data
OLED DisplaySCLD5I²C Clock
MAX98357A AmplifierLRCD10Left/Right Clock
MAX98357A AmplifierBCLKD9Bit Clock
MAX98357A AmplifierDIND8Digital Audio Data
MAX98357A AmplifierGAINGNDSets 9dB gain
MAX98357A AmplifierSD3V3Shutdown — pull high to enable
5V Relay ModuleIND0HIGH = ON, LOW = OFF
TTP223 Touch SensorSignalD3Touch input
All ComponentsGNDGNDCommon ground rail
All ComponentsVCC3V3 / 5VPer component spec
⚡

Safety Warning — AC Mains: The relay's contacts switch the household bulb's AC power circuit. Those AC connections must be fully insulated and kept off the breadboard. Never touch AC wiring while powered.

๐Ÿ”Œ

Relay Power Note: In this working build, the relay module operates reliably when powered from 3.3V. Powering the module from 5V was the cause of the earlier switching problem — use 3.3V for the relay VCC.

Controls

Voice & Touch Commands

Control Jarvis with natural voice commands or use the touch sensor for manual control.

Voice CommandAction
"Turn on the light"Turns the light on
"Turn off the light"Turns the light off
"Good night"Turns the light off
"Toggle the light"Changes the light to the opposite state
๐ŸŽ™️

Wake Word

Say "Jarvis" to activate command listening.

๐Ÿ‘†

Touch Sensor

Manual toggle — Jarvis speaks confirmation.

๐Ÿ˜Š

OLED Face

Expressions change with actions; mouth animates while speaking.

๐Ÿ”Š

Voice Responses

3 wake clips play in sequence, then repeat from the first.

Schematics

Circuit Diagram

Complete pin connection diagram for the Jarvis Offline Voice-Controlled Light.

๐Ÿ“

Circuit Diagram: Click the image above to open the full-resolution 4K pin connection diagram.

Tutorial

Full Video Tutorial

Complete build walkthrough — component overview, wiring, firmware flashing, AC connections, and demonstration.

๐ŸŽฅ

Watch for detailed assembly techniques — including breadboard wiring, amplifier connections, AC relay connections, and web flasher firmware installation.

Firmware

Code

No Arduino IDE needed — use the web flasher to install the Jarvis firmware directly to your XIAO ESP32-S3 Sense.

⚡ WEB FLASHER · NO ARDUINO IDE
Install Jarvis Firmware
Connect your XIAO ESP32-S3 Sense to your computer via USB, then click the button below.
⚡ Flash Jarvis Firmware
Desktop Chrome or Microsoft Edge required
๐Ÿ“‹

Flashing Steps: 1) Connect the ESP32 to your laptop. 2) Click the button above to open the web flasher. 3) Select your ESP32 board. 4) Click Connect & Install Firmware. 5) Choose the COM port of your board. 6) Select Simple Circuits Jarvis Offline Light Firmware, enable Erase device before install, and click Install. Keep the board connected until flashing completes.

Build Guide

Assembly Steps

01

Prepare the Breadboards

Place two mini breadboards side by side to hold all the components. Arrange them so the OLED, amplifier, relay, and touch sensor have clean wire routing.

02

Mount the XIAO ESP32-S3 Sense

Insert the XIAO ESP32-S3 Sense with its expansion board into the breadboard. Ensure the microphone and camera area are not obstructed.

03

Connect the OLED Display

Wire the 1.3" OLED: SDA → D4, SCL → D5, VCC → 3V3, GND → GND. This displays Jarvis's animated face and expressions.

04

Wire the MAX98357A Amplifier

Connect LRC → D10, BCLK → D9, DIN → D8, GAIN → GND, SD → 3V3, VIN → 5V, GND → GND. Attach the 2W speaker to the amplifier's output terminals.

05

Connect the Relay Module

Wire the relay IN → D0, VCC → 3V3 (not 5V — see safety note), GND → GND. The relay's NO and COM terminals will switch the AC bulb circuit.

06

Add the Touch Sensor

Connect the TTP223 signal pin → D3, VCC → 3V3, GND → GND. This gives you manual light control without voice commands.

07

Wire the AC Bulb Circuit

Connect the plug's live wire to one side, then from the other side to the bulb holder. Route the bulb holder's second terminal and the plug's neutral wire to the relay's NO and COM terminals. Insulate all AC connections — keep them off the breadboard.

08

Power with the Boost Module

Connect the 3.7V Li-Po battery to the 5V boost & charging module. The module's output powers the breadboard rails. Verify all grounds are shared.

09

Flash the Firmware

Connect the ESP32 to your laptop. Use the web flasher above to install the Jarvis Offline Light Firmware. Keep the board connected until flashing completes.

10

Test & Enjoy

Power on and test: say "Jarvis, turn on the light" or tap the touch sensor. Jarvis will respond with voice and OLED animations. Fully offline — no Wi-Fi needed.

⚠️

AC Safety Note: When wiring the household bulb through the relay, always disconnect mains power before making connections. Insulate all AC terminals completely. Keep the AC circuit off the breadboard — only low-voltage DC should be on the breadboard. Never touch AC wiring while powered.

PCB Design

Design Your Own PCBs with Altium

For designing professional PCBs — like a custom board for this Jarvis voice-controlled light — I use Altium. It makes electronics design faster, cleaner, and production-ready.

Students get free access via Altium Student Lab — sign up with your university email for step-by-step PCB courses and industry certifications.

Simple Circuits

This project is brought to you by SimpleCircuits — DIY electronics for makers and builders. All components, code, and designs are shared for educational purposes. Affiliate links may be present. Firmware developed by SimpleCircuits.

Comments

Popular posts from this blog

Solar Tracking System

Dual-Axis Solar Tracking System | Arduino SimpleCircuits Arduino Solar DIY Renewable Energy Project Dual-Axis Solar Tracking System Build a high-performance solar tracker that follows the sun in real-time. Four LDR sensors, an Arduino UNO, and two servo motors — boosting energy capture by up to 40% versus fixed mounts. 40% More Efficient 4 LDR Sensors 2 Servo Axes <300mA Power Draw Finished Build System Overview How the System Works The tracker reads the sky through four LDR sensors placed around the panel, computes intensity deltas, and drives two SG90 servos in a real-time closed loop — keeping the panel perpendicular to sunlight from sunrise to sunset. ...

Arduino Code Car Parking System

 // Created by Simple Circuits  #include <Wire.h>  #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2);    #include <Servo.h>  Servo myservo; int IR1 = 2; int IR2 = 3; int Slot = 4;           //Total number of parking Slots int flag1 = 0; int flag2 = 0; void setup() {   Serial.begin(9600);      lcd.init(); //initialize the lcd     lcd.backlight(); //open the backlight     pinMode(IR1, INPUT); pinMode(IR2, INPUT);    myservo.attach(4); myservo.write(100); lcd.setCursor (0,0); lcd.print("     ARDUINO    "); lcd.setCursor (0,1); lcd.print(" PARKING SYSTEM "); delay (2000); lcd.clear();   } void loop(){  if(digitalRead (IR1) == LOW && flag1==0){ if(Slot>0){flag1=1; if(flag2==0){myservo.write(0); Slot = Slot-1;} }else{ lcd.setCursor (0,0); lcd.print("    SORRY :(    ");   lc...

Arduino Code

 //define Pins #include <Servo.h> Servo servo; int trigPin = 11; int echoPin = 12; // defines variables long duration; int distance; void setup()  {   servo.attach(13);   servo.write(180);  delay(2000);    // Sets the trigPin as an Output pinMode(trigPin, OUTPUT); // Sets the echoPin as an Input  pinMode(echoPin, INPUT); } void loop()  { // Clears the trigPin digitalWrite(trigPin, LOW); delayMicroseconds(2); // Sets the trigPin on HIGH state for 10 micro seconds digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // Reads the echoPin, returns the sound wave travel time in microseconds duration = pulseIn(echoPin, HIGH); // Calculating the distance distance= duration*0.034/2; // Prints the distance on the Serial Monitor Serial.print("Distance: "); Serial.println(distance); if ( distance <= 25   ) // Change Distance according to Ultrasonic Sensor Placement  { servo.write(180); delay(3000); ...