RF69 - Added method to measure temperature

This commit is contained in:
Jan Gromeš 2018-07-14 11:44:08 +02:00
parent 3f56b8a458
commit 95760e58e5
4 changed files with 54 additions and 12 deletions

View file

@ -67,41 +67,41 @@ void setup() {
// set carrier frequency to 433.5 MHz // set carrier frequency to 433.5 MHz
if(rf1.setFrequency(433.5) == ERR_INVALID_FREQUENCY) { if(rf1.setFrequency(433.5) == ERR_INVALID_FREQUENCY) {
Serial.println("Selected frequency is invalid for this module!"); Serial.println(F("Selected frequency is invalid for this module!"));
while(true); while(true);
} }
// set bit rate to 100.0 kbps // set bit rate to 100.0 kbps
state = rf1.setBitRate(100.0); state = rf1.setBitRate(100.0);
if(state == ERR_INVALID_BIT_RATE) { if(state == ERR_INVALID_BIT_RATE) {
Serial.println("Selected bit rate is invalid for this module!"); Serial.println(F("[RF69] Selected bit rate is invalid for this module!"));
while(true); while(true);
} else if(state == ERR_INVALID_BIT_RATE_BW_RATIO) { } else if(state == ERR_INVALID_BIT_RATE_BW_RATIO) {
Serial.println("Selected bit rate to bandwidth ratio is invalid!"); Serial.println(F("[RF69] Selected bit rate to bandwidth ratio is invalid!"));
Serial.println("Increase receiver bandwidth to set this bit rate."); Serial.println(F("[RF69] Increase receiver bandwidth to set this bit rate."));
while(true); while(true);
} }
// set receiver bandwidth to 250.0 kHz // set receiver bandwidth to 250.0 kHz
state = rf1.setRxBandwidth(250.0); state = rf1.setRxBandwidth(250.0);
if(state == ERR_INVALID_RX_BANDWIDTH) { if(state == ERR_INVALID_RX_BANDWIDTH) {
Serial.println("Selected receiver bandwidth is invalid for this module!"); Serial.println(F("[RF69] Selected receiver bandwidth is invalid for this module!"));
while(true); while(true);
} else if(state == ERR_INVALID_BIT_RATE_BW_RATIO) { } else if(state == ERR_INVALID_BIT_RATE_BW_RATIO) {
Serial.println("Selected bit rate to bandwidth ratio is invalid!"); Serial.println(F("[RF69] Selected bit rate to bandwidth ratio is invalid!"));
Serial.println("Decrease bit rate to set this receiver bandwidth."); Serial.println(F("[RF69] Decrease bit rate to set this receiver bandwidth."));
while(true); while(true);
} }
// set allowed frequency deviation to 10.0 kHz // set allowed frequency deviation to 10.0 kHz
if(rf1.setFrequencyDeviation(10.0) == ERR_INVALID_FREQUENCY_DEVIATION) { if(rf1.setFrequencyDeviation(10.0) == ERR_INVALID_FREQUENCY_DEVIATION) {
Serial.println("Selected frequency deviation is invalid for this module!"); Serial.println(F("[RF69] Selected frequency deviation is invalid for this module!"));
while(true); while(true);
} }
// set output power to 2 dBm // set output power to 2 dBm
if(rf1.setOutputPower(2) == ERR_INVALID_OUTPUT_POWER) { if(rf1.setOutputPower(2) == ERR_INVALID_OUTPUT_POWER) {
Serial.println("Selected output power is invalid for this module!"); Serial.println(F("[RF69] Selected output power is invalid for this module!"));
while(true); while(true);
} }
@ -110,11 +110,24 @@ void setup() {
// set sync word to 0x01 0x23 0x45 0x67 0x89 0xAB 0xCD 0xEF // set sync word to 0x01 0x23 0x45 0x67 0x89 0xAB 0xCD 0xEF
uint8_t syncWord[] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}; uint8_t syncWord[] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF};
if(rf1.setSyncWord(syncWord, 8) == ERR_INVALID_SYNC_WORD) { if(rf1.setSyncWord(syncWord, 8) == ERR_INVALID_SYNC_WORD) {
Serial.println("Selected sync word is invalid for this module!"); Serial.println(F("[RF69] Selected sync word is invalid for this module!"));
while(true); while(true);
} }
Serial.println(F("[RF69] All settings changed successfully!"));
// RF69 can also measure temperature (roughly)
// to get correct temperature measurements, the sensor must be calibrated
// at ambient temperature
rf1.setAmbientTemperature(25); // replace 25 with your ambient temperature
} }
void loop() { void loop() {
// nothing here // measure temperature
Serial.print(F("[RF69] Measured temperature: "));
Serial.print(rf1.getTemperature());
Serial.println(F(" deg C"));
// wait 100 ms before the next measurement
delay(100);
} }

View file

@ -59,6 +59,8 @@ disableAddressFiltering KEYWORD2
setAESKey KEYWORD2 setAESKey KEYWORD2
enableAES KEYWORD2 enableAES KEYWORD2
disableAES KEYWORD2 disableAES KEYWORD2
getTemperature KEYWORD2
setAmbientTemperature KEYWORD2
# ESP8266 # ESP8266
join KEYWORD2 join KEYWORD2

View file

@ -2,6 +2,7 @@
RF69::RF69(Module* module) { RF69::RF69(Module* module) {
_mod = module; _mod = module;
_tempOffset = 0;
} }
uint8_t RF69::begin(float freq, float br, float rxBw, float freqDev, int8_t power) { uint8_t RF69::begin(float freq, float br, float rxBw, float freqDev, int8_t power) {
@ -462,6 +463,27 @@ uint8_t RF69::disableAddressFiltering() {
return(_mod->SPIsetRegValue(RF69_REG_BROADCAST_ADRS, 0x00)); return(_mod->SPIsetRegValue(RF69_REG_BROADCAST_ADRS, 0x00));
} }
void RF69::setAmbientTemperature(int16_t tempAmbient) {
_tempOffset = getTemperature() - tempAmbient;
}
int16_t RF69::getTemperature() {
// set mode to STANDBY
setMode(RF69_STANDBY);
// start temperature measurement
_mod->SPIsetRegValue(RF69_REG_TEMP_1, RF69_TEMP_MEAS_START, 3, 3);
// wait until measurement is finished
while(_mod->SPIgetRegValue(RF69_REG_TEMP_1, 2, 2) == RF69_TEMP_MEAS_RUNNING) {
// check every 10 us
delay(10);
}
int8_t rawTemp = _mod->SPIgetRegValue(RF69_REG_TEMP_2);
return(0 - (rawTemp + _tempOffset));
}
uint8_t RF69::config() { uint8_t RF69::config() {
uint8_t state = ERR_NONE; uint8_t state = ERR_NONE;

View file

@ -442,12 +442,17 @@ class RF69 {
uint8_t setNodeAddress(uint8_t nodeAddr); uint8_t setNodeAddress(uint8_t nodeAddr);
uint8_t setBroadcastAddress(uint8_t broadAddr); uint8_t setBroadcastAddress(uint8_t broadAddr);
uint8_t disableAddressFiltering(); uint8_t disableAddressFiltering();
// measurement methods
void setAmbientTemperature(int16_t tempAmbient);
int16_t getTemperature();
protected: protected:
Module* _mod; Module* _mod;
float _br; float _br;
float _rxBw; float _rxBw;
int16_t _tempOffset;
uint8_t config(); uint8_t config();