Имеется: 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).

Приемники рабочие, посылку видно (слева). Кто-то из приемников чуть меньше шумит (справа), кто-то больше.


Пробовал Gyver433/ rx433_struct.ino
С буфером по умолчанию (Gyver433_RX<2, 12> rx) - в выводе тишина.
С буфером 128 в выводе каша:
GyverWire/struct_rx.ino
В выводе:
rc-switch/ ReceiveDemo_Simple.ino
В выводе тишина.
Что я делаю не так?
Приемники: MX-RM-5V, RXB12, SYN480R, RXB6
Задача прочитать пульты 433: шлагбаума An-Motors AT-4 и его универсальный клон, выкл-я Livolo, штор Raex YR3121, и т.д..
Подключал на D4 и D1, на 5в и на 3,3в (SYN480R).

Приемники рабочие, посылку видно (слева). Кто-то из приемников чуть меньше шумит (справа), кто-то больше.


Пробовал 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");
}
}
}
С буфером 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⸮
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();
}
}
Что я делаю не так?
Изменено: