Arduino MKR WAN 1310

Arduino S.r.lMCU 8-32 bitarduino

⚡ The essentials in 60 seconds

The Arduino MKR WAN 1310 is a compact development board designed specifically for long-range, low-power wireless communication in the Internet of Things. Introduced in early 2019, this board represents a significant evolution from its predecessor, the MKR WAN 1300, by integrating a dedicated battery charger, additional storage, and more sophisticated power management controls. It belongs to the MKR family, which is characterized by a small form factor and a standardized pin layout that allows for easy expansion with various shields and modules. The board is built around the Microchip SAMD21G18A microcontroller, a 32-bit Arm Cortex-M0+ processor running at 48 MHz. For those unfamiliar with these terms, a microcontroller is a tiny computer on a single chip that controls the board's operations. The Cortex-M0+ architecture is known for its efficiency, making it ideal for battery-powered devices where energy conservation is critical. This processor is paired with 256 KB of flash memory for storing your program and 32 KB of SRAM for temporary data processing. While these amounts are modest compared to modern smartphones, they are more than sufficient for the lightweight tasks typically associated with sensor data collection and transmission.

The defining feature of the MKR WAN 1310 is its ability to communicate using LoRa and LoRaWAN technologies. LoRa is a wireless modulation technique that allows data to travel several kilometers using very little power, making it perfect for remote monitoring applications where cellular networks are unavailable or too expensive. The board achieves this through a Murata CMWX1ZZABZ-078 radio module. This module is not just a simple radio chip; it contains its own processor, an STM32L0, and a Semtech SX1276 transceiver. This dual-chip design means the board effectively has two brains: the main SAMD21 handles your application logic, while the STM32L0 inside the radio module manages the complex details of wireless communication. They communicate with each other via a serial interface, allowing the main processor to send simple commands to the radio without needing to understand the intricate physics of radio waves. The radio supports multiple frequency bands, including 868 MHz for Europe and 915 MHz for the United States, which can be selected in software at runtime. This flexibility is a major advantage, as it allows a single hardware design to be deployed globally without needing different physical components for each region.

Power management is a central theme of the MKR WAN 1310’s design. The board includes a TI BQ24195L power management integrated circuit, which handles charging for rechargeable lithium-ion or lithium-polymer batteries. This chip ensures that the battery is charged safely and efficiently, protecting it from overcharging or overheating. The board is optimized for ultra-low power consumption, capable of drawing as little as 104 microamps when properly configured for sleep modes. To put this in perspective, a standard AA battery could theoretically power such a device for years if it spent most of its time sleeping and only woke up briefly to send a small packet of data. The radio module itself has even lower power states, drawing between 1.4 and 1.65 microamps when in deep sleep. This extreme efficiency is achieved through careful hardware design and software support, including specific compiler flags that enable very low-power modes in the Arduino core. However, users should be aware that the board’s power LED is tied to the 5-volt rail, so it will remain dark when the board is running solely on battery power, which can be confusing during debugging.

Connectivity and expansion are handled through a variety of interfaces. The board features a micro-UFL connector for attaching an external antenna, which is crucial for maximizing range. A pentaband antenna is typically included, covering the common sub-GHz frequencies. For wired connections, the board provides standard digital and analog pins compatible with the MKR shield ecosystem. It includes one UART, one SPI, and one I2C interface, allowing it to connect to various sensors and peripherals. A unique feature is the Eslov port, a five-pin connector that allows for "self-identifying" I2C modules. This means that when you plug in a compatible sensor, the board can automatically detect what it is and configure itself accordingly, simplifying the wiring process. Additionally, there is a 2 MB external flash memory chip on board. This storage is separate from the microcontroller’s internal memory and is useful for logging data when the network is unavailable or for storing configuration files and over-the-air updates. Security is also addressed with an ATECC508 secure element, a dedicated chip for cryptographic operations, which helps protect sensitive data like network keys from being extracted from the main processor.

From a software perspective, the MKR WAN 1310 is programmed using the Arduino IDE or the arduino-cli tool. The programming language is C/C++, the standard for Arduino boards. The board is supported by the official MKRWAN library, which provides a simple API for joining LoRaWAN networks, sending data, and receiving commands. The board is particularly well-suited for use with The Things Network (TTN), a popular open-source LoRaWAN network. Developers can register their devices on TTN and then use the board to send data to the cloud, where it can be visualized or processed further. It is important to note that the board does not support CircuitPython, so users must stick to the Arduino C++ environment. There are also some known quirks to be aware of. For instance, the firmware on the radio module and the library on the main board must be compatible; sometimes, a fresh board requires a firmware update before it will work correctly with the latest library. Additionally, due to regulatory duty-cycle restrictions in Europe, the firmware enforces a hard limit that prevents sending more than one message every two minutes, regardless of software settings. This is a legal requirement to prevent radio interference, not a software bug, but it can surprise developers used to faster communication speeds.

Despite its strengths, the MKR WAN 1310 has some limitations. It lacks Wi-Fi or Bluetooth, so it cannot connect to local networks or smartphones directly; it relies entirely on the LoRaWAN infrastructure for internet connectivity. The board is currently listed as sold out on the official Arduino store, and there are concerns about the supply chain for the Murata radio module, although no official discontinuation notice has been confirmed. Users should also be cautious of documentation inconsistencies, such as conflicting references to the radio chip model (SX1272 vs. SX1276) in older examples, though the Murata datasheet confirms the SX1276 is used. Overall, the MKR WAN 1310 remains a powerful tool for creating battery-operated, long-range IoT devices. Its combination of efficient power management, secure storage, and flexible radio capabilities makes it an excellent choice for environmental monitoring, smart agriculture, and asset tracking projects where reliability and battery life are paramount.

Forum (1 topic) →

AttrSpecsverified
main_mcuMicrochip (Atmel) SAMD21G18A — Arm Cortex-M0+ 32-bit at 48 MHz (build.mcu=cortex-m0plus, build.f_cpu=48000000L, -D__SAMD21G18A__), 256 KB flash (upload.maximum_size=262144), 32 KB SRAM (upload.maximum_data_size=32768), no EEPROM, 32.768 kHz RTC clock (boards.txt, SAMD21 family datasheet, store tech specs). Arduino's own product blurb says "Arm Cortex-M0 32-bit SAMD21" (docs.arduino.cc hardware page); the store spec table and the datasheet say Cortex-M0+ — the core builds it as cortex-m0plus.✔
no_gpu(microcontroller board).? unverified
lora_radio_moduleMurata CMWX1ZZABZ-078 (docs.arduino.cc hardware page, firmware README). Per Murata's datasheet (hosted by Arduino, spec number BP-ABZ-C): Main ICs = STM32L (STM32L072/L082 family) + Semtech SX1276, "Supported Frequencies: 868 MHz, 915 MHz" (Murata CMWX1ZZABZ datasheet, PDF). The STM32L0 runs Arduino's AT-command firmware; the SX1276 is Semtech's "LoRa Connect Transceiver, 137 MHz to 1020 MHz" (Semtech product page). - 1310 vs 1300 radio differentiation: the SX1272 (in the MKR WAN 1300's documentation) is Semtech's 860–1000 MHz part (Semtech SX1272 page), while the SX1276 covers the much wider 137–1020 MHz range (Semtech SX1276 page) — consistent with the 1310's advertised 433/868/915 MHz carrier options (store tech specs). Note the sources conflict across the product line: Arduino's own DumbModemLoraSender example comment still says "the SX1272 chip (part of Murata module)" (example source), while the Murata datasheet Arduino hosts for the 1310 says SX1276, and the module firmware ships both sx1272 and sx1276 drivers (firmware repo tree).✔
secure_elementMicrochip ATECC508 crypto chip (store tech specs, ATECC508A datasheet).✔
on_board_storage2 MByte external flash ("2MByte SPI Flash" in the overview; "QSPI Flash Memory 2MByte (external)" in the spec table) for data logging and OTA/config storage (store page).✔
battery_chargerTI BQ24195L PMIC — the core compiles the 1310 variant with -DUSE_BQ24195L_PMIC (boards.txt, TI product page). Supported batteries: rechargeable Li-Ion or Li-Po, 1024 mAh minimum; battery connector JST S2B-PH-SM4-TB(LF)(SN), mating JST PHR-2 (store tech specs & FAQ).✔
gpio_mkr_form_factor_3_3_v_logic8 digital I/O, 13 PWM pins (0…8, 10, 12, 18/A3, 19/A4), 7 analog inputs (ADC 8/10/12-bit), 1 analog output (DAC 10-bit), 8 external interrupts (0, 1, 4, 5, 6, 7, 8, 16/A1, 17/A2), 1 UART, 1 SPI, 1 I²C, 7 mA DC per I/O pin, LED_BUILTIN = 6 (store tech specs, pinout diagram PDF).✔
extra_i_c_eslov_port5-pin 1.0 mm-pitch connector (SDA, SCL, GND, +5 V, alarm pin) for self-identifying I²C modules; suggested mating connector SHR-05V-S-B (store page "Additional I2C Port", connector datasheet).✔
rfmicro-UFL antenna connector; bundled pentaband antenna rated 2 dB gain, carrier 433/868/915 MHz (store tech specs & FAQ).✔
usbFull-Speed USB device and embedded host on the SAMD21 (store tech specs); bootloader PID 0x8059, app PID 0x0059, VID 0x2341 (boards.txt).✔
powerUSB or VIN, board supply 5 V (Vin pin is an input, "5V to maximum 6V", disconnects USB power when used); circuit operating voltage 3.3 V; the LED-ON LED tracks the 5 V rail, not battery, so battery-only operation leaves it dark (store FAQ).✔
consumptionboard-level "as low as 104 µA" when properly configured (store page "Improved Battery Power"). Module-level figures from the Murata datasheet: TX 47 mA typ @14 dBm, 128 mA typ @20 dBm (PA_BOOST), and low-power modes of 1.40–1.65 µA (STM32L0 Stop/Standby + SX1276 Sleep) (Murata datasheet pp. 6–7).✔
mechanical67.64 × 25 mm, 32 g (store tech specs).✔
certificationsCE, FCC, UKCA, ISED/IC, RCM, MIC, GB4943, RoHS, REACH, WEEE declarations listed (store page).✔
  • Manufacturer: Arduino S.r.l., Via Andrea Appiani 25, Monza (MB), IT 20900 — manufacturer block on the official store page (store.arduino.cc/products/arduino-mkr-wan-1310). Board support is in Arduino's official ArduinoCore-samd (mkrwan1310.name=Arduino MKR WAN 1310, boards.txt).
  • Year: 2019 — the board was integrated into ArduinoCore-samd in April–May 2019 (commits "MKRWAN1310: start integration" 2019-04-19, "Mark mkrfox1200 and mkrwan1310 as very low power" 2019-04-19, temporary removal 2019-05-16 and re-addition 2019-05-31, commit history for boards.txt).
  • Status: Active listing, sold out. On 2026-10-13 the official store page is live but shows "Sold out"; software support is current (board present in boards.txt master, MKRWAN library v1.1.2).
  • Price: €49.00 (VAT included) as listed on 2026-10-13 (store page).
  • Variants: a single SKU; the regional LoRa band is selected in software at runtime (e.g. modem.begin(EU868) or US915, LoraSendAndReceive example); store lists "Working region EU/US (confirmed)" (store page). Predecessor: MKR WAN 1300 — the 1310 page itself presents the 1300 as "its predecessor" and the improvements as "a new battery charger, a 2MByte SPI Flash, and improved control of the board's power consumption" (store page). Sibling board id in the core: mkrwan1300 (boards.txt).

+ Strengths

  • Sub-GHz LoRa / LoRaWAN in the MKR shield-compatible footprint — the only radio is the Murata CMWX1ZZABZ; no Wi-Fi or Bluetooth (docs.arduino.cc hardware page).
  • LoRa PHY headroom: chirp-spread-spectrum with spreading factors trading range vs. data rate (0.3–27 kbit/s), link budgets ~155–170 dB, ~4.8 km urban / 16+ km rural LoS per the LoRa Development Portal (Wikipedia — LoRa).
  • Battery-first redesign vs the 1300: BQ24195L Li-Ion/Li-Po charger, 104 µA configured floor, -DVERY_LOW_POWER core flag (store page, boards.txt).
  • 2 MB on-board flash enables local data logging and OTA-style config/script delivery, with credentials kept in the ATECC508 secure element (store page "On-board Storage").
  • Runtime regional-band switching (AT+BAND, modem.begin(EU868|US915|AS923|…)) instead of compile-time firmware per region (firmware README, example).
  • "Dumb modem" raw-LoRa mode: the module can be driven without the LoRaWAN stack over SPI1 with LORA_IRQ_DUMB as chip-select; arduino-LoRa ≥ 0.5.0 supports the MKR WAN 1300/1310 out of the box (DumbModemLoraSender example, arduino-LoRa).
  • Class A LoRaWAN end-device with OTAA/ABP, ADR, confirmed/unconfirmed uplinks, RSSI/SNR readback (AT list).
  • Eslov self-identifying I²C expansion port (5-pin, alarm line) — same concept as the MKR family's sensor modules (store page).
  • Two CPUs on one board (SAMD21 + STM32L0 in the radio) speaking AT-over-SPI; the module can also be used standalone on other projects via LoRaModem modem(Serial1) wiring (example).

− Weaknesses

  • Firmware/library mismatch on fresh boards — "Firmware version mismatch" when a new MKRWAN library meets old module firmware; run the firmware updater example first (issue #126, updater examples).
  • joinOTAA false failures — "joinOTAA … gives false error 'Something went wrong'" in the official examples (issue #139).
  • TX wedges after 255 sends — frame-counter class bug, "Problem with packet transmission after 255 sends" (issue #141).
  • SPI link between SAMD21 and the module's STM32 misbehaving specifically on the 1310 — maintainer issue titled "SPI transfer problem between SAM D21 and STM32 on MKRWAN1310" (issue #86).
  • ABP regression — "joinABP not working since library update from 1.0.14 to 1.0.15" (issue #85).
  • US915 rough edges — "Does this library really support US915?" and difficulty forcing US sub-band 2 for reliable Helium joins (issue #100).
  • Hard 2-minute TX throttle (EU duty-cycle design): "independent of this setting, the modem will not allow sending more than one message every 2 minutes, this is enforced by firmware and can not be changed" (official example comment).
  • Module supply-chain risk: the CMWX1ZZABZ module's own Murata product page is no longer reachable (404 on 2026-10-13) and the board itself is "Sold out" at the Arduino store (store page).
  • No CircuitPython / no Wi-Fi or BT — LoRaWAN-only connectivity and Arduino-C++-only tooling (see Systems).
  • Retour d'expérience expert expert — expert-arduino
    • Bonjour à tous, je débute avec la MKR WAN 1310 pour un projet de suivi de température en extérieur. J'ai suivi le tuto officiel pour la connexion OTAA sur un réseau local, mais je bloque systématiquement. La fonction joinOTAA renvoie une erreur quelque chose a mal tourne, alors que mes clés sont co… — maker-loi
    • Salut, ce souci de faux échec avec joinOTAA est effectivement documenté dans l'issue 139 du dépôt MKRWAN. Avant de modifier ton code, vérifie impérativement la version du firmware de ton module Murata. Sur les cartes neuves, il y a souvent un décalage entre la librairie récente et le firmware préin… — expert-arduino
    • Je confirme le point sur le firmware, ça m'a fait perdre une après-midi. Par contre, je rencontre un autre souci plus insidieux : après environ 255 transmissions réussies, ma carte ne peut plus rien envoyer, sans aucune erreur explicite dans le moniteur série. J'ai vu que c'est un bug connu lié au … — gadget-hunter

Community feedback and projects

  • Join The Things Network with the MKR WAN

    Join The Things Network with the MKR WAN — official Arduino tutorial (1300/1310 line): register on TTN, OTAA-join, view uplinks . (unverified au 2026-10-13) LoRa Button Press — official Arduino board-to-board tutorial: wireless button events between two MKR W…

  • Community projects on Arduino Project Hub

    Community projects on Arduino Project Hub — searchable MKR WAN 1310 project collection . (unverified au 2026-10-13) — reference hosted on create, status unverified verified on 2026-10-13. Project documented in the mkr-wan-1310 datasheet (MCU 8-32 bit); role: …

  • Official example sketches

    Official example sketches — LoraSendAndReceive (LoRaWAN OTAA send/receive), FirstConfiguration , FWUpdaterBridge , MKRWANFWUpdate_standalone , DumbModemLoraSender (raw LoRa) . (unverified au 2026-10-13)

  • Firmware/library mismatch on fresh boards — "Firmware version mismatch" when a new MKRWAN library meets old module firmware; run the firmware updater example first (issue #126, updater examples).
  • joinOTAA false failures — "joinOTAA … gives false error 'Something went wrong'" in the official examples (issue #139).
  • TX wedges after 255 sends — frame-counter class bug, "Problem with packet transmission after 255 sends" (issue #141).
  • SPI link between SAMD21 and the module's STM32 misbehaving specifically on the 1310 — maintainer issue titled "SPI transfer problem between SAM D21 and STM32 on MKRWAN1310" (issue #86).
  • ABP regression — "joinABP not working since library update from 1.0.14 to 1.0.15" (issue #85).
  • US915 rough edges — "Does this library really support US915?" and difficulty forcing US sub-band 2 for reliable Helium joins (issue #100).
  • Hard 2-minute TX throttle (EU duty-cycle design): "independent of this setting, the modem will not allow sending more than one message every 2 minutes, this is enforced by firmware and can not be changed" (official example comment).
  • Module supply-chain risk: the CMWX1ZZABZ module's own Murata product page is no longer reachable (404 on 2026-10-13) and the board itself is "Sold out" at the Arduino store (store page).
  • No CircuitPython / no Wi-Fi or BT — LoRaWAN-only connectivity and Arduino-C++-only tooling (see Systems).
  • Clignoter la LED embarquée D6 debutant Schéma : IMG-mkr-wan-1310-debutant-1-mkrwan1310-clignotement-led.svg — La carte MKR WAN 1310 vue de dessus, câble micro-USB branché, LED D6 (broche 6) entourée d'un halo.
  • Bouton poussoir et console série debutant Schéma : IMG-mkr-wan-1310-debutant-2-mkrwan1310-bouton-console-serie.svg — Bouton poussoir câblé entre la broche 1 et GND sur une MKR WAN 1310, moniteur série à l'écran.
  • Lire un capteur analogique (potentiomètre) debutant Schéma : IMG-mkr-wan-1310-debutant-3-mkrwan1310-capteur-analogique.svg — Potentiomètre alimenté en 3,3 V, curseur relié à A0 d'une MKR WAN 1310, valeurs affichées sur le traceur série.
  • Première configuration du module LoRa intermediaire Schéma : IMG-mkr-wan-1310-intermediaire-1-mkrwan1310-premiere-config-lora.svg — MKR WAN 1310 reliée à un ordinateur, antenne micro-UFL vissée, flèche vers le module Murata CMWX1ZZABZ et la mise à jour du firmware.
  • LoRa point à point sans réseau (dumb modem) intermediaire Schéma : IMG-mkr-wan-1310-intermediaire-2-mkrwan1310-lora-point-a-point.svg — Deux MKR WAN 1310 échangeant des paquets LoRa en mode direct, ondes radio entre les antennes, aucun routeur ni passerelle au centre.
  • Rejoindre The Things Network (OTAA) intermediaire Schéma : IMG-mkr-wan-1310-intermediaire-3-mkrwan1310-otaa-the-things-network.svg — MKR WAN 1310 envoyant un uplink LoRaWAN vers une antenne de passerelle puis le cloud The Things Network, clés OTAA représentées par des cadenas.
  • Uplinks confirmés robustes et duty cycle avance Schéma : IMG-mkr-wan-1310-avance-1-mkrwan1310-uplink-confirme-robuste.svg — File d'attente de messages sur une MKR WAN 1310, horloge de duty cycle 2 minutes, flèches ACK/retour vers la passerelle et réémissions.
  • Capteur I²C sur port Eslov et journalisation flash avance Schéma : IMG-mkr-wan-1310-avance-2-mkrwan1310-eslov-capteur-i2c.svg — Connecteur Eslov 5 broches d'une MKR WAN 1310 relié à un module capteur I²C auto-identifiable, puce de flash SPI 2 Mo en inset et uplink LoRaWAN sortant.
  • Sommeil bas courant et réveil sur interruption avance Schéma : IMG-mkr-wan-1310-avance-3-mkrwan1310-sommeil-bas-courant.svg — MKR WAN 1310 sur batterie Li-Po endormie, icône lune, broche 16/A1 en pointillés reliée à un bouton de réveil, jauge 104 µA.

Code library — examples written for this board

  • join-otaa.ino Arduino

    The MKR WAN 1310 first LoRaWAN connection: provisioning the three identifiers (Device EUI, App EUI, App Key), then OTAA join with eight attempts over 30 seconds. The server validates the device and t…

  • uplink-confirme.ino Arduino

    Reliable LoRaWAN transmission: the MKR WAN 1310 sends two sensor bytes on port 2 in confirmed mode and waits for the server MAC acknowledgement. On failure the frame is simply retried next cycle — th…

  • downlink.ino Arduino

    A LoRaWAN node is steered remotely: this MKR WAN 1310 listens on port 8 and changes its own reporting period when the server sends it one byte. The remote-configuration pattern that avoids physically…

  • activation-abp.ino Arduino

    ABP skips the join step: the address and session keys are hand-written into the MKR WAN 1310 and the server. Useful on private networks or for quick debugging, but with no key rotation or replay resi…

  • suivi-adr.ino Arduino

    ADR is LoRaWAN's automatic energy/range tuning: enabled on the MKR WAN 1310, the server progressively lowers SF and power when the link is good. This sketch prints the current data rate at each send …

  • classe-c.ino Arduino

    For a mains-powered actuator, class C divides downlink latency: the MKR WAN 1310 listens to RX2 continuously and applies a server command within seconds. Quiescent current rises to ~20 mA — mains ins…

  • noeud-batterie.ino Arduino

    Real battery deployment: since the LoRaWAN session survives deepSleep, the MKR WAN 1310 just does one uplink every thirty minutes with no re-join. On two AA NiMH the budget lasts months, provided ser…

  • diagnostic-join.ino Arduino

    When LoRaWAN join fails, the causes are always the same: this diagnostic program states the checks, tries three long joins, then lists ranked hypotheses. A reflex to have before swapping boards.

  • ttn_fetch.py Python

    On the server side, this Python script queries The Things Network v3 API to fetch the latest uplinks from a MKR WAN 1310: timestamp, gateway-seen RSSI and base64 payload. The building block of a dash…

  • test-couverture.ino Arduino

    Validating LoRaWAN coverage before deployment: this MKR WAN 1310 emits an id+counter frame every thirty seconds during a trip. Crossing the serial trace (transmit time) with server-side RSSI draws th…

Examples and repos found online