Back
Loading views...Sigfox
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
- Smart water/gas/electricity meters
- Asset tracking (low-frequency position updates)
- Cold chain temperature monitoring
- Industrial equipment status monitoring
- 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
- How many uplink messages per day does Sigfox allow?
- What is the maximum payload size?
- What frequency does Sigfox use in Europe?
- How do you send a message with a Wisol module?
- How does Sigfox achieve long range?
Intermediate
- Explain Sigfox frequency diversity (3 transmissions).
- How does Sigfox network-based geolocation work?
- Implement a Sigfox uplink with downlink request in C.
- What are the limitations of 140 uplinks/day?
- How does Sigfox authenticate device messages?
Advanced
- Design an asset tracker using Sigfox for bi-weekly location updates.
- Implement Monarch frequency plan switching for international roaming.
- Integrate Sigfox Backend API with a data processing pipeline.
- Optimize firmware for 10-year battery on AA cell with Sigfox.
- Compare Sigfox vs NB-IoT for smart metering at 1M device scale.
Projects
- Temperature Logger: Send temperature + humidity every hour via Sigfox.
- Asset Tag: Wake on motion, send GPS position, sleep on Sigfox.
- 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