Table of Contents
LoRa Development Boards
Some notes on some boards I have tried.
Heltec Wireless Tracker
Flashing
Flashing requires holding down USER button on boot. The meshtastic device installer script needs it held for some time as it flashes multiple images, resetting in between.
Meshtastic firmware build as of 25 Oct 2023 did not work on the boards I had, because it seems the screen / connection was changed by Heltec in newer versions of the board. Screen working with build of git master which was at 092e6f2424aac486267c15e1c94f18c36093017a
.
Flashing this with platformio uses a different method. It uses the builtin jtag interface of the ESP32, which does not use the CDC-ACM serial port. This is significant because permissions on the USB device must be set correctly, not just on the serial port.
udev rule to add:
ATTRS{idVendor}==“303a”, ATTRS{idProduct}==“1001”, MODE=“0660”, GROUP=“plugdev”, TAG+=“uaccess”
TX Test
Tested output with spectrum analysers - Rigol RSA5032 TG, and Siglent SSA 3021X, on 28th Nov 2023. Could just about see the chirps on waterfall display.
Used Meshtastic with settings: Very long slow, +27dBm TX. Bandwidth should be 62.5 kHz. Centre frequency 869.4313MHz. Tested in room temperature room. Git version 092e6f2424aac486267c15e1c94f18c36093017a
, screen says 2.2.12
.
Using max hold setting, peak was a flat line across expected bandwidth, power about 20dBm. Allowing for losses in cables and connectors, perhaps about 21.5dBm out of the board. Board uses SX1262 which specifies: “+22dBm or +15dBm high efficiency PA”. It seems we have a 22dBm transmitter and it is basically hitting its specification.
Centre frequency was low by about 1kHz (~1.2ppm). Seems oscillator is well tuned, at least at room temp. Bandwidth at about -1dB about 62 kHz. Not sure how at what level the specified bandwidth is meant to be measured.
Noticed later that despite UI showing 869.4313MHz, serial console shows radio is set to 869.431274 MHz - 26 Hz lower than specified. It seems that when not set explicitly, the code calculates a centre frequency from the bandplan, so I suspect that the UI is then showing a rounded value. Explicitly setting 869.4313MHz would give the set value I think.
Console also says Set radio: final power level=22
. This appears to come from #define SX126X_MAX_POWER 22
in SX126xInterface.cpp
.
2nd harmonic ~47dB down from peak. Otherwise output looked clean.
Heltec LoRa 32 v3
This was straightforward to flash with Meshtastic.
The WiFi is terrible. Probably because of the small helical coil antenna. It seems to need an AP very close to connect.
- ESP32-S3
- CP2102
Connections
USB
The ESP has native USB, but it is not connected on this board. The USB connector goes to the CP2102. The USB pins on the ESP are broken out to the headers though, so it could be added.
LoRa
ESP32 Pin | LoRa Chip Signal |
---|---|
GPIO8 | LoRa NSS |
GPIO9 | LoRa SCK |
GPIO10 | LoRa MOSI |
GPIO11 | LoRa MISO |
GPIO12 | LoRa RST |
GPIO13 | LoRa BUSY |
These do not seem to be connected to the header pins.
JTAG
Pin | Signal |
---|---|
GPIO39 | MTCK |
GPIO40 | MTDO |
GPIO41 | MTDI |
GPIO42 | MTMS |
GPIO3 | Switch: LOW for JTAG on pins, HIGH for USB JTAG. Function fuse dependent. |
With fuses, GPIO3 sets if JTAG is enabled on these pins or not. All these pins are available on the headers.
Section 8.5 shows JTAG options: https://www.espressif.com/sites/default/files/documentation/esp32-s3_technical_reference_manual_en.pdf#bootctrl
Need to blow at least one eFuse to enable JTAG on pins. Default value is 0, blow fuse for 1.
Blow eFuse 3, EFUSE_STRAP_JTAG_SEL, bit 24 of EFUSE_RD_REPEAT_DATA2_REG (0x0038), and pull GPIO3 low for JTAG on pins. Pull high for USB JTAG.
espefuse.py –port /dev/ttyUSB0 burn_efuse STRAP_JTAG_SEL
Read fuses:
espefuse.py summary
Other
OLED is on I2C. I2C available on pads on back of board.
Power
Measured with PPK2 SMU, running meshtastic nyan. 5V. Peak current 0.61A, average 120mA. Uses 40mA with reset button held down!
Powering with 3.3V, normal max 491mA, one peak of 0.64A near start (transmitting?). Average 118mA. 7mA in reset.
Heltec claim sleep power of: 2mA on USB, 10uA on 3.3V header.
When 3.3V power connected with reset held, 2.3mA measured. Maybe the 40mA is the radio which was not told to sleep? SX1262 datasheet claims it should be more like 5mA in receive though.
Heltec Wireless Stick Lite v3
- ESP32-S3FN8
- SX1262
- CP2102
- 8MB SiP Flash
This was straightforward to flash with Meshtastic.
It has two antenna connectors, one for LoRa, and one for wifi / bluetooth? I could not find any documentation for this, but a forum post somewhere said the connector for LoRa is the one on the top left.
LILYGO T-Beam
There are several versions. I (river) have a version marked “T-BEAM-AXP2101-V1.2”.
Parts:
- ESP32-D0WD (original, not S2/3)
- SX1276
- NEO-6M GPS
- AXP2101 power control chip
- CH9102F - WCH USB serial chip.
- MS412FE rechargeable RTC backup battery connected to GPS.
- micro USB. (Other boards I have have USB C)
https://github.com/Xinyuan-LilyGO/LilyGo-LoRa-Series
Power on seems to require long press on PWR button.
Screen connects to pins 21 and 22 which are also marked SDA and SCL.
Supplied antenna is marked LILYGO/868. SMA connector on board. Not tested yet.
uFL for GPS, supplied with small antenna. uFL for wifi / bluetooth or ?default onboard sheet metal antenna.
It came with meshtastic installed, with limited web interface. Latest meshtastic build failed to flash with MD5Sum error. It at least partially worked but webserver only had basic interface. Latest release build worked as expected with full web interface. File that worked:
./device-install.sh firmware-tbeam-2.1.23.04bbdc6.bin
I have since found that the md5 error goes away if programming speed is reduced to 115200 baud. This is surprising as I normally find 1.5 MBaud works reliably for programming ESP8266 with CH340.
esptool reports:
Chip is ESP32-D0WDQ6-V3 (revision v3.1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
LEDs
User: Red, connected to GPIO4. Middle left, over charge LED. Charge: Blue. Connected to AXP2101 power control chip. GPS: Red, under the GPS module. Connected to the PPS output.
Feather M0 LoRa
- SX127x on RFM9x module.
- ATSAMD21G18 ARM Cortex M0 processor
- Needs uFL connector added.
Not supported by meshtastic or RNode.
Unlabelled / unbranded board
- Marked 20170815
- SX1278
- ESP32-DOWD
- CP2102
Raspberry Pi Pico with Waveshare LoRa and CAN shields
RP2040 has two SPI controllers. It looks like Meshtastic uses SPI1 for the LoRa radio. I'll use SPI0 for the CAN controller. The shields use different pins for the SPI buses.
LoRa
- SX1262
- 22dBm
- TX current: 118mA@22dBm
- SPI on GP3 CS, 10 CLK, 11 MOSI, 12 MISO.
- Has battery on PH1.25 connector
- Charger IC: MCP73831
CAN
GPIO | Function |
---|---|
4 | MISO |
5 or 19 | CS |
6 | SCK |
7 | MOSI |
I2C
RP2040 has two I2C peripherals. In Arduino they are called Wire for i2c0 and Wire1 for i2c1.
I am using I2C1 on GPIOs 14 and 15, pins 19 (SDA) and 20 (SCL) on pico board.