Raw OOK data from Prego 433 MHz wireless thermometer with Arduino & Dragino Lora (Semtech SX127x) module.
http://wiki.dragino.com/index.php?title=Lora_Shield
http://www.semtech.com/wireless-rf/rf-transceivers/sx1278/
SX1278 library: https://github.com/open-electronics/LoRa/releases
#include <SX1278.h>
#define SERIAL_SPEED 9600
#define FREQ 433.98
#define RSSI_SAMPLES 1
#define STATE_STANDBY 1
#define STATE_FSRX 4
#define STATE_RX 5
#define S_DELAY 1
#define L_DELAY 10
#define NUM_SYNC_BYTES 3
#define DATA_PIN 7
#define SX_BEGIN "SX.begin"
#define SX_BITRATE "SX.readBPS "
#define SX_FREQ "SX.readFreq "
bool rx;
byte syncBytes[NUM_SYNC_BYTES] = {0x01, 0x01, 0x01};
void setup() {
rx = false;
Serial.begin(SERIAL_SPEED);
if (SX.begin()) {
pinMode(DATA_PIN, INPUT);
Serial.println(F(SX_BEGIN));
delay(S_DELAY);
SX.startModeFSKOOK();
SX.setModulation(1); // OOK
SX.setFreq(FREQ);
Serial.print(F(SX_FREQ));
Serial.println(SX.readFreq(), DEC);
byte b = SX.SPIread(0x40);
// Set DIO2 = data (DATA_PIN)
bitSet(b, 2);
bitSet(b, 3);
// Set DIO1 = dclk
bitClear(b, 4);
bitClear(b, 5);
SX.SPIwrite(0x40, b);
// Set preamble length & polarity, 0=0xAA, 1=0x55
SX.setPreamble(3, 0);
//SX.setSync(1, syncBytes, NUM_SYNC_BYTES);
// Set sync on/off, sync bytes, sync length
SX.setSync(0, NULL, 0);
SX.setPacket(0, 0, 64);
SX.setState(STATE_STANDBY);
delay(S_DELAY);
SX.setPackNoPack(0); // Set continuous mode
SX.setRSSIsample(RSSI_SAMPLES);
// RegOokPeak (0x14). Bit 5, enables the Bit Synchronizer: 0 -> bit sync disabled
//(not possible in packet mode)
//1 -> bit sync enabled
SX.setBitSync(0);
// RegOokPeak (0x14). Bits 2-0, OokPeakTheshStep. Size of each decrement of the
//RSSI threshold in the
//OOK demodulator:
// 0 0.5 dB 1 1.0 dB
// 2 1.5 dB 3 2.0 dB
// 4 3.0 dB 5 4.0 dB
// 6 5.0 dB 7 6.0 dB
SX.setOOKThrStep(0);
// RegOokAvg (0x16). Bits 7-5, OokPeakThreshDec. Period of decrement of the
//RSSI threshold in the
// OOK demodulator:
// 0 once per chip 1 once every 2 chips
// 2 once every 4 chips 3 once every 8 chips
// 4 twice in each chip 5 4 times in each chip
// 6 8 times in each chip 7 16 times in each chip
SX.setOOKThrDec(0);
// RegOokPeak (0x14). Bits 4-3, selects the type of threshold in the OOK data slicer: 0 -> fixed,
//1 -> peak (default), 2 = average mode
SX.setOOKthrMode(1);
// RegOokFix (0x15). Fixed threshold for the Data Slicer in OOK mode. Floor threshold for the
//Data Slicer in OOK when Peak mode is used.
// Default value: 0x0C
SX.setOOKbaseThr(0xC);
// RegPreambleDetect (0x1f). Enables Preamble detector when set to 1.
//The AGC settings supersed
//this bit during the startup AGC phase.
// Bit 7, 0 -> turned off, 1 -> turned on
SX.preambleDetect(0);
SX.setState(STATE_FSRX);
delay(S_DELAY);
SX.setState(STATE_RX);
delay(L_DELAY);
rx = true;
}
}
void loop() {
if (rx) {
unsigned long p = pulseIn(DATA_PIN, LOW);
if (p > 1700) { Serial.print("LOW "); Serial.print(p, DEC); Serial.println(); }
p = pulseIn(DATA_PIN, HIGH);
if (p > 500) { Serial.print("HIGH "); Serial.print(p, DEC); Serial.println(); }
}
}
Channel change
Sync data
Sensor data
Kommentit
Tämän blogin kommentit tarkistetaan ennen julkaisua.