Українська | English
Extension modules for Lilka v2 (ESP32-S3). Each module has its own
folder in modules/ with its README, pictures and example code. The examples are
self-tests you can run on the hardware: each one finds the module, checks its signal lines, makes
the chip do some real work, and prints a PASS/FAIL report to the USB serial port.
![]() 003 LORA SX1262 / SX1268, 868 or 433 MHz |
![]() 003 LORA (high power) E22-900M30S |
![]() 004 RF nRF24L01+ / CC1101 |
![]() 005 GPS u-blox NEO-M8N |
![]() 006 GYRO MAGNET BMI260 + TMAG5273A1 |
![]() 007 LCD-TAP Lilka screen → HDMI |
![]() 008 CAN SN65HVD232 |
| Module | Chip | Code | Status |
|---|---|---|---|
| 003 LORA | Ebyte E22-900M2xS (SX1262, 868/915 MHz) or E22-400M2xS (SX1268, 433 MHz) | main.cpp |
REV01 with E22-900M22S tested on hardware |
| 004 RF | nRF24L01+PA+LNA or CC1101 (nRF24 layout) | nrf24, cc1101 |
Tested on hardware with both modules |
| 005 GPS | u-blox NEO-M8N | — | Not tested yet |
| 006 GYRO MAGNET | Bosch BMI260 + TI TMAG5273A1 | main.cpp |
Tested on hardware; GYR_INT2 gave no pulses, cause not found yet |
| 007 LCD-TAP | RP2350A | lcdtap (submodule) |
Connects to the display bus, not the extension connector |
| 008 CAN | TI SN65HVD232 | — | Not tested yet |
Every module except LCD-TAP plugs into the 12-pin Lilka v2 extension connector. The pin numbers below are those of connector J2 in the module schematics; the tests on the LoRa, RF and GYRO MAGNET boards confirmed them.
| Pin | Signal | Pin | Signal |
|---|---|---|---|
| 1 | GND | 7 | GPIO21 |
| 2 | 3V3 | 8 | GPIO14 |
| 3 | GPIO44 (U0RXD) | 9 | GPIO13 |
| 4 | GPIO43 (U0TXD) | 10 | GPIO12 |
| 5 | GPIO48 | 11 | 3V3 |
| 6 | GPIO47 | 12 | GND |
lilka::board.getExtPinGPIO() in the SDK uses a different index order (indexes 2–7 are
GPIO48…12, 8 is TX, 9 is RX). Don't mix the two numberings.
Some boards connect header pins directly to GND or 3V3. Never configure these GPIOs as outputs while that module is plugged in: driving one would short the supply.
| Module | Pins wired straight to a supply |
|---|---|
| 004 RF | GPIO13 → GND, GPIO12 → 3V3 |
| 005 GPS | GPIO48, 21, 13 → 3V3; GPIO47, 14, 12 → GND |
| 006 GYRO MAGNET | GPIO14, 13, 12 → GND |
Requirements: PlatformIO and a Lilka v2 connected over USB.
git clone --recursive <this repository> # --recursive also fetches LCD-TAP
pio run # build every example
pio run -e lora_sx1262 -t upload # flash one: lora_sx1262, lora_433, rf_nrf24, rf_cc1101, gyro_magnet
pio device monitor # watch the report (115200 baud)Serial commands: t reruns the self-test, k boots back into the app in the app0 slot (Keira).
Note.
-t uploadwrites the example over the whole flash layout (bootloader, partition table and app), replacing Keira. To keep Keira, flash the example into a free OTA slot instead (for exampleapp1at0x410000in the Keira partition table) and select that slot inotadata. Thekcommand then switches back to Keira.
The LoRa and CC1101 examples transmit at about 0 dBm. Attach an antenna before running them anyway. Make sure the frequencies you use are allowed where you are: 433.05–434.79 MHz and 863–870 MHz are licence-free short-range bands in Ukraine and the EU, with duty-cycle limits.
modules/006_gyro_magnet/bmi260_config: the BMI260 initialisation blob by Bosch Sensortec (BSD-3-Clause, see itsLICENSE), taken from the ChromiumOS ECthird_party/bmi260copy.modules/007_lcd_tap/lcdtap: lilka-dev/lcdtap, a fork of shapoco/lcdtap (MIT).






