Introduction to IoT
Unit 3: Serial Communication & Bluetooth
From UART handshakes to wireless Bluetooth links — master the protocols that let your IoT devices talk to the world.
⏱️ Time to Complete: 8–10 hours | 💰 Earning Potential: ₹4,000–₹12,000/project | 📝 30 MCQs (Bloom's Mapped)
💼 Jobs this unlocks: Embedded Systems Intern (₹3–5 LPA) | IoT Developer (₹4–8 LPA) | Automation Engineer (₹5–10 LPA)
Opening Hook — When Machines Learn to Talk
🏭 How India's Smart Factories Run on Serial Protocols
Walk into Maruti Suzuki's Gurugram plant and you'll see hundreds of robotic arms welding, painting, and assembling cars — all coordinated by serial communication. Every sensor on the assembly line sends temperature, pressure, and vibration data over UART, SPI, and I2C buses to central PLCs (Programmable Logic Controllers) at speeds up to 10 Mbps. A single car's production involves over 4,000 serial data exchanges between microcontrollers.
Meanwhile, in Bengaluru, a startup called Stellapps is revolutionising India's dairy industry. Their IoT devices clipped onto cows use Bluetooth (HC-05/BLE) to transmit health vitals — body temperature, milk yield, activity patterns — to a farmer's smartphone. Over 7 million litres of milk are tracked daily across 30,000+ farms using these serial and wireless communication protocols.
What if YOU built this? What if you could make an Arduino read a temperature sensor over I2C, display values on your Serial Monitor, and send alerts to your phone over Bluetooth — all with code you wrote yourself? That's exactly what this chapter teaches you.
Learning Outcomes — Bloom's Taxonomy Mapped
| Bloom's Level | Learning Outcome |
|---|---|
| 🔵 Remember | Define UART, SPI, and I2C protocols and list their key signal lines (TX/RX, MOSI/MISO/SCK/SS, SDA/SCL) |
| 🔵 Understand | Explain the difference between serial and parallel communication, and why serial is preferred in embedded systems |
| 🟢 Apply | Write Arduino code using Serial.begin(), Serial.print(), Serial.read() to send/receive data via the Serial Monitor |
| 🟢 Analyze | Compare SPI, I2C, and UART across speed, wiring complexity, device count, and use cases, selecting the right protocol for a given scenario |
| 🟠 Evaluate | Assess the HC-05 Bluetooth module's capabilities and limitations for IoT projects, including range, pairing security, and data rates |
| 🟠 Create | Build a complete Bluetooth-controlled LED project: wire HC-05 to Arduino, write Arduino code, and control from a smartphone app |
Concept Explanation — Serial Communication & Bluetooth from Scratch
1. Serial Communication Basics
Imagine you want to send a letter to a friend. You have two choices: (1) hire 8 messengers and give each one a single letter of an 8-letter word — they all run simultaneously (parallel), or (2) hire 1 messenger and give him all 8 letters one after another (serial). The parallel approach is faster but expensive (8 messengers = 8 wires). The serial approach is slower but cheaper (1 messenger = 1-2 wires). In embedded systems, serial communication wins because fewer wires = simpler circuits, lower cost, and less noise.
📡 Serial vs Parallel Communication
| Feature | Serial | Parallel |
|---|---|---|
| Data Transfer | One bit at a time over 1-2 wires | Multiple bits simultaneously over 8+ wires |
| Wiring | Simple — fewer wires | Complex — many wires |
| Distance | Long distance possible (km) | Short distance only (cm to m) |
| Speed | Slower per cycle, but modern serial is fast | Faster per cycle |
| Cost | Low | High |
| Example | USB, UART, SPI, I2C | Old printer ports (LPT), internal CPU buses |
UART — Universal Asynchronous Receiver/Transmitter
UART is the simplest and most common serial protocol. It uses just two wires:
- TX (Transmit): Sends data out
- RX (Receive): Receives data in
The key rule: TX of Device A connects to RX of Device B, and vice versa. Think of it like two people talking — my mouth (TX) connects to your ear (RX), and your mouth (TX) connects to my ear (RX).
"Asynchronous" means there's no shared clock wire. Both devices must agree on the same speed (baud rate) beforehand — like two people agreeing to speak at the same pace.
2. Starting the Serial Port — Serial.begin()
Before two devices can talk over UART, they must agree on a baud rate — the number of bits transmitted per second. Think of it like tuning a radio to the same frequency. If one device transmits at 9600 baud and the other listens at 115200 baud, you'll get garbage data (like listening to FM when the broadcast is on AM).
⚙️ Serial.begin(baudRate)
In Arduino, you initialise the serial port in the setup() function:
Arduino void setup() { Serial.begin(9600); // Start serial at 9600 bits per second }
What happens inside:
Serial.begin(9600) tells the Arduino: "Configure UART hardware to send/receive at 9600 bits per second. Enable the TX (pin 1) and RX (pin 0) pins."
Common Baud Rates:
| Baud Rate | Bits/Second | Use Case |
|---|---|---|
9600 | 9,600 | Default for most tutorials, GPS modules, HC-05 Bluetooth |
19200 | 19,200 | Some sensor modules |
38400 | 38,400 | HC-05 AT command mode |
57600 | 57,600 | Faster debugging |
115200 | 115,200 | ESP32/ESP8266 default, fast data logging |
⸮⸮⸮⸮ (garbage characters), check that the baud rate in your code matches the baud rate dropdown in the Serial Monitor (bottom-right of Arduino IDE). Both MUST be identical — e.g., both set to 9600.
3. Sending Data — Serial.print() & Serial.println()
Once the serial port is open, you can send data from Arduino to your computer. Think of Serial.print() as the Arduino "speaking" to you through the USB cable.
📤 print() vs println()
Arduino void setup() { Serial.begin(9600); // print() — stays on same line Serial.print("Temperature: "); Serial.print(28.5); Serial.print(" °C"); // Output: Temperature: 28.5 °C Serial.println(); // moves to next line // println() — automatically adds newline (\n) Serial.println("Humidity: 65%"); // Output: Humidity: 65% // (cursor moves to next line) } void loop() { int sensorVal = analogRead(A0); Serial.print("Sensor: "); Serial.println(sensorVal); // prints value + newline delay(1000); // wait 1 second }
Formatting Numeric Data:
Arduino Serial.println(78, BIN); // Prints: 1001110 (binary) Serial.println(78, OCT); // Prints: 116 (octal) Serial.println(78, HEX); // Prints: 4E (hexadecimal) Serial.println(3.14159, 2); // Prints: 3.14 (2 decimal places)
Now YOU try it → Open Arduino IDE, type the code above, upload it, then open Serial Monitor (Ctrl+Shift+M). Watch the numbers scroll. Try changing A0 to A1 or adjust the delay.
4. Debugging with the Serial Monitor
The Serial Monitor is your window into the Arduino's brain. It's the most important debugging tool you'll ever use in embedded development. When your LED doesn't blink or your motor doesn't spin, the Serial Monitor tells you why.
Reading Sensor Values for Debugging
Arduino const int LDR_PIN = A0; const int LED_PIN = 13; void setup() { Serial.begin(9600); pinMode(LED_PIN, OUTPUT); Serial.println("=== LDR Debug Monitor ==="); Serial.println("Reading light levels..."); } void loop() { int lightVal = analogRead(LDR_PIN); // Debug: print raw value Serial.print("Light: "); Serial.print(lightVal); if (lightVal < 300) { digitalWrite(LED_PIN, HIGH); Serial.println(" → DARK (LED ON)"); } else { digitalWrite(LED_PIN, LOW); Serial.println(" → BRIGHT (LED OFF)"); } delay(500); }
Serial.println("Got here!"); at different points in your code. If you see "Got here!" in the monitor, you know execution reached that line. If not, the bug is before that point. This "breadcrumb" technique is used by professional embedded engineers at ISRO, Bosch, and Tata Elxsi.
5. Serial Data Reception — Reading Data from PC
Communication is two-way. You can also send data from your computer to the Arduino using the Serial Monitor's input box at the top.
📥 Serial.available() & Serial.read()
Serial.available() — Returns the number of bytes waiting in the receive buffer. Like checking your mailbox: "Is there any mail?"
Serial.read() — Reads one byte from the buffer. Like picking up one letter from the mailbox.
Arduino void setup() { Serial.begin(9600); pinMode(13, OUTPUT); Serial.println("Send '1' to turn LED ON, '0' to turn OFF"); } void loop() { if (Serial.available() > 0) { // Is there data waiting? char received = Serial.read(); // Read one character Serial.print("Received: "); Serial.println(received); if (received == '1') { digitalWrite(13, HIGH); Serial.println("LED is ON ✅"); } else if (received == '0') { digitalWrite(13, LOW); Serial.println("LED is OFF ❌"); } } }
Serial.available() check. If you call Serial.read() without first checking Serial.available() > 0, you'll read -1 (no data) and your code will behave unpredictably. Always guard your read with an availability check.
6. SPI Protocol — Serial Peripheral Interface
SPI is a synchronous serial protocol — meaning it uses a clock wire to synchronise data. It's like a drummer keeping the beat so all band members play in sync. SPI is fast and used for high-speed devices like SD cards, TFT displays, and NRF24L01 wireless modules.
🔌 SPI Signal Lines (4 Wires)
| Wire | Full Name | Direction | Purpose |
|---|---|---|---|
MOSI | Master Out Slave In | Master → Slave | Master sends data to slave |
MISO | Master In Slave Out | Slave → Master | Slave sends data back to master |
SCK | Serial Clock | Master → Slave | Clock signal generated by master |
SS/CS | Slave Select / Chip Select | Master → Slave | Selects which slave to talk to (active LOW) |
Clock Polarity (CPOL) & Phase (CPHA):
SPI has 4 modes based on when data is sampled relative to the clock edge:
| Mode | CPOL | CPHA | Description |
|---|---|---|---|
| Mode 0 | 0 | 0 | Clock idle LOW, sample on rising edge (most common) |
| Mode 1 | 0 | 1 | Clock idle LOW, sample on falling edge |
| Mode 2 | 1 | 0 | Clock idle HIGH, sample on falling edge |
| Mode 3 | 1 | 1 | Clock idle HIGH, sample on rising edge |
When to Use SPI:
- High-speed data transfer needed (up to 10+ Mbps)
- Connecting SD cards, TFT displays, DACs, ADCs
- Short distance communication (within the same PCB)
- Full-duplex needed (send and receive simultaneously)
7. I2C Protocol — Inter-Integrated Circuit
I2C (pronounced "I-squared-C") is a 2-wire synchronous protocol designed by Philips (now NXP). If SPI is a private phone call (point-to-point), I2C is a WhatsApp group — multiple devices share the same 2 wires, and each device has a unique address.
🔗 I2C Signal Lines (2 Wires + GND)
| Wire | Full Name | Purpose |
|---|---|---|
SDA | Serial Data | Carries data (bidirectional) |
SCL | Serial Clock | Clock signal (controlled by master) |
I2C Addressing:
Each I2C device has a 7-bit address (0x00 to 0x7F = 128 possible devices). The 8th bit indicates read (1) or write (0). Common addresses:
0x3C— SSD1306 OLED display0x76or0x77— BME280 temperature/humidity/pressure sensor0x68— DS3231 RTC (Real-Time Clock) / MPU6050 accelerometer0x27— LCD with I2C backpack
Pull-Up Resistors — Why They're Needed:
I2C uses "open-drain" outputs — the wires are either pulled LOW or left floating. Pull-up resistors (typically 4.7kΩ) connected to VCC ensure the wires default to HIGH when no device is pulling them LOW. Without pull-ups, I2C won't work — you'll get no response from any device.
I2C vs SPI — Quick Comparison
| Feature | SPI | I2C |
|---|---|---|
| Wires | 4 + 1 per extra slave (SS) | 2 (shared by all devices) |
| Speed | Up to 10+ Mbps | 100 kbps (standard), 400 kbps (fast), 3.4 Mbps (high-speed) |
| Devices | Limited by SS pins | Up to 127 devices on same bus |
| Duplex | Full-duplex | Half-duplex |
| Complexity | Simple protocol, more wires | Complex protocol, fewer wires |
| Use Case | SD cards, displays, fast sensors | Sensors, RTCs, EEPROMs, multi-device |
8. SPI vs I2C vs UART — The Ultimate Comparison
Choosing the right protocol is a critical design decision. Here's the comprehensive comparison:
| Parameter | UART | SPI | I2C |
|---|---|---|---|
| Wires Required | 2 (TX, RX) | 4 + 1/slave (MOSI, MISO, SCK, SS) | 2 (SDA, SCL) |
| Synchronisation | Asynchronous (no clock) | Synchronous (clock line) | Synchronous (clock line) |
| Speed | Up to 115200 bps (typical) | Up to 10+ Mbps | 100 kbps / 400 kbps / 3.4 Mbps |
| Max Devices | 1-to-1 (point-to-point) | Multiple (1 SS per slave) | Up to 127 on same bus |
| Duplex | Full-duplex | Full-duplex | Half-duplex |
| Best For | PC ↔ MCU, GPS, Bluetooth modules | SD cards, TFT displays, fast ADCs | Sensors, RTCs, OLEDs, multi-device |
• Talking to a PC or Bluetooth module? → Use UART
• Need blazing speed for a display or SD card? → Use SPI
• Connecting multiple sensors with minimal wiring? → Use I2C
• Not sure? → Check the sensor/module datasheet — it tells you which protocol it supports.
9. Bluetooth HC-05 Module
The HC-05 is a Bluetooth 2.0 module that adds wireless capability to any Arduino project for under ₹200. It communicates with Arduino over UART (TX/RX) and with your smartphone over Bluetooth. Think of it as a "wireless UART bridge" — whatever you send via Serial.print() can be received on a phone app, and vice versa.
📶 HC-05 Specifications
| Specification | Value |
|---|---|
| Bluetooth Version | 2.0 + EDR (Enhanced Data Rate) |
| Operating Voltage | 3.3V–5V (breakout has regulator) |
| Communication | UART (Serial) |
| Default Baud Rate | 9600 bps (data mode), 38400 bps (AT mode) |
| Range | ~10 metres (line of sight) |
| Default Name | "HC-05" |
| Default PIN | 1234 |
| Modes | Master, Slave, or Master-Slave (configurable) |
AT Command Mode — Configuring the HC-05
AT commands let you configure the HC-05's name, baud rate, role, and more. To enter AT mode:
- Power OFF the HC-05
- Hold the button on the HC-05 module (the small push-button)
- Power ON while holding the button
- The LED will blink slowly (~2 seconds) instead of fast — you're now in AT command mode
- Set Serial Monitor to
38400baud and"Both NL & CR"line ending
💻 Key AT Commands
| Command | Function | Example | Response |
|---|---|---|---|
AT | Test connection | AT | OK |
AT+NAME | Set/Get device name | AT+NAME=MyArduinoBT | OK |
AT+BAUD | Set baud rate | AT+UART=9600,0,0 | OK |
AT+ROLE | Set role (0=Slave, 1=Master) | AT+ROLE=0 | OK |
AT+PSWD | Set pairing PIN | AT+PSWD="5678" | OK |
AT+ADDR | Get module MAC address | AT+ADDR? | +ADDR:98d3:31:b1234 |
AT+VERSION | Get firmware version | AT+VERSION? | +VERSION:3.0-20170601 |
10. Interfacing HC-05 with Arduino
Circuit Diagram (ASCII)
SoftwareSerial — Using Extra Serial Ports
Arduino Uno has only one hardware serial port (pins 0 & 1), and that's used by USB. To talk to HC-05 simultaneously, we use the SoftwareSerial library to create a "virtual" serial port on any two digital pins.
Arduino // HC-05 Bluetooth Interface — Complete Code #include <SoftwareSerial.h> // Create software serial: RX=11 (connects to HC-05 TX) // TX=10 (connects to HC-05 RX via divider) SoftwareSerial BTSerial(11, 10); // RX, TX void setup() { Serial.begin(9600); // USB Serial Monitor BTSerial.begin(9600); // HC-05 default baud rate Serial.println("Bluetooth Ready! Pair with phone..."); } void loop() { // If data comes from Bluetooth (phone), send to Serial Monitor if (BTSerial.available()) { char c = BTSerial.read(); Serial.print("From Phone: "); Serial.println(c); } // If data comes from Serial Monitor (PC), send to Bluetooth if (Serial.available()) { char c = Serial.read(); BTSerial.write(c); } }
11. Bluetooth Communication — Control LED from Phone
Now let's build a complete project: control an LED from your smartphone via Bluetooth. This is the foundational project for home automation, robotics, and IoT — and it costs under ₹400 in components.
Components Needed
| Component | Quantity | Approx. Price (India) |
|---|---|---|
| Arduino Uno | 1 | ₹450–₹600 |
| HC-05 Bluetooth Module | 1 | ₹150–₹250 |
| LED (any colour) | 1 | ₹2 |
| 220Ω Resistor | 1 | ₹1 |
| 1kΩ & 2kΩ Resistors (voltage divider) | 1 each | ₹1 each |
| Breadboard + Jumper Wires | 1 set | ₹80–₹150 |
Circuit Diagram
Full Arduino Code — Bluetooth LED Controller
Arduino /* * Bluetooth LED Controller * Control LED from smartphone via HC-05 * Send '1' from phone to turn ON, '0' to turn OFF * Send 'S' to get LED status */ #include <SoftwareSerial.h> SoftwareSerial BTSerial(11, 10); // RX, TX const int LED_PIN = 7; bool ledState = false; void setup() { Serial.begin(9600); BTSerial.begin(9600); pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, LOW); Serial.println("=== Bluetooth LED Controller ==="); Serial.println("Commands: 1=ON, 0=OFF, S=Status"); BTSerial.println("Connected! Send 1/0/S"); } void loop() { if (BTSerial.available()) { char command = BTSerial.read(); Serial.print("BT Received: "); Serial.println(command); switch (command) { case '1': digitalWrite(LED_PIN, HIGH); ledState = true; BTSerial.println("LED ON ✅"); Serial.println("LED turned ON"); break; case '0': digitalWrite(LED_PIN, LOW); ledState = false; BTSerial.println("LED OFF ❌"); Serial.println("LED turned OFF"); break; case 'S': case 's': if (ledState) { BTSerial.println("Status: LED is ON"); } else { BTSerial.println("Status: LED is OFF"); } break; default: BTSerial.println("Unknown cmd. Use 1/0/S"); break; } } // Also allow PC control via Serial Monitor if (Serial.available()) { char c = Serial.read(); BTSerial.write(c); } }
Step-by-Step Testing Workflow
- Upload the code to Arduino
- Open Serial Monitor at 9600 baud — confirm "Bluetooth Ready" message
- On your Android phone: Settings → Bluetooth → Pair "HC-05" (PIN: 1234)
- Open "Serial Bluetooth Terminal" app → Devices → Select HC-05 → Connect
- Type
1and send → LED turns ON, app shows "LED ON ✅" - Type
0and send → LED turns OFF - Type
S→ Get current status
Learn by Doing — 3-Tier Lab Structure
🟢 Tier 1 — GUIDED: Serial Monitor Data Logger
Objective:
Read a potentiometer value via analogRead and display it on the Serial Monitor with formatted output.
Circuit:
Connect a 10kΩ potentiometer: one outer pin to 5V, other outer pin to GND, middle wiper pin to A0.
Code:
Arduino void setup() { Serial.begin(9600); Serial.println("=== Potentiometer Data Logger ==="); Serial.println("Time(s)\tRaw\tVoltage"); } unsigned long startTime; void loop() { int raw = analogRead(A0); float voltage = raw * (5.0 / 1023.0); unsigned long elapsed = millis() / 1000; Serial.print(elapsed); Serial.print("\t"); Serial.print(raw); Serial.print("\t"); Serial.println(voltage, 2); delay(1000); }
Expected Output:
Steps:
- Wire the potentiometer as described
- Upload the code and open Serial Monitor (9600 baud)
- Turn the potentiometer knob slowly and watch values change
- Copy 20 readings into a Google Sheet and create a line chart — your first data log!
🟡 Tier 2 — SEMI-GUIDED: I2C Scanner + OLED Display
Your Mission:
Build an I2C scanner that discovers all devices on the bus, then display sensor data on an SSD1306 OLED.
Hints:
- I2C Scanner Code: Use the
Wirelibrary. Loop through addresses 0x01 to 0x7F. UseWire.beginTransmission(addr)followed byWire.endTransmission(). If return value is 0, device exists at that address. - OLED Library: Install
Adafruit SSD1306andAdafruit GFXfrom Arduino Library Manager - Wiring: OLED SDA → Arduino A4, SCL → Arduino A5, VCC → 5V, GND → GND
- Display text: Use
display.println("Hello IoT!");after initialising withdisplay.begin(SSD1306_SWITCHCAPVCC, 0x3C);
🔴 Tier 3 — OPEN CHALLENGE: Bluetooth Home Automation Prototype
The Brief:
Build a prototype home automation system controlled via Bluetooth from your smartphone. Requirements:
- 4 Relay outputs: Simulate controlling lights, fan, TV, AC (use LEDs if no relay module)
- Bluetooth control: HC-05 receives commands from Android app
- Status feedback: Arduino sends back current ON/OFF state of all devices
- Commands: Define a protocol: e.g., "L1" = Light ON, "L0" = Light OFF, "F1" = Fan ON, etc.
- Bonus: Add a temperature sensor (LM35/DHT11) and send readings to phone on command "T"
Deliverable: Working prototype + documented code + circuit diagram + 2-minute demo video. This is a portfolio-ready project and a common final-year submission.
Industry Spotlight — A Day in the Life
👨💻 Arjun Mehra, 24 — Embedded Systems Intern at Bosch India, Bengaluru
Background: B.Tech ECE from VIT Vellore. Built 6 Arduino projects during college, including a Bluetooth-controlled robot car. Got selected through Bosch campus drive based on his IoT project portfolio.
A Typical Day:
9:00 AM — Morning standup with the automotive sensor team. Review test results from yesterday's CAN-bus communication testing.
10:00 AM — Debug an SPI communication issue between an STM32 microcontroller and a pressure sensor. Use a logic analyser to check MOSI/MISO waveforms. Find a clock polarity mismatch — change from SPI Mode 0 to Mode 3.
12:00 PM — Write firmware for I2C-based temperature sensor (BME280) interfacing. Test readings on a serial terminal.
2:00 PM — Team meeting on Bluetooth Low Energy (BLE) integration for a new vehicle dashboard module. Discuss protocol selection: UART for debugging, SPI for fast sensor reads, I2C for multi-sensor bus.
4:00 PM — Document test results and update the project wiki. Prepare a demo for the senior engineer.
5:30 PM — Online course on RTOS (Real-Time Operating Systems) — upskilling towards a full-time embedded engineer role.
| Detail | Info |
|---|---|
| Tools Used Daily | Arduino IDE, STM32CubeIDE, Logic Analyser, Oscilloscope, Serial Terminal, Git |
| Protocols Used | UART, SPI, I2C, CAN, Bluetooth LE |
| Entry Salary (2024) | ₹4–6 LPA + benefits |
| Mid-Level (3–5 yrs) | ₹8–15 LPA |
| Senior (7+ yrs) | ₹18–30 LPA |
| Companies Hiring | Bosch, Continental, Tata Elxsi, Wipro IoT, L&T Technology, Samsung R&D, Qualcomm India, Texas Instruments |
Earn With It — Freelance & Income Roadmap
💰 Your Earning Path After This Chapter
Portfolio Piece: "Bluetooth Home Automation System" — a working HC-05 + Arduino project with documented code, circuit diagram, and demo video.
Beginner Gig Ideas:
• Arduino + Bluetooth project kits for engineering students — ₹2,000–₹5,000
• Serial data logging system for local workshops/labs — ₹3,000–₹8,000
• Bluetooth-controlled robot car (HC-05 + motor driver) — ₹3,000–₹6,000
• IoT sensor dashboard (I2C sensors + Serial logging) — ₹2,000–₹5,000
| Platform | Best For | Typical Rate |
|---|---|---|
| Internshala | Indian student projects & IoT internships | ₹2,000–₹8,000/project |
| Student Forums | Final-year project kits (WhatsApp groups, college) | ₹2,000–₹5,000/project |
| Fiverr | Arduino/ESP32 code & circuit design | $15–$50/gig (₹1,200–₹4,000) |
| Freelancer.com | Embedded systems projects | $20–$60/project |
| Local Workshops | IoT training for school/college students | ₹500–₹1,500/student/session |
⏱️ Time to First Earning: 2–4 weeks (complete Tier 1 & 2 labs, document your project, reach out to classmates and juniors)
MCQ Assessment Bank — 30 Questions (Bloom's Mapped)
Remember / Identify (Q1–Q6)
In UART communication, how many wires are needed for bidirectional data transfer (excluding GND)?
- 1
- 2
- 4
- 8
What does the function Serial.begin(9600) do in Arduino?
- Sets the analog reference voltage to 9600 mV
- Initialises serial communication at 9600 bits per second
- Creates a delay of 9600 milliseconds
- Sets digital pin 9600 as output
Which SPI signal line carries data FROM the master TO the slave?
- MISO
- MOSI
- SCK
- SS
I2C communication requires how many signal wires?
- 1 (SDA only)
- 2 (SDA and SCL)
- 4 (MOSI, MISO, SCK, SS)
- 3 (TX, RX, CLK)
The default baud rate of HC-05 in data communication mode is:
- 4800
- 9600
- 38400
- 115200
What is the default pairing PIN for HC-05 Bluetooth module?
- 0000
- 1234
- 9999
- 1111
Understand / Explain (Q7–Q12)
Why is serial communication preferred over parallel in embedded systems?
- Serial is always faster than parallel
- Serial requires fewer wires, reducing cost and noise
- Parallel communication doesn't work with microcontrollers
- Serial uses more bandwidth
What happens if the baud rate in your Arduino code does not match the Serial Monitor's baud rate?
- The Arduino crashes
- Data appears as garbage/unreadable characters
- The USB cable disconnects
- The code doesn't compile
Why does I2C require pull-up resistors on SDA and SCL lines?
- To increase transmission speed
- Because I2C uses open-drain outputs that need pull-ups to default to HIGH
- To protect the microcontroller from over-voltage
- To filter noise from the power supply
What is the purpose of the SS (Slave Select) pin in SPI?
- It provides power to the slave device
- It selects which slave device the master wants to communicate with
- It sets the data transfer speed
- It transmits the clock signal
Why is UART called "asynchronous"?
- It only works when the device is powered off
- It doesn't use a shared clock signal — both devices must agree on baud rate beforehand
- It can only send data, not receive
- It requires a WiFi connection
What does Serial.available() return?
- The total memory of the Arduino
- The baud rate currently set
- The number of bytes waiting in the serial receive buffer
- Whether the serial port is open (true/false)
Apply / Use (Q13–Q18)
Which code correctly prints "Temp: 25.50 °C" on a new line in the Serial Monitor?
Serial.print("Temp: "); Serial.println(25.5, 2); Serial.print(" °C");Serial.print("Temp: "); Serial.print(25.5, 2); Serial.println(" °C");Serial.println("Temp: " + 25.5 + " °C");Serial.write("Temp: 25.50 °C\n");
To read a single character sent from the Serial Monitor to Arduino, the correct code is:
char c = Serial.print();char c = Serial.read();char c = Serial.write();char c = Serial.begin();
You're connecting an HC-05 to Arduino. Arduino's TX pin is 5V but HC-05's RX accepts 3.3V. What should you use?
- Connect directly — it doesn't matter
- A voltage divider (1kΩ + 2kΩ) to step down to 3.3V
- A capacitor in series
- An inductor in series
To create a second serial port on Arduino Uno for HC-05 communication, you should use:
- Wire.h library
- SPI.h library
- SoftwareSerial.h library
- Ethernet.h library
You need to change the HC-05's Bluetooth name to "MyRobot." Which AT command do you use?
AT+BAUD=MyRobotAT+NAME=MyRobotAT+ROLE=MyRobotAT+PSWD=MyRobot
An I2C device has address 0x76. Which Arduino code initiates communication with it?
Wire.begin(0x76);Wire.beginTransmission(0x76);Serial.begin(0x76);SPI.begin(0x76);
Analyze / Compare (Q19–Q23)
You need to connect 5 sensors to one Arduino with minimal wiring. Which protocol is best?
- UART (need 10 wires + 5 SoftwareSerial instances)
- SPI (need 4 + 5 SS = 9 wires + 5 pins)
- I2C (need only 2 wires for all 5 sensors)
- Parallel (need 40+ wires)
A project requires streaming data from an SD card to a TFT display at high speed. Which protocol should be used for the SD card?
- UART at 9600 baud
- I2C at 100 kbps
- SPI at several Mbps
- Bluetooth at 115200 baud
Which statement best explains why SPI is full-duplex while I2C is half-duplex?
- SPI has separate MOSI (send) and MISO (receive) lines, allowing simultaneous bidirectional transfer
- SPI uses higher voltage levels
- I2C doesn't support receiving data
- SPI has more clock modes
Two I2C devices both have address 0x68. What problem occurs?
- No problem — I2C handles duplicate addresses automatically
- Address conflict — the master cannot distinguish between them, causing data corruption
- One device automatically changes its address
- Both devices will work but at half speed
A student's HC-05 Bluetooth module pairs with the phone but sends garbled text. The Arduino code uses Serial.begin(9600) and BTSerial.begin(115200). What's wrong?
- The phone app is incompatible
- The HC-05's default baud rate is 9600, but BTSerial is set to 115200 — baud rate mismatch
- The USB cable is faulty
- The LED is not connected
BTSerial.begin(115200) to BTSerial.begin(9600) to match the HC-05's default rate.Evaluate / Judge (Q24–Q27)
For an industrial IoT sensor network in a factory with 50 temperature sensors, which approach is most scalable?
- Connect all 50 sensors via individual UART connections
- Use I2C with I2C multiplexers (TCA9548A) to overcome the 127-device and address conflict limits
- Use Bluetooth HC-05 for each sensor
- Use parallel communication for all 50 sensors
A student argues: "We should use SPI for everything because it's the fastest." Evaluate this claim.
- Correct — SPI is always the best choice
- Incorrect — SPI requires more wires per device, wastes pins, and is overkill when speed isn't critical; I2C or UART may be more practical
- Incorrect — SPI doesn't work with Arduino
- Correct — SPI supports more devices than I2C
Which is a valid limitation of the HC-05 Bluetooth module for commercial IoT products?
- It cannot pair with Android phones
- Its ~10m range, Bluetooth 2.0 (no BLE), and point-to-point pairing limit make it unsuitable for mesh networks or long-range applications
- It costs over ₹5,000 per unit
- It requires 12V power supply
A team is choosing between HC-05 (Bluetooth 2.0) and ESP32 (built-in BLE + WiFi) for a wearable health monitor. Which is more appropriate and why?
- HC-05 — it's cheaper
- ESP32 — BLE consumes far less power than Bluetooth 2.0, critical for battery-powered wearables, and ESP32 can also connect to WiFi for cloud data upload
- HC-05 — it has longer range
- Neither — use a wired USB connection
Create / Design (Q28–Q30)
You need to design a weather station that reads temperature (I2C sensor), logs data to SD card, and displays on an OLED. Which protocol assignment is correct?
- Temperature sensor: SPI, SD card: I2C, OLED: UART
- Temperature sensor: I2C, SD card: SPI, OLED: I2C
- Temperature sensor: UART, SD card: UART, OLED: SPI
- All three devices: UART
To build a Bluetooth-controlled robot, which combination of modules and protocols would you use?
- HC-05 (UART) for phone control + L298N motor driver (digital pins) + Ultrasonic sensor (digital pins)
- ESP8266 (SPI) + Stepper motor (I2C) + IR sensor (UART)
- NRF24L01 (UART) + DC motor (SPI) + Temperature sensor (Bluetooth)
- HC-05 (I2C) + Servo motor (SPI) + LDR (UART)
Design a smart irrigation system prototype. Which serial protocols connect: (1) soil moisture sensor, (2) RTC module for scheduling, (3) Bluetooth for phone alerts?
- (1) Analog pin, (2) I2C (DS3231), (3) UART (HC-05)
- (1) SPI, (2) UART, (3) I2C
- (1) I2C, (2) SPI, (3) Parallel
- (1) UART, (2) UART, (3) SPI
Short Answer Questions (8 Questions)
📝 SA-1: Define serial and parallel communication. Why is serial preferred in IoT? (4 marks)
Serial Communication: Data is transmitted one bit at a time over a single wire (or a pair of wires). Examples: UART, SPI, I2C, USB.
Parallel Communication: Multiple bits are transmitted simultaneously over multiple wires (typically 8 or more). Example: old printer (LPT) ports, internal CPU data buses.
Why serial is preferred in IoT:
- Fewer wires: Reduces PCB complexity and cost (critical for mass-produced IoT devices)
- Lower noise: Fewer parallel wires means less electromagnetic interference (crosstalk)
- Longer distance: Serial can communicate over kilometres (RS-485); parallel is limited to centimetres
- Simpler connectors: USB, UART connectors are smaller and cheaper than parallel connectors
📝 SA-2: Explain baud rate. What happens if baud rates don't match? (3 marks)
Baud rate is the number of signal changes (bits) per second in a serial communication channel. For example, 9600 baud means 9600 bits are transmitted every second. Both communicating devices must be configured to the same baud rate.
If baud rates don't match: The receiving device samples bits at incorrect intervals. This causes the received data to be misinterpreted, resulting in garbage characters (random symbols like ⸮⸮⸮⸮) appearing on the Serial Monitor. No error message is shown — the data simply appears corrupted.
Analogy: Like two people talking at different speeds — one speaks at 2 words/second while the other listens at 5 words/second. Words get merged or split, making the conversation unintelligible.
📝 SA-3: Differentiate between Serial.print() and Serial.println(). (3 marks)
| Feature | Serial.print() | Serial.println() |
|---|---|---|
| Newline | Does NOT add newline — cursor stays on same line | Adds newline (\n) + carriage return (\r) — cursor moves to next line |
| Use Case | Building formatted output piece by piece | Printing complete lines of data |
| Example Output | Serial.print("A"); Serial.print("B"); → AB | Serial.println("A"); Serial.println("B"); → A (line 1) B (line 2) |
Both can print strings, integers, floats, and characters. Both support optional second parameter for number formatting (BIN, HEX, OCT, decimal places).
📝 SA-4: List the four SPI signal lines and explain each. (4 marks)
- MOSI (Master Out Slave In): Data line from master to slave. The master sends commands and data to the slave through this wire.
- MISO (Master In Slave Out): Data line from slave to master. The slave sends response data back through this wire.
- SCK (Serial Clock): Clock signal generated by the master. It synchronises data transfer — data is read on clock edges. Typical speed: 1–10 MHz.
- SS/CS (Slave Select / Chip Select): Selection line driven by the master. Pulled LOW to select a specific slave for communication, HIGH to deselect. Each slave needs its own SS line.
SPI is full-duplex (MOSI and MISO work simultaneously) and synchronous (uses SCK clock).
📝 SA-5: What are pull-up resistors in I2C? Why are they necessary? (3 marks)
Pull-up resistors are resistors (typically 4.7kΩ) connected between the I2C lines (SDA, SCL) and the supply voltage (VCC). They "pull" the lines to a HIGH state by default.
Why necessary: I2C devices use open-drain outputs — their output transistors can only pull the line LOW (to ground) or release it (floating). They cannot actively drive the line HIGH. Without pull-up resistors, a released line would float at an undefined voltage, causing communication failures.
Values: 4.7kΩ is standard for 100 kHz (standard mode). For faster speeds (400 kHz), lower values like 2.2kΩ may be needed. Many breakout boards (like the OLED or BME280) include pull-ups on the PCB, so external ones aren't always required.
📝 SA-6: How do you enter AT command mode on HC-05? List 3 AT commands. (4 marks)
Entering AT Mode:
- Disconnect HC-05 from power
- Press and hold the small push-button on the HC-05 module
- While holding the button, reconnect power (5V)
- The LED will blink slowly (~2 second intervals) instead of the fast blink — confirming AT mode
- Set Serial Monitor to 38400 baud and "Both NL & CR" line ending
Three AT Commands:
AT+NAME=SmartHome— Changes the Bluetooth device name to "SmartHome"AT+ROLE=0— Sets the module as a Slave (0) or Master (1)AT+PSWD="5678"— Changes the pairing PIN from default 1234 to 5678
📝 SA-7: What is SoftwareSerial? Why is it needed with Arduino Uno? (3 marks)
SoftwareSerial is an Arduino library that enables serial communication on digital pins other than the hardware serial pins (0 and 1). It creates a "virtual" or "software-emulated" UART port.
Why needed: Arduino Uno has only ONE hardware serial port (pins 0 & 1), which is shared with the USB connection to the PC. If you connect HC-05 to pins 0 & 1, you lose the ability to use the Serial Monitor for debugging. SoftwareSerial lets you assign any two digital pins (e.g., 10 & 11) as a second serial port, keeping the USB serial free.
Usage: #include <SoftwareSerial.h> then SoftwareSerial BTSerial(11, 10); creates a serial port with RX on pin 11 and TX on pin 10.
Limitation: SoftwareSerial cannot reliably handle baud rates above 57600 and doesn't support multiple simultaneous SoftwareSerial instances listening at once.
📝 SA-8: Compare SPI and I2C across four parameters. (4 marks)
| Parameter | SPI | I2C |
|---|---|---|
| Wires | 4 minimum + 1 per additional slave (SS) | 2 only (SDA + SCL), shared by all devices |
| Speed | Very fast — up to 10+ Mbps | Slower — 100 kbps (standard) to 3.4 Mbps (high-speed) |
| Multi-device | Limited by available SS/CS pins on master | Up to 127 devices on same bus (7-bit addressing) |
| Duplex | Full-duplex (MOSI + MISO simultaneous) | Half-duplex (single SDA line for both directions) |
Rule of thumb: Use SPI when speed is critical (SD cards, displays). Use I2C when connecting many sensors with minimal wiring.
Long Answer Questions (3 Questions)
📜 LA-1: Explain the three serial protocols — UART, SPI, and I2C — with signal diagrams, advantages, disadvantages, and real-world applications. (10 marks)
1. UART (Universal Asynchronous Receiver/Transmitter)
Signal Lines: TX (Transmit), RX (Receive), GND (common ground). Total: 2 data wires.
Working: Asynchronous — no clock line. Both devices must agree on the same baud rate (e.g., 9600 bps). Data is transmitted as frames: 1 start bit + 8 data bits + 1 stop bit = 10 bits per byte.
Advantages:
- Simplest protocol — only 2 wires needed
- Full-duplex communication (send and receive simultaneously)
- No clock line — reduces wiring and works over long distances
- Widely supported by all microcontrollers, computers, and modules (GPS, Bluetooth, GSM)
Disadvantages:
- Point-to-point only — cannot connect multiple devices on same bus
- Relatively slow (typically up to 115200 bps)
- Baud rate mismatch causes data corruption with no error indication
Applications: Arduino ↔ PC debugging (Serial Monitor), HC-05 Bluetooth, GPS modules (NEO-6M), GSM modules (SIM800L), ESP8266 AT commands.
2. SPI (Serial Peripheral Interface)
Signal Lines: MOSI, MISO, SCK, SS/CS. Total: 4 wires minimum.
Working: Synchronous — master generates the clock (SCK). Data is clocked in on specific clock edges (configurable via CPOL/CPHA). Full-duplex: MOSI sends data to slave while MISO receives data simultaneously. Master selects slave by pulling its SS line LOW.
Advantages:
- Very high speed — up to 10+ Mbps (some devices support 50+ Mbps)
- Full-duplex — simultaneous send and receive
- No addressing overhead — slave selection is hardware-based (SS pin)
- Simple slave implementation — no complex protocol stack
Disadvantages:
- More wires needed — especially with multiple slaves (1 SS per slave)
- No built-in acknowledgement — master doesn't know if slave received data
- Short distance only — typically within a single PCB
Applications: SD/microSD cards, TFT/LCD displays, NRF24L01 wireless, DACs/ADCs, flash memory chips.
3. I2C (Inter-Integrated Circuit)
Signal Lines: SDA (Serial Data), SCL (Serial Clock). Total: 2 wires shared by all devices.
Working: Synchronous — master generates clock on SCL. Each device has a unique 7-bit address (0x00–0x7F). Master sends START condition, then address + R/W bit. Only the addressed device responds. Pull-up resistors (4.7kΩ) are required on both lines.
Advantages:
- Only 2 wires for up to 127 devices — extremely wire-efficient
- Built-in addressing — no extra SS pins needed
- Acknowledgement (ACK/NACK) built into protocol — master knows if slave received data
- Multi-master support possible
Disadvantages:
- Half-duplex only — cannot send and receive simultaneously
- Slower than SPI (standard: 100 kbps, fast: 400 kbps)
- Address conflicts if two devices have the same address
- Requires pull-up resistors
Applications: BME280/BMP280 sensors, SSD1306 OLED displays, DS3231 RTC, MPU6050 accelerometer, I2C LCD backpacks.
📜 LA-2: Describe the HC-05 Bluetooth module in detail — specifications, AT commands, interfacing with Arduino, and a complete project to control an LED from a smartphone. (10 marks)
HC-05 Overview
The HC-05 is a Bluetooth 2.0 + EDR (Enhanced Data Rate) module that enables wireless serial communication. It operates as a UART-to-Bluetooth bridge: data sent to its RX pin is transmitted wirelessly via Bluetooth, and data received wirelessly is output on its TX pin.
Key Specifications
| Parameter | Value |
|---|---|
| Bluetooth Version | 2.0 + EDR |
| Operating Voltage | 3.3V–5V (onboard regulator on breakout boards) |
| Default Baud Rate | 9600 bps (data mode), 38400 bps (AT command mode) |
| Range | ~10 metres (line of sight) |
| Default Name / PIN | "HC-05" / 1234 |
| Roles | Master, Slave, or Loopback (configurable) |
AT Command Mode
Enter by holding the button while powering on. LED blinks slowly. Use 38400 baud with "Both NL & CR."
Essential AT Commands:
AT— Test (response: OK)AT+NAME=MyDevice— Set Bluetooth nameAT+UART=9600,0,0— Set baud rate (9600, 1 stop bit, no parity)AT+ROLE=0— Set as slave (0) or master (1)AT+PSWD="4567"— Change pairing PINAT+ADDR?— Query module's MAC address
Interfacing with Arduino
Connections: HC-05 VCC → Arduino 5V, GND → GND, HC-05 TXD → Arduino Pin 11 (SoftwareSerial RX), Arduino Pin 10 (SoftwareSerial TX) → voltage divider → HC-05 RXD.
Voltage Divider: Required because Arduino TX is 5V but HC-05 RX accepts 3.3V. Use 1kΩ series + 2kΩ to ground: Vout = 5 × 2k/(1k+2k) = 3.33V.
Complete LED Control Project
Components: Arduino Uno, HC-05, LED, 220Ω resistor, 1kΩ + 2kΩ resistors, breadboard, jumper wires.
Code: Use SoftwareSerial (pins 10, 11) at 9600 baud. In loop(), check BTSerial.available(). Read character: '1' → digitalWrite(LED, HIGH), '0' → digitalWrite(LED, LOW). Send confirmation back via BTSerial.println().
Testing: Upload code → Pair phone → Open "Serial Bluetooth Terminal" app → Connect → Send '1'/'0' → LED responds.
Practical Extensions: Replace LED with relay module → control real appliances (lights, fans). Add multiple channels → build home automation. Add sensors → send data back to phone.
📜 LA-3: Design a multi-protocol IoT weather station. Explain which serial protocol you would use for each component and justify your choices. Include a block diagram and communication flow. (10 marks)
System Components & Protocol Assignment
| Component | Function | Protocol | Justification |
|---|---|---|---|
| BME280 Sensor | Temperature, Humidity, Pressure | I2C (0x76) | Low data rate (read every few seconds), shares bus with OLED, only 2 wires needed |
| SSD1306 OLED | Local display | I2C (0x3C) | Shares I2C bus with BME280 (different address), moderate update rate sufficient |
| MicroSD Card | Data logging | SPI | High-speed writes needed for continuous logging, SPI provides several Mbps throughput |
| HC-05 Bluetooth | Wireless phone alerts | UART (SoftwareSerial) | HC-05 only supports UART, perfect for sending text alerts to phone app |
| DS3231 RTC | Accurate timestamps | I2C (0x68) | Native I2C device, shares bus with BME280 and OLED (unique address) |
Block Diagram
Communication Flow
- Arduino reads BME280 via I2C → gets temperature, humidity, pressure
- Arduino reads DS3231 via I2C → gets current timestamp
- Arduino displays data on OLED via I2C → local monitoring
- Arduino writes timestamped data to SD card via SPI → persistent logging
- If temperature exceeds threshold, Arduino sends alert to phone via HC-05 (UART → Bluetooth)
- Phone user can request current reading by sending 'R' command via Bluetooth
Why This Protocol Mix Works
Three I2C devices share 2 wires (A4, A5) — minimal wiring. SD card uses SPI for fast logging (SPI pins 10-13). HC-05 uses SoftwareSerial (pins 2, 3) to keep hardware serial free for debugging. Total pin usage: 8 pins for 5 components — efficient and practical.
Indian Application: This exact architecture can be deployed in agricultural fields across India. Farmers in Maharashtra and Punjab need real-time weather data for irrigation decisions. A ₹1,500 weather station built with these components can provide localised weather data that general forecasts miss.
Case Studies
🔬 Case Study 1: Stellapps — IoT for India's Dairy Industry
Company: Stellapps Technologies, Bengaluru (founded 2011)
Problem: India is the world's largest milk producer (230 million tonnes/year), but dairy farmers lose ₹40,000 crore annually due to undetected cattle diseases, adulterated milk, and cold chain failures.
Solution: Stellapps developed mooPark — an IoT wearable for cows that monitors body temperature, activity, and rumination patterns. The device uses:
- I2C sensors (temperature, accelerometer) inside the wearable
- Bluetooth Low Energy (BLE) to transmit data to a gateway device in the cowshed
- UART serial for debugging and firmware updates
Scale: 30,000+ farms, 7 million litres of milk tracked daily, used by Amul, Mother Dairy, and Karnataka Milk Federation.
Serial Communication Relevance: The I2C bus inside the wearable connects the temperature sensor and accelerometer to the main MCU. BLE (an evolution of serial Bluetooth) wirelessly transmits to the gateway. Engineers at Stellapps use serial debugging extensively during firmware development — the same skills you're learning now.
🔬 Case Study 2: Bosch India — Automotive Sensor Networks
Company: Bosch Limited, India (12,000+ engineers across Bengaluru, Pune, Coimbatore)
Application: Modern cars have 50–100+ sensors communicating via serial protocols:
- SPI: High-speed communication between the ECU (Engine Control Unit) and pressure/acceleration sensors that need sub-millisecond response times
- I2C: Dashboard sensors (temperature displays, ambient light sensors for automatic headlights)
- CAN Bus: An advanced serial protocol connecting all vehicle ECUs (derived from UART principles)
Scale: Bosch India supplies components for Maruti Suzuki, Tata Motors, Mahindra, and Hero MotoCorp — covering ~60% of Indian automotive electronics.
Career Relevance: Bosch India actively recruits B.Tech/ECE graduates who demonstrate SPI/I2C/UART understanding through project portfolios. Starting salary: ₹5–7 LPA. Understanding these protocols at the level taught in this chapter directly maps to Bosch's embedded systems interview questions.
Chapter Summary
📋 Key Takeaways — Serial Communication & Bluetooth
- Serial vs Parallel: Serial sends one bit at a time (fewer wires, longer distance, preferred in IoT). Parallel sends multiple bits simultaneously (faster but more complex).
- UART: 2-wire asynchronous protocol (TX/RX). No clock — devices must match baud rate. Used for PC communication and Bluetooth modules.
- Serial.begin(baud): Initialises the serial port. Common rates: 9600 (learning), 115200 (production). Mismatch = garbage data.
- Serial.print()/println(): Send data to Serial Monitor. print() stays on line; println() adds newline. Supports formatted output (BIN, HEX, decimal places).
- Serial.available()/read(): Receive data from PC or Bluetooth. Always check available() before read().
- SPI: 4-wire synchronous protocol (MOSI/MISO/SCK/SS). Fast (10+ Mbps), full-duplex. Used for SD cards, displays. Needs 1 SS per slave.
- I2C: 2-wire synchronous protocol (SDA/SCL). Supports 127 devices on same bus via addressing. Needs pull-up resistors. Used for sensors, RTCs, OLEDs.
- Protocol Selection: UART for PC/Bluetooth, SPI for speed, I2C for multi-device efficiency.
- HC-05 Bluetooth: BT 2.0 module, UART interface, ~10m range. AT commands for configuration (name, baud, role, PIN). Default: 9600 baud, PIN 1234.
- SoftwareSerial: Creates virtual serial ports on Arduino Uno (which has only 1 hardware serial). Essential for HC-05 + Serial Monitor simultaneous use.
- Bluetooth LED Project: HC-05 + Arduino + SoftwareSerial = control LEDs from phone. Foundation for home automation.
Earning Checkpoint
| Skill Acquired | Tool/Platform | Portfolio Output | Earning Ready? |
|---|---|---|---|
| Serial Communication (UART) | Arduino + Serial Monitor | Data Logger sketch | ✅ Yes — debugging skill is billable |
| SPI & I2C Concepts | Conceptual + Wire library | I2C Scanner code | ⬜ Need hands-on project |
| HC-05 Bluetooth | SoftwareSerial + Android app | Bluetooth LED Controller | ✅ Yes — project kits sellable |
| Home Automation Prototype | Arduino + HC-05 + Relays | 4-channel BT controller | ✅ Yes — ₹2,000–₹5,000/project |
| IoT Workshop Delivery | Arduino kits + presentation | Workshop curriculum | ✅ Yes — ₹5,000–₹15,000/batch |
What's Next
✅ Unit 3 complete. Ready for Unit 4: WiFi & Cloud IoT!
[QR: Link to EduArtha video tutorial — Serial Communication & Bluetooth]