From 8b4c00bc7f662c64652e739347521693efdf0adc Mon Sep 17 00:00:00 2001 From: Willem Oldemans Date: Sun, 16 Apr 2023 21:21:05 +0200 Subject: [PATCH] extended config --- FW/leo_muziekdoos_esp32/data/settings.json | 36 +++++++++++-------- FW/leo_muziekdoos_esp32/platformio.ini | 20 +++++++---- FW/leo_muziekdoos_esp32/src/audio.cpp | 3 +- FW/leo_muziekdoos_esp32/src/audio.h | 7 ++-- FW/leo_muziekdoos_esp32/src/config.cpp | 40 +++++++++++++++++++++- FW/leo_muziekdoos_esp32/src/config.h | 3 +- FW/leo_muziekdoos_esp32/src/game.cpp | 4 ++- FW/leo_muziekdoos_esp32/src/led.cpp | 2 +- FW/leo_muziekdoos_esp32/src/led.h | 2 ++ FW/leo_muziekdoos_esp32/src/ota.cpp | 3 +- FW/leo_muziekdoos_esp32/src/power.cpp | 1 + FW/leo_muziekdoos_esp32/src/rfid.cpp | 13 ++++++- FW/leo_muziekdoos_esp32/src/rfid.h | 7 ++-- FW/leo_muziekdoos_esp32/src/sensor.cpp | 21 ++++++------ FW/leo_muziekdoos_esp32/src/sensor.h | 18 ++-------- 15 files changed, 119 insertions(+), 61 deletions(-) diff --git a/FW/leo_muziekdoos_esp32/data/settings.json b/FW/leo_muziekdoos_esp32/data/settings.json index 089314d..dfd3493 100644 --- a/FW/leo_muziekdoos_esp32/data/settings.json +++ b/FW/leo_muziekdoos_esp32/data/settings.json @@ -1,16 +1,17 @@ { - "tags": [{ - "TagUID" : "B3 26 D0 15", - "audiofile" : "/Billy-Jean.mp3" - }, - { - "TagUID" : "1F E8 20 00", - "audiofile" : "/Let_it_be.mp3" - }, - { - "TagUID" : "23 0E 2C 19", - "audiofile" : "/ringoffire.mp3" - }], + "tags": [ + { + "TagUID" : "B3 26 D0 15", + "audiofile" : "/Billy-Jean.mp3" + }, + { + "TagUID" : "1F E8 20 00", + "audiofile" : "/Let_it_be.mp3" + }, + { + "TagUID" : "23 0E 2C 19", + "audiofile" : "/ringoffire.mp3" + }], "WiFi": [ { "ssid": "poes", @@ -19,6 +20,13 @@ { "ssid": "wifi2", "psk": "pass2" - } -] + }], + + "AudioGain": 0.5, + "ScanTimeout": 50, + "HardwareVersion": 2, + "GameTimeout": 10000, + "PowerTimeout": 420000, + "PowerOTADelay": 4000, + "Brightness": 20 } \ No newline at end of file diff --git a/FW/leo_muziekdoos_esp32/platformio.ini b/FW/leo_muziekdoos_esp32/platformio.ini index e5cf09d..0e84b53 100644 --- a/FW/leo_muziekdoos_esp32/platformio.ini +++ b/FW/leo_muziekdoos_esp32/platformio.ini @@ -8,9 +8,14 @@ ; Please visit documentation for the other options and examples ; https://docs.platformio.org/page/projectconf.html +[env] +src_filter = +<*> -<.git/> -<.svn/> - - - - + + [env:esp32-pico] platform = espressif32 -board = m5stack-atom +#board = m5stack-atom +board = pico32 framework = arduino lib_deps = #bblanchon/ArduinoJson@^6.18.5 @@ -18,13 +23,16 @@ lib_deps = fastled/FastLED@^3.5.0 #robtillaart/AS5600 @ ^0.3.4 robtillaart/AS5600 @ ^0.3.6 - -monitor_speed = 115200 +src_filter = ${env.build_src_filter} lib_ldf_mode = deep+ -extra_scripts = ./littlefsbuilder.py build_flags = -DHARDWARE=2 -DCORE_DEBUG_LEVEL=3 -DNDEF_DEBUG=1 -upload_protocol = esptool #espota -#upload_port = muziekdoos.local +extra_scripts = ./littlefsbuilder.py +board_build.filesystem = littlefs + +monitor_speed = 115200 +#upload_protocol = esptool +upload_protocol = espota +upload_port = muziekdoos.local diff --git a/FW/leo_muziekdoos_esp32/src/audio.cpp b/FW/leo_muziekdoos_esp32/src/audio.cpp index 8f5700f..6b61af3 100644 --- a/FW/leo_muziekdoos_esp32/src/audio.cpp +++ b/FW/leo_muziekdoos_esp32/src/audio.cpp @@ -10,7 +10,6 @@ String nextAudioFile = ""; uint8_t n = 0; bool audioState = false; - bool audioInitOk = false; const char *waveFile[] = @@ -93,7 +92,7 @@ void initAudio() delay(500); out = new AudioOutputI2S(); out->SetPinout(I2S_BCLK, I2S_WCLK, I2S_DATA); // bclk, wclk, data - out->SetGain(AUDIOGAIN); + out->SetGain(getFloatParam("AudioGain", AUDIOGAIN)); pinMode(DAC_SDMODE, OUTPUT); setAudioState(false); mp3 = new AudioGeneratorMP3(); diff --git a/FW/leo_muziekdoos_esp32/src/audio.h b/FW/leo_muziekdoos_esp32/src/audio.h index 96ce277..81c4001 100644 --- a/FW/leo_muziekdoos_esp32/src/audio.h +++ b/FW/leo_muziekdoos_esp32/src/audio.h @@ -8,12 +8,9 @@ #include "AudioOutputI2S.h" #include "game.h" +#include "config.h" -#define AUDIOGAIN 0.7 -//#define AUDIONSONGS 3 -//#define AUDIOREPEATS 3 - - +#define AUDIOGAIN 0.5 void initAudio(void); void handleAudio(void); diff --git a/FW/leo_muziekdoos_esp32/src/config.cpp b/FW/leo_muziekdoos_esp32/src/config.cpp index 63d641f..8ddd806 100644 --- a/FW/leo_muziekdoos_esp32/src/config.cpp +++ b/FW/leo_muziekdoos_esp32/src/config.cpp @@ -5,7 +5,7 @@ #include "ArduinoJson.h" const char *tagConfigfile = "/settings.json"; -DynamicJsonDocument settingsDoc(512); +DynamicJsonDocument settingsDoc(1024); bool configInitOK = false; struct tagConfig @@ -48,6 +48,41 @@ String GetWifiPassword(String ssid) return ""; } + +int GetIntparam(String param, int def) +{ + + log_i("Get param %s",param ); + if(param == "") + { + log_e("No param(%s) given", param); + return def; + } + if(!settingsDoc.containsKey(param)) + { + log_e("param(%s) not found",param); + return def; + } + return settingsDoc[param]; +} + + +float getFloatParam(String param, int def) +{ + log_i("Get param %s",param ); + if( param == "") + { + log_e("No param(%s) given",param); + return def; + } + if(!settingsDoc.containsKey(param)) + { + log_e("param(%s)",param); + return def; + } + return settingsDoc[param]; +} + void loadConfig(const char *fname) { log_i("config: load"); @@ -80,6 +115,9 @@ void loadConfig(const char *fname) } configInitOK = !hasError; } + //test values + int test = GetIntparam("ScanTimeout"); + log_i("retval(%i)",test); log_i("config: load done"); } diff --git a/FW/leo_muziekdoos_esp32/src/config.h b/FW/leo_muziekdoos_esp32/src/config.h index 813581c..1264ce7 100644 --- a/FW/leo_muziekdoos_esp32/src/config.h +++ b/FW/leo_muziekdoos_esp32/src/config.h @@ -5,7 +5,8 @@ String getConfigSong(String uid); bool getUIDvalid(String uid); String GetWifiPassword(String ssid); - +int GetIntparam(String param, int def = -1); +float getFloatParam( String param, int def = -1); void initConfig(void); void handleConfig(void); \ No newline at end of file diff --git a/FW/leo_muziekdoos_esp32/src/game.cpp b/FW/leo_muziekdoos_esp32/src/game.cpp index e78dcaf..507160c 100644 --- a/FW/leo_muziekdoos_esp32/src/game.cpp +++ b/FW/leo_muziekdoos_esp32/src/game.cpp @@ -96,9 +96,11 @@ void handleGame(void) handleNewState(); setRFIDscanState(false); setAudioState(false); - idleTime = millis(); + //idleTime = millis(); } + idleTime = getLastTagTime(); + if (!getRFIDlastUIDValid()) { // no UID found, go RFID scanning diff --git a/FW/leo_muziekdoos_esp32/src/led.cpp b/FW/leo_muziekdoos_esp32/src/led.cpp index 4386043..495604c 100644 --- a/FW/leo_muziekdoos_esp32/src/led.cpp +++ b/FW/leo_muziekdoos_esp32/src/led.cpp @@ -34,7 +34,7 @@ void SetLedColor(CRGB color, bool blink) void initLed(void) { FastLED.addLeds(leds, NUM_LEDS); // GRB ordering is typical - FastLED.setBrightness(20); + FastLED.setBrightness(GetIntparam("Brightness", LEDDEFBRIGHT)); } void handleLed(void) diff --git a/FW/leo_muziekdoos_esp32/src/led.h b/FW/leo_muziekdoos_esp32/src/led.h index face1bb..04ac84d 100644 --- a/FW/leo_muziekdoos_esp32/src/led.h +++ b/FW/leo_muziekdoos_esp32/src/led.h @@ -4,10 +4,12 @@ #include "power.h" #include "audio.h" #include "rfid.h" +#include "config.h" #define NUM_LEDS 1 #define LEDTIMEOUT 100 #define LEDBLINKTIME 500 +#define LEDDEFBRIGHT 20 void initLed(void); void handleLed(void); diff --git a/FW/leo_muziekdoos_esp32/src/ota.cpp b/FW/leo_muziekdoos_esp32/src/ota.cpp index 53b269b..5368689 100644 --- a/FW/leo_muziekdoos_esp32/src/ota.cpp +++ b/FW/leo_muziekdoos_esp32/src/ota.cpp @@ -37,6 +37,7 @@ bool OtaProcess_class::initialize(void) m_psk = tmppsk; } else{ + log_w("using fallback SSID %s", SECRET_SSID); m_ssid = SECRET_SSID; m_psk = SECRET_PASS; } @@ -68,10 +69,10 @@ bool OtaProcess_class::initialize(void) case otaConnect: { - log_i("Otastate = initialize(connect)"); uint32_t timeTemp = millis(); if (timeTemp - m_lastconnectTime > WIFICONNECTINTERVAL) { + log_i("Otastate = initialize(connect)"); if (WiFi.status() != WL_CONNECTED) { log_e("Connection Failed! Retry..."); diff --git a/FW/leo_muziekdoos_esp32/src/power.cpp b/FW/leo_muziekdoos_esp32/src/power.cpp index b32a108..a2c9895 100644 --- a/FW/leo_muziekdoos_esp32/src/power.cpp +++ b/FW/leo_muziekdoos_esp32/src/power.cpp @@ -121,6 +121,7 @@ void handlePowerState(void) // init all log_i("powerinit"); SetLedColor(CRGB::Green); + //initConfig(); powerstate = on; } break; diff --git a/FW/leo_muziekdoos_esp32/src/rfid.cpp b/FW/leo_muziekdoos_esp32/src/rfid.cpp index 9f52207..282572c 100644 --- a/FW/leo_muziekdoos_esp32/src/rfid.cpp +++ b/FW/leo_muziekdoos_esp32/src/rfid.cpp @@ -5,6 +5,10 @@ NfcAdapter nfc = NfcAdapter(pn532spi); uint32_t lastRFID = 0; uint32_t lastRFIDlog = 0; +uint32_t lastTagTime = 0; + +//settings +uint32_t scantimeout = 0; String lastUid = ""; @@ -16,6 +20,7 @@ void initRfid() { log_i("RFID init:"); // shows in serial that it is ready to read nfc.begin(true); + scantimeout = GetIntparam("ScanTimeout", RFIDTIMEOUT ); RfidinitOK = true; log_i("RFID init: OK"); // shows in serial that it is ready to read } @@ -32,16 +37,22 @@ void handleRfid() lastRFIDlog = timeNow; } - if (nfc.tagPresent(80)) + if (nfc.tagPresent(RFIDTIMEOUT)) { NfcTag tag = nfc.read(); lastUid = tag.getUidString(); + lastTagTime = millis(); log_i("found tag %s",lastUid.c_str()); } lastRFID = timeNow; } } +uint32_t getLastTagTime(void) +{ + return lastTagTime; +} + bool getRFIDInitStatus(void) { return RfidinitOK; diff --git a/FW/leo_muziekdoos_esp32/src/rfid.h b/FW/leo_muziekdoos_esp32/src/rfid.h index 1ddc59e..45b1928 100644 --- a/FW/leo_muziekdoos_esp32/src/rfid.h +++ b/FW/leo_muziekdoos_esp32/src/rfid.h @@ -2,6 +2,7 @@ #include "board.h" #include "game.h" +#include "config.h" #include #include "PN532_SPI.h" @@ -9,8 +10,9 @@ #include "NfcAdapter.h" #define NDEF_SUPPORT_MIFARE_CLASSIC -#define RFIDINTERVAL 800 +#define RFIDINTERVAL 200 #define RFIDLOGINTERVAL 5000 +#define RFIDTIMEOUT 50 void initRfid(void); void handleRfid(void); @@ -18,4 +20,5 @@ bool getRFIDInitStatus(void); String getRFIDlastUID(void); void setRFIDscanState(bool state); bool getRFIDlastUIDValid(void); -void clearRFIDlastUID(void); \ No newline at end of file +void clearRFIDlastUID(void); +uint32_t getLastTagTime(void); diff --git a/FW/leo_muziekdoos_esp32/src/sensor.cpp b/FW/leo_muziekdoos_esp32/src/sensor.cpp index ce02b45..69c198f 100644 --- a/FW/leo_muziekdoos_esp32/src/sensor.cpp +++ b/FW/leo_muziekdoos_esp32/src/sensor.cpp @@ -127,6 +127,11 @@ void handleBatterySensor(void) { uint32_t timeNow = millis(); + if(getAudioState()) + { + return; + } + if (timeNow - lastVbatt > (VBATTINTERVALL - VBATTMEASPRECHARGE)) { digitalWrite(MEAS_EN, LOW); @@ -150,17 +155,13 @@ void handleBatterySensor(void) void handleHallSensor(void) { uint32_t timeNow = millis(); - - // if(!getAudioState()) - // { - - // } - if (timeNow - lastADS < ADSINTERVAL) - { - return; - } - lastADS = timeNow; + if (timeNow - lastADS < ADSINTERVAL) + { + //wait for timer + return; + } + lastADS = timeNow; int angle = as5600.getCumulativePosition(); log_v("sensor angle %d", angle); diff --git a/FW/leo_muziekdoos_esp32/src/sensor.h b/FW/leo_muziekdoos_esp32/src/sensor.h index 1caf7cd..5a9068e 100644 --- a/FW/leo_muziekdoos_esp32/src/sensor.h +++ b/FW/leo_muziekdoos_esp32/src/sensor.h @@ -9,32 +9,18 @@ #include "Wire.h" #include "audio.h" -#define ADSINTERVAL 300 +#define ADSINTERVAL 100 #define VBATTINTERVALL 15000 #define VBATTMEASPRECHARGE 500 #define LOWBATTPERIOD 30000 #define HALLINTERVAL 100 -// #define HALLCNTTHRESHOLD 20 -// #define HALLIDLETHRESHOLD 20 -// #define HALLIDLESAMPLES 15 -// #define HALLPLAYSAMPLES 24 -#define HALLTHRESHOLD 2 - -// typedef enum -// { -// hall_idle, -// hall_increasing, -// hall_tipover, -// hall_decreasing, -// }HALLSENSORSTATES; - +#define HALLTHRESHOLD 5 void initSensor(void); void handleBatterySensor(void); void handleHallSensor(void); - uint16_t getHall( void ); bool hallIsIdle(void); uint16_t getvbatt(uint8_t dummy);