User Tools

Site Tools


inhabitat:kaunas:day02

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
inhabitat:kaunas:day02 [2026/05/26 14:05] harley.larainhabitat:kaunas:day02 [2026/05/29 09:05] (current) jan.sonntag
Line 1: Line 1:
-====== Day 02 ======+====== Day 2: Sensors and Communication ======
  
-===== WiFi Example =====+Welcome to day two of our IoT workshop series! Today we will read a value 
 +from a soil moisture sensor, see it in the Serial Monitor, connect our board 
 +to WiFi, and finally send a message to an MQTT broker.
  
-<file c++ cpp.cpp> +We are using the **Arduino framework inside PlatformIO** throughout this workshop.
-#include <WiFi.h>+
  
-const char* ssid "Your_SSID"; +===== 1. How a Capacitive Soil Moisture Sensor Works =====
-const char* password "Your_PASSWORD";+
  
-void setup() { +A capacitive soil moisture sensor measures how much water is in the soil by 
-  Serial.begin(115200); +detecting changes in **capacitance** around its probeWater and dry soil 
-  WiFi.begin(ssidpassword);+store electrical charge differently, so as the soil gets wetter, the 
 +capacitance the sensor measures changesThe sensor turns this into an 
 +**analog voltage**: drier soil and wetter soil produce different voltage 
 +levelswhich our ESP32 can read.
  
-  while (WiFi.status() != WL_CONNECTED) { +Unlike older resistive sensors, the capacitive type has **no exposed metal 
-    delay(500); +electrodes** touching the soilThis means it does not corrode nearly as 
-    Serial.print("."); +quickly, making it much better suited for long-term use.
-  } +
-  Serial.println("Connected to Wi-Fi"); +
-  Serial.print("IP Address: "); +
-  Serial.println(WiFi.localIP()); +
-  Serial.print("Gateway (Router IP): "); +
-  Serial.println(WiFi.gatewayIP()); // Get router's IP address +
-}+
  
-void loop() { +We are using the **DFRobot Analog Capacitive Soil Moisture Sensor**. 
-  // Empty loop + 
-+===== 2. Connecting the Sensor to the DOIT ESP32 ===== 
-</file>+ 
 +The sensor has three wires: 
 + 
 +^ Sensor Pin ^ Connects to ESP32 ^ Purpose ^ 
 +| VCC (red   | VIN (5V) or 3V3 | Power | 
 +| GND (black)  | GND      | Ground | 
 +| AOUT (blue)  | An analog-capable GPIO (e.g. GPIO34) | Analog signal out | 
 + 
 +A few notes: 
 +  * The signal wire goes to an **analog input pin**. On the DOIT ESP32 DevKit, pins like **GPIO34, GPIO35, GPIO32, GPIO33** work well for analog reading. 
 +  * The sensor can run on either **3V3** or **5V**. The **VIN** pin on the DOIT ESP32 provides 5V (when the board is powered over USB). 
 +  * **Important:** the ESP32's analog pins can only safely read up to ~3.3V. If you power the sensor from 5V, its output range is higher, so be aware the readings will scale differently — and never feed more than 3.3V into a GPIO pin. 
 +  * Double-check GND is shared between the sensor and the board. 
 + 
 +<WRAP center round tip 60%> 
 +Here an example to connect to similiar MCU. Make sure to check the Pinout of your specific board! 
 +</WRAP> 
 + 
 +<imgcaption image3|Wiring of the analog sensor>{{ https://raw.githubusercontent.com/EOLab-HSRW/intro-to-iot/master/diagrams/wemos-soil_bb.png?400 |}}</imgcaption> 
 +<imgcaption image4|Schematic>{{ https://raw.githubusercontent.com/EOLab-HSRW/intro-to-iot/master/diagrams/wemos-soil_schematic.png?400 |}}</imgcaption> 
 + 
 +===== 3. Reading the Sensor with the Serial Monitor ===== 
 + 
 +Before we send data anywhere, we want to **see** it. The easiest way is the 
 +**Serial Monitor**. 
 + 
 +**Serial** is a way for the ESP32 to send text back to your computer over the 
 +USB cable. By calling ''Serial.begin()'' once at startup and then 
 +''Serial.println()'' whenever we have something to show, we can print our 
 +sensor readings to the screen in real time. This is incredibly useful for 
 +checking that everything is wired correctly and that the numbers change when 
 +you touch the sensor or place it in soil. 
 + 
 +Open the Serial Monitor in PlatformIO and make sure the **baud rate matches** 
 +the value you set in ''Serial.begin()'' (commonly 115200). 
 + 
 +<code cpp> 
 +// PLACEHOLDER — Sensor reading code 
 +// This should: 
 +//   - start Serial at the chosen baud rate in setup() 
 +//   - read the analog value from the sensor pin 
 +//   - print the value to the Serial Monitor in loop() 
 +//   - add a short delay so the output is readable 
 +</code> 
 + 
 +Once uploaded, you should see numbers scrolling in the Serial Monitor. 
 +Try touching the sensor or dipping it into soil/water — the value should change. 
 + 
 +===== 4. Connecting to WiFi ===== 
 + 
 +Now that the board works on its own, let's get it online. The ESP32 has 
 +built-in WiFi, so we just need to give it the **network name (SSID)** and 
 +**password** of our workshop access point. 
 + 
 +In ''setup()'' we tell the ESP32 to connect, then wait in a short loop until 
 +the connection succeeds. We can print the status to Serial so we know when 
 +we're online. 
 + 
 +<code cpp> 
 +// PLACEHOLDER — WiFi connection code 
 +// This should: 
 +//   - include the WiFi library 
 +//   - store the SSID and password 
 +//   - start the connection in setup() 
 +//   - wait until connected, printing progress to Serial 
 +//   - print the assigned IP address once connected 
 +</code> 
 + 
 +When it works, the Serial Monitor will show that the ESP32 has joined the 
 +network and received an IP address. 
 + 
 +===== 5. Introducing MQTT ===== 
 + 
 +**MQTT** is a lightweight messaging protocol that is very popular in IoT. The 
 +idea is simple: devices send ("**publish**") messages to a central server (the 
 +"**broker**"), and other devices can listen ("**subscribe**") for them. Today 
 +we will only **publish** — sending messages out. We will not subscribe. 
 + 
 +{{pdfjs 500px>:latinet:unicaes:workshops:mqtt.pdf?75}} 
 + 
 +===== 6. Publishing a Message to the Broker ===== 
 + 
 +For our final step, we connect to the **MQTT broker** and send a single 
 +message of **your choosing** — any text string you like, for example 
 +''"hello from my esp32"''
 + 
 +  * This is **not** the soil moisture value. That's a separate exercise. Here we are just proving we can talk to the broker by sending a simple string. 
 +  * We connect to the broker, then publish our chosen string to a **topic**. 
 + 
 +<code cpp> 
 +// PLACEHOLDER — MQTT publish code 
 +// This should: 
 +//   - include the MQTT client library 
 +//   - set the broker address and port 
 +//   - connect to the broker in setup() (after WiFi is connected) 
 +//   - publish a single text string of your choosing to a topic 
 +//   - print confirmation to Serial 
 +</code> 
 + 
 +Pick any message you want and send it. 🎉 
 + 
 +===== Recap ===== 
 + 
 +By the end of today you have: 
 +  * Learned how a capacitive soil moisture sensor works 
 +  * Wired it to the DOIT ESP32 
 +  * Read its value in the Serial Monitor 
 +  * Connected the ESP32 to WiFi 
 +  * Learned the basics of MQTT 
 +  * Published your own message to the MQTT broker
inhabitat/kaunas/day02.1779797102.txt.gz · Last modified: 2026/05/26 14:05 by harley.lara