Wemos и приемники (MX-RM-5V, RXB12, SYN480R, RXB6)

Дмитрий77

✩✩✩✩✩✩✩
23 Июл 2025
1
0
Имеется: Wemos D1 mini, arduino IDE 1.8.19 и 2.3.4
Приемники: MX-RM-5V, RXB12, SYN480R, RXB6
Задача прочитать пульты 433
: шлагбаума An-Motors AT-4 и его универсальный клон, выкл-я Livolo, штор Raex YR3121, и т.д..

Подключал на D4 и D1, на 5в и на 3,3в (SYN480R).
f62e73f8-dd4c-425e-9136-ee3e2ee8aa41_cr.jpg
Приемники рабочие, посылку видно (слева). Кто-то из приемников чуть меньше шумит (справа), кто-то больше.
60210fdd-2655-4b66-b7cf-33421e0e7ae0_cr.jpgf3d4c1c5-b2d0-42d0-b11e-da8a1302142a_cr.jpg

Пробовал Gyver433/ rx433_struct.ino
C++:
#include <Gyver433.h>
Gyver433_RX<2, 12> rx;  // указали пин и размер буфера

// формат пакета для приёма (такой же как отправляется)
struct DataPack {
  byte counter;
  byte randomNum;
  int analog;
  uint32_t time;
};

IRAM_ATTR void myIsr() {}

void setup() {
  Serial.begin(115200);
  attachInterrupt(1, myIsr, RISING);
}

void loop() {
  if (rx.tick()) {
    DataPack data;            // "буферная" структура
    if (rx.readData(data)) {  // переписываем данные в неё
      // если данные подходят - выводим
      Serial.println(data.counter);
      Serial.println(data.randomNum);
      Serial.println(data.analog);
      Serial.println(data.time);
      Serial.println();
    } else {
      Serial.println("Wrong data");
    }
  }
}
С буфером по умолчанию (Gyver433_RX<2, 12> rx) - в выводе тишина.
С буфером 128 в выводе каша:
clвё®;c$ clвё®;s$ clвё®rвё®вё®вё®bвё® #вё®вё®sвё®l`вё®вё®gdвё®sвё®вё®'ogcdc

GyverWire/struct_rx.ino
C++:
#include <Arduino.h>
#include <GW_RX.h>

struct Data {
    int i;
    float f;
};

GW_RX<2> rx;

void setup() {
    Serial.begin(115200);
    attachInterrupt(0, []() { rx.pinChange(); }, CHANGE);

    rx.onPacket([](uint8_t type, void* data, size_t len) {
        if (sizeof(Data) != len) return;  // проверка корректности длины
        Data& d = *((Data*)data);
        Serial.print(d.i);
        Serial.print(',');
        Serial.println(d.f);

        // или
        // Serial.println(static_cast<Data*>(data)->f);
    });
}

void loop() {
    rx.tick();
}
В выводе:
C++:
--------------- CUT HERE FOR EXCEPTION DECODER ---------------

Abort called

>>>stack>>>

ctx: cont
sp: 3fffff70 end: 3fffffd0 offset: 0010
3fffff80:  00000000 feefeffe 00000000 40202769
3fffff90:  0001c200 0000001c 00000000 feefeffe
3fffffa0:  3fffdad0 00000000 3ffee5b8 402011f9
3fffffb0:  feefeffe feefeffe feefeffe 40201bfc
3fffffc0:  feefeffe feefeffe 3fffdab0 40100d95
<<<stack<<<

--------------- CUT HERE FOR EXCEPTION DECODER ---------------

ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 3424, room 16
tail 0
chksum 0x2e
load 0x3fff20b8, len 40, room 8
tail 0
chksum 0x2b
csum 0x2b
v00042690
~ld
⸮⸮⸮⸮g⸮s⸮⸮n<⸮$⸮d`c⸮⸮|s⸮d⸮'⸮⸮n⸮
rc-switch/ ReceiveDemo_Simple.ino
C++:
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();

void setup() {
  Serial.begin(115200);
  mySwitch.enableReceive(0);  // Receiver on interrupt 0 => that is pin #2
}

void loop() {
  if (mySwitch.available()) {
    Serial.print("Received ");
    Serial.print( mySwitch.getReceivedValue() );
    Serial.print(" / ");
    Serial.print( mySwitch.getReceivedBitlength() );
    Serial.print("bit ");
    Serial.print("Protocol: ");
    Serial.println( mySwitch.getReceivedProtocol() );
    mySwitch.resetAvailable();
  }
}
В выводе тишина.

Что я делаю не так?
 
Изменено:

Bruzzer

★★★✩✩✩✩
23 Май 2020
639
190
Что я делаю не так?
Вы действуете методом тыка, не понимая, что делает код, какой протокол ожидаем и т.д.
>Подключал на D4 и D1, на 5в и на 3,3в (SYN480R).
Пины для подключения как и напряжение питания надо выбирать не перебором, а по функционалу.
Первый скетч наиболее показателен. Подключение на пин 2. Включение прерываний на пин 1. И не использование прерываний в дальнейшем коде.
C++:
Gyver433_RX<2, 12> rx;  // указали пин и размер буфера
IRAM_ATTR void myIsr() {}
attachInterrupt(1, myIsr, RISING);
В ESP8266 attachInterrupt подключается по номеру пина. Для совместимости можно использовать digitalPinToInterrupt

Решения.
  • или найти в инете готовый проект на WEMOS D1 mini
  • или разобраться с назначением строк кода программы и ожидаемым протоколом обмена.