Back

Sigfox

Loading views...

Sigfox

Overview

Sigfox is an ultra-narrowband LPWAN technology operating in sub-GHz ISM bands. Devices send very short messages using ultra-narrow band (100 Hz) modulation, achieving long range with minimal power. The network is operated by Sigfox and its local operator partners.


1. Theory & Fundamentals

  • Frequency: 868 MHz (EU), 902 MHz (US); ultra-narrowband 100 Hz channels
  • Range: 30–50 km rural; 3–10 km urban
  • Data rate: 100 bps uplink, 600 bps downlink
  • Message limit: 140 uplinks/day, 4 downlinks/day
  • Payload: 12 bytes uplink, 8 bytes downlink
  • Power: Extremely low; 10+ year battery possible
  • No subscription on device; Sigfox operates GSMA-style global network

2. Frame / Packet Structure

Sigfox message structure (uplink):
  Preamble | Frame Sync | Device ID(32b) | Payload(0–12B) | Auth(16B) | FCS
  3 repetitions on 3 different frequencies (frequency diversity)

Downlink triggered by uplink with ACK bit set:
  Device sends message with ACK=1
  Opens RX window 20s after TX
  Server responds with 8-byte payload

AT commands (Wisol/Murata modules):
  AT$SF=<hex payload>     Send uplink frame
  AT$SF=<payload>,1       Send with downlink request
  AT+SEND=...             Alternative syntax

3. Protocol Mechanics

  • Ultra-narrowband: Very high spectral efficiency; immune to wideband interference
  • Frequency diversity: 3 transmissions on different frequencies for reliability
  • No acknowledgment by default; network logs all received copies
  • Device auth: Message signed with device private key; anti-replay
  • Backend API: Sigfox Cloud REST API to retrieve messages
  • Geolocation: Atlas Native uses signal from multiple base stations (±200m)

4. Hardware Implementation

  • Sigfox modules: Wisol WSSFM10R, Murata CMWX1ZZABZ (multi-protocol), B-L072Z-LRWAN1
  • AT command interface: UART-based; simple send/receive API
  • Antenna: 1/4-wave whip or PCB monopole for 868/902 MHz
  • Power: 3V; 26mA TX peak; nA sleep current
  • Registration: Device ID + PAC registered to Sigfox backend

5. Register-Level / Configuration

// Wisol module via UART AT commands
void Sigfox_Send(uint8_t *payload, uint8_t len) {
    char cmd[40];
    sprintf(cmd, "AT$SF=");
    for(int i=0;i<len;i++) sprintf(cmd+6+i*2, "%02X", payload[i]);
    strcat(cmd, "\r\n");
    UART_Send((uint8_t*)cmd, strlen(cmd));
    // Wait for OK response
    UART_ReceiveUntil("OK", 30000);
}

6. Driver / Software Development

  • Initialize hardware peripheral or SoC block
  • Implement send/receive with interrupt or DMA
  • Handle errors: timeout, CRC, NAK, bus-off
  • Use circular buffers for RX data flow
  • Implement retry logic for reliability

7. Debugging & Testing

  • Sigfox Backend portal: Verify device is transmitting; check received frames
  • Logic analyzer on UART to Wisol module: Verify AT commands
  • Common issues: Device not registered; antenna missing; module not powered correctly
  • Check UART baud rate (9600 default for most modules)
  • Use ATI=10 to read device ID; ATI=11 for PAC

8. Real-World Applications

  1. Smart water/gas/electricity meters
  2. Asset tracking (low-frequency position updates)
  3. Cold chain temperature monitoring
  4. Industrial equipment status monitoring
  5. Environmental sensors (air quality, noise level)

9. Advanced Topics & Edge Cases

  • Sigfox Atlas: Network-based geolocation (no GPS required)
  • Sigfox Edge: Sigfox protocol stack on custom hardware
  • Monarch: Roaming between Sigfox zones (868/902 MHz support)
  • Sigfox vs LoRa: Sigfox = simpler, operator-managed; LoRa = open, self-deployable
  • End-of-life: Sigfox was acquired; check operator status in your region

10. Standards & Variants

Protocol Payload Rate Range Notes
Sigfox 12B 100bps 50km Ultra-narrow
LoRaWAN 242B 300bps–50kbps 15km Open
NB-IoT large 26kbps city Cellular
LTE-M large 1Mbps cellular Cat-M1

💡 Practical Examples

Ex 1: Send temperature reading

uint8_t payload[4]; // 4 bytes = int32 temperature
memcpy(payload, &temp_milli, 4);
Sigfox_Send(payload, 4);

Ex 2: Read device ID

AT$I=10  → returns 32-bit device ID in hex
AT$I=11  → returns PAC (for backend registration)

Ex 3: Request downlink

AT$SF=0102030405060708090A0B0C,1  → sends payload + requests downlink

🧪 Practice Questions

Beginner

  1. How many uplink messages per day does Sigfox allow?
  2. What is the maximum payload size?
  3. What frequency does Sigfox use in Europe?
  4. How do you send a message with a Wisol module?
  5. How does Sigfox achieve long range?

Intermediate

  1. Explain Sigfox frequency diversity (3 transmissions).
  2. How does Sigfox network-based geolocation work?
  3. Implement a Sigfox uplink with downlink request in C.
  4. What are the limitations of 140 uplinks/day?
  5. How does Sigfox authenticate device messages?

Advanced

  1. Design an asset tracker using Sigfox for bi-weekly location updates.
  2. Implement Monarch frequency plan switching for international roaming.
  3. Integrate Sigfox Backend API with a data processing pipeline.
  4. Optimize firmware for 10-year battery on AA cell with Sigfox.
  5. Compare Sigfox vs NB-IoT for smart metering at 1M device scale.

Projects

  1. Temperature Logger: Send temperature + humidity every hour via Sigfox.
  2. Asset Tag: Wake on motion, send GPS position, sleep on Sigfox.
  3. Dashboard: Sigfox backend webhook → AWS Lambda → Grafana display.

Checklist

  • [ ] Register device on Sigfox backend
  • [ ] Send uplink via AT commands
  • [ ] Receive downlink response
  • [ ] Parse AT command responses
  • [ ] Read device ID and PAC
  • [ ] Interface with Sigfox backend API
  • [ ] Optimize power for maximum battery life
  • [ ] Handle Monarch for multi-region use
  • [ ] Design antenna correctly
  • [ ] Integrate with data pipeline