Experiment 1: Blink LED Every 2 Seconds

Connections: LED anode (long leg) → Pin 13, LED cathode (short leg) → 220Ω resistor → GND


int ledPin = 13;

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  digitalWrite(ledPin, HIGH);
  delay(1000);
  digitalWrite(ledPin, LOW);
  delay(2000);
}
  

Experiment 2: Push Button to Control LED

Connections: Push Button one leg → 5V, Opposite leg → Pin 2 AND to GND via 10kΩ resistor, LED anode → Pin 13, LED cathode → 220Ω resistor → GND


int buttonPin = 2;
int ledPin = 13;
int buttonState = 0;

void setup() {
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }
}
  

Experiment 3: LDR to Turn ON LED in Dark

Connections: LDR one end → 5V, Other end → A0 AND to GND via 10kΩ resistor, LED anode → Pin 13, LED cathode → 220Ω resistor → GND


int ldrPin = A0;
int ledPin = 13;
int ldrValue = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  ldrValue = analogRead(ldrPin);
  Serial.println(ldrValue);

  if (ldrValue < 500) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }

  delay(100);
}
  

Experiment 4: DHT11 Sensor - Print Temperature & Humidity

Connections: DHT11 VCC → 5V, DATA → Pin 2, GND → GND


#include <DHT.h>

#define DHTPIN 2
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  dht.begin();
}

void loop() {
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();

  if (isnan(humidity) || isnan(temperature)) {
    Serial.println("Failed to read from DHT11 sensor!");
  } else {
    Serial.print("Temperature: ");
    Serial.print(temperature);
    Serial.print(" °C  |  Humidity: ");
    Serial.print(humidity);
    Serial.println(" %");
  }

  delay(2000);
}
  

Experiment 5: DHT11 + OLED Display

Connections: DHT11: VCC → 5V, DATA → D2, GND → GND, OLED: VCC → 5V, GND → GND, SDA → A4, SCL → A5


#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>

#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire);

void setup() {
  dht.begin();
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
}

void loop() {
  float t = dht.readTemperature();
  float h = dht.readHumidity();

  display.clearDisplay();
  display.setCursor(0, 10);
  display.print("Temp: "); display.print(t); display.println(" C");
  display.print("Hum:  "); display.print(h); display.println(" %");
  display.display();

  delay(2000);
}
  

Experiment 6: Relay Control Motor with Button

Connections: Button: one end → 5V, other end → Pin 2 AND GND via 10kΩ, Relay IN → Pin 8, VCC → 5V, GND → GND, Relay COM → motor wire, NO → +V (9V battery), motor − → battery −


int buttonPin = 2;
int relayPin = 8;
int buttonState = 0;

void setup() {
  pinMode(buttonPin, INPUT);
  pinMode(relayPin, OUTPUT);
  digitalWrite(relayPin, LOW);
}

void loop() {
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {
    digitalWrite(relayPin, HIGH);
  } else {
    digitalWrite(relayPin, LOW);
  }
}
  

Experiment 7: Soil Moisture Sensor

Connections: VCC → 5V, GND → GND, AO → A0


int sensorPin = A0;
int sensorValue = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  sensorValue = analogRead(sensorPin);
  Serial.print("Soil Moisture Value: ");
  Serial.println(sensorValue);
  delay(1000);
}
  

Experiment 8: Soil Moisture + LED Alert

Connections: Same as above, plus LED on Pin 8 via 220Ω to GND


int sensorPin = A0;
int ledPin = 8;
int threshold = 600;
int sensorValue = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  sensorValue = analogRead(sensorPin);
  Serial.println(sensorValue);

  if (sensorValue > threshold) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }

  delay(1000);
}
  

Experiment 9: Ultrasonic Sensor

Connections: VCC → 5V, GND → GND, TRIG → Pin 9, ECHO → Pin 10


const int trigPin = 9;
const int echoPin = 10;
long duration;
float distance;

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  Serial.begin(9600);
}

void loop() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  duration = pulseIn(echoPin, HIGH);
  distance = duration * 0.034 / 2;

  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");
  delay(1000);
}
  

Experiment 10: ESP8266 Upload DHT11 to ThingSpeak

Connections: DHT11: VCC → 3.3V, DATA → D4 (GPIO2), GND → GND


#include <ESP8266WiFi.h>
#include <DHT.h>
#include <ThingSpeak.h>

const char* ssid = "MANOJ 2593";
const char* password = "26052004";

#define DHTPIN D3
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

WiFiClient client;
unsigned long myChannelNumber = 2915464;
const char* myWriteAPIKey = "2U9S0J7OG7D7TU5Q";

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  dht.begin();
  ThingSpeak.begin(client);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("Connected.");
}

void loop() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    delay(2000);
    return;
  }

  Serial.print("Temp: ");
  Serial.print(t);
  Serial.print(" °C, Humidity: ");
  Serial.print(h);
  Serial.println(" %");

  ThingSpeak.setField(1, t);
  ThingSpeak.setField(2, h);

  int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);

  if (x == 200) {
    Serial.println("Data sent to ThingSpeak successfully");
  } else {
    Serial.print("Problem sending data. HTTP error code: ");
    Serial.println(x);
  }

  delay(20000);
}
  

Experiment 11: ESP8266 Read Data from ThingSpeak

No sensors needed.


#include <ThingSpeak.h>
#include <ESP8266WiFi.>

const char ssid[] = "MANOJ 2593";
const char pass[] = "26052004";

WiFiClient client;

unsigned long channelNumber = 2915464;
const char* myCounterReadAPIKey = "8ZKU1W4MM0B2LFJD";
const int FieldNumber1 = 1;
const int FieldNumber2 = 2;

void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  ThingSpeak.begin(client);
}

void loop() {
  if (WiFi.status() != WL_CONNECTED) {
    Serial.print("Connecting to ");
    Serial.print(ssid);
    Serial.println(" ....");

    while (WiFi.status() != WL_CONNECTED) {
      WiFi.begin(ssid, pass);
      delay(5000);
    }
    Serial.println("Connected to Wi-Fi Successfully.");
  }

  float temperature = ThingSpeak.readFloatField(channelNumber, FieldNumber1, myCounterReadAPIKey);
  int statusCode = ThingSpeak.getLastReadStatus();

  if (statusCode == 200) {
    Serial.print("Temperature: ");
    Serial.print(temperature);
    Serial.println(" °C");
  } else {
    Serial.print("Failed to read Temperature, Status Code: ");
    Serial.println(statusCode);
  }

  delay(1000);

  float humidity = ThingSpeak.readFloatField(channelNumber, FieldNumber2, myCounterReadAPIKey);
  statusCode = ThingSpeak.getLastReadStatus();

  if (statusCode == 200) {
    Serial.print("Humidity: ");
    Serial.print(humidity);
    Serial.println(" %");
  } else {
    Serial.print("Failed to read Humidity, Status Code: ");
    Serial.println(statusCode);
  }

  delay(2000);
}