Written by

in

findy Lab compatibleOEM building blockRaspberry Pi HAT option

findy IoT Module

The generic LTE + GNSS node of the findy Lab ecosystem. No sensor front-end — you decide what it measures, in MicroPython, on 16 GPIO brought out to headers.

GPIO16 on headers · 15 free
UART2IO17 TX / IO16 RX
SPIMISO · MOSI · SCK · CS
I²CIO21 SDA / IO22 SCL
Analog IN3× ADC1 · 12-bit
USB-Cpower + REPL · no programmer
LTE Cat 1 bisEG916Q-GL · + 2G fallback
GNSSon-board patch + u.FL
eSIMMFF2 chip, no socket
Wi-Fi / BLEESP32-WROOM-32U · u.FLAPI coming
Qty1 pc10–99100–499500+
Price€82.00€61.50€49.20€41.00

+ €25 / device / year — findy IoT Platform, global LTE SIM, OTA updates, support.

What the free pins give you

No sensor front-end is fitted, so every bus is yours to assign. Left: what you connect. Right: what the board brings. Colour indicates type.

Analog IN ×3
IO34 · IO36 · IO39 on J7 · ADC1, 12-bit, input only · radio-independent
UART2
IO17 TX · IO16 RX on J7 — the only free hardware UART
SPI
IO18 SCK · IO19 MISO · IO23 MOSI · IO5 CS on J11
I²C
IO21 SDA (J10) · IO22 SCL (J11) — ESP32 defaults
Wake & touch pins
IO2 · IO4 · IO13 · IO15 on J11 · RTC domain, alive through deep sleep
Supply sense
IO35 · divider fitted on the board
ESP32-WROOM-32U · Xtensa LX6 dual-core
520 KB SRAM · 448 KB ROM
MicroPython v1.25
Quectel EG916Q-GL · Cat 1 bis · 2G · GNSS
FT231XS USB-UART · auto-bootloader
Supercap buffer · OTA
LTE Cat 1 bis / 2G
Quectel EG916Q-GL · on-board patch antenna + u.FL (J3)
GNSS
On-board patch antenna + u.FL (J4)
Embedded SIM
MFF2 chip soldered to the board · global findy SIM
USB-C
5 V in + FT231XS serial · auto-bootloader, no buttons
J8 / J9 headers
3.7–4.2 V direct onto the system rail
Supercapacitor
Absorbs the LTE transmit peaks — a thin supply does not brown out
Wi-Fi / Bluetooth API coming
ESP32-WROOM-32U · u.FL antenna connector
Inputs
Outputs
Communication
Power
API coming hardware fitted, no findy Lab API yet
16 GPIO on three headers

Every pin below is a physical pad on the R.2 board. Fifteen are free for your application; one carries the on-board supply-voltage divider. Pins that talk to the modem are not brought out — the framework owns them.

Input only — ADC1, no output driver Digital GPIO — in, out, PWM, bus Bus Reserved on this board Ground / not connected

J7 — 10-pin

Analog inputs + UART2
1IO36ADC1_0 · input only RTC
2IO17UART2 TX
3IO16UART2 RX
4IO39ADC1_3 · input only RTC
5IO34ADC1_6 · input only RTC
6IO35Supply-voltage sense — divider fitted
7–10GNDFour ground pads for sensor returns

J11 — 10-pin

Digital + SPI
1IO22I²C SCL (default)
2IO19SPI MISO
3IO5SPI CS strap
4IO23SPI MOSI
5—Not connected
6IO18SPI SCK
7IO4Touch, ADC2 RTC
8IO2Touch, ADC2 RTCstrap
9IO15Touch, ADC2 RTCstrap
10IO13Touch, ADC2 RTC

J10, power & debug

The rest of the edge
J10GND ×2Pads 1 and 2
J10IO21I²C SDA (default) · pad 3
J8/J9+BAT3.7–4.2 V supply in, ×2 headers with GND
J5+5 VExternal 5 V in, diode-OR'd with USB-C
J1SerialGND, EN, TX0, RX0, IO0 — REPL and flashing
J2Modem USBGND, VBUS, D+, D−, boot — modem diagnostics
ADC2 shares the radioIO2, IO4, IO13 and IO15 sit on ADC2, which is unavailable while Wi-Fi is active. For analog work that runs alongside Wi-Fi, use the ADC1 pins on J7.
Three strapping pinsIO2, IO5 and IO15 are read at boot. Keep external pull-ups and pull-downs off them, or the module may come up in the wrong mode.
Reserved by the frameworkIO12 modem rail, IO32 PWRKEY, IO25/IO26 modem UART through a 1.8 V level shifter, IO27 reset, IO33 DTR, IO14 PSM indication — plus IO0/IO1/IO3 and EN for the USB serial port.
Deep-sleep capableThe pins marked RTC stay alive through machine.deepsleep(), so they can hold a state or wake the module.
Full technical specs

Mechanical, radio and consumption figures as published on findyiot.com; pin, connector and power-path figures read from the R.2 schematic and PCB.

Physical
PCB size63.7 × 51.2 mmR.2 board outline
Weight15 g
ProtectionIP20Open board — enclosure is yours
Temperature−20 °C to +40 °C
Headers2.54 mm pitch2 × 10 · 2 × 5 · 1 × 3 · 1 × 2 · 2 × (2 × 2)
Connectivity
RadioLTE Cat 1 bis + 2G fallback
ModemQuectel EG916Q-GLGNSS on board
SIMEmbedded SIMMFF2 chip, no socket
GNSSOn-board patch + u.FL
LTE antennaOn-board patch + u.FL
Wi-Fi802.11 b/g/n · 2.4 GHzNo findy Lab API yet
Bluetoothv4.2 BR/EDR + BLENo findy Lab API yet
DiagnosticsRSSI, RSRQ, SINR, cell IDIDs 230–238
Power
Supply5 V or 3.7–4.2 V
InputsUSB-C · J5 · J8/J9
Peak bufferOn-board supercapacitor
Battery chargerNot fittedCharging is the host's job
Work current90 mA1-minute average, reporting
Deep-sleep current10 µA
Supply senseDivider on IO35
Processor & IO
MCUESP32-WROOM-32UXtensa 32-bit LX6, dual core
Memory520 KB SRAM+ 448 KB ROM, 2 × 8 KB RTC SRAM
RuntimeMicroPython v1.25
User GPIO16 on headers15 free, 1 on the supply divider
Buses freeUART2 · SPI · I²C · 3 × ADC1
ProgrammingUSB-C, no programmerFT231XS with auto-bootloader
Report period60 – 3600 sDefault 900 s · parameter 421
OTA updateZIP, resumable, CRC32, fail-safe
Four files, one duty cycle

The framework is shared with the LTE Logger Pro and Lite, so anything you learn here carries across the range.

On the device filesystem

boot.pyArms the watchdog, commits a staged update, starts the application — and falls back if it will not import.
firmware_core.mpyModem driver, parameter database, findyIoT protocol, OTA. Precompiled, shipped as-is.
last.pyYour application: parameters, report contents, the measurement cycle.
base.pyRecovery image. Keeps the device reachable and updatable when last.py is broken.

What happens each wakeup

  1. Wake on a round boundary. The RTC fires at a multiple of the measurement period, so a whole fleet reports in the same wall-clock slots.
  2. Measure, count the wakeup. Below the report threshold (ID 422) the module goes straight back to sleep.
  3. Report. Modem up, register, refresh the network diagnostics, send the parameters, run any queued command — settings, restart, factory reset, OTA.
  4. Sync and sleep. Server timestamp into the RTC (ID 443), modem powered down, pins released, deep sleep until the next slot.

Updates that cannot brick it

download1460-byte chunks over the modem socket, resumable from the last complete chunk.
verifyCRC32 per archive entry before the package is marked ready.
commitStaged files copied on the next boot, before the application starts. Idempotent — a power cut mid-update is safe.
fall backIf the new application will not import, base.py takes over, reports the failure and accepts a corrected package.
Available now · price on requestRaspberry Pi HAT adapter. An adapter board that seats the findy IoT Module on a Raspberry Pi, giving a Pi-based product LTE Cat 1 bis, GNSS and the findy IoT Platform without a separate enclosure or wiring harness. Contact the team →
One file is yours

boot.py and firmware_core.mpy stay as shipped. You edit last.py: what the device measures, what it reports, and how long it sleeps.

last.py — findy IoT Module
Report & sleepI²C sensorUART2 sensor
# Default report of the findy IoT Module —
# wakeup period, last timestamp, network diagnostics.
datalist = ['421', '443', '230', '231', '232',
            '234', '235', '236', '237', '238']

def start(self):
    self.measure()
    self.report(False, datalist)          # alarm=False
    self.prepareSleep(int(core.db.read('421')), True)

fw.start = start
Default report of the module plus two sensor patterns on the free buses.Full API reference →
What you see in the findy IoT Platform

The UI is generated from your config file. Parameter 900 below is a custom measurement; everything else is a system parameter the framework fills in without any code from you.

findy IoT Module · Pump station 3 · #0117
Last report: 4 min ago
MeasurementsSettingsCommandsSystem
Custom · ID 900
41.8
°C · I²C sensor
LTE RSSI · ID 231
−68
dBm · Cat 1 bis
Supply · IO35
4.06
V · measured on board
Wakeup period · ID 421
900
s · 15 min
Cell ID · ID 234
2A17
MCC 284 / MNC 03
From sensor to your system

Your sensors

I²C · UART2 · SPI · 3 × ADC1 on the headers

→

findy IoT Module

Your measure() runs here — MicroPython v1.25

→

LTE Cat 1 bis / 2G

Global findy SIM, embedded

→

findy IoT Platform

Measurements, settings, commands — by parameter ID

→

Your system

API, webhooks, export

Where the module fits

Each one runs on the free pins and the framework as shipped — no extra hardware on the module itself.

Beginner
I²C temperature and humidity report
I²CCustom ID
Beginner
0–3.3 V analog input on ADC1
ADC1J7
Intermediate
Modbus meter over UART2 with an RS485 transceiver
UART2RS485
Intermediate
Door contact wake-up from deep sleep
RTC pinSleep
Intermediate
GNSS position with every report
GNSSEG916Q-GL
Advanced
Raspberry Pi gateway over the HAT adapter
Pi HATLinux
Three ways to use the module

Ready-made solutions

Complete deployments built on findy hardware — metering, environmental monitoring, asset tracking — delivered and supported end to end.

View solutions

Have your own system?

We supply the module and the SIM. You take the data from the platform API into the infrastructure you already run.

Talk to our team →

Write your own logic

You're here. Flash it over USB-C, edit one file, deploy the next version over the air.

Can't do it? Enterprise team →

More posts