nootropic design
Published © MIT

Iridium Satellite Communication with Arduino

You’ve probably used WiFi, maybe dabbled with cellular solutions, but what about satellite communication? Yes, it can be done!

IntermediateFull instructions provided4,981
Iridium Satellite Communication with Arduino

Things used in this project

Hardware components

RockBLOCK 9603 Iridium Satellite modem
×1
SparkFun SAMD21 Mini Breakout
SparkFun SAMD21 Mini Breakout
×1
Adafruit Ultimate GPS Breakout
Adafruit Ultimate GPS Breakout
×1
128x96 OLED display
×1
LED (generic)
LED (generic)
×3
Resistor 220 ohm
Resistor 220 ohm
×3
Tactile Switch, Top Actuated
Tactile Switch, Top Actuated
×2
Rotary Potentiometer, 10 kohm
Rotary Potentiometer, 10 kohm
×1

Software apps and online services

Node-RED
Node-RED

Story

Read more

Schematics

Iridium Satellite Experimenter Schematic

Iridium Satellite Experimenter Board Design

Code

Node-RED parsing code

JavaScript
var data = msg.payload.data;

var p = 0;
var year = parseInt(data.substr(p,2), 16);
p += 2;
var month = parseInt(data.substr(p,2), 16);
p += 2;
var day = parseInt(data.substr(p,2), 16);
p += 2;
var hour = parseInt(data.substr(p,2), 16);
p += 2;
var minute = parseInt(data.substr(p,2), 16);
p += 2;
var second = parseInt(data.substr(p,2), 16);
p += 2;

var latString = data.substr(p,8);
var lat = parseInt(latString, 16);
// can be negative, so check for sign bit
if (lat & 0x80000000) {
    lat = lat - 0x100000000;
}
lat = lat / 10000000.0;
p += 8;

var lonString = data.substr(p,8);
var lon = parseInt(lonString, 16);
// can be negative, so check for sign bit
if (lon & 0x80000000) {
    lon = lon - 0x100000000;
}
lon = lon / 10000000.0;
p += 8;


var valueString = data.substr(p,4);
var value = parseInt(valueString, 16);


// time that the message was created and ready to send
var msgTime = new Date(year+2000, month-1, day, hour, minute, second);
msg.payload.message_time = msgTime;

// time that the message was actually successfully transmitted to satellite
var txTime =  new Date("20" + msg.payload.transmit_time);
msg.payload.transmit_time = txTime;

var txMilliseconds = txTime.getTime() - msgTime.getTime();

var txMinutes = Math.floor(txMilliseconds / 60000);
var txSeconds = (txMilliseconds % 60000) / 1000;
var txTimeString = txMinutes + ":" + txSeconds;
msg.payload.txTime_ms = txMilliseconds;
msg.payload.txTime = txTimeString;

msg.payload.decoded_data = {
   year: year,
   month: month,
   day: day,
   hour: hour,
   minute: minute,
   second: second,
   lat: lat,
   lon: lon,
   value: value
}
return msg;

Github

https://github.com/mikalhart/IridiumSBD

Github

https://github.com/nootropicdesign/iridium-satellite-comm

Credits

nootropic design

nootropic design

10 projects • 63 followers
Software engineer and hardware designer, master's degree in computer science, 25 years of experience in software design.

Comments