GPS-Modul aktivieren

Hallo,
vielleicht kann mir ja jemand von Euch weiterhelfen und hat mir einen Tip was ich im Sketch eintragen muß, um das GPS-Modul zum Laufen zu bringen.
Mit den Code-Fragmenten aus https://sensebox.github.io/books-v2/edu/de/projekte/Mobile_Station.html bekomme ich nur Fehlermeldungen, angefangen bei

#include "SenseBoxMCU.h"

und dann weiter auch bei

GPS gps;
float lat; // Geografische Breite
float lon; // Geografische Länge

Egal was ich versuche ich bekomme das GPS-Modul nicht zum Laufen bzw. kompiliert.
Auch wenn ich auf der opensensemap eine neue Station - nun als mobil - registriere, wird leider im Sketch dazu (zum GPS) nichts ausgewiesen.

Bin etwas ratlos…
Ach ja: Arduino IDE ist die neueste Version 1.8.10 und auch die Modul- und Board-Updates sind alle eingespielt…

1 Like

Hallo @dm1111,

wie lautet der Fehler den Du bekommst? Kannst Du Deinen Sketch-Code einmal hier hochladen?

Wenn bei diesem Code

#include "SenseBoxMCU.h"
HDC1080 hdc;

GPS gps;
float lat; // Geografische Breite
float lon; // Geografische Länge

void setup(){

}

void loop(){
    
}

schon einen Fehler bekommst, dann musst Du vielleicht nochmal über die Installation des Board Support Packages schauen.

Ansonsten kannst du dein GPS-Modul auch ganz einfach über Blockly programmieren

1 Like

Hi,
also die Board-Support-Packages sind alle uptodate… Denke sonst würde der Sketch der Opensensemap auch nicht kompilieren und laufen…
Die Einbindung der SenseBoxMCU.h habe ich dann folgendermaßen eingebaut:

/*
senseBox:home - Citizen Sensingplatform
Version: wifiv2_0.3
Date: 2019-12-06
Homepage: https://www.sensebox.de https://www.opensensemap.org
Author: Reedu GmbH & Co. KG
Note: Sketch for senseBox:home WiFi MCU Edition
Model: homeV2Wifi
Email: support@sensebox.de
Code is in the public domain.
https://github.com/sensebox/node-sketch-templater
*/

#include <WiFi101.h>
#include <Wire.h>
#include <SPI.h>
#include <senseBoxIO.h>

#include <Adafruit_Sensor.h>
#include <Adafruit_HDC1000.h>
#include <Adafruit_BMP280.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_BME680.h>
#include <Makerblog_TSL45315.h>
#include <VEML6070.h>

#include "SenseBoxMCU.h"
HDC1080 hdc;

GPS gps;
float lat; // Geografische Breite
float lon; // Geografische Länge
// Uncomment the next line to get debugging messages printed on the Serial port
// Do not leave this enabled for long time use
// #define ENABLE_DEBUG

#ifdef ENABLE_DEBUG
#define DEBUG(str) Serial.println(str)
#define DEBUG_ARGS(str,str1) Serial.println(str,str1)
#define DEBUG2(str) Serial.print(str)
#define DEBUG_WRITE© Serial.write©
#else
#define DEBUG(str)
#define DEBUG_ARGS(str,str1)
#define DEBUG2(str)
#define DEBUG_WRITE©
#endif

/* ------------------------------------------------------------------------- /
/
------------------------------Configuration------------------------------ /
/
------------------------------------------------------------------------- */

Danach gibts dann folgenden Fehler:

In file included from C:\Users\xxx\AppData\Local\Arduino15\packages\sensebox\hardware\samd\1.3.1\libraries\SenseBox-MCU/SenseBoxMCU.h:17:0,

             from D:\sensebox\sensebox.ino:28:

C:\Users\xxx\AppData\Local\Arduino15\packages\sensebox\hardware\samd\1.3.1\libraries\senseBoxIO\src/senseBoxIO.h:8:7: error: redefinition of ‘class SenseBoxIO’

class SenseBoxIO

   ^~~~~~~~~~

Also hab ich mal vorsichtshalber den include der SenseBoxMCU.h weggelassen (da die glaube ich ja sowieso in der SenseBoxIO.h enthalten ist?):
Dann kommt aber folgender Fehler:

sensebox:29:1: error: ‘HDC1080’ does not name a type

HDC1080 hdc;

^~~~~~~

sensebox:31:1: error: ‘GPS’ does not name a type

GPS gps;

^~~

Wie gesagt, bin etwas ratlos…

1 Like

Ah, ja die beiden Libraries senseBoxIO.h und senseBoxMCU.h sind zusammen leider nicht kompatibel. Schau Dir mal dieses Template an: https://github.com/sensebox/node-sketch-templater/blob/gps/templates/homev2_wifi_gps.tpl. Da ist das GPS Modul mit integriert aber es ist etwas aufwändiger den Code zusammen zu kopieren.

1 Like

Super - danke schön.
Genau das habe ich (bisher vergeblich) gesucht.
Den Code werde ich dann mal in mein Sketch mergen und schauen was dabei rauskommt :slight_smile: - mit dem Display habe ich das auch hinbekommen.
Vielen Dank nochmal :slight_smile:

1 Like

Hast Du schon etwas versucht und Ergebnisse? Ich hatte letztes Jahr zum Thema GPS schon einen Thread eröffnet, der aber nur das Auslesen der Koordinaten betraf. Das ist mir geglückt, aber ich habe mich noch nicht weiter damit beschäftigt, diese auch an OpenSenseMap zu übermitteln.

1 Like

Hallo Ihr,

ich habe Probleme beim Verwenden des GPS Sensors als Zeitstempelgeber für das Schreiben von Messdaten auf die SD-Karte.
Ich habe den Code mit Blockly geschrieben, allerdings funktioniert das schreiben des Datums/Uhrzeit nicht. Ich vermute, dass es eine Art fehlender Treiber für das GPS Modul ist.

Meine Annahme stützt sich auf die unterschiedlichen Initialisierung des GPS-Moduls in dem TTN-Feinstaub-Projekt auf im Projektordner von der Senseboxwebseite und der des Blockly-Sketches.
Ist das parallele Betreiben der SD-Option und der Abfrage der GPSzeit evtl. nicht möglich?

Beste Grüße
Martin

1 Like

Hallo Martin,

ich habe erst heute Deine Nachricht gelesen.

Ich nutze das GPS-Modul in meinem Wetterstations-Programm insbesondere,
um den Regensensor um Mitternacht wieder zurückzusetzen.
Die Frage dabei ist ja immer, wieviel Regen ist am Tag gefallen.

Ich habe Dir mal einen Auszug aus meinem Stationsprogramm beigelegt,
allerdings nur die GPS-betreffenden Zeilen.

Es war anfangs auch für mich etwas schwierig, den GPS-Empfang zu verarbeiten.

Mit meinen im Beispiel gegebenen Programmzeilen ging es dann ohne Probleme.

Zusätzlich habe ich zur Umschaltung Sommer-Winterzeit ein Unterprogramm
geschrieben, das im beiliegenden Programmcode als Kommentar aufgerufen wird,
aber nicht beiliegt.

Vielleicht hilft Dir mein Beispiel weiter oder Du hast inzwischen eine
eigene Lösung gefunden.

Gruß, Raimund

Hier mein Programm-Auszug:

// GPS_aus_Wetter_AKT.ino

// ## ----- GPS -----
// Sensor-Type: u-blox CAM-M8Q (mit Stuetzbatterie)
// Anschluss:   I2C
//

#include <TinyGPS++.h>            // GPS (I2C)
#include <SenseBoxMCU.h>          // SenseBox-Main-Control-Unit


// =====  Variablen-Vorbesetzungen ============== 

// ----- G P S ----------------------------------
// GPS wird insbesondere zur Mess-Zeitraum-Festlegung 
// fuer Regensensor genutzt: 

GPS              gps_Empfaenger; // GPS-Empfaenger

int GPS_Jahr  = 0;
int GPS_Monat = 0;
int Monat_alt = 0;
int GPS_Tag   = 0;

int GPS_Stunde = 0;
int So_Wi_Stunde = 0;
int GPS_Minute   = 0;
int GPS_Sekunde  = 0;
int Sekunde_vorher  = 0;

// =====  Ende Variablen-Vorbesetzungen ========= 


// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// +++++ S E T U P +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

void setup () 
{
  
  // GPS
  gps_Empfaenger.begin ();

}


// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// +++++ L O O P +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

void loop () 
{  

  // ########## G P S ######### 

    // Start-Bedingung zum erstmaligen GPS-Empfang
    GPS_Tag = 0;
    
    while ( GPS_Tag == 0 )
    {
      gps_Empfaenger.getGPS();
      GPS_Tag = gps_Empfaenger.getDay ();
    }
      
    // Sekunde zum nächst-maligen Empfang von GPS-Daten
    while ( GPS_Sekunde == Sekunde_vorher )
    {
      gps_Empfaenger.getGPS();
      GPS_Sekunde = gps_Empfaenger.getSecond ();
    }
  
    Sekunde_vorher = GPS_Sekunde;
    
    // restliche Zeit-Daten
    GPS_Minute  = gps_Empfaenger.getMinute ();
    GPS_Stunde  = gps_Empfaenger.getHour ();
    
    //Datum
    GPS_Tag   = gps_Empfaenger.getDay ();  
    GPS_Jahr  = gps_Empfaenger.getYear ();
    GPS_Stunde  = gps_Empfaenger.getHour ();
    
    // bisherigen Monat festhalten
    Monat_alt = GPS_Monat; 
    // aktuellen Monat holen
    GPS_Monat = gps_Empfaenger.getMonth ();

    /*
    // Sommer- und Winterzeit mit 00:00 Uhr 
    // ==> bei 0:00 MEZ / MESZ: Zeitintervall Regenmessung neu starten (WippAnz = 0)
    So_Wi_Stunde  = Sommer_Winterzeit_WippAnzReset ( GPS_Monat,
                                                     GPS_Minute, 
                                                     GPS_Sekunde );
    */
    
    Serial.print   ( GPS_Tag );     Serial.print   ( "." );
    Serial.print   ( GPS_Monat );   Serial.print   ( "." );
    Serial.print   ( GPS_Jahr );    
    Serial.print   ( " --- " );
    Serial.print   ( GPS_Stunde );  Serial.print   ( ":" );
    Serial.print   ( GPS_Minute );  Serial.print   ( ":" );
    Serial.print   ( GPS_Sekunde );
    
    //Serial.print   ( " +++ SoWi h = " );  Serial.println ( So_Wi_Stunde );

  // ########## G P S #########   

  // =========================================================
  // ===== Info-Seite #0 - Datum =============================
  // =========================================================

  // Datum auf Display anzeigen
  Datum_Zeit_anzeigen ( GPS_Jahr,
                                        GPS_Monat,
                                        GPS_Tag,
                                        So_Wi_Stunde,
                                        GPS_Minute );           
  
}


// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// +++++ UNTERPROGRAMME +++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++

void Datum_Zeit_anzeigen ( int par_Jahr,
                                              int par_Monat,
                                              int par_Tag,
                                              int par_Stunde,
                                              int par_Minute)
{
  
  Serial.println ( "##### Datum_Zeit_anzeigen #####" );

  Serial.print   ( par_Tag );   Serial.print ( "." );
  Serial.print   ( par_Monat ); Serial.print ( "." );
  Serial.print   ( par_Jahr );
  Serial.print   ( " --- " );  
  Serial.print   ( par_Stunde ); Serial.print ( " : " ); 
  Serial.println ( par_Minute ); 
    
  //warten ( millis (), 700 );

}
1 Like

Hy Raimund,

herzlichen Dank für Deine ausführliche Antwort und Arbeit die Du Dir gemacht hast.
Ich werde den Sketch ausprobieren, bzw. in meinem “Datensketch” einarbeiten.
Hab vielen Dank!!!

Beste Grüße
Martin

1 Like