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]
 
» Aputure Storm 1200x: Grösserer Farbbereich und bessere Farbgenauigkeit
von slashCAM - Mi 11:54
» AI in Silhouette - Mask ML
von macaw - Mi 8:59
» Blackmagic und Fraunhofer stellen neues MPEG-H in Resolve vor.
von Frank Glencairn - Mi 8:26
» 14 Bit 4K RAW auf dem Xiaomi 14 Ultra vs. 8K RAW mit der CANON R5
von pillepalle - Mi 4:02
» Blackmagic Pyxis Monitor erklärt – inkl. Fallbeispielen
von roki100 - Di 21:07
» Smallrig Kameragriff
von Manuell - Di 20:56
» Shape Kamerakäfig für Panasonic S1
von Manuell - Di 20:54
» Blackmagic Pyxis Monitor - neuer 5" HDR Touchscreen mit Kamerasteuerung
von Darth Schneider - Di 20:00
» Peli-Koffer 1560 abzugeben
von lotharjuergen - Di 16:02
» Bebob-Fernsteuerung zu verkaufen
von lotharjuergen - Di 15:59
» Nikon stellt kostenlose RED-LUTs für N-Log zur Verfügung
von Da_Michl - Di 14:52
» Metabones Canon-EF zu Sony-E CINE eND Smart-Adapter
von iasi - Di 14:41
» Ursa Mini Pro 4,6 G1 - Prores4444 oder BRAW
von Onkel Danny - Di 12:16
» LaCie 1big Dock SSD Pro 4 TB im Langzeit Test
von rideck - Di 8:36
» Googels NotebookLM - automatische AI Podcasts
von Frank Glencairn - Di 7:00
» Erste Aufnahmen von der Blackmagic Pocket Cinema Camera 4K
von ich nicht - Di 0:13
» OBS + Videograbber - Plötzlich kein Ton mehr
von Stichie79 - Mo 21:59
» Gimbal/Monopod-Setup: Ja oder Nein?
von Bildlauf - Mo 20:57
» Blazar APEX 1.33x AF (35 und 50mm) - Blazars erste anamorphe AF Objektive
von Funless - Mo 20:33
» Runway Gen-3 Alpha Video-zu-Video - Spezialeffekte für jedermann im Handumdrehen
von slashCAM - Mo 15:51
» Sony Lavalier-Mikrofon ECM-L1 mit Plug-in-Stromversorgung
von beiti - Mo 14:49
» Wie lädt man V-Mount-Akkus auf?
von CotORR - Mo 14:02
» C300 Mark II
von Alex - Mo 12:15
» Variabler, elektronischer Diffusionsfilter für Cine-Setups in Entwicklung
von slashCAM - Mo 11:45
» Audio bei Youtube-Skiserie
von Franz86 - Mo 10:53
» Blackmagic Camera App 1.3 für Android bringt u.a. Timecode und Zeitlupe
von blindcat - Mo 5:44
» Verkaufe Panasonic S1
von Manuell - Mo 0:19
» Verkaufe Panasonic S5
von Manuell - Mo 0:18
» Blackmagic Video Assist 7 Zoll 12g
von Manuell - Mo 0:17
» Atomos bringt neue Funktionen per Firmware-Upgrades für Ninja Phone und Shinobi II
von Tscheckoff - So 23:36
» AI Color Grading in Resolve
von Frank Glencairn - So 13:31
» Blackmagic Cloud Store verliert Google Drive-Synchronisierung
von slashCAM - So 13:06
» DZOfilm Arles - fünf neue Brennweiten verfügbar
von slashCAM - So 10:57
» Erster Trailer zu Francis Ford Coppolas Megalopolis erschienen
von iasi - Sa 15:29
» Storyboard mit AI
von 7River - Sa 10:22