Hallo,
ich habe einen Heltec CubeCell HTTC AB-02 und binde diesen bei TTN per LoRaWAN ein. Momentan sende ich fixe Werte für Temperatur und Feuchte, möchte dies aber in Zukunft mit einem BME 280 Sensor machen (mit einem ESP32 habe ich den Sensor mit seiner Bibliothek bereits erfolgreich getestet).
Hier das Script:
#include <LoRaWan_APP.h>
#include <Arduino.h>
//#include <Wire.h>
//#include <BlueDot_BME280.h>
// Create the bme280 object
//BlueDot_BME280 bme280 = BlueDot_BME280();
/*
set LoraWan_RGB to Active,the RGB active in loraWan
RGB red means sending;
RGB purple means joined done;
RGB blue means RxWindow1;
RGB yellow means RxWindow2;
RGB green means received done;
*/
// OTAA parameters
uint8_t devEui[] = {0x70, 0xB3, ...};
uint8_t appEui[] = {0x49, 0x85, ...};
uint8_t appKey[] = {0x9E, 0x92, ...};
// ABP parameters
uint8_t nwkSKey[] = {};
uint8_t appSKey[] = {};
uint32_t devAddr = (uint32_t )0x260...;
// LoraWan channelsmask, default channels 0-7
uint16_t userChannelsMask[6] = {0x00FF,0x0000,0x0000,0x0000,0x0000,0x0000};
// LoraWan region, select in arduino IDE tools
LoRaMacRegion_t loraWanRegion = ACTIVE_REGION;
// LoraWan Class, Class A and Class C are supported
DeviceClass_t loraWanClass = LORAWAN_CLASS;
// The application data transmission duty cycle. value in [ms].
uint32_t appTxDutyCycle = 15000;
// OTAA or ABP
bool overTheAirActivation = LORAWAN_NETMODE;
// ADR enable
bool loraWanAdr = LORAWAN_ADR;
// set LORAWAN_Net_Reserve ON, the node could save the network info to flash, when node reset not need to join again.
bool keepNet = LORAWAN_NET_RESERVE;
// Indicates if the node is sending confirmed or unconfirmed messages.
bool isTxConfirmed = LORAWAN_UPLINKMODE;
// Application port
uint8_t appPort = 2;
// Number of trials to transmit the frame, if the LoRaMAC layer did not receive an acknowledgment.
uint8_t confirmedNbTrials = 4;
void setup() {
Serial.begin(115200);
#if(AT_SUPPORT)
enableAt();
#endif
deviceState = DEVICE_STATE_INIT;
LoRaWAN.ifskipjoin();
}
void loop() {
switch(deviceState) {
case DEVICE_STATE_INIT: {
#if(LORAWAN_DEVEUI_AUTO)
LoRaWAN.generateDeveuiByChipID();
#endif
#if(AT_SUPPORT)
getDevParam();
#endif
printDevParam();
LoRaWAN.init(loraWanClass,loraWanRegion);
deviceState = DEVICE_STATE_JOIN;
break;
}
case DEVICE_STATE_JOIN: {
LoRaWAN.join();
break;
}
case DEVICE_STATE_SEND: {
prepareTxFrame(appPort);
LoRaWAN.send();
deviceState = DEVICE_STATE_CYCLE;
break;
}
case DEVICE_STATE_CYCLE: {
// Schedule next packet transmission
txDutyCycleTime = appTxDutyCycle + randr(0, APP_TX_DUTYCYCLE_RND);
LoRaWAN.cycle(txDutyCycleTime);
deviceState = DEVICE_STATE_SLEEP;
break;
}
case DEVICE_STATE_SLEEP: {
LoRaWAN.sleep();
break;
}
default: {
deviceState = DEVICE_STATE_INIT;
break;
}
}
}
// Prepares the payload of the frame
static void prepareTxFrame(uint8_t port) {
float temperature = 19.55; // fixer Wert
float humidity = 62.5; // fixer Wert
int int_temp = temperature * 100;
int int_hum = humidity * 10;
appDataSize = 4;
appData[0] = int_temp >> 8;
appData[1] = int_temp;
appData[2] = int_hum >> 8;
appData[3] = int_hum;
}
Wie oben zu sehen ist, sind die zusätzlich erforderlichen Bibliotheken noch auskommentiert. So funktioniert das Script. Sobald ich die Bibliotheken jedoch einbinde, bekomme ich beim Kompilieren die folgenden Fehlermeldungen:
/Users/martin/Documents/Arduino/libraries/BlueDot_BME280_Library/BlueDot_BME280.cpp: In member function 'uint8_t BlueDot_BME280::init()':
/Users/martin/Documents/Arduino/libraries/BlueDot_BME280_Library/BlueDot_BME280.cpp:58:7: error: 'class SPIClass' has no member named 'setBitOrder'; did you mean '_bitOrder'?
SPI.setBitOrder(MSBFIRST); //Most significant Bit first
^~~~~~~~~~~
_bitOrder
/Users/martin/Documents/Arduino/libraries/BlueDot_BME280_Library/BlueDot_BME280.cpp:59:7: error: 'class SPIClass' has no member named 'setClockDivider'
SPI.setClockDivider(SPI_CLOCK_DIV4); //Sets SPI clock to 1/4th of the system clock (i.e. 4000 kHz for Arduino Uno)
^~~~~~~~~~~~~~~
/Users/martin/Documents/Arduino/libraries/BlueDot_BME280_Library/BlueDot_BME280.cpp:59:23: error: 'SPI_CLOCK_DIV4' was not declared in this scope
SPI.setClockDivider(SPI_CLOCK_DIV4); //Sets SPI clock to 1/4th of the system clock (i.e. 4000 kHz for Arduino Uno)
^~~~~~~~~~~~~~
/Users/martin/Documents/Arduino/libraries/BlueDot_BME280_Library/BlueDot_BME280.cpp:60:7: error: 'class SPIClass' has no member named 'setDataMode'; did you mean '_dataMode'?
SPI.setDataMode(SPI_MODE0); //Set Byte Transfer to (0,0) Mode
^~~~~~~~~~~
_dataMode
In file included from /Users/martin/Documents/Arduino/libraries/BlueDot_BME280_Library/BlueDot_BME280.h:9,
from /Users/Martin/Documents/Arduino/libraries/BlueDot_BME280_Library/BlueDot_BME280.cpp:10:
/Users/martin/Library/Arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/Wire/Wire.h: In member function 'uint8_t BlueDot_BME280::readByte(byte)':
/Users/martin/Library/Arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/Wire/Wire.h:117:13: note: candidate 1: 'uint8_t TwoWire::requestFrom(int, int)'
uint8_t requestFrom(int address, int size);
^~~~~~~~~~~
/Users/martin/Library/Arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/Wire/Wire.h:115:13: note: candidate 2: 'uint8_t TwoWire::requestFrom(uint8_t, uint8_t)'
uint8_t requestFrom(uint8_t address, uint8_t size);
^~~~~~~~~~~
exit status 1
Compilation error: exit status 1
Sehe ich das richtig, dass die Bibliotheken hier nicht wirklich kompatibel sind, oder gibt es eine Lösung für das Problem?
P.S.: Ich hatte das Script bereits fix und fertig für die Messung der Daten, habe die Änderungen dann aber rückgängig gemacht, da ich die Fehlermeldungen nicht verstanden habe und fange quasi am Anfang neu mit dem Einbinden der Bibliotheken an ..
Vielen Dank!
Martin