A classic setup using a digital sensor to track humidity (and temperature if you want). How can something be so simple?
It's true, most people start using Arduino at a very young age. After flashing the onboard LED (the mandatory first test! 😄), the next natural step is usually connecting a basic sensor, like the DHT11 for humidity.
But here’s the real question:
Is it possible to take that simple sensor data, send it to space, and actually get it back? If you had asked me 15 years ago, my answer would have been a clear, resounding NO.
Yet today… it’s possible. It’s real. It works.
And it’s all thanks to the Fossa Nexus device!
*Hardware Architecture: The Nexus is capable of direct multi-protocol interfacing. However, I implemented an Arduino bridge as a deliberate design choice. This creates a isolates external user data from the Nexus's internal proprietary code and industrial secrets.
1. The Input: Sensing the Environment
It all starts at the source, the DHT11 digital sensor continuously monitors its immediate surroundings, pulling in real-time temperature and humidity readings, It’s a simple.
2. The Architecture: Building a Secure Bridge
While the Fossa Nexus is fully capable of direct, multi-protocol interfacing, I specifically chose to introduce an Arduino bridge. This was a deliberate design choice. By using the Arduino as a middleman, I isolated the external user data from the Nexus's internal proprietary code and industrial secrets. It creates a clean, secure boundary between the localized sensor logic and the advanced transmission hardware.
3. The Uplink: Packaging the Data
Once the Arduino processes the raw environmental data from the DHT11, it neatly compiles it into a lightweight 32-byte payload. It then hands this data package off directly to the Nexus device via a I2C connection.
4. The Network: Reaching Orbit
The Fossa Nexus takes that localized payload and fires it up to the Fossa Systems satellite constellation. By leveraging long-range radio signals, what started as a basic breadboard sensor now has true, global IoT coverage.
This project demonstrates how a classic hardware setup can be elevated to global scales. What starts as a basic test using an Arduino and a DHT11 sensor to track real-time temperature and humidity is taken to the next level. Instead of local serial monitoring, this proof-of-concept proves that it is possible to take simple sensor data, transmit it to space, and successfully retrieve it.
Powered by the Fossa Nexus device, this system bridges the gap between basic maker electronics and satellite-based IoT.
Note: This is an independent and technical demonstration. For commercial inquiries or official hardware specifications, please contact Fossa Systems directly.
Arduino: A development board that receives incoming data and acts as the local controller.
Nexus (by Fossa Systems): The core industrial-grade communication terminal that manages multi-protocol bridging, performs high-level data processing, and sends the message to the satellite.
Fossa Systems Satellite Constellation Access: Receives the LoRa uplink from the Nexus to enable global message delivery.
Sensor: DHT11 Digital Temperature and Humidity Sensor
The Arduino acts as the I2C Master to communicate with the Fossa Nexus device.
Protocol: I2C
Nexus I2C Target Address: 0x55
Data Payload Size: 32 bytes
Transmission Interval: 1 minute
#include <Arduino.h>
#include <Wire.h>
#include <DHT.h>
// ===== DHT11 CONFIG =====
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
// ===== I2C CONFIG =====
const uint8_t I2C_ADDRESS = 0x55;
// Send every minute
const unsigned long SEND_INTERVAL = 60000UL;
unsigned long lastSendTime = 0;
void setup() {
Serial.begin(9600);
while (!Serial);
Wire.begin();
dht.begin();
Serial.println(F("--- DHT11 + I2C SENDER ---"));
Serial.print(F("Target Address: 0x"));
Serial.println(I2C_ADDRESS, HEX);
}
void loop() {
unsigned long currentTime = millis();
if (currentTime - lastSendTime >= SEND_INTERVAL || lastSendTime == 0) {
lastSendTime = currentTime;
// ===== READ SENSOR =====
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Check sensor read
if (isnan(humidity) || isnan(temperature)) {
Serial.println(F("ERROR: Failed to read DHT11"));
return;
}
// ===== CREATE 32 BYTE PAYLOAD =====
uint8_t msg[32];
// Clear payload
for (int i = 0; i < 32; i++) {
msg[i] = 0;
}
// Put humidity and temperature into payload
// byte 0-3 = humidity float
// byte 4-7 = temperature float
memcpy(&msg[0], &humidity, sizeof(float));
memcpy(&msg[4], &temperature, sizeof(float));
// ===== DEBUG SERIAL =====
Serial.print(F("Humidity: "));
Serial.print(humidity);
Serial.println(F(" %"));
Serial.print(F("Temperature: "));
Serial.print(temperature);
Serial.println(F(" C"));
Serial.println(F("Sending payload..."));
// ===== SEND I2C =====
Wire.beginTransmission(I2C_ADDRESS);
Wire.write(msg, 32);
uint8_t error = Wire.endTransmission();
// ===== RESULT =====
if (error == 0) {
Serial.println(F("SUCCESS: 32 bytes sent correctly!"));
}
else {
Serial.print(F("ERROR: "));
if (error == 2) {
Serial.println(F("Address not found (NACK)."));
}
else if (error == 3) {
Serial.println(F("Data NACK."));
}
else if (error == 4) {
Serial.println(F("Bus error."));
}
else {
Serial.print(F("Unknown code: "));
Serial.println(error);
}
}
Serial.println(F("-------------------------"));
}
}
Arduino to Fossa Nexus: I2C Wiring Table
Step 1: Power Down
Before making any connections, ensure both the Arduino and the Fossa Nexus are unplugged from their power sources. This prevents accidental short circuits while wiring
Step 2: Establish the Common Ground
Connect a wire from any GND pin on the Arduino to the GND pin on the Fossa Nexus.
Step 3: Connect the Data Line (SDA) Connect pin A4 on your Arduino to the SDA (Serial Data) pin on the Fossa Nexus.
Step 4: Connect the Clock Line (SCL) Connect pin A5 on your Arduino to the SCL (Serial Clock) pin on the Fossa Nexus.
Final step: power up the system, and verify the communication.Turn on the Nexus device first, then the Arduino, and open the Serial Monitor (set to 9600 baud).
The Arduino will attempt to connect to the Nexus at address 0x55. If everything is correctly wired and working, you will see the incoming data stream displayed on the Serial Monitor, confirming successful communication.
If the SDA/SCL lines are incorrect or disconnected, the Serial Monitor will show a “Bus error. Check SDA/SCL wiring.” message instead.