Worked example: For a 15-question quiz, target correct answers are \(\lceil 0.8 \times 15 \rceil = 12\). If a learner moves from 8/15 to 12/15, score rises from 53.3% to 80%, crossing mastery with four additional correct answers.
In 60 Seconds
This quiz covers LoRaWAN regional deployment: EU868 uses 8 channels with 1% duty cycle limits while US915 uses 64+8 channels with no duty cycle but dwell time restrictions, and devices must be configured for the correct sub-band to communicate with local gateways. Understanding these regional differences is essential for international or multi-region LoRaWAN deployments.
33.1 Learning Objectives
By the end of this quiz chapter, you will be able to:
Contrast Regional Parameters: Differentiate EU868 vs US915 channel plans, duty cycle rules, and power limits
Diagnose Roaming Issues: Identify root causes of international deployment failures from sub-band mismatches
Configure Sub-bands: Apply correct channel configurations to match specific gateway and network operator requirements
Architect Global Deployments: Design GPS-aware firmware that auto-detects and adapts to multi-region frequency plans
Key Concepts
Regional Parameters (RP): LoRa Alliance document specifying channel plans, frequency bands, maximum EIRP, duty cycles, and data rate definitions for each regulatory region.
EU868 Band: European LoRaWAN channel plan using 868 MHz ISM band with 1% duty cycle, maximum 14 dBm EIRP, 8 default channels at 125 kHz.
US915 Band: North American LoRaWAN plan using 902–928 MHz with 64 uplink and 8 downlink channels, no duty cycle restriction but 30 dBm maximum power.
AS923 Band: Asia-Pacific LoRaWAN channel plan for countries including Japan, Singapore, and Malaysia using 923 MHz with 1% duty cycle.
Dwell Time: US915 regulation limiting maximum continuous transmission to 400 ms, replacing duty cycle restrictions; affects maximum payload size at some spreading factors.
Equivalent Isotropically Radiated Power (EIRP): Total radiated power including transmitter output plus antenna gain; regulatory limit varies by region.
Multi-Region Deployment: Design considerations for deploying LoRaWAN devices across multiple countries with different channel plans, requiring region-specific firmware configuration.
Prerequisites
Before attempting this quiz, you should be familiar with:
Select different sub-band configurations for a device and gateway to visualize which channels overlap. See how mismatched sub-bands cause packet loss in US915 deployments.
Adjust the spreading factor, payload size, and transmission interval to see whether your LoRaWAN configuration complies with The Things Network Fair Use Policy (30 seconds airtime per day, 10 downlinks per day).
Worked Example: Multi-Region Firmware with GPS Auto-Configuration
Scenario: A logistics company deploys 2,000 GPS asset trackers on international shipping containers. Trackers must automatically configure for EU868, US915, or AS923 based on GPS location without manual intervention.
Challenge: Static regional configuration fails when containers cross borders. Devices configured for EU868 experience 80% packet loss in North America due to channel mismatch (8 channels vs 64 channels, different frequencies).
Solution Design:
// Multi-region LoRaWAN configuration with GPS auto-detect#include <LMIC.h>#include <TinyGPS++.h>typedefenum{ REGION_UNKNOWN =0, REGION_EU868, REGION_US915, REGION_AS923} lorawan_region_t;// Geofence definitions (approximate)typedefstruct{float lat_min, lat_max;float lon_min, lon_max; lorawan_region_t region;} region_boundary_t;const region_boundary_t regions[]={// Europe (simplified){35.0,72.0,-12.0,40.0, REGION_EU868},// North America (simplified){24.0,50.0,-125.0,-66.0, REGION_US915},// Southeast Asia (simplified){-10.0,25.0,95.0,140.0, REGION_AS923}};lorawan_region_t detect_region_from_gps(float lat,float lon){for(int i =0; i <sizeof(regions)/sizeof(region_boundary_t); i++){if(lat >= regions[i].lat_min && lat <= regions[i].lat_max && lon >= regions[i].lon_min && lon <= regions[i].lon_max){return regions[i].region;}}return REGION_UNKNOWN;}void configure_lorawan_region(lorawan_region_t region){ LMIC_reset();switch(region){case REGION_EU868:// EU868: 8 default channels, 1% duty cycle// Channels 868.1, 868.3, 868.5 MHz configured by LMIC LMIC_setupChannel(0,868100000, DR_RANGE_MAP(DR_SF12, DR_SF7)); LMIC_setupChannel(1,868300000, DR_RANGE_MAP(DR_SF12, DR_SF7B)); LMIC_setupChannel(2,868500000, DR_RANGE_MAP(DR_SF12, DR_SF7));// ... channels 3-7 LMIC.txpow =14;// +14 dBm max in EU868break;case REGION_US915:// US915: 64 uplink channels, select TTN sub-band 2 (channels 8-15)for(int i=0; i<72; i++){ LMIC_disableChannel(i);// Disable all first}// Enable only TTN standard sub-band (channels 8-15)for(int i=8; i<=15; i++){ LMIC_enableChannel(i);} LMIC_enableChannel(65);// 500kHz uplink channel LMIC.txpow =20;// +20 dBm (can go to +30 with antenna gain)break;case REGION_AS923:// AS923: Similar to EU868 but different frequencies LMIC_setupChannel(0,923200000, DR_RANGE_MAP(DR_SF12, DR_SF7)); LMIC_setupChannel(1,923400000, DR_RANGE_MAP(DR_SF12, DR_SF7));// ... AS923-specific channels LMIC.txpow =16;// +16 dBm typical for AS923break;default:// Unknown region: default to most permissive (US915) configure_lorawan_region(REGION_US915);break;}}void setup(){// Wait for GPS fixwhile(!gps.location.isValid()){// Poll GPS until valid fix delay(1000);}// Detect region from GPS coordinatesfloat lat = gps.location.lat();float lon = gps.location.lng(); lorawan_region_t region = detect_region_from_gps(lat, lon);// Configure LoRaWAN for detected region configure_lorawan_region(region);// Store region in EEPROM to avoid re-detection on every boot EEPROM.write(REGION_ADDR, region);// Initiate OTAA join LMIC_startJoining();}void loop(){// Periodically check if region changed (every 24 hours)staticuint32_t last_region_check =0;if(millis()- last_region_check >86400000){// 24 hoursfloat lat = gps.location.lat();float lon = gps.location.lng(); lorawan_region_t new_region = detect_region_from_gps(lat, lon); lorawan_region_t current_region = EEPROM.read(REGION_ADDR);if(new_region != current_region && new_region != REGION_UNKNOWN){// Region changed! Reconfigure and rejoin configure_lorawan_region(new_region); EEPROM.write(REGION_ADDR, new_region); LMIC_startJoining();} last_region_check = millis();} os_runloop_once();}
Expected Results:
Before (Static EU868 configuration):
Europe: 99% success rate
North America: 20% success (channel mismatch)
Asia: 15% success (frequency/power mismatch)
Manual reconfiguration required per region
After (GPS auto-configuration):
All regions: 98-99% success rate
Automatic region detection on first GPS fix
Rejoin network when crossing regional boundaries
Zero manual intervention
Power Impact:
GPS power for region detection: - GPS active: 30 mA for 30-60 seconds (cold start) - Energy cost: 30 mA x 45s = 1,350 mAs = 0.375 mAh (one-time per region) - Re-check every 24 hours: 0.375 mAh/day (negligible vs 288 mAh/day for transmissions)
Production Considerations:
Geofence accuracy: Use more precise boundaries for border regions
GPS fallback: If GPS unavailable, attempt join on all regions (EU868 first, then US915, then AS923)
Firmware size: Multi-region support adds ~8 KB (LMIC library already includes all region definitions)
Testing: Simulate GPS coordinates in each region before deployment
Key Insight: Multi-region firmware with GPS auto-configuration eliminates 80-95% of regional deployment failures and removes manual configuration burden for globally-mobile assets. The one-time GPS fix cost (0.375 mAh) is negligible compared to weeks of packet loss from wrong configuration.
Try It: GPS-Based LoRaWAN Region Detector
Enter GPS coordinates (or select a preset city) to see which LoRaWAN regional configuration would be auto-selected by a multi-region firmware. The display shows the detected region, its frequency plan, and key parameters.
{// Parse preset coordinateslet lat = gpsLat;let lon = gpsLon;if (gpsPreset !=="Custom") {const match = gpsPreset.match(/\(([-\d.]+),\s*([-\d.]+)\)/);if (match) { lat =parseFloat(match[1]); lon =parseFloat(match[2]); } }// Region detection (matches firmware geofence logic)const regions = [ {name:"EU868",lat_min:35,lat_max:72,lon_min:-12,lon_max:40,color:"#3498DB",freq:"863-870 MHz",power:"+14 dBm",channels:"8 default",duty:"1% (regulatory)",notes:"ETSI regulation"}, {name:"US915",lat_min:24,lat_max:50,lon_min:-125,lon_max:-66,color:"#E67E22",freq:"902-928 MHz",power:"+30 dBm",channels:"64 uplink + 8 downlink",duty:"None (FCC Part 15)",notes:"TTN uses sub-band 2"}, {name:"AS923",lat_min:-10,lat_max:25,lon_min:95,lon_max:140,color:"#9B59B6",freq:"923-925 MHz",power:"+16 dBm",channels:"16 channels",duty:"Varies by country",notes:"Japan, SE Asia, Oceania"}, {name:"AU915",lat_min:-50,lat_max:-10,lon_min:110,lon_max:155,color:"#16A085",freq:"915-928 MHz",power:"+30 dBm",channels:"64 uplink + 8 downlink",duty:"None",notes:"Similar to US915"}, {name:"IN865",lat_min:8,lat_max:37,lon_min:68,lon_max:97,color:"#E74C3C",freq:"865-867 MHz",power:"+30 dBm",channels:"3 default",duty:"None",notes:"India only"}, {name:"KR920",lat_min:33,lat_max:39,lon_min:125,lon_max:130,color:"#2C3E50",freq:"920-923 MHz",power:"+14 dBm",channels:"7 channels",duty:"< 10% per channel",notes:"South Korea"} ];let detected =null;for (const r of regions) {if (lat >= r.lat_min&& lat <= r.lat_max&& lon >= r.lon_min&& lon <= r.lon_max) { detected = r;break; } }// SVG world map (simplified rectangles for regions)const w =700;const h =320;const mapX = x => ((x +180) /360) * (w -80) +40;const mapY = y => ((90- y) /180) * (h -60) +30;let svgMap =`<svg width="${w}" height="${h}" style="font-family: Arial, sans-serif; background: #f0f4f8; border-radius: 6px;">`; svgMap +=`<text x="${w/2}" y="18" text-anchor="middle" font-size="13" font-weight="bold" fill="#2C3E50">LoRaWAN Regional Frequency Plan Map</text>`;// Draw region boxesfor (const r of regions) {const x1 =mapX(r.lon_min);const y1 =mapY(r.lat_max);const rw =mapX(r.lon_max) - x1;const rh =mapY(r.lat_min) - y1;const isDetected = detected && detected.name=== r.name; svgMap +=`<rect x="${x1}" y="${y1}" width="${rw}" height="${rh}" rx="3" fill="${r.color}" opacity="${isDetected ?0.5:0.15}" stroke="${r.color}" stroke-width="${isDetected ?2.5:1}"/>`; svgMap +=`<text x="${x1 + rw/2}" y="${y1 + rh/2+4}" text-anchor="middle" font-size="11" font-weight="bold" fill="${r.color}">${r.name}</text>`; }// Draw GPS pinconst pinX =mapX(lon);const pinY =mapY(lat); svgMap +=`<circle cx="${pinX}" cy="${pinY}" r="6" fill="#E74C3C" stroke="white" stroke-width="2"/>`; svgMap +=`<circle cx="${pinX}" cy="${pinY}" r="10" fill="none" stroke="#E74C3C" stroke-width="1.5" opacity="0.5"/>`; svgMap +=`<text x="${pinX}" y="${pinY -14}" text-anchor="middle" font-size="10" font-weight="bold" fill="#E74C3C">${lat.toFixed(1)}, ${lon.toFixed(1)}</text>`; svgMap +=`</svg>`;const regionInfo = detected?html` <table style="border-collapse: collapse; width: 100%; font-size: 13px;"> <tr style="background: ${detected.color}; color: white;"> <th colspan="2" style="padding: 8px 12px; text-align: left;">Detected: ${detected.name}</th> </tr> <tr style="background: #f8f9fa;"><td style="padding: 5px 12px; font-weight: bold;">Frequency Band</td><td style="padding: 5px 12px;">${detected.freq}</td></tr> <tr><td style="padding: 5px 12px; font-weight: bold;">Max TX Power</td><td style="padding: 5px 12px;">${detected.power}</td></tr> <tr style="background: #f8f9fa;"><td style="padding: 5px 12px; font-weight: bold;">Channels</td><td style="padding: 5px 12px;">${detected.channels}</td></tr> <tr><td style="padding: 5px 12px; font-weight: bold;">Duty Cycle</td><td style="padding: 5px 12px;">${detected.duty}</td></tr> <tr style="background: #f8f9fa;"><td style="padding: 5px 12px; font-weight: bold;">Notes</td><td style="padding: 5px 12px;">${detected.notes}</td></tr> </table> `:html` <div style="padding: 12px; background: #E74C3C11; border-left: 4px solid #E74C3C; border-radius: 4px;"> <strong style="color: #E74C3C;">REGION_UNKNOWN</strong> - No matching LoRaWAN region for these coordinates.<br/> <span style="font-size: 13px; color: #7F8C8D;">Firmware would default to US915 (most permissive) or attempt join on all regions sequentially.</span> </div> `;returnhtml` <div style="text-align: center;">${html`${svgMap}`} <div style="margin-top: 10px; text-align: left;">${regionInfo} </div> </div> `;}
Interactive Quiz: Match Concepts
Interactive Quiz: Sequence the Steps
🏷️ Label the Diagram
💻 Code Challenge
33.4 Summary
This chapter covered regional deployment concepts for LoRaWAN networks:
Regional Parameters: EU868 vs US915 channel configuration differences
Duty Cycle vs Fair Use: Regulatory limits vs network policies
Multi-Region Firmware: GPS-based automatic region detection
Sub-band Selection: Configuring devices for specific network operators
Common Pitfalls
1. Programming Wrong Regional Frequency Band
Programming EU868 frequencies on hardware deployed in the US results in illegal operation and zero connectivity. Frequency band must match both the deployment region’s regulations and the hardware’s RF capabilities. Verify regional parameters as part of pre-shipment testing.
2. Confusing Duty Cycle and Dwell Time Regulations
EU regions use percentage duty cycle limits (1% = 36s/hour). US regions use dwell time limits (400 ms maximum continuous transmission) with different implications for packet size. Applying EU duty cycle calculations to US deployments may result in over-conservative design or non-compliance.
3. Assuming Global Hardware Works in All Regions
LoRaWAN modules designed for EU868 may not transmit on US915 frequencies. Some modules support multiple regional configurations but require firmware parameter changes. Always verify hardware frequency support matches the target deployment region.
4. Neglecting TX Power Limits in Link Budget
Maximum EIRP (including antenna gain) is regulated per region. Exceeding the limit (e.g., adding a high-gain directional antenna without reducing TX power) is a regulatory violation. Always calculate total EIRP to ensure compliance with regional limits.
33.5 What’s Next
You have completed the LoRaWAN Quiz Bank! Return to the Quiz Bank Index for the overview, or continue to related topics: