Skip to content

SX1278 Ra-02 FSK mode not decoding Ecowitt WS90 on ESP32-S3 #212

Description

@Mpakhurst

Hardware:

  • Board: LILYGO T-A7670X-S3-Standard (ESP32-S3-WROOM-1, N16R2, 16MB Flash)
  • RF Module: AI-Thinker Ra-02 SX1278 433MHz
  • Target sensor: Ecowitt WS90 weather station (WS90BO Oceania 433MHz variant)

Wiring (verified from official LilyGO pinout):

Ra-02 pin | ESP32-S3 GPIO -- | -- MOSI | IO11 SCK | IO12 MISO | IO13 NSS | IO15 DIO0 | IO16 DIO1 | IO39 DIO2 | IO21 RST | IO38 VCC | 3.3V GND | GND

platformio.ini:

ini
[env:esp32-s3]
platform = espressif32
board = esp32-s3-devkitc-1
framework = arduino

lib_deps = 
    https://github.com/NorthernMan54/rtl_433_ESP.git
    jgromes/RadioLib @ ^7.0.0

lib_ldf_mode = chain+

build_flags = 
    '-DRF_SX1278'
    '-DRF_MODULE_FREQUENCY=433.96'
    '-DRF_MODULE_CS=15'
    '-DRF_MODULE_DIO0=16'
    '-DRF_MODULE_DIO1=39'
    '-DRF_MODULE_DIO2=21'
    '-DRF_MODULE_RST=38'
    '-DRF_MODULE_SCK=12'
    '-DRF_MODULE_MISO=13'
    '-DRF_MODULE_MOSI=11'
    '-DOOK_MODULATION=false'
    '-DRF_MODULE_INIT_STATUS=true'
    '-DLOG_LEVEL=LOG_VERBOSE'
    '-DRTL_DEBUG=4'

monitor_speed = 115200
upload_speed = 921600

main.cpp:

cpp
#include <Arduino.h>
#include <rtl_433_ESP.h>

#define RECEIVER_GPIO   16
#define JSON_MSG_BUFFER 512

char messageBuffer[JSON_MSG_BUFFER];
rtl_433_ESP rf;

void rtl_433_Callback(char *message) {
  Serial.println(message);
}

void setup() {
  Serial.begin(115200);
  delay(2000);
  Serial.println("Starting WS90 receiver...");
  rf.setCallback(rtl_433_Callback, messageBuffer, JSON_MSG_BUFFER);
  rf.initReceiver(RECEIVER_GPIO, 433.96);
  rf.enableReceiver();
  Serial.println("Listening for WS90 data...");
}

void loop() {
  rf.loop();
}

Serial output:

Registering protocol [35] "Fine Offset Electronics WS90 weather station"
rtl_433_ESP(7): Average RSSI Signal -75 dbm, adjusted RSSI Threshold -63, samples 50000

What I know about the WS90 signal (verified with RTL-SDR):

  • Modulation: FSK_PCM
  • Freq1: 434.0 MHz, Freq2: 433.9 MHz (centre ~433.96 MHz)
  • Bit width: 56µs
  • RSSI: 1.2 dB, SNR: 19 dB at 3 metres distance
  • rtl_433 flex decoder: -X 'n=name,m=FSK_PCM,s=56,l=56,r=57344'
  • The RTL-SDR decodes the WS90 perfectly every 8.8 seconds

Problem: In FSK mode (-DOOK_MODULATION=false) the library registers the WS90 decoder (protocol 35) and shows RSSI around -75 dBm but never triggers a decode. The adjusted RSSI threshold is -63 dBm which the signal never crosses. Setting rf.setRSSIThreshold(-97) lowers the threshold to -172 dBm but still no decodes.

In OOK mode the WS90 decoder is not registered at all (correct behaviour) and RSSI drops to -105 dBm.

Question: Is there a specific configuration needed for FSK_PCM decoding with the SX1278 on ESP32-S3? Is the DIO pin mapping different for FSK vs OOK mode? Any known issues with this chip/board combination?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions