ruessel
Beiträge: 9895

DIY Heltec LoRa32 V3 Spielereien

Beitrag von ruessel »

Heltec hat vor einigen Monaten die dritte Version vom LoRa32 Board veröffentlicht. Beim neuen LoRa32 V3 hat Heltec einige Änderungen an der Hardware vorgenommen. So besitzt die Version 2 den bekannten SX1276 LoRa Chip von Semtech. Mit Version 3 wurde dieser durch einen SX1262 (ebenfalls von Semtech) ersetzt. Diese Änderung führt dazu, dass praktisch fast alle Projekte mit LoRaWAN nicht mehr funktionieren, da Projekte für das V2 Board überwiegend die LMIC-Library als Basis für LoRaWAN nehmen. Die LMIC-Librarys bieten aktuell aber keine Unterstützung für den SX1262 und ein Einstieg in LoRaWAN ist somit komplizierter geworden.

Für mich ist WLAN erst einmal nicht so interessant, ich möchte selber testen wie weit die Module reichen - mit DIY Antennen oder auf anderen Frequenzen. Dafür gab es fertige Skripte wie "LoRa Sender & LoRa Empfänger". Ich habe sehr viele aus dem Netz ausprobiert, es funktionieren nur sehr wenige, die funktionieren, da bleibt das eingebaute OLED aber dunkel - die Anschlüsse wurden in V3 auch geändert.
Heltec selber hat ein Demo veröffentlicht, dieses habe ich sehr stark gekürzt und auch ein wenig verbessert (LED Kontrolle). Dieses läuft nun als Reichweitentester auf Version 3 einwandfrei.

DSC_3273.jpg

Ich habe das Skript "PingPong" genannt, es funktioniert auch so. Wird der Baustein mit Spannung versorgt, horcht er 2 Sekunden auf der Frequenz nach einem Sender, hört er etwas, nimmt er die Botschaft auf und legt einen Zähler dazu. Hört er in den 2 Sekunden nix, wird er selber ein Sender und startet seine Botschaft mit dem Zählerstand 1.
Damit kann ein Baustein zu Hause bleiben, den anderen nimmt man(n) z.B. mit in das Auto und fährt los. Ich habe dafür noch ein LED-Flash einprogrammiert, jedes mal wenn eine Botschaft eintrifft und Fehlerfrei gelesen konnte, blitzt eine LED weiß hell auf, für 0,1 Sekunden. Da jede Sekunde eine Botschaft gesendet wird, blitzt logischerweise im Auto immer eine LED im Sekundentakt. blitzt nix mehr, bin ich ausser der Reichweite! So braucht man noch nicht einmal das OLED abzulesen.
Das OLED zeigt außerdem die Empfangsstärke des Gegenempfänger an, sowie seine eigene Empfangsqualität. Das war es eigentlich auch schon. Hat alles was ich mir im Moment vorstelle.

Im Skript habe ich noch alles wichtige als Kommentar hinterlegt. Zum Beispiel die Nachricht die versendet wird, ich habe ein Baustein mit "Hallo", den anderen mit "Ahoi" versehen. So lassen sich die Module leicht unterscheiden. Wichtig wenn verschiedene Sendeleistung programmiert wurde.

Hier mein Skript das nur mit V3 funzt:

Code: Alles auswählen

/*
 * LoRa_32 PingPong Test 
 * c2023 Ruesseltechnik
*/

#include "Arduino.h"
#include "LoRaWan_APP.h"
#include <Wire.h>  
#include "HT_SSD1306Wire.h"
/********************************* lora  *********************************************/
#define RF_FREQUENCY                                868000000 // Hz - auf angepasster Antenne achten!! Zerstörungsgefahr!!!

#define TX_OUTPUT_POWER                             5        // dBm max.21!! Erlaubt max. in DE - 14

#define LORA_BANDWIDTH                              0         // [0: 125 kHz, - größte Reichweite, langsamste Übertragung.
                                                              //  1: 250 kHz,
                                                              //  2: 500 kHz,
                                                              //  3: Reserved]
                                                              
#define LORA_SPREADING_FACTOR                       7         // [SF7..SF12]Pegel, die durch das SNR (Signal Noise Ratio)noch identifiziert werden. SF7: -123 dBm, SF12: -137 dBm

#define LORA_CODINGRATE                             1         // [1: 4/5, Je kleiner die Codierungsrate ist (die kleinste ist 4/8), desto höher ist die On-Air-Zeit bei einer Übertragung, damit deutlicher.
                                                              //  2: 4/6,
                                                              //  3: 4/7,
                                                              //  4: 4/8]
                                                              
#define LORA_PREAMBLE_LENGTH                        8         // Es bedeutet, dass alle 4 Nutzbits je nach Wert durch 5, 6, 7 oder 8 Übertragungsbits codiert werden.  
                                                              
                                                              
#define LORA_SYMBOL_TIMEOUT                         0         // Bei Empangsabbruch die Zeit den Empfänger schlafen zu legen
#define LORA_FIX_LENGTH_PAYLOAD_ON                  false
#define LORA_IQ_INVERSION_ON                        false

#define RX_TIMEOUT_VALUE                            1000
#define BUFFER_SIZE                                 30 // Definiere die zu übertragende Datengröße
char txpacket[BUFFER_SIZE];
char rxpacket[BUFFER_SIZE];

static RadioEvents_t RadioEvents;
void OnTxDone( void );
void OnTxTimeout( void );
void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr );

typedef enum
{
    LOWPOWER,
    STATE_RX,
    STATE_TX
}States_t;

int16_t txNumber;
int16_t rxNumber;
States_t state;
bool sleepMode = false;
int16_t Rssi,rxSize;

String rssi = "RSSI --";
String packSize = "--";
String packet;
String send_num;
String show_lora = "Empfange Daten:";

unsigned int counter = 0;
bool receiveflag = false; // Software Flag für LoRa Empfänger, empfangene Daten machen es "wahr"
long lastSendTime = 0;        // Letzte Sendezeit
int interval = 1000;          // Interval zwischen zwei Sendungen
uint64_t chipid;
int16_t RssiDetection = 0;


void OnTxDone( void )
{
	Serial.print("TX done......");
	state=STATE_RX;

}

void OnTxTimeout( void )
{
  Radio.Sleep( );
  Serial.print("TX Timeout......");
	state=STATE_TX;
}

void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr )
{
	rxNumber++;
  Rssi=rssi;
  rxSize=size;
  memcpy(rxpacket, payload, size );
  rxpacket[size]='\0';
  Radio.Sleep( );
  Serial.printf("\r\nreceived packet \"%s\" with Rssi %d , length %d\r\n",rxpacket,Rssi,rxSize);
  Serial.println("Warte um naestes Paket zu senden");
	receiveflag = true;
  state=STATE_TX;
}


void lora_init(void)
{
  Mcu.begin();
  txNumber=0;
  Rssi=0;
  rxNumber = 0;
  RadioEvents.TxDone = OnTxDone;
  RadioEvents.TxTimeout = OnTxTimeout;
  RadioEvents.RxDone = OnRxDone;

  Radio.Init( &RadioEvents );
  Radio.SetChannel( RF_FREQUENCY );
  Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
                                 LORA_SPREADING_FACTOR, LORA_CODINGRATE,
                                 LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
                                 true, 0, 0, LORA_IQ_INVERSION_ON, 3000 );

  Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,
                                 LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
                                 LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON,
                                 0, true, 0, 0, LORA_IQ_INVERSION_ON, true );
	state=STATE_TX;
}


/********************************* lora  *********************************************/

SSD1306Wire  factory_display(0x3c, 500000, SDA_OLED, SCL_OLED, GEOMETRY_128_64, RST_OLED); // addr , freq , i2c group , resolution , rst

bool resendflag=false;
bool deepsleepflag=false;
bool interrupt_flag = false;
void interrupt_GPIO0()
{
	interrupt_flag = true;
}
void interrupt_handle(void)
{
	if(interrupt_flag)
	{
		interrupt_flag = false;
		if(digitalRead(0)==0)
		{
			if(rxNumber <=2)
			{
				resendflag=true;
			}
			else
			{
				deepsleepflag=true;
			}
		}
	}

}
void VextON(void)
{
  pinMode(Vext,OUTPUT);
  digitalWrite(Vext, LOW);
  
}

void VextOFF(void) //Vext default OFF
{
  pinMode(Vext,OUTPUT);
  digitalWrite(Vext, HIGH);
}
void setup()
{
	Serial.begin(115200);
	VextON();
	delay(100);
	factory_display.init();
	factory_display.clear();

	chipid=ESP.getEfuseMac();//Die Chip-ID ist im Wesentlichen seine MAC-Adresse (Länge: 6 Bytes).
	Serial.printf("ESP32ChipID=%04X",(uint16_t)(chipid>>32));//print High 2 bytes
	Serial.printf("%08X\n",(uint32_t)chipid);//print Low 4bytes.

	attachInterrupt(0,interrupt_GPIO0,FALLING);
	lora_init();
	packet ="Warte auf Datenempfang!";
  factory_display.drawString(0, 10, packet);
  factory_display.display();
  delay(100);
  factory_display.clear();
	pinMode(LED ,OUTPUT);
	digitalWrite(LED, LOW);  
}


void loop()
{
interrupt_handle();
 if(deepsleepflag)
 {
	VextOFF();
	Radio.Sleep();
	SPI.end();
	pinMode(RADIO_DIO_1,ANALOG);
	pinMode(RADIO_NSS,ANALOG);
	pinMode(RADIO_RESET,ANALOG);
	pinMode(RADIO_BUSY,ANALOG);
	pinMode(LORA_CLK,ANALOG);
	pinMode(LORA_MISO,ANALOG);
	pinMode(LORA_MOSI,ANALOG);
	esp_sleep_enable_timer_wakeup(600*1000*(uint64_t)1000);
	esp_deep_sleep_start();
 }

 if(resendflag)
 {
	state = STATE_TX;
	resendflag = false;
 }

if(receiveflag && (state==LOWPOWER) )
{
	receiveflag = false;
	packet ="Inhalt:";
	int i = 0;
	while(i < rxSize)
	{
		packet += rxpacket[i];
		i++;
	}
	packSize = "R_Size: ";
	packSize += String(rxSize,DEC);
	packSize += " R_rssi: ";
	packSize += String(Rssi,DEC);
	send_num = "Sende Nummer: ";
	send_num += String(txNumber,DEC);
	factory_display.drawString(0, 0, show_lora);
  factory_display.drawString(0, 10, packet);
  factory_display.drawString(0, 20, packSize);
  factory_display.drawString(0, 50, send_num);
  factory_display.display();
  delay(10);
  factory_display.clear();
}

switch(state)
  {
    case STATE_TX:
      delay(1000);
      txNumber++;
      sprintf(txpacket,"Ahoi %d,Rssi:%d",txNumber,Rssi); // Sendenachricht die verschickt wird, hier ein freundliches Ahoi!
      Serial.printf("\r\nsending packet \"%s\" , length %d\r\n",txpacket, strlen(txpacket));
      Radio.Send( (uint8_t *)txpacket, strlen(txpacket) );
      state=LOWPOWER;
      break;
    case STATE_RX:
      Serial.println("into RX mode");
      Radio.Rx( 0 );
      digitalWrite(LED, HIGH);
       delay(100);
   digitalWrite(LED, LOW);
      state=LOWPOWER;
      break;
    case LOWPOWER:
      Radio.IrqProcess( );
      break;
    default:
      break;
  }
}
Bei Zeiten könnte diese Spielerei ausgebaut werden, z.b. mit GPS Daten etc.
Ziel könnte auch sein über lange Distanzen Kameras zu steuern.
Gruss vom Ruessel
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.



ruessel
Beiträge: 9895

Re: DIY Heltec LoRa32 V3 Spielereien

Beitrag von ruessel »

Hier ein recht neues Video, dass sehr ausführlich zeigt, wie man V3 programmiert. Traut euch, ist keine Raketenwissenschaft!

Gruss vom Ruessel



ruessel
Beiträge: 9895

Re: DIY Heltec LoRa32 V3 Spielereien

Beitrag von ruessel »

DSC_3285.jpg

Mit einem LiPo wird die Sache mobil. Für diesen Akku habe ich gerade 5,- EUR ausgegeben, habe gleich eine Nummer größer genommen, kleiner (1000 mAh) wird nicht günstiger.
Beim Akku kauf auf PH1.25 achten, das ist der Steckeranschluß - hier ist er winzig - eben 1,25mm Abstand der Kontakte.
Das Modul läuft sofort an, stecke ich 5V USB an, wird der Akku geladen, dies zeigt eine LED in Orange an. Vielleicht wird sie bei vollem Akku grün?
Habe keine Ahnung.

Auch wie ich nun beim Laden des Akkus die Funktion des Sendens abschalten kann, ist mir ein Rätsel.

Beim Akku laden wird es warm.... ich messe 50 Grad auf der Platine!
Ich messe einen Stromverbrauch beim Laden von rund 480 mA.


P.S.
Ist der Akku voll, geht die orange LED einfach aus......
Gruss vom Ruessel
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.



ruessel
Beiträge: 9895

Re: DIY Heltec LoRa32 V3 Spielereien

Beitrag von ruessel »

DSC_3286.jpg

Mein Tageswerk.
Akkuhalterung die auch den Baustein mit aufnimmt gedruckt, diese NoName Frischhaltedosen für je 1,65 EUR gekauft, Schalter und Antenne gebohrt, löten und Montage.
Dann habe ich nun das Skript noch geändert, auf möglichst hohe Reichweite. Heute ist auch meine Stationsantenne (+6dB) vom Chinesen gekommen, paßt natürlich nicht, brauche Adapter dazu.

Die Sendeleistung war bis heute auf 5dBm, ein Kurztest hatte so 150m Reichweite, nun habe ich voll aufgedreht (+22)...... demnächst mal schauen was das bringt. Akkus über Nacht aufladen, sollten um die 50 Stunden ohne Unterbrechung senden können - wenn der Aufdruck mit 3000 mAh stimmt, Chinesenware, meist nur echte 50% drin.

Frage: Was passiert wenn jetzt ein dritter Baustein mit dem selben Skript dazu kommt? Was wird dann angezeigt? Die Spiele sind eröffnet.
(eine Fernbedienung, 2 Kameras Ferngesteuert empfangen)
Gruss vom Ruessel
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.



ruessel
Beiträge: 9895

Re: DIY Heltec LoRa32 V3 Spielereien

Beitrag von ruessel »

868.jpg
Im Spektrum sieht das Sendesignal so aus wie oben gezeigt. Reichweite ist so ein Ding für sich. Beide Teile mit der Stummelantenne auf freier Sicht um die 200-300 Meter, je nach Gelände.
Bin dann auf eine +5 dBi Antenne auf dem Dach gegangen (4 Meter über Grund) und mit Stummelantenne mit dem Auto losgefahren, nach 1.5 Km war Schluß. Nun habe ich eine weitere Chinesenantenne für 868 MHz bestellt (11,- Euro), mal schauen wie weit ich dann komme. Alle genannten Entfernungen im leicht bebauten Gebiet (keine Hochhäuser).
Gruss vom Ruessel
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.



ruessel
Beiträge: 9895

Re: DIY Heltec LoRa32 V3 Spielereien

Beitrag von ruessel »

Gestern Abend kam noch die zweite +5dB Antenne vom Chinesenmann.

Statt gute 200 Meter nur mit Stummelantenne waren nun im leicht bebauten Gebiet über 3 Km Verbindung möglich, bevor der Zähler stehen blieb. Bei -118 dB Empfang war meist die Verbindung so schlecht, das der Prozessor noch Infos Empfang aber nicht mehr dekodieren konnte. Evtl. kann ich da was noch in der Software optimieren, noch weitere -10dB sollten drin sein.

Die Ausbreitung von 868 MHz ist manchmal etwas seltsam. Ich bin noch über freies unbebautes gefahren, auch da war nach ca. 3Km Luftlinie schluss. Aber auch je näher ich an die Autobahn gefahren bin, desto schlechter war die Verbindung, sogar bei nur 1 Km Entfernung brach die Verbindung zusammen, 50 Meter vor der Autobahn.
Die 10-30 Km sind meiner Meinung nach nur in Bayern von Berg zu Berg möglich. Im platten Land stören die Häuser..... mich würde noch der Baustein mit 433 MHz reizen, evtl. sind bei der Frequenz höhere Reichweiten drin, trotz Bebauung.

karte1.jpg
Gruss vom Ruessel
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.



pawihd
Beiträge: 2

Re: DIY Heltec LoRa32 V3 Spielereien

Beitrag von pawihd »

Hi,
Danke für den Artikel und den Arduino Script.
Ich habe zwei V3 Module und möchte meine ersten Erfahrungen mit LoRa machen.
Ich wollte den Script ausführen und bin gleich über die unbekannte Libs "LoRaWan_App" und "HT_SSD1306Wire.h"gestolpert.
Ich finde diese nicht im Arduino IDE!?
Wo kann man die herunterladen?



ruessel
Beiträge: 9895

Re: DIY Heltec LoRa32 V3 Spielereien

Beitrag von ruessel »

Gruss vom Ruessel



pawihd
Beiträge: 2

Re: DIY Heltec LoRa32 V3 Spielereien

Beitrag von pawihd »

Thanks for your links!
In the meantime i succeeded with the libraries when i downloaded the "Heltec WiFi LoRa 32 (V3)" board (sorry, i am somehow new to Arduino).

But now the compiler signals a lot of errors and stops e.g. at:
-------------------
Compilation error: no matching function for call to 'McuClass::begin()'
-------------------
It seems, something went terribly wrong!?
I would like to start again.
What would be the correct boardmanager URL and board?



ruessel
Beiträge: 9895

Re: DIY Heltec LoRa32 V3 Spielereien

Beitrag von ruessel »

Gruss vom Ruessel



Hansi857
Beiträge: 1

Re: DIY Heltec LoRa32 V3 Spielereien

Beitrag von Hansi857 »

Hallo, ich bin neu hier im Forum.

Ich habe da ein Problem mit einem Heltec LoRa AB01(Gut und mit unter 20€ auch günstig)
Ich möchte so ein Ereignissmelder erstellen, und alles soll im Sleep Mode laufen. Der in der Bibliothek hinterlegten Beispiel Interrupt Sketch läuft wunderbar(Stromverbrauch gemessene 0,036mA, aufwachen und senden ins TTN läuft auch wunderbar)
Jetzt möchte ich das bei jeden auslösen bzw. bei jeder täglichen Statusmeldung, das die Batteriespannung mit gesendet wird, um den zustand der Batterie zu kontrollieren.
Hier der Sketch:


#include "LoRaWan_APP.h"
#include "Arduino.h"

/* OTAA para*/
uint8_t devEui[] = { 0x22, 0x32, 0x33, 0x00, 0x00, 0x88, 0x88, 0x02 };
uint8_t appEui[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
uint8_t appKey[] = { 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x66, 0x01 };

/* ABP para*/
uint8_t nwkSKey[] = { 0x15, 0xb1, 0xd0, 0xef, 0xa4, 0x63, 0xdf, 0xbe, 0x3d, 0x11, 0x18, 0x1e, 0x1e, 0xc7, 0xda,0x85 };
uint8_t appSKey[] = { 0xd7, 0x2c, 0x78, 0x75, 0x8c, 0xdc, 0xca, 0xbf, 0x55, 0xee, 0x4a, 0x77, 0x8d, 0x16, 0xef,0x67 };
uint32_t devAddr = ( uint32_t )0x007e6ae1;

/*LoraWan channelsmask, default channels 0-7*/
uint16_t userChannelsMask[6]={ 0x00FF,0x0000,0x0000,0x0000,0x0000,0x0000 };

// The interrupt pin is attached to USER_KEY
#define INT_PIN USER_KEY

/* Application port */
#define DEVPORT 2
#define APPPORT 1

bool accelWoke = false;

/*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].*/
/*For this example, this is the frequency of the device status packets */
uint32_t appTxDutyCycle = (24 * 60 * 60 * 1000); // 24h;

/*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 = DEVPORT;
/*!
* Number of trials to transmit the frame, if the LoRaMAC layer did not
* receive an acknowledgment. The MAC performs a datarate adaptation,
* according to the LoRaWAN Specification V1.0.2, chapter 18.4, according
* to the following table:
*
* Transmission nb | Data Rate
* ----------------|-----------
* 1 (first) | DR
* 2 | DR
* 3 | max(DR-1,0)
* 4 | max(DR-1,0)
* 5 | max(DR-2,0)
* 6 | max(DR-2,0)
* 7 | max(DR-3,0)
* 8 | max(DR-3,0)
*
* Note, that if NbTrials is set to 1 or 2, the MAC will not decrease
* the datarate, in case the LoRaMAC layer did not receive an acknowledgment
*/
uint8_t confirmedNbTrials = 4;


/* Prepares the payload of the frame */
static bool prepareTxFrame( uint8_t port )
{
int head;
appPort = port;
switch (port) {
case APPPORT: // woke up from interrupt
Serial.println("Sending data packet");
appDataSize = 1;//AppDataSize max value is 64
appData[0] = 0xFF; // set to something useful
break;
case DEVPORT: // daily wake up
Serial.println("Sending dev status packet");
appDataSize = 1;//AppDataSize max value is 64
appData[0] = 0xA0; // set to something else useful
break;
}
return true;
}

void accelWakeup()
{
delay(10);
if(digitalRead(INT_PIN)==HIGH)
{
accelWoke = true;
}
}

void setup() {
Serial.begin(115200);
#if(AT_SUPPORT)
enableAt();
#endif
deviceState = DEVICE_STATE_INIT;
LoRaWAN.ifskipjoin();

accelWoke = false;
pinMode(INT_PIN,INPUT);
attachInterrupt(INT_PIN, accelWakeup, RISING);
Serial.println("Interrupts attached");
}

void loop()
{
if (accelWoke) {
uint32_t now = TimerGetCurrentTime();
Serial.print(now); Serial.println("accel woke");
}

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( DEVPORT );
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:
{
if (accelWoke) {
if (IsLoRaMacNetworkJoined) {
if(prepareTxFrame(APPPORT)) {
LoRaWAN.send();
}
}
accelWoke = false;
}
LoRaWAN.sleep();
break;
}
default:
{
deviceState = DEVICE_STATE_INIT;
break;
}
}
}
Kann mir dabei einer helfen, Das ich das hinbekomme?

LG in die Runde



 Aktuelle Beiträge [alle Foren]
 
» Intels Lunar-Lake - wie ist er einzuordnen?
von Gabriel_Natas - Mi 14:32
» Erstes Update zur finalen Version von Blackmagic DaVinci Resolve 19.0.1
von slashCAM - Mi 12:30
» Neue Video-KI MiniMax meistert menschliche Bewegungen
von blip - Di 14:22
» Intel bekräftigt: Aktuelle Laptop-und Server-CPUs nicht vom Alterungsproblem betroffen
von slashCAM - Di 10:24
» SmallRig x Brandon Li All-In-One Mobile Video Kit Co-Design Edition 4596 vorgestellt
von jjpoelli - Di 7:56
» Hilfe bei Kaufentscheidung zur DJI Osmo Action 3
von Jost - Di 7:20
» Doku-Sound verbessern - 1500€ Budget
von stip - Mo 22:01
» Suche Partner für eine Doku/Reportage
von funkytown - Mo 10:02
» The sustained Two-Shot - was eine vergessene Einstellung leisten kann
von iasi - Mo 0:45
» Longlegs - Nicolas Cage als Serienkiller
von Saint.Manuel - So 23:19
» Spoiler-Filter
von markusG - So 21:36
» Kichikus Welt 2.0
von vladi - So 13:20
» Start am 5. September - neue DJI Neo Selfie-Drohne für nur 199 Euro?
von Darth Schneider - So 10:01
» PDF: Halbjahresbilanz der Filmförderungsanstalt
von iasi - So 9:50
» Alien: Romulus - Teaser Trailer online - produziert von Ridley Scott, gedreht auf Alexa 35
von macaw - So 8:05
» Audio Latency korrigieren
von vago - So 2:06
» Hat jemand Erfahrung mit Micron 7400 Pro U.3 7.68TB SSDs?
von iasi - Sa 13:21
» Erste Footage der Blackmagic Pyxis 6K ist online
von Darth Schneider - Sa 5:39
» LumaFusion 5.0 bietet SpeedRamping und Keyframing - gegen Aufpreis
von slashCAM - Fr 16:36
» Canon EOS C400: Lowlight-Monster Dank Triple Base ISO und vielseitigste Cinema EOS?
von iasi - Fr 14:34
» Panasonic GH7
von endlesswinter - Fr 7:16
» Neues von der Pyxis
von iasi - Do 23:29
» Sony stellt FE 85mm 1.4 GM II Vollformat Portraitobjektiv für E-Mount vor
von Mantas - Do 22:17
» Blackmagic bringt kostenlose Profi-Kamera App fürs iPhone: Camera App
von GaToR-BN - Do 17:13
» Der Herr der Ringe: Die Schlacht der Rohirrim - sieht billig aus
von Alex - Do 13:49
» Blackmagic Pocket 4K Sensor Reinigung schief gelaufen
von Alex - Do 12:38
» Nanlite stellt Forza 60CR RGBLAC LED Spotlight mit integriertem CRMX vor
von rob - Do 8:12
» Bergdreh: Was würdet ihr mitnehmen?
von Franz86 - Mi 21:53
» Suche Kamera-/Tonassistent am 04.09. und 06.09. in Hamburg
von HansMaulwurf - Mi 21:09
» Neue HoverAir X1 Pro und X1 Pro Max Selfie-Drohnen mit 4K und 8K
von iasi - Mi 18:55
» Wetterfeste Proton Rain mißt nur 3x3cm
von slashCAM - Mi 17:39
» Sicherung von Video8 und Digital8 Bändern
von gammanagel - Di 23:40
» Adobe "Magic Fixup": Intelligente Fotobearbeitung per KI lernt von Videos
von slashCAM - Di 10:03
» Formel 1 setzt auf neue On-Board Gyro-Kameras für Steilkurven
von Jominator - Di 9:25
» Horizon - Serie für die große Kinoleinwand
von 7River - Di 7:14