ruessel
Beiträge: 9968

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: 9968

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: 9968

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: 9968

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: 9968

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: 9968

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: 9968

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: 9968

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



Loobster
Beiträge: 7

Re: DIY Heltec LoRa32 V3 Spielereien

Beitrag von Loobster »

Moin,

ich werde PingPong demnächst mal im Wald einsetzen, um zu sehen, wie weit die LoRa Funkwellen dort reichen. Danach werden dann die Nodes installiert, die für die weiter entfernten Nodes dann das Weiterrouting der Payload bis zum LoRaWAN GW übernehmen.



ruessel
Beiträge: 9968

Re: DIY Heltec LoRa32 V3 Spielereien

Beitrag von ruessel »

Wenn es geregnet hat, ist die Dämpfung extrem hoch..... am besten zu dieser Jahreszeit in den Mischwald gehen, die Blätter fallen und die Dämpfung nimmt ab ;-)

Das a + o ist die Antenne. Ich war letzte Woche bei einem Funkamateurtreffen, dort gab es Rundstrahl Antennen mit über 11 dB Leistungsgewinn - mehrfach gestockte 5/8 Antenne.
Gruss vom Ruessel



Frank Glencairn
Beiträge: 25150

Re: DIY Heltec LoRa32 V3 Spielereien

Beitrag von Frank Glencairn »

Hansi857 hat geschrieben: Mi 14 Aug, 2024 15:01
Kann mir dabei einer helfen, Das ich das hinbekomme?

In der Methode accelWakeup(), könnte es zu Prellungen (Bounce) des Tasters/Schalters kommen, wenn der Interrupt ausgelöst wird. Ein Debounce-Mechanismus könnte sicherstellen, dass keine falschen Signale verarbeitet werden.

void accelWakeup()
{
static unsigned long lastInterruptTime = 0;
unsigned long interruptTime = millis();
if (interruptTime - lastInterruptTime > 200) { // 200ms debounce
if (digitalRead(INT_PIN) == HIGH) {
accelWoke = true;
}
}
lastInterruptTime = interruptTime;
}

Es gibt einige Bereiche, in denen Fehlerrückgaben überprüft werden sollten. Beispielsweise beim LoRaWAN.join(), könnte eine Rückmeldung implementiert werden, ob die Verbindung erfolgreich war oder nicht.

case DEVICE_STATE_JOIN:
{
if (LoRaWAN.join() == LORAWAN_STATUS_OK) {
Serial.println("Joined successfully");
} else {
Serial.println("Failed to join");
deviceState = DEVICE_STATE_INIT; // Rückkehr zum Init-Zustand
}
break;
}


Bei der Zuweisung von Daten wie den Schlüsseln (devEui, appEui, etc.) solltest du sicherstellen, dass der Mikrocontroller genügend RAM hat, um diese Arrays effizient zu verwalten. Bei vielen Schlüsseln könnte es bei kleineren Mikrocontrollern eng werden. Falls der Speicher knapp wird, kannst du in Erwägung ziehen, diese Daten im Flash-Speicher (PROGMEM) zu speichern, wenn sie sich nicht ändern.

Der delay(10) im accelWakeup()-Interrupt ist problematisch, da es die Ausführung des Codes blockiert. Interrupt-Handler sollten so kurz wie möglich sein. Ein besserer Ansatz wäre, die Verzögerung außerhalb des Interrupt-Handlers in der Hauptschleife (loop()) zu verarbeiten.

void accelWakeup()
{
accelWoke = true; // Setze nur das Flag
}

void loop()
{
static unsigned long lastWakeTime = 0;

if (accelWoke) {
if (millis() - lastWakeTime > 10) { // Simuliere Delay von 10ms
if (digitalRead(INT_PIN) == HIGH) {
uint32_t now = TimerGetCurrentTime();
Serial.print(now); Serial.println("accel woke");
}
accelWoke = false;
}
lastWakeTime = millis();
}

// Restlicher Code...
}
Sapere aude - de omnibus dubitandum



Loobster
Beiträge: 7

Re: DIY Heltec LoRa32 V3 Spielereien

Beitrag von Loobster »

ruessel hat geschrieben: Fr 21 Jul, 2023 18:38 Heute ist auch meine Stationsantenne (+6dB) vom Chinesen gekommen, paßt natürlich nicht, brauche Adapter dazu.
Hast Du den Adapter bekommen ?

Wenn ja, wie heisst der Adapter und wo kann man ihn kaufen ?



ruessel
Beiträge: 9968

Re: DIY Heltec LoRa32 V3 Spielereien

Beitrag von ruessel »

Hast Du den Adapter bekommen ?
Ich weiß es nicht mehr. aber eine LoRa Stationsantenne habe ich auf meinem alten Haus gestellt und auch schon mal in Betrieb genommen, also müßte ich damals den Adapter gekauft haben. Funksachen kaufe ich meist bei https://hamradioshop.net/ (Bonito)

Ich wollte hier mal (der Gedanke keimt schon länger) eine LoRa Funkbarke (in Silikon vergossen) mit Solarspeisung im Dauertest draußen laufen lassen (einfach mal so machen, ob sowas 10 Jahre ohne Pflege durchhält???). Wäre schön, wenn der Signalinhalt das Aliennotsignal aus dem Film Alien beinhaltet. ;-) wäre eine coole Aktion. Nur habe ich mir den Film nochmal durchgezogen, mit Stopps in den Szenen...... konnte nix näheres zum Signal im Film finden.


Die KI sagt dazu:
Alien.png
Gruss vom Ruessel
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.



ruessel
Beiträge: 9968

Re: DIY Heltec LoRa32 V3 Spielereien

Beitrag von ruessel »

Im Anhang etwas über LoRa Antennen......
Gruss vom Ruessel
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.



Loobster
Beiträge: 7

Re: DIY Heltec LoRa32 V3 Spielereien

Beitrag von Loobster »

ruessel hat geschrieben: Sa 19 Okt, 2024 16:57 Im Anhang etwas über LoRa Antennen......
Danke dafür. Sehr interessant.



Loobster
Beiträge: 7

Re: DIY Heltec LoRa32 V3 Spielereien

Beitrag von Loobster »

ruessel hat geschrieben: Fr 21 Jul, 2023 18:38 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)
Ich sehe gerade, dass Du an der Tupperware-Box einen Kippschalter installiert hast. Wie wird der angeschlossen ?

Meine Antennen sind heute gekommen. Dann kann ich die beiden PingPonk Lora32 V3 morgen verdrahten. Danach wird dann getestet 😂

Danke für Deine Tipps.



Loobster
Beiträge: 7

Re: DIY Heltec LoRa32 V3 Spielereien

Beitrag von Loobster »

ruessel hat geschrieben: Fr 21 Jul, 2023 18:38 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)
Ich sehe gerade, dass Du an der Tupperware-Box einen Kippschalter installiert hast. Wie wird der angeschlossen ?

Meine Antennen sind heute gekommen. Dann kann ich die beiden PingPong Lora32 V3 morgen verdrahten. Danach wird dann getestet 😂

Danke für Deine Tipps.



ruessel
Beiträge: 9968

Re: DIY Heltec LoRa32 V3 Spielereien

Beitrag von ruessel »

Moin,

der Kippschalter verbindet nur den Akku Pluspol, ist also ein Ein- Ausschalter. Ja, beim Akkuladen muss der Schalter auf "Ein" sein.
Gruss vom Ruessel



Loobster
Beiträge: 7

Re: DIY Heltec LoRa32 V3 Spielereien

Beitrag von Loobster »

ruessel hat geschrieben: Fr 21 Jul, 2023 18:38 DSC_3286.jpg

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)
Alle 3 Heltec funktionieren. Es ist jetzt nur so, dass der 3. Baustein in die Kette mit aufgenommen wird. Der erste schickt und der zweite empfängt. Der zweite schickt und der dritte empfängt. Und dann schickt der dritte auch noch und der erste empfängt ;-)



ruessel
Beiträge: 9968

Re: DIY Heltec LoRa32 V3 Spielereien

Beitrag von ruessel »

Was ist Deine beste Entfernung bis jetzt gewesen?
Gruss vom Ruessel



Loobster
Beiträge: 7

Re: DIY Heltec LoRa32 V3 Spielereien

Beitrag von Loobster »

ruessel hat geschrieben: Mo 11 Nov, 2024 12:46 Was ist Deine beste Entfernung bis jetzt gewesen?
Ich habe gerade in der letzten Woche meine beiden kleinen Gehäuse fertig gestellt (große Antenne eingebaut, Schalter angelötet und Akku angeschlossen und aufgeladen).

Die Tests im Gelände (hauptsächlich Wald) beginnen demnächst. Ich habe aber schon mal im Wald gemappt. Mit keinem guten Ergebnis. Über Wasser gehen 40 km und mehr mit LoRaWAN problemlos. Im Wald viel, viel weniger.



ruessel
Beiträge: 9968

Re: DIY Heltec LoRa32 V3 Spielereien

Beitrag von ruessel »

Antenne....Antenne..... das ist der richtige Verstärker. ich habe mal kurz mit Yagiantenne probiert. Ist völlig illegal, kommt aber um den Faktor 10 weiter ;-)
Gruss vom Ruessel



 Aktuelle Beiträge [alle Foren]
 
» Geisterjäger zwischen Technik, Mythos oder Täuschung
von dienstag_01 - Di 17:03
» GFX Eterna - erste Fujifilm Cinema-Kamera erscheint 2025
von Skeptiker - Di 16:40
» Blackmagic DaVinci Resolve 19.1 bringt über 100 Verbesserungen und neue Funktionen
von Frank Glencairn - Di 16:21
» Blackmagic Pyxis in der Praxis im Gimbal-, Schulter- und Handkamera-Setup
von Darth Schneider - Di 16:11
» Kennt jemand günstige, Akku-betriebene 60W LED?
von soulbrother - Di 16:09
» automatisches Audioducking in Magix VD2025
von soulbrother - Di 16:03
» Davinci 19 Beta Grafikkarte
von -paleface- - Di 15:13
» Blackmagic PYXIS 6K - Sensortest - Rolling Shutter und Dynamik
von Bildlauf - Di 11:19
» ZEISS Supreme Zoom Radiance - drei neue T2.9 High-End-Cine-Zooms vorgestellt
von slashCAM - Di 11:03
» Filmen und Schnitt von dreitägiger Tagung - Bedingungen normal?
von ich nicht - Di 10:54
» Atomos Shogun und Ninja bekommen direkten Dropbox-Upload
von slashCAM - Di 10:03
» FILMBERUFE: Diese Jobs sind gut bezahlt und eignen sich zum Einstieg!
von 7River - Di 9:08
» Was hörst Du gerade?
von Phil999 - Di 0:10
» Gerücht - Apple iPhone 18 Pro kommt mit variabler Blende und 12 GB RAM
von 123oliver - Mo 23:49
» CinePrint35
von roki100 - Mo 23:30
» DCR TRV30E - Composite-Buchse wechseln?
von psdn - Mo 22:36
» Suche SkyBeam, aber als extrem starke LED
von soulbrother - Mo 22:15
» Linsen (Vintage, Anamorphic & Co.)
von Bildlauf - Mo 21:53
» Was schaust Du gerade?
von roki100 - Mo 21:41
» Panasonic S5 - Allgemeine Fragen, Tipps und Tricks, Zeig deine Bilder/Videos usw.
von roki100 - Mo 21:27
» Sensor Entwicklung A7III zu ZV-E1 oder FX3
von SteveHH1965 - Mo 20:38
» Blackmagic URSA Cine 12K - 16 Blendenstufen für 15.000 Dollar!
von Frank Glencairn - Mo 19:45
» Welche Lautstärke ist für Youtube am Besten?
von Blackbox - Mo 19:19
» Firmware-Update für DJI Neo bringt vertikale Aufnahme und mehr
von tom - Mo 16:58
» Sony Airpeak S1 Drohne wird nicht weiter produziert
von medienonkel - Mo 16:44
» Was hast Du zuletzt gekauft?
von ruessel - Mo 16:10
» DIY Heltec LoRa32 V3 Spielereien
von ruessel - Mo 12:55
» Mail Accounts - Windows Mail kann bald keine E-Mails mehr verschicken
von rabe131 - Mo 12:40
» Wie erschaffe Ich Screenshots von Webseiten in UHD oder 8K, ohne einen solchen Monitor zu besitzen?
von Tobias Claren - Mo 12:13
» Full HD und 50p?
von beiti - Mo 11:50
» Licht how to:
von Frank Glencairn - Mo 10:01
» Platzsparender Ersatz für 90cm Softbox
von stip - Mo 8:45
» Kauft Apple Blackmagic?
von macaw - Mo 8:18
» Sony kündigt neue Firmware für Venice 2, FX6, FX3 und FX30 an
von j.t.jefferson - So 17:48
» Dialogue Editing Workshop
von Bluboy - So 12:34