SEMEA (Software Embarcado de Manutenção do Equilíbrio Aquapônico) is an embedded systems project that maintains and monitors aquaponic stations in the arid region of Pernambuco.
Made under the supervision of Edna Barros by the students Davi Dubeux, Lígia Ferro and Jessyca Ferreira for the Embedded Systems Competition 2025 and validated with the NGO Afetos, the project made it to the national finals, winning the prize of Best Feminine Team.
- Sensor selection with a joystick and button interface
- OLED feedback for the active sensor and its reading
- Periodic temperature, humidity, pH, and turbidity acquisition
- Wi-Fi connection and HTTP data upload
- Servo actuation for scheduled or manual feeding
The project is configured for these main components:
- Raspberry Pi Pico W
- OLED display over I2C
- Joystick and button input
- pH sensor
- Humidity sensor
- Turbidity sensor
- DS18B20 temperature sensor
- Water level sensor
- Servo motor
Pin assignments are defined in lib/utils/ports.h, and project constants and connection settings are defined in lib/utils/defines.h.
- src/main.cpp: main control loop and device orchestration
- lib/Board: display and sensor selection UI
- lib/Display: OLED rendering
- lib/Humidity, lib/PhSensor, lib/Temperature, lib/Turbidity, lib/WaterLevel: sensor drivers
- lib/MyServo: feeding servo control
- lib/Wifizinho: Wi-Fi and HTTP upload helper
- PlatformIO
- Arduino framework support for Raspberry Pi Pico W
- The libraries listed in platformio.ini
- Open the project in VS Code with the PlatformIO extension installed.
- Adjust the Wi-Fi credentials and server URL in lib/utils/defines.h if needed.
- Build the firmware with PlatformIO.
- Upload it to the board using the
semeaenvironment from platformio.ini.
At startup, the firmware initializes the board, display, Wi-Fi, temperature sensor, and servo. In the main loop it:
- Reads the water level sensor.
- Checks the button and feed interval to trigger the servo.
- Every few seconds, reads the selected sensor.
- Prints the value on the display and sends it to the configured server.
- The Wi-Fi credentials are currently stored in the source tree under lib/utils/defines.h.
- Some sensor-specific calibration values are defined in lib/utils/defines.h and may need adjustment for your hardware.


