LoRa vs Sigfox vs NB-IoT: Key Differences and Use Cases
LoRa, Sigfox, and NB-IoT are low-power wide-area network protocols for IoT with different trade-offs: LoRa offers private network flexibility and long range, Sigfox provides ultra-low power with a simple global network, and NB-IoT uses cellular infrastructure for reliable coverage and higher data rates.Quick Comparison
Here is a quick side-by-side comparison of LoRa, Sigfox, and NB-IoT based on key factors important for IoT projects.
| Feature | LoRa | Sigfox | NB-IoT |
|---|---|---|---|
| Network Type | Private or public LoRaWAN | Public global network | Cellular (licensed spectrum) |
| Range | 2-15 km (urban to rural) | 10-50 km (rural) | Up to 10 km |
| Data Rate | 0.3-50 kbps | Up to 600 bps | Up to 250 kbps |
| Power Consumption | Low | Ultra-low | Low to moderate |
| Cost | Moderate (gateway needed) | Low (subscription) | Higher (SIM and cellular fees) |
| Deployment Complexity | Medium (setup gateways) | Low (use existing network) | Medium (carrier dependent) |
Key Differences
LoRa uses unlicensed spectrum and allows users to set up private networks with their own gateways, giving flexibility but requiring more setup. It supports moderate data rates and long range, making it good for diverse IoT applications.
Sigfox operates on a public global network with ultra-narrowband technology, focusing on very low power and very low data rates. It is simple to deploy since no private infrastructure is needed, but it limits message size and frequency.
NB-IoT is a cellular technology using licensed spectrum, offering better reliability, security, and higher data rates than LoRa and Sigfox. It requires SIM cards and carrier support, which increases cost but provides wide coverage and integration with existing cellular networks.
Code Comparison
Example: Sending a simple sensor reading using LoRaWAN with Arduino.
#include <lmic.h> #include <hal/hal.h> #include <SPI.h> static const u1_t NWKSKEY[16] = { /* your network session key */ }; static const u1_t APPSKEY[16] = { /* your app session key */ }; static const u4_t DEVADDR = 0x260111FD; // your device address void os_getDevKey (u1_t* buf) { memcpy_P(buf, APPSKEY, 16); } void os_getArtEui (u1_t* buf) { } void os_getDevEui (u1_t* buf) { } static osjob_t sendjob; void do_send(osjob_t* j){ static uint8_t mydata[] = "Hello LoRa"; LMIC_setTxData2(1, mydata, sizeof(mydata)-1, 0); } void setup() { os_init(); LMIC_reset(); LMIC_setSession (0x1, DEVADDR, NWKSKEY, APPSKEY); do_send(&sendjob); } void loop() { os_runloop_once(); }
Sigfox Equivalent
Example: Sending a simple sensor reading using Sigfox with Arduino Sigfox library.
#include <SigFox.h> void setup() { Serial.begin(9600); if (!SigFox.begin()) { Serial.println("SigFox module not detected"); while (1); } SigFox.end(); SigFox.begin(); } void loop() { byte message[] = { 'H', 'e', 'l', 'l', 'o' }; SigFox.beginPacket(); SigFox.write(message, sizeof(message)); SigFox.endPacket(); delay(60000); // send every 60 seconds }
When to Use Which
Choose LoRa when you want control over your network, need long range, and can manage your own gateways for flexible IoT deployments.
Choose Sigfox if you want ultra-low power, very simple deployment without infrastructure, and your data needs are minimal and infrequent.
Choose NB-IoT when you need reliable cellular coverage, higher data rates, and integration with mobile networks despite higher costs.