From c95cc8ab905e1dbf5b90ffaf192ae86d896cc744 Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Fri, 3 Jan 2020 20:08:08 +0100 Subject: [PATCH 01/40] first version of a make file --- .gitignore | 1 + Makefile | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 Makefile diff --git a/.gitignore b/.gitignore index 0aab59b2..c46fc0ad 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,4 @@ Temporary Items # TonUINO /tools/*.pyc +Tonuino diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..5b98f029 --- /dev/null +++ b/Makefile @@ -0,0 +1,66 @@ +# +# TonUINO Makefile +# +# Author: Alexander Willner +# Date: 2020-01-03 + +# Config +## Arduino Nano (old bootloader) +MCU = arduino:avr:nano:cpu=atmega328old +BOARD = arduino:avr +SERIAL = /dev/cu.usbserial-1410 +## Main +SKETCH = Tonuino +## Helper +OS = $(shell uname) +.PHONY: help + +help: + $(info TonUINO Makefile) + $(info ================) + $(info ) + $(info Configured to use MCU "$(MCU)" attached to port "$(SERIAL)".) + $(info ) + $(info Available commands:) + $(info - install : installation of required binaries (arduino-cli)) + $(info - init : initialize environment) + $(info - compile : create binary) + $(info - upload : store binary on board EEPROM) + $(info - find : get information about the pluged-in board) + $(info - test : run some basic tests on the code) + $(info - clean : delete temporary files) + @true + +install: +ifeq ($(OS),Darwin) +ifeq (, $(shell which brew)) + $(error "No brew in PATH, consider installing http://brew.sh") +else + @brew install arduino-cli +endif +else + @echo "todo: auto setup for OS" +endif + +init: + @arduino-cli config init + @arduino-cli core update-index + @arduino-cli core install $(BOARD) + +compile: + @mkdir -p $(SKETCH) ; echo "folder is only for backwards compatibility" > $(SKETCH)/DO-NOT-EDIT + @if [ "$(SKETCH)/$(SKETCH).ino" -nt "./$(SKETCH).ino" ]; then echo "ERROR: do not edit files in TonUINO/!"; exit 1; fi; + @cp -p ./$(SKETCH).ino $(SKETCH)/$(SKETCH).ino + @arduino-cli compile --fqbn $(MCU) --warnings none $(SKETCH) + +find: + @arduino-cli board list + +upload: + @arduino-cli upload -p $(SERIAL) --fqbn $(MCU) --verify $(SKETCH) + +test: + @arduino-cli compile --fqbn $(MCU) --warnings more $(SKETCH) + +clean: + @rm -rf "$(SKETCH)" \ No newline at end of file From 66f74d23c3e8542b6c31a8c0f6113e53ea4dd89a Mon Sep 17 00:00:00 2001 From: DerTomm Date: Wed, 1 Jan 2020 21:22:13 +0100 Subject: [PATCH 02/40] Fix causes of compiler warnings --- Tonuino.ino | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/Tonuino.ino b/Tonuino.ino index ac359337..e4ba08ce 100644 --- a/Tonuino.ino +++ b/Tonuino.ino @@ -75,6 +75,7 @@ uint8_t voiceMenu(int numberOfOptions, int startMessage, int messageOffset, bool preview = false, int previewFromFolder = 0, int defaultValue = 0, bool exitWithLongPress = false); bool isPlaying(); bool checkTwo ( uint8_t a[], uint8_t b[] ); +bool readCard(nfcTagObject *nfcTag); void writeCard(nfcTagObject nfcTag); void dump_byte_array(byte * buffer, byte bufferSize); void adminMenu(bool fromCard = false); @@ -290,6 +291,8 @@ class SleepTimer: public Modifier { Serial.println(F("== SleepTimer::getActive()")); return 1; } + + virtual ~SleepTimer() {} }; class FreezeDance: public Modifier { @@ -705,7 +708,7 @@ bool isPlaying() { } void waitForTrackToFinish() { - long currentTime = millis(); + unsigned long currentTime = millis(); #define TIMEOUT 1000 do { mp3.loop(); @@ -753,7 +756,7 @@ void setup() { delay(2000); volume = mySettings.initVolume; mp3.setVolume(volume); - mp3.setEq(mySettings.eq - 1); + mp3.setEq(DfMp3_Eq(mySettings.eq - 1)); // Fix für das Problem mit dem Timeout (ist jetzt in Upstream daher nicht mehr nötig!) //mySoftwareSerial.setTimeout(10000); @@ -781,7 +784,7 @@ void setup() { if (digitalRead(buttonPause) == LOW && digitalRead(buttonUp) == LOW && digitalRead(buttonDown) == LOW) { Serial.println(F("Reset -> EEPROM wird gelöscht")); - for (int i = 0; i < EEPROM.length(); i++) { + for (unsigned int i = 0; i < EEPROM.length(); i++) { EEPROM.update(i, 0); } loadSettingsFromFlash(); @@ -972,7 +975,7 @@ void loop() { if (activeModifier != NULL) if (activeModifier->handlePause() == true) return; - if (ignorePauseButton == false) + if (ignorePauseButton == false) { if (isPlaying()) { mp3.pause(); setstandbyTimer(); @@ -981,6 +984,7 @@ void loop() { mp3.start(); disablestandbyTimer(); } + } ignorePauseButton = false; } else if (pauseButton.pressedFor(LONG_PRESS) && ignorePauseButton == false) { @@ -1023,13 +1027,14 @@ void loop() { ignoreUpButton = true; #endif } else if (upButton.wasReleased()) { - if (!ignoreUpButton) + if (!ignoreUpButton) { if (!mySettings.invertVolumeButtons) { nextButton(); } else { volumeUpButton(); } + } ignoreUpButton = false; } @@ -1112,7 +1117,7 @@ void loop() { mfrc522.PCD_StopCrypto1(); } -void adminMenu(bool fromCard = false) { +void adminMenu(bool fromCard) { disablestandbyTimer(); mp3.pause(); Serial.println(F("=== adminMenu()")); @@ -1187,7 +1192,7 @@ void adminMenu(bool fromCard = false) { else if (subMenu == 5) { // EQ mySettings.eq = voiceMenu(6, 920, 920, false, false, mySettings.eq); - mp3.setEq(mySettings.eq - 1); + mp3.setEq(DfMp3_Eq(mySettings.eq - 1)); } else if (subMenu == 6) { // create modifier card @@ -1295,7 +1300,7 @@ void adminMenu(bool fromCard = false) { } else if (subMenu == 11) { Serial.println(F("Reset -> EEPROM wird gelöscht")); - for (int i = 0; i < EEPROM.length(); i++) { + for (unsigned int i = 0; i < EEPROM.length(); i++) { EEPROM.update(i, 0); } resetSettings(); @@ -1311,7 +1316,7 @@ void adminMenu(bool fromCard = false) { mySettings.adminMenuLocked = 1; } else if (temp == 3) { - int8_t pin[4]; + uint8_t pin[4]; mp3.playMp3FolderTrack(991); if (askCode(pin)) { memcpy(mySettings.adminMenuPin, pin, 4); @@ -1344,7 +1349,7 @@ bool askCode(uint8_t *code) { } uint8_t voiceMenu(int numberOfOptions, int startMessage, int messageOffset, - bool preview = false, int previewFromFolder = 0, int defaultValue = 0, bool exitWithLongPress = false) { + bool preview, int previewFromFolder, int defaultValue, bool exitWithLongPress) { uint8_t returnValue = defaultValue; if (startMessage != 0) mp3.playMp3FolderTrack(startMessage); @@ -1705,8 +1710,6 @@ void writeCard(nfcTagObject nfcTag) { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - byte size = sizeof(buffer); - mifareType = mfrc522.PICC_GetType(mfrc522.uid.sak); // Authenticate using key B From 8661367cb215d174d4890a109289df082b2bff45 Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Fri, 3 Jan 2020 21:25:18 +0100 Subject: [PATCH 03/40] added support for PlatformIO --- .gitignore | 5 +++++ Makefile | 27 ++++++++++++++++++--------- platformio.ini | 18 ++++++++++++++++++ 3 files changed, 41 insertions(+), 9 deletions(-) create mode 100644 platformio.ini diff --git a/.gitignore b/.gitignore index c46fc0ad..73c5ca6e 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,8 @@ Temporary Items # TonUINO /tools/*.pyc Tonuino + +# Platform.io +.pio/ +.vscode/ + diff --git a/Makefile b/Makefile index 5b98f029..6aa03fd3 100644 --- a/Makefile +++ b/Makefile @@ -23,7 +23,8 @@ help: $(info ) $(info Available commands:) $(info - install : installation of required binaries (arduino-cli)) - $(info - init : initialize environment) + $(info - init : initialize environment (arduino-cli)) + $(info - pio-init: initialize environment (PlatformIO)) $(info - compile : create binary) $(info - upload : store binary on board EEPROM) $(info - find : get information about the pluged-in board) @@ -46,21 +47,29 @@ init: @arduino-cli config init @arduino-cli core update-index @arduino-cli core install $(BOARD) - -compile: - @mkdir -p $(SKETCH) ; echo "folder is only for backwards compatibility" > $(SKETCH)/DO-NOT-EDIT + +pio-init: + @platformio lib install 1561 # DFPlayer Mini Mp3 by Makuna + @platformio lib install 2284 # EEPROM + @platformio lib install 77 # JC_Button + @platformio lib install 63 # MFRC522 + +prepare: + @mkdir -p "$(SKETCH)" ; echo "folder is only for backwards compatibility" > "$(SKETCH)/DO-NOT-EDIT" @if [ "$(SKETCH)/$(SKETCH).ino" -nt "./$(SKETCH).ino" ]; then echo "ERROR: do not edit files in TonUINO/!"; exit 1; fi; - @cp -p ./$(SKETCH).ino $(SKETCH)/$(SKETCH).ino - @arduino-cli compile --fqbn $(MCU) --warnings none $(SKETCH) + @cp -p "./$(SKETCH).ino" "$(SKETCH)/$(SKETCH).ino" + +compile: prepare + @arduino-cli compile --fqbn $(MCU) --warnings none "$(SKETCH)" find: @arduino-cli board list upload: - @arduino-cli upload -p $(SERIAL) --fqbn $(MCU) --verify $(SKETCH) + @arduino-cli upload -p $(SERIAL) --fqbn $(MCU) --verify "$(SKETCH)" -test: - @arduino-cli compile --fqbn $(MCU) --warnings more $(SKETCH) +test: prepare + @arduino-cli compile --fqbn $(MCU) --warnings more "$(SKETCH)" clean: @rm -rf "$(SKETCH)" \ No newline at end of file diff --git a/platformio.ini b/platformio.ini new file mode 100644 index 00000000..0179771b --- /dev/null +++ b/platformio.ini @@ -0,0 +1,18 @@ +;PlatformIO Project Configuration File +; +; Build options: build flags, source filter +; Upload options: custom upload port, speed and extra flags +; Library options: dependencies, extra library storages +; Advanced options: extra scripting +; +; Please visit documentation for the other options and examples +; https://docs.platformio.org/page/projectconf.html + +[platformio] +src_dir = ./ + +[env:nanoatmega328] +platform = atmelavr +board = nanoatmega328 +framework = arduino + From 95e072beb18a694a62e6a340422240802a6b8677 Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Fri, 3 Jan 2020 21:34:08 +0100 Subject: [PATCH 04/40] added dependencies to platformio configuration --- platformio.ini | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/platformio.ini b/platformio.ini index 0179771b..7a500fc0 100644 --- a/platformio.ini +++ b/platformio.ini @@ -16,3 +16,9 @@ platform = atmelavr board = nanoatmega328 framework = arduino +lib_deps = + 1561 + 2284 + 77 + 63 + From cb05de79ae3c2febc2484ff2ce44122608997184 Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Fri, 3 Jan 2020 21:44:38 +0100 Subject: [PATCH 05/40] pio: added monitor speed --- platformio.ini | 2 ++ 1 file changed, 2 insertions(+) diff --git a/platformio.ini b/platformio.ini index 7a500fc0..ebf9d0ff 100644 --- a/platformio.ini +++ b/platformio.ini @@ -16,6 +16,8 @@ platform = atmelavr board = nanoatmega328 framework = arduino +monitor_speed = 115200 + lib_deps = 1561 2284 From 3b883ab3132ba07bd408ea7904cf53fc48681e16 Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Fri, 3 Jan 2020 21:51:20 +0100 Subject: [PATCH 06/40] fixing long press with three buttons - see http://discourse.voss.earth/t/4523/23 --- Tonuino.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tonuino.ino b/Tonuino.ino index e4ba08ce..53ff1e9c 100644 --- a/Tonuino.ino +++ b/Tonuino.ino @@ -157,7 +157,7 @@ void resetSettings() { mySettings.eq = 1; mySettings.locked = false; mySettings.standbyTimer = 0; - mySettings.invertVolumeButtons = true; + mySettings.invertVolumeButtons = false; mySettings.shortCuts[0].folder = 0; mySettings.shortCuts[1].folder = 0; mySettings.shortCuts[2].folder = 0; From 70a9a778152cd42016ac0ae2734b7820b34eb7dd Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Fri, 3 Jan 2020 22:11:44 +0100 Subject: [PATCH 07/40] testing GitHub Actions support --- .github/workflows/test.yaml | 58 +++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 .github/workflows/test.yaml diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 00000000..e8aa16a9 --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,58 @@ +# This is the name of the workflow, visible on GitHub UI. +name: TonUINO Compiler Test + +# Here we tell GitHub to run the workflow when a commit +# is pushed or a Pull Request is opened. +on: [push, pull_request] + +# This is the list of jobs that will be run concurrently. +# Since we use a build matrix, the actual number of jobs +# started depends on how many configurations the matrix +# will produce. +jobs: + # This is the name of the job - can be whatever. + test-matrix: + + # Here we tell GitHub that the jobs must be determined + # dynamically depending on a matrix configuration. + strategy: + matrix: + # The matrix will produce one job for each configuration + # parameter of type `arduino-platform`, in this case a + # total of 2. + arduino-platform: ["arduino:avr"] + # This is usually optional but we need to statically define the + # FQBN of the boards we want to test for each platform. In the + # future the CLI might automatically detect and download the core + # needed to compile against a certain FQBN, at that point the + # following `include` section will be useless. + include: + # This works like this: when the platformn is "arduino:samd", the + # variable `fqbn` is set to "arduino:samd:nano_33_iot". + - arduino-platform: "arduino:avr" + fqbn: "arduino:avr:nano:cpu=atmega328old" + + # This is the platform GitHub will use to run our workflow, we + # pick Windows for no particular reason. + runs-on: macos-latest + + # This is the list of steps this job will run. + steps: + # First of all, we clone the repo using the `checkout` action. + - name: Checkout + uses: actions/checkout@DEV + + # We use the `arduino/setup-arduino-cli` action to install and + # configure the Arduino CLI on the system. + - name: Setup Arduino CLI + uses: arduino/setup-arduino-cli@v1.0.0 + + # We then install the platform, which one will be determined + # dynamically by the build matrix. + - name: Install platform + run: make init + + # Finally, we compile the sketch, using the FQBN that was set + # in the build matrix. + - name: Compile Sketch + run: make compile From a4995e5ce38473b7d6a284215ee912cc52f1c678 Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Fri, 3 Jan 2020 22:17:32 +0100 Subject: [PATCH 08/40] Added GitHub Actions support --- .github/workflows/test.yaml | 8 +++++--- Makefile | 3 +++ README.md | 2 ++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index e8aa16a9..7a4b0f55 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -40,7 +40,9 @@ jobs: steps: # First of all, we clone the repo using the `checkout` action. - name: Checkout - uses: actions/checkout@DEV + uses: actions/checkout@v2 + with: + ref: DEV # We use the `arduino/setup-arduino-cli` action to install and # configure the Arduino CLI on the system. @@ -54,5 +56,5 @@ jobs: # Finally, we compile the sketch, using the FQBN that was set # in the build matrix. - - name: Compile Sketch - run: make compile + - name: Test Sketch + run: make test diff --git a/Makefile b/Makefile index 6aa03fd3..9e6dd41b 100644 --- a/Makefile +++ b/Makefile @@ -47,6 +47,9 @@ init: @arduino-cli config init @arduino-cli core update-index @arduino-cli core install $(BOARD) + @arduino-cli lib install "DFPlayer Mini Mp3 by Makuna" + @arduino-cli lib install "MFRC522" + @arduino-cli lib install "JC_Button" pio-init: @platformio lib install 1561 # DFPlayer Mini Mp3 by Makuna diff --git a/README.md b/README.md index a9a56be3..eea74f08 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +![](https://github.com/AlexanderWillner/tonuino/workflows/TonUINO%20Compiler%20Test/badge.svg) + # TonUINO Die DIY Musikbox (nicht nur) für Kinder From 9d406aec1a6cd99f307323e518deefde3acab415 Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Sat, 4 Jan 2020 00:44:30 +0100 Subject: [PATCH 09/40] slow-down for volume buttons (http://discourse.voss.earth/t/757/20, http://discourse.voss.earth/t/3022/2) --- Tonuino.ino | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Tonuino.ino b/Tonuino.ino index 53ff1e9c..dad1db72 100644 --- a/Tonuino.ino +++ b/Tonuino.ino @@ -20,6 +20,9 @@ // uncomment the below line to enable five button support //#define FIVEBUTTONS +// delay for volume buttons +#define LONG_PRESS_DELAY 300 + static const uint32_t cardCookie = 322417479; // DFPlayer Mini @@ -814,6 +817,7 @@ void volumeUpButton() { if (volume < mySettings.maxVolume) { mp3.increaseVolume(); volume++; + delay(LONG_PRESS_DELAY); } Serial.println(volume); } @@ -827,6 +831,7 @@ void volumeDownButton() { if (volume > mySettings.minVolume) { mp3.decreaseVolume(); volume--; + delay(LONG_PRESS_DELAY); } Serial.println(volume); } From 2eddbd7186193c70d990faec5e2915d7eb688258 Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Sat, 4 Jan 2020 10:52:37 +0100 Subject: [PATCH 10/40] also clean pio files --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 9e6dd41b..22f9a352 100644 --- a/Makefile +++ b/Makefile @@ -75,4 +75,5 @@ test: prepare @arduino-cli compile --fqbn $(MCU) --warnings more "$(SKETCH)" clean: - @rm -rf "$(SKETCH)" \ No newline at end of file + @rm -rf "$(SKETCH)" + @rm -rf ".pio/build/" From 37026c64303973a004ccacbde330528ef6de9bdb Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Sat, 4 Jan 2020 11:12:30 +0100 Subject: [PATCH 11/40] started to add unit testing support --- Makefile | 7 ++++--- platformio.ini | 3 +++ test/test_Tonuino.cpp | 10 ++++++++++ 3 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 test/test_Tonuino.cpp diff --git a/Makefile b/Makefile index 22f9a352..a942fb03 100644 --- a/Makefile +++ b/Makefile @@ -24,7 +24,6 @@ help: $(info Available commands:) $(info - install : installation of required binaries (arduino-cli)) $(info - init : initialize environment (arduino-cli)) - $(info - pio-init: initialize environment (PlatformIO)) $(info - compile : create binary) $(info - upload : store binary on board EEPROM) $(info - find : get information about the pluged-in board) @@ -38,6 +37,7 @@ ifeq (, $(shell which brew)) $(error "No brew in PATH, consider installing http://brew.sh") else @brew install arduino-cli + @brew install platformio endif else @echo "todo: auto setup for OS" @@ -50,8 +50,6 @@ init: @arduino-cli lib install "DFPlayer Mini Mp3 by Makuna" @arduino-cli lib install "MFRC522" @arduino-cli lib install "JC_Button" - -pio-init: @platformio lib install 1561 # DFPlayer Mini Mp3 by Makuna @platformio lib install 2284 # EEPROM @platformio lib install 77 # JC_Button @@ -73,6 +71,9 @@ upload: test: prepare @arduino-cli compile --fqbn $(MCU) --warnings more "$(SKETCH)" +ifneq (, $(shell which pio)) + @pio test -e native +endif clean: @rm -rf "$(SKETCH)" diff --git a/platformio.ini b/platformio.ini index ebf9d0ff..c340f6e5 100644 --- a/platformio.ini +++ b/platformio.ini @@ -11,6 +11,9 @@ [platformio] src_dir = ./ +[env:native] +platform = native + [env:nanoatmega328] platform = atmelavr board = nanoatmega328 diff --git a/test/test_Tonuino.cpp b/test/test_Tonuino.cpp new file mode 100644 index 00000000..284c55e2 --- /dev/null +++ b/test/test_Tonuino.cpp @@ -0,0 +1,10 @@ +#include + +int main(int argc, char **argv) { + UNITY_BEGIN(); + //todo add TonUINO tests here + UNITY_END(); + + return 0; +} + From 64aa25794d82fbb9b17cfef477370afd737d1024 Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Sat, 4 Jan 2020 11:14:43 +0100 Subject: [PATCH 12/40] added 'make help' to open the community forum --- Makefile | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index a942fb03..04ce7de1 100644 --- a/Makefile +++ b/Makefile @@ -15,13 +15,14 @@ SKETCH = Tonuino OS = $(shell uname) .PHONY: help -help: +info: $(info TonUINO Makefile) $(info ================) $(info ) $(info Configured to use MCU "$(MCU)" attached to port "$(SERIAL)".) $(info ) $(info Available commands:) + $(info - help : get support from the community) $(info - install : installation of required binaries (arduino-cli)) $(info - init : initialize environment (arduino-cli)) $(info - compile : create binary) @@ -31,6 +32,9 @@ help: $(info - clean : delete temporary files) @true +help: + @python -m webbrowser "http://discourse.voss.earth" + install: ifeq ($(OS),Darwin) ifeq (, $(shell which brew)) From ad71097ecf2cd6122f0ecbb30454a750b01aece7 Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Sat, 4 Jan 2020 11:20:14 +0100 Subject: [PATCH 13/40] documentation of changes --- README.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/README.md b/README.md index eea74f08..8a4fd714 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,32 @@ ![](https://github.com/AlexanderWillner/tonuino/workflows/TonUINO%20Compiler%20Test/badge.svg) +# Änderungen in diesem Repository + +* Unterstützung für GitHub Actions, um jede eingespielte Änderung zu testen (siehe Badge oben). +* Integration von PlatformIO inklusive initiale Unterstützung von Unit Tests. +* Entfernung einiger [Compiler-Warnungen](https://github.com/xfjx/TonUINO/pull/54). +* Kleinen Fehler bei Erstinbetriebnahme [gefixt](http://discourse.voss.earth/t/version-2-1dev-lautstaerke-durch-langes-druecken-der-tasten-geht-nicht/4523/23). +* Verzögerung für Lautstärkeregelung [hinzugefügt](http://discourse.voss.earth/t/lautstaerke-kleinschrittiger-erhoehen/3022/5). +* Make-Datei hinzugefügt: +``` +$ make + +TonUINO Makefile +================ + +Configured to use MCU "arduino:avr:nano:cpu=atmega328old" attached to port "/dev/cu.usbserial-1410". + +Available commands: +- help : get support from the community +- install : installation of required binaries (arduino-cli) +- init : initialize environment (arduino-cli) +- compile : create binary +- upload : store binary on board EEPROM +- find : get information about the pluged-in board +- test : run some basic tests on the code +- clean : delete temporary files +``` + # TonUINO Die DIY Musikbox (nicht nur) für Kinder From d6c24fd11b6419b0c79f4e31be76eeda0c1949cb Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 4 Jan 2020 12:25:09 +0100 Subject: [PATCH 14/40] Adding make install --- .github/workflows/test.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 7a4b0f55..863c416f 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -52,7 +52,7 @@ jobs: # We then install the platform, which one will be determined # dynamically by the build matrix. - name: Install platform - run: make init + run: make install init # Finally, we compile the sketch, using the FQBN that was set # in the build matrix. From 64f55bb62e75f8313d3522341be50d992e2df969 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 4 Jan 2020 13:01:08 +0100 Subject: [PATCH 15/40] Updated Badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8a4fd714..ca105798 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![](https://github.com/AlexanderWillner/tonuino/workflows/TonUINO%20Compiler%20Test/badge.svg) +[![GitHub Actions | AlexanderWillner/tonuino](https://github.com/AlexanderWillner/tonuino/workflows/TonUINO%20Compiler%20Test/badge.svg)](https://github.com/AlexanderWillner/tonuino/actions?workflow=TonUINO%20Compiler%20Test) # Änderungen in diesem Repository From a931062d56005ab1040306eb77f32404c679a470 Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Sat, 4 Jan 2020 14:12:30 +0100 Subject: [PATCH 16/40] adding local platformio configuation --- .gitignore | 2 +- README.md | 2 +- platformio.ini | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 73c5ca6e..d424bc4a 100644 --- a/.gitignore +++ b/.gitignore @@ -34,4 +34,4 @@ Tonuino # Platform.io .pio/ .vscode/ - +platformio_local.ini diff --git a/README.md b/README.md index 8a4fd714..0db61c16 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ # Änderungen in diesem Repository * Unterstützung für GitHub Actions, um jede eingespielte Änderung zu testen (siehe Badge oben). -* Integration von PlatformIO inklusive initiale Unterstützung von Unit Tests. +* Integration von PlatformIO inklusive initiale Unterstützung von Unit Tests und eigenen Konfigurationsdateien. * Entfernung einiger [Compiler-Warnungen](https://github.com/xfjx/TonUINO/pull/54). * Kleinen Fehler bei Erstinbetriebnahme [gefixt](http://discourse.voss.earth/t/version-2-1dev-lautstaerke-durch-langes-druecken-der-tasten-geht-nicht/4523/23). * Verzögerung für Lautstärkeregelung [hinzugefügt](http://discourse.voss.earth/t/lautstaerke-kleinschrittiger-erhoehen/3022/5). diff --git a/platformio.ini b/platformio.ini index c340f6e5..dd2cd77f 100644 --- a/platformio.ini +++ b/platformio.ini @@ -10,6 +10,8 @@ [platformio] src_dir = ./ +extra_configs = + platformio_local.ini [env:native] platform = native From f93ab708165c6884e1b345167b021ea3049b7b95 Mon Sep 17 00:00:00 2001 From: Tillmann Heidsieck Date: Sat, 4 Jan 2020 20:45:18 +0100 Subject: [PATCH 17/40] make: fix help Signed-off-by: Tillmann Heidsieck --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 04ce7de1..adef5ca7 100644 --- a/Makefile +++ b/Makefile @@ -26,7 +26,7 @@ info: $(info - install : installation of required binaries (arduino-cli)) $(info - init : initialize environment (arduino-cli)) $(info - compile : create binary) - $(info - upload : store binary on board EEPROM) + $(info - upload : store binary on board flash) $(info - find : get information about the pluged-in board) $(info - test : run some basic tests on the code) $(info - clean : delete temporary files) From 8bfe3cda8fd5152e96fedd1049ce6e72a46022bf Mon Sep 17 00:00:00 2001 From: Tillmann Heidsieck Date: Sat, 4 Jan 2020 20:55:20 +0100 Subject: [PATCH 18/40] make: add check target to run c++ check Signed-off-by: Tillmann Heidsieck --- Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Makefile b/Makefile index adef5ca7..fcb99e35 100644 --- a/Makefile +++ b/Makefile @@ -79,6 +79,9 @@ ifneq (, $(shell which pio)) @pio test -e native endif +check: *.ino *.h + @cppcheck --enable=all --std=c++20 --language=c++ *.ino *.h + clean: @rm -rf "$(SKETCH)" @rm -rf ".pio/build/" From a13b51faaff6ec8dfa53c6c3ef20ea06c9271e12 Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Sun, 5 Jan 2020 00:39:30 +0100 Subject: [PATCH 19/40] fix merge conflict --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f203f43b..a1916a11 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[![GitHub Actions | AlexanderWillner/tonuino](https://github.com/AlexanderWillner/tonuino/workflows/TonUINO%20Compiler%20Test/badge.svg)](https://github.com/AlexanderWillner/tonuino/actions?workflow=TonUINO%20Compiler%20Test) +[![GitHub Actions | AlexanderWillner/tonuino](https://github.com/AlexanderWillner/tonuino/workflows/building/badge.svg)](https://github.com/AlexanderWillner/tonuino/actions?workflow=building) # Änderungen in diesem Repository @@ -14,14 +14,14 @@ $ make TonUINO Makefile ================ -Configured to use MCU "arduino:avr:nano:cpu=atmega328old" attached to port "/dev/cu.usbserial-1410". + Configured to use MCU "arduino:avr:nano:cpu=atmega328old" attached to port "/dev/cu.usbserial-1410". Available commands: - help : get support from the community - install : installation of required binaries (arduino-cli) - init : initialize environment (arduino-cli) - compile : create binary -- upload : store binary on board EEPROM +- upload : store binary on board flash - find : get information about the pluged-in board - test : run some basic tests on the code - clean : delete temporary files From de51b333c7e9209c0124a0a1cff48fac3aa176a7 Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Sun, 5 Jan 2020 00:39:56 +0100 Subject: [PATCH 20/40] merging --- .github/workflows/{test.yaml => build.yaml} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename .github/workflows/{test.yaml => build.yaml} (98%) diff --git a/.github/workflows/test.yaml b/.github/workflows/build.yaml similarity index 98% rename from .github/workflows/test.yaml rename to .github/workflows/build.yaml index 863c416f..9e8def50 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/build.yaml @@ -1,5 +1,5 @@ # This is the name of the workflow, visible on GitHub UI. -name: TonUINO Compiler Test +name: building # Here we tell GitHub to run the workflow when a commit # is pushed or a Pull Request is opened. From f9ab5ae9f1780feffc1adf8cb7920cc3d85b6675 Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Sun, 5 Jan 2020 00:45:10 +0100 Subject: [PATCH 21/40] moving to ubuntu-latest also to avoid API rate limit https://github.com/actions/setup-go/issues/16 --- .github/workflows/build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 9e8def50..ea692436 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -34,7 +34,7 @@ jobs: # This is the platform GitHub will use to run our workflow, we # pick Windows for no particular reason. - runs-on: macos-latest + runs-on: ubuntu-latest # This is the list of steps this job will run. steps: From 6ebbfabde643c8c1dc45007b3d2794aac1ccb06d Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Sun, 5 Jan 2020 00:57:41 +0100 Subject: [PATCH 22/40] make: enhanced installation --- .github/workflows/build.yaml | 5 +++++ Makefile | 16 +++++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index ea692436..602da6ad 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -49,6 +49,11 @@ jobs: - name: Setup Arduino CLI uses: arduino/setup-arduino-cli@v1.0.0 + - name: Install Python + uses: actions/setup-python@v1 + with: + python-version: 3.8 + # We then install the platform, which one will be determined # dynamically by the build matrix. - name: Install platform diff --git a/Makefile b/Makefile index fcb99e35..b069241c 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ SERIAL = /dev/cu.usbserial-1410 ## Main SKETCH = Tonuino ## Helper -OS = $(shell uname) +OS = $(shell uname -s) .PHONY: help info: @@ -40,11 +40,17 @@ ifeq ($(OS),Darwin) ifeq (, $(shell which brew)) $(error "No brew in PATH, consider installing http://brew.sh") else - @brew install arduino-cli - @brew install platformio + @brew install platformio arduino-cli +endif +endif +ifeq ($(OS),Linux) +ifeq (, $(shell which arduino-cli)) + @pip install setuptools wheel + @curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh +endif +ifeq (, $(shell which platformio)) + @pip install -U platformio endif -else - @echo "todo: auto setup for OS" endif init: From 36e9cf1f633d1b9140f5aed36d1ebc0d772b85bb Mon Sep 17 00:00:00 2001 From: Tillmann Heidsieck Date: Mon, 6 Jan 2020 07:02:56 +0100 Subject: [PATCH 23/40] make: add some dependencies in order to get a rebuild if required Signed-off-by: Tillmann Heidsieck --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index b069241c..c636d2f1 100644 --- a/Makefile +++ b/Makefile @@ -70,13 +70,13 @@ prepare: @if [ "$(SKETCH)/$(SKETCH).ino" -nt "./$(SKETCH).ino" ]; then echo "ERROR: do not edit files in TonUINO/!"; exit 1; fi; @cp -p "./$(SKETCH).ino" "$(SKETCH)/$(SKETCH).ino" -compile: prepare +compile: prepare *.ino @arduino-cli compile --fqbn $(MCU) --warnings none "$(SKETCH)" find: @arduino-cli board list -upload: +upload: compile @arduino-cli upload -p $(SERIAL) --fqbn $(MCU) --verify "$(SKETCH)" test: prepare @@ -85,7 +85,7 @@ ifneq (, $(shell which pio)) @pio test -e native endif -check: *.ino *.h +check: *.ino @cppcheck --enable=all --std=c++20 --language=c++ *.ino *.h clean: From c0e0a52ad931495eefad384d7fb412a43ebfe2e0 Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Fri, 10 Jan 2020 17:02:11 +0100 Subject: [PATCH 24/40] fix wheel installation --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c636d2f1..c1a84a27 100644 --- a/Makefile +++ b/Makefile @@ -45,10 +45,10 @@ endif endif ifeq ($(OS),Linux) ifeq (, $(shell which arduino-cli)) - @pip install setuptools wheel @curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh endif ifeq (, $(shell which platformio)) + @pip install setuptools wheel @pip install -U platformio endif endif From 0309750e7628ba1ad730382f05c4a4294538a3c4 Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Sun, 12 Jan 2020 12:43:44 +0100 Subject: [PATCH 25/40] initial version of new documentation --- CHANGELOG.md | 42 +++++++++++++ README.md | 163 +++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 160 insertions(+), 45 deletions(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..a53176ca --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,42 @@ +# Change Log + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] - Lokale Änderungen +- Unterstützung für GitHub Actions, um jede eingespielte Änderung zu testen (siehe Badge oben). +- Integration von PlatformIO inklusive initiale Unterstützung von Unit Tests und eigenen Konfigurationsdateien. +- Entfernung einiger [Compiler-Warnungen](https://github.com/xfjx/TonUINO/pull/54). +- Kleinen Fehler bei Erstinbetriebnahme [gefixt](http://discourse.voss.earth/t/version-2-1dev-lautstaerke-durch-langes-druecken-der-tasten-geht-nicht/4523/23). +- Verzögerung für Lautstärkeregelung [hinzugefügt](http://discourse.voss.earth/t/lautstaerke-kleinschrittiger-erhoehen/3022/5). +- Make-Datei hinzugefügt + +## [Unreleased] - 2.1dev +- Partymodus hat nun eine Queue -> jedes Lied kommt nur genau 1x vorkommt +- Neue Wiedergabe-Modi "Spezialmodus Von-Bis" - Hörspiel, Album und Party -> erlaubt z.B. verschiedene Alben in einem Ordner zu haben und je mit einer Karte zu verknüpfen +- Admin-Menü +- Maximale, Minimale und Initiale Lautstärke +- Karten werden nun über das Admin-Menü neu konfiguriert +- die Funktion der Lautstärketasten (lauter/leiser oder vor/zurück) kann im Adminmenü vertauscht werden +- Shortcuts können konfiguriert werden! +- Support für 5 Knöpfe hinzugefügt +- Reset der Einstellungen ins Adminmenü verschoben +- Modikationskarten (Sleeptimer, Tastensperre, Stopptanz, KiTa-Modus) +- Admin-Menü kann abgesichert werden + +## [2.0.1] - 2018-11-01 +- kleiner Fix um die Probleme beim Anlernen von Karten zu reduzieren + +## [2.0] - 2018-08-26 +- Lautstärke wird nun über einen langen Tastendruck geändert +- bei kurzem Tastendruck wird der nächste / vorherige Track abgespielt (je nach Wiedergabemodus nicht verfügbar) +- Während der Wiedergabe wird bei langem Tastendruck auf Play/Pause die Nummer des aktuellen Tracks angesagt +- Neuer Wiedergabemodus: **Einzelmodus** + Eine Karte kann mit einer einzelnen Datei aus einem Ordner verknüpft werden. Dadurch sind theoretisch 25000 verschiedene Karten für je eine Datei möglich +- Neuer Wiedergabemodus: **Hörbuch-Modus** + Funktioniert genau wie der Album-Modus. Zusätzlich wir der Fortschritt im EEPROM des Arduinos gespeichert und beim nächsten mal wird bei der jeweils letzten Datei neu gestartet. Leider kann nur der Track, nicht die Stelle im Track gespeichert werden +- Um mehr als 100 Karten zu unterstützen wird die Konfiguration der Karten nicht mehr im EEPROM gespeichert sondern direkt auf den Karten - die Karte muss daher beim Anlernen aufgelegt bleiben! +- Durch einen langen Druck auf Play/Pause kann **eine Karte neu konfiguriert** werden +- In den Auswahldialogen kann durch langen Druck auf die Lautstärketasten jeweils um 10 Ordner oder Dateien vor und zurück gesprungen werden +- Reset des MP3 Moduls beim Start entfernt - war nicht nötig und hat "Krach" gemacht + diff --git a/README.md b/README.md index a1916a11..21f78806 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,107 @@ [![GitHub Actions | AlexanderWillner/tonuino](https://github.com/AlexanderWillner/tonuino/workflows/building/badge.svg)](https://github.com/AlexanderWillner/tonuino/actions?workflow=building) -# Änderungen in diesem Repository - -* Unterstützung für GitHub Actions, um jede eingespielte Änderung zu testen (siehe Badge oben). -* Integration von PlatformIO inklusive initiale Unterstützung von Unit Tests und eigenen Konfigurationsdateien. -* Entfernung einiger [Compiler-Warnungen](https://github.com/xfjx/TonUINO/pull/54). -* Kleinen Fehler bei Erstinbetriebnahme [gefixt](http://discourse.voss.earth/t/version-2-1dev-lautstaerke-durch-langes-druecken-der-tasten-geht-nicht/4523/23). -* Verzögerung für Lautstärkeregelung [hinzugefügt](http://discourse.voss.earth/t/lautstaerke-kleinschrittiger-erhoehen/3022/5). -* Make-Datei hinzugefügt: -``` -$ make +# TonUINO + +Die DIY Musikbox (nicht nur) für Kinder. + +- [TonUINO](#tonuino) + - [English Readers (für unsere englischsprachige Leserschaft)](#english-readers-f%c3%bcr-unsere-englischsprachige-leserschaft) + - [Zusammenfassung](#zusammenfassung) + - [Drei Bausteine](#drei-bausteine) + - [Mikrocontroller-Hardware](#mikrocontroller-hardware) + - [Notwendige Grundausstattung (ca. 30 EUR)](#notwendige-grundausstattung-ca-30-eur) + - [Optionale erweiterte Ausstattung](#optionale-erweiterte-ausstattung) + - [Systemnahe Programmierung](#systemnahe-programmierung) + - [Für Benutzer](#f%c3%bcr-benutzer) + - [Für Entwickler](#f%c3%bcr-entwickler) + - [Gehäusebau](#geh%c3%a4usebau) + - [Notwendige Grundausstattung](#notwendige-grundausstattung) + - [Optionale erweiterte Ausstattung](#optionale-erweiterte-ausstattung-1) + +## English Readers (für unsere englischsprachige Leserschaft) + +For various reasons, we've decided to write this guide in German only. However, you can copy the text on this web page and paste it at [DeepL](https://www.deepl.com/) to easily translate the whole documentation at once. + +## Zusammenfassung + +Kinder zu beschenken ist nie einfach. Das Ziel des Projektes [TonUINO](https://www.voss.earth/tonuino/) von [Thorsten Voss](https://www.voss.earth/ueber-mich/) ist es, nach dem Vorbild der [Toniebox](https://tonies.de/toniebox/), eine “Musikbox (nicht nur) für Kinder” selbst zu bauen. Es macht einen riesigen Spaß, die meisten Kinder sind begeistert und diese Seite soll der großartigen Community etwas wieder geben. Denn so gut die [Webseite](https://www.voss.earth/tonuino/), das [Forum](http://discourse.voss.earth/) und die [Videos](https://www.youtube.com/channel/UCeXF2J1Pz8b1plIne-jQy1A) auch sind, der Bau der ersten Box wäre mit weniger Zeitaufwand möglich. + +Insbesondere unterstützt diese Anleitung hier “Newbies” bei der Auswahl der Hardware, geht sequenzieller durch die notwendigen Schritte und beinhaltet Links zu den wichtigsten Informationsquellen. Hoffentlich werden diese Anregungen hier irgendwann in die offizielle Dokumentation aufgenommen und machen diese Seite damit zukünftig überflüssig. Jede Art von [Pull Requests](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests) sind mehr als willkommen. + +## Drei Bausteine + +Es ist wichtig zu wissen, dass die Kunst ein TonUINO zu bauen grundsätzlich als ein Zusammenspiel von drei unterschiedlichen Disziplinen angesehen werden kann: Mikrocontroller-Hardware, systemnahe Programmierung und Gehäusebau. Im Folgenden stelle ich für jeden der Bereiche die notwendige Grundausstattung und die optionalen Erweiterungen sehr knapp vor, die ich entweder selbst umgesetzt habe oder für sinnvoll erachte. + +### Mikrocontroller-Hardware + +Es muss gelötet werden. Wir gehen davon aus, dass Lötkolben, Lötzinn und Löterfahrung vorhanden sind. Eine sehr gute Anleitung gibt es bei [YouTube](https://www.youtube.com/watch?v=RmE09dsY-l0) und einen Schaltplan auf der [offiziellen Webseite](https://www.voss.earth/tonuino/). Da hier jedoch die genaue Orientierung der Pins nicht ersichtlich ist, hilft auch noch ein alternativer Schaltplan von [dieser Webseite](https://smarthomeyourself.de/anleitung-zum-selber-bauen/unabhaengige-projekte/tonuino-der-kinderfreundliche-rfid-audio-player/), um die richtigen Pins zu identifizieren. Die notwendigen Komponenten können über Firmen wie Reichelt, Conrad, Amazon, E-Bay und Alibaba bezogen werden. Meist lohnt sich jetzt schon die Planung von mehreren TonUINO-Boxen. Im Folgenden Amazon-Affiliate-Links von Komponenten, die Thorsten und andere aus der Community erfolgreich verbaut haben. In der [Community FAQ](https://discourse.voss.earth/t/faq-kategorie-hardware/926/2) gibt es weitere wertvolle Hinweise. + +#### Notwendige Grundausstattung (ca. 30 EUR) + +| Anzahl | Produkt | Beschreibung | Hinweis | Kosten | +| --- | --- | --- | --- | --- | +| 1 | [TonUINO Set](https://amzn.to/2pHTJQ3) | Die Hauptkomponenten | Sollte das Set ausverkauft sein, im Folgenden die vier Komponenten | ca. xx EUR / Stück | +| (1)| [Arduino Nano](https://amzn.to/2mQNHaY) | Zum Ansteuern | Es können auch andere Arduino-Varianten gekauft werden | ca. 4 - 8 EUR / Stück | +| (1) | [DFPlayer Mini](https://amzn.to/2K2JavA) | Zum Abspielen der Musik | Dieser Player ist recht empfindlich was die genaue Bespielung der SD-Karte angeht | ca. 3-6 EUR / Stück | +| (1) | [RFID Kit RC522](http://amzn.to/2FnyHJj) | Zum Lesen und Beschreiben der NFC-Karten | | ca. 2-6 EUR / Stück | +| (4) | [RFID-Karten](https://amzn.to/2NXZQuL) | Zur Auswahl der Musik | müssen im 13,56 MHz Band funken | ca. 0,40 - 0,80 EUR / Stück | +| 1 | [Passiver Lautsprecher](https://www.amazon.de/dp/B00JRW0M32) | Zum Anhören der Musik | z.B. ein Regallautsprecher oder etwas kleineres | ca. 2-50 EUR / Stück | +| 1 | [MicroSD-Karte](http://amzn.to/2oXOxDw) | Zum Speichern der Musik | Maximal 32 GB | ca. 4-6 EUR / Stück | +| 3 | [Knöpfe](Knöpfe) | Zum starten/stoppen, lauter/leiser stellen, ... | Es gibt auch Varianten mit 5 Knöpfen. Knöpfe mit eingebauter LED haben weitere Vorteile. | ca. 0,50 EUR / Stück | +| 20 | [Kabel](https://www.amazon.de/dp/B074P726ZR) | Zum Verbinden | Der Bedarf an Kabeln kann schnell nach oben gehen (siehe Erweiterungen unten) | ca. 0,05 EUR / Stück | +| 1 | [1K Resistor](https://www.amazon.de//dp/B00I8NOILI/) | zum X | Einzeln zu kaufen ggf. recht teuer | ca. 0,01 EUR / Stück | + +#### Optionale erweiterte Ausstattung + +| Anzahl | Produkt | Beschreibung | Hinweis | Kosten | +| --- | --- | --- | --- | --- | +| 1 | [TonUINO-Platine](http://discourse.voss.earth/t/neue-platine-version-1-51/63) | Für weniger Kabelsalat. Enthält auch die o.g. Kabel und den Resistor. Wird auch in der o.g. YouTube-Anleitung genutzt. | Kann von Thorsten [per E-Mail](TonUINO@voss.earth) bestellt werden | ca. 10 EUR / Stück +| 1 | [Köpfhörer-Platine](http://discourse.voss.earth/t/kopfhoererbuchsenplatine/2463) | Zum Anschluss von Kopfhörern |Kann von Thorsten [per E-Mail](TonUINO@voss.earth) bestellt werden | ca. 7,50 EUR / Stück +| 1 | [Akku](https://www.amazon.de/gp/product/B07RFVK6BQ) | Zum Kabellosen Betrieb | Dazu gibt es einige [Diskussionen](http://discourse.voss.earth/c/stromversorgung/5) und Alternativen (z.B. Wemos Battery Shield). Gute Erfahrungen gibt es mit dem Hersteller RAVPower. Wichtige Eigenschaften: power pass trough, automatische Abschaltung. | ca. 15 EUR / Stück | +| 1 | [Micro-SD-Verlängerung](https://www.amazon.de/gp/product/B0749GC75F) | Zum Austausch der SD-Karte von außen | Je nachdem wie das Gehäuse gebaut ist. Auch könnte eine externe USB-Buchse genutzt werden, [um MP3-Dateien aufzuspielen](http://discourse.voss.earth/t/daten-auf-sd-kopieren-ueber-usb-anschluss/2185/8). | ca. 3 EUR / Stück | +| 1 | [USB-Buchse](https://www.amazon.de/gp/product/B0718XQPGB/) | Zum Aufladen bei Akkubetrieb | [Kein einfaches Thema](http://discourse.voss.earth/t/micro-usb-buchse-fuer-das-gehaeuse/3280/14) und kann sowohl zum Aufladen als auch für ein [Firmware-Upgrade](http://discourse.voss.earth/t/benoetige-hilfe-bei-der-trennung-von-daten-und-strom-des-usb-kabels/975) oder zum [MP3-Aktualisieren](http://discourse.voss.earth/t/daten-auf-sd-kopieren-ueber-usb-anschluss/2185/8) gleichzeitig genutzt werden. | ca. 4-20 EUR / Stück | +| 1 | [Ein- und Ausschalter](https://www.amazon.de/gp/product/B07X1DP8LV/) | Zum Strom sparen und Wiederbeleben bei Akkubetrieb | Ein Schalter mit Lichtindikator erscheint sinnvoll [für eine gewisse Grundlast](http://discourse.voss.earth/t/grundlast-erhoehen-um-powerbank-nicht-autom-abzuschalten/1899/9) | ca. 0,50-20 EUR / Stück| +| Mehrere | [Etiketten](https://amzn.to/2R0eHSL) | Zum Bekleben der NFC-Karten, denn diese müssen irgendwie auseinandergehalten werden | Es gibt ganz viele weitere Varianten zum Bedrucken. Ein einfacher Edding reicht jedoch auch.| ca. 0,80 EUR / Stück| + +Es gibt zahllose weitere Ergänzungen, wie [LED-Stripes](http://discourse.voss.earth/t/integration-led-strip-und-ring-mit-neopixel/2760), [Bluetooth-Anschluss](http://discourse.voss.earth/t/erweiterung-anschluss-bluetooth-kopfhoerer-vorerst-theorie/3556/14), etc. pp. Positive Erfahrungen sollten gerne in diese Liste hier integriert werden. +### Systemnahe Programmierung + +Es muss nicht unbedingt programmiert werden. Die Installation der Firmware auf den Arduino ist sehr einfach. Die Anleitung auf der [offiziellen Webseite](https://www.voss.earth/tonuino/) ist gut. Wenn jedoch mehr Knöpfe angesprochen werden sollen (siehe oben), muss die Software auch geringfügig angepasst werden. + +Es gibt zwar, wie bei jeder Software, ein paar kleine Software-Fehler, die jedoch in [unterschiedlichen Branches](https://github.com/xfjx/TonUINO/network) gefixt wurden. Ziel ist es, diese Änderungen in so wenigen Branches wie möglich pflegen zu müssen. + +#### Für Benutzer + +Als einfacher Benutzer sollte die Programmierung so einfach gestaltet sein wie möglich. Im Folgenden die notwendigen Schritte. Eine [Community FAQ](https://discourse.voss.earth/t/faq-kategorie-software/924) gibt weitere Hilfestellungen. + +1. Download der Firmware von [Originalrepository](https://github.com/xfjx/TonUINO/tree/DEV) oder von hier. Dazu oben rechts auf `Clone or Download` klicken und dann auf `Download ZIP` +2. Die Datei `DEV.zip` landet dann im `Download`-Verzeichnis und muss mit einem Doppelklick entpackt werden. Es sollte dann ein Verzeichnis `TonUINO-DEV` existieren, in der sich die Datei `Tonuino.ino` befindet. +3. Anschließend muss die [Arduino GUI](https://www.arduino.cc/en/main/software) herunter geladen und installiert werden (unter macOS mit [Homebrew](http://brew.sh) einfach über `brew cask install arduino`). +4. Nach dem Starten der Arduino GUI muss die o.g. Datei geöffnet werden und notwendige Bibliotheken herunter geladen werden. Unter `Werkzeuge` und dann `Bibliotheken Verwalten` folgende Pakete suchen und installieren: + 1. `JC_Button` (von dem Entwickler `Jack Christiansen`) + 2. `DFPlayer Mini Mp3` (von dem Entwickler `Makuna`) + 3. `MFRC522` (von dem Entwickler `GitHubCommunity`) +5. Nun unter `Werkzeuge` und dann + 1. `Board` den Punkt `Arduino Nano` auswählen + 2. `Prozessor` den Punkt `ATmega328P (Old Bootloader)` auswählen + 3. `Port` den Punkt `/dev/cu.wchusbserial???` auswählen (je nach Betriebssystem könnte es anders aussehen) +6. Nun kann die Software unter `Sketch` und dann `Hochladen` auf den Arduino hoch geladen werden. + +Darüber hinaus muss noch die SD-Karte vorbereitet werden: + +1. Die Karte mit FAT32 formatieren. +2. Die Ordner `mp3` und `advert` aus dem Ordner `sd-card` müssen auf die SD-Karte kopiert werden. Skripte wie `create-soundfiles.sh` brauchen gar nicht ausgeführt werden. +3. Auf der SD-Karte müssen die Ordner für die Musik erstellt werden (ohne Lücken beginnend mit `01`, dann ggf. `02`, ...) und die MP3-Dateien der Lieder müssen ohne Lücken nummeriert werden (mit `001`, dann ggf. `002`, ...). +4. Die Codierung der NFC-Karten und des Admin-Menüs wird durch [die Videos](https://www.youtube.com/channel/UCeXF2J1Pz8b1plIne-jQy1A) deutlich und sind weitestgehend selbsterklärend. + +#### Für Entwickler + +Der Ablauf für Entwickler sieht etwas anders aus und dieses Repository hat sich zum Ziel gesetzt, insbesondere diese Zielgruppe mit zu unterstützen. Insbesondere die Unterstützung von [Arduino CLI](https://github.com/arduino/arduino-cli),[PlatformIO](https://platformio.org) und [GitHub Actions](https://github.com/AlexanderWillner/tonuino/actions?workflow=building) wurde umgesetzt. Für diese Zielgruppe sollte insbesondere das `Makefile` eine Hilfe sein, die alle o.g. Punkte und weitere Aspekte automatisiert: + +```text + +$ make TonUINO Makefile ================ @@ -27,38 +118,20 @@ Available commands: - clean : delete temporary files ``` -# TonUINO -Die DIY Musikbox (nicht nur) für Kinder - - -# Change Log - -## Version 2.1 (xx.xx.xxxx) noch WIP -- Partymodus hat nun eine Queue -> jedes Lied kommt nur genau 1x vorkommt -- Neue Wiedergabe-Modi "Spezialmodus Von-Bis" - Hörspiel, Album und Party -> erlaubt z.B. verschiedene Alben in einem Ordner zu haben und je mit einer Karte zu verknüpfen -- Admin-Menü -- Maximale, Minimale und Initiale Lautstärke -- Karten werden nun über das Admin-Menü neu konfiguriert -- die Funktion der Lautstärketasten (lauter/leiser oder vor/zurück) kann im Adminmenü vertauscht werden -- Shortcuts können konfiguriert werden! -- Support für 5 Knöpfe hinzugefügt -- Reset der Einstellungen ins Adminmenü verschoben -- Modikationskarten (Sleeptimer, Tastensperre, Stopptanz, KiTa-Modus) -- Admin-Menü kann abgesichert werden - -## Version 2.01 (01.11.2018) -- kleiner Fix um die Probleme beim Anlernen von Karten zu reduzieren - -## Version 2.0 (26.08.2018) - -- Lautstärke wird nun über einen langen Tastendruck geändert -- bei kurzem Tastendruck wird der nächste / vorherige Track abgespielt (je nach Wiedergabemodus nicht verfügbar) -- Während der Wiedergabe wird bei langem Tastendruck auf Play/Pause die Nummer des aktuellen Tracks angesagt -- Neuer Wiedergabemodus: **Einzelmodus** - Eine Karte kann mit einer einzelnen Datei aus einem Ordner verknüpft werden. Dadurch sind theoretisch 25000 verschiedene Karten für je eine Datei möglich -- Neuer Wiedergabemodus: **Hörbuch-Modus** - Funktioniert genau wie der Album-Modus. Zusätzlich wir der Fortschritt im EEPROM des Arduinos gespeichert und beim nächsten mal wird bei der jeweils letzten Datei neu gestartet. Leider kann nur der Track, nicht die Stelle im Track gespeichert werden -- Um mehr als 100 Karten zu unterstützen wird die Konfiguration der Karten nicht mehr im EEPROM gespeichert sondern direkt auf den Karten - die Karte muss daher beim Anlernen aufgelegt bleiben! -- Durch einen langen Druck auf Play/Pause kann **eine Karte neu konfiguriert** werden -- In den Auswahldialogen kann durch langen Druck auf die Lautstärketasten jeweils um 10 Ordner oder Dateien vor und zurück gesprungen werden -- Reset des MP3 Moduls beim Start entfernt - war nicht nötig und hat "Krach" gemacht +Darüber hinaus gibt es +* auf der [offiziellen Webseite](https://www.voss.earth/tonuino/) und im Repository noch einige nützliche Skripte, die noch nicht in das `Makefile` integriert sind +* [Firmware-Alternativen](https://github.com/seisfeld/TonUINO), die je nach Planung ggf. weitere notwendige Features unterstützen +* die [Fritzing GUI](https://fritzing.org/), um kompliziertere Aufbauten zunächst am Rechner zu visualisieren und zu planen (unter macOS mit [Homebrew](http://brew.sh) einfach über `brew cask install fritzing`) +* ein [change log](CHANGELOG.md), die Änderungen der Software dokumentiert + +### Gehäusebau + +Man sollte kreativ werden. Nach dem Zusammenbau der Hardware, dem Aufspielen der Firmware, dem Befüllen der SD-Karte und der Codierung der ersten NFC-Karte, kann man direkt loslegen. Allerdings ist so ein Kabelsalat weder hübsch noch Kind-gerecht. + +#### Notwendige Grundausstattung + +Eine stabile Pappschachtel (z.B. die Verpackung des Mobiltelefons oder eine Taschentuchbox) zusammen mit einem günstigen Lautsprecher oder eine fertige Lautsprecherbox aus Holz. Eine Heißklebepistole oder doppelseitiges Klebeband können zum besten Freund werden. + +#### Optionale erweiterte Ausstattung + +Es gibt erstaunliche Arbeiten, die z.B. in der [Gallerie](http://discourse.voss.earth/t/tonuino-gehaeuse-galerie/786/27) aufgeführt sind, und hier kommt die eigentliche Kreativität zum Einsatz ([Stofftiere](http://discourse.voss.earth/t/die-musikeule-ein-stofftier-mit-kick/2541), [Schatzkisten](http://discourse.voss.earth/t/vorstellung-musik-schatzkiste/2641), [LED-bestückte Jukeboxen](http://discourse.voss.earth/t/vorstellung-marabox-bambus-3d-druck-neopixel-ring/4608/22), ...). Hier kann mit einem 3D-Drucker kann das eigene Projekt natürlich noch auf eine ganz andere Ebene gehoben werden. From 30e46afccd0132c7aadbe446d311e2106ad3a815 Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Sun, 12 Jan 2020 13:58:01 +0100 Subject: [PATCH 26/40] updated links and description --- README.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 21f78806..f3ffb083 100644 --- a/README.md +++ b/README.md @@ -24,17 +24,17 @@ For various reasons, we've decided to write this guide in German only. However, ## Zusammenfassung -Kinder zu beschenken ist nie einfach. Das Ziel des Projektes [TonUINO](https://www.voss.earth/tonuino/) von [Thorsten Voss](https://www.voss.earth/ueber-mich/) ist es, nach dem Vorbild der [Toniebox](https://tonies.de/toniebox/), eine “Musikbox (nicht nur) für Kinder” selbst zu bauen. Es macht einen riesigen Spaß, die meisten Kinder sind begeistert und diese Seite soll der großartigen Community etwas wieder geben. Denn so gut die [Webseite](https://www.voss.earth/tonuino/), das [Forum](http://discourse.voss.earth/) und die [Videos](https://www.youtube.com/channel/UCeXF2J1Pz8b1plIne-jQy1A) auch sind, der Bau der ersten Box wäre mit weniger Zeitaufwand möglich. +Kinder zu beschenken ist nie einfach. Das Ziel des Projektes [TonUINO](https://www.voss.earth/tonuino/) von [Thorsten Voss](https://www.voss.earth/ueber-mich/) ist es, nach dem Vorbild der [Toniebox](https://tonies.de/toniebox/), eine “Musikbox (nicht nur) für Kinder” selbst zu bauen. Es macht einen riesigen Spaß, die meisten Kinder sind begeistert und diese Seite soll der großartigen Community etwas wieder geben. Denn so gut die [Webseite](https://www.voss.earth/tonuino/), das [Forum](http://discourse.voss.earth/) und die [Videos](https://www.youtube.com/channel/UCeXF2J1Pz8b1plIne-jQy1A) auch sind, der Bau der ersten Box(en) wäre mit weniger Zeitaufwand möglich. -Insbesondere unterstützt diese Anleitung hier “Newbies” bei der Auswahl der Hardware, geht sequenzieller durch die notwendigen Schritte und beinhaltet Links zu den wichtigsten Informationsquellen. Hoffentlich werden diese Anregungen hier irgendwann in die offizielle Dokumentation aufgenommen und machen diese Seite damit zukünftig überflüssig. Jede Art von [Pull Requests](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests) sind mehr als willkommen. +Insbesondere unterstützt diese Anleitung hier “Newbies” bei der Auswahl der Hardware, geht sequenzieller durch die notwendigen Schritte, beinhaltet Links zu den wichtigsten Informationsquellen und optimiert den Code für Softwareentwickler. Hoffentlich werden diese Anregungen hier irgendwann in die offizielle Dokumentation aufgenommen und machen diese Seite damit zukünftig überflüssig. Jede Art von [Pull Requests](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests), die die Dokumentation oder den Code gemeinsam verbessern, sind mehr als willkommen! ## Drei Bausteine -Es ist wichtig zu wissen, dass die Kunst ein TonUINO zu bauen grundsätzlich als ein Zusammenspiel von drei unterschiedlichen Disziplinen angesehen werden kann: Mikrocontroller-Hardware, systemnahe Programmierung und Gehäusebau. Im Folgenden stelle ich für jeden der Bereiche die notwendige Grundausstattung und die optionalen Erweiterungen sehr knapp vor, die ich entweder selbst umgesetzt habe oder für sinnvoll erachte. +Es ist wichtig zu wissen, dass die Kunst ein TonUINO zu bauen grundsätzlich als ein Zusammenspiel von drei unterschiedlichen Disziplinen angesehen werden kann: [Mikrocontroller-Hardware](#mikrocontroller-hardware), [systemnahe Programmierung](#systemnahe-programmierung) und [Gehäusebau](#geh%c3%a4usebau). Im Folgenden wird für jeden der Bereiche die notwendige Grundausstattung und sinnvolle Erweiterungen sehr knapp vorgestellt. Das [Forum](http://discourse.voss.earth/) ist ein Quell vieler weiterer Ideen. ### Mikrocontroller-Hardware -Es muss gelötet werden. Wir gehen davon aus, dass Lötkolben, Lötzinn und Löterfahrung vorhanden sind. Eine sehr gute Anleitung gibt es bei [YouTube](https://www.youtube.com/watch?v=RmE09dsY-l0) und einen Schaltplan auf der [offiziellen Webseite](https://www.voss.earth/tonuino/). Da hier jedoch die genaue Orientierung der Pins nicht ersichtlich ist, hilft auch noch ein alternativer Schaltplan von [dieser Webseite](https://smarthomeyourself.de/anleitung-zum-selber-bauen/unabhaengige-projekte/tonuino-der-kinderfreundliche-rfid-audio-player/), um die richtigen Pins zu identifizieren. Die notwendigen Komponenten können über Firmen wie Reichelt, Conrad, Amazon, E-Bay und Alibaba bezogen werden. Meist lohnt sich jetzt schon die Planung von mehreren TonUINO-Boxen. Im Folgenden Amazon-Affiliate-Links von Komponenten, die Thorsten und andere aus der Community erfolgreich verbaut haben. In der [Community FAQ](https://discourse.voss.earth/t/faq-kategorie-hardware/926/2) gibt es weitere wertvolle Hinweise. +Es muss gelötet werden. Wir gehen davon aus, dass Lötkolben, Lötzinn und Löterfahrung vorhanden sind. Eine sehr gute Anleitung gibt es bei [YouTube](https://www.youtube.com/watch?v=RmE09dsY-l0) und einen Schaltplan auf der [offiziellen Webseite](https://www.voss.earth/tonuino/). Da hier jedoch die genaue Orientierung der Pins nicht ersichtlich ist, hilft auch noch ein alternativer Schaltplan von [dieser Webseite](https://smarthomeyourself.de/anleitung-zum-selber-bauen/unabhaengige-projekte/tonuino-der-kinderfreundliche-rfid-audio-player/), um die richtigen Pins zu identifizieren. Die notwendigen Komponenten können über Reichelt, Conrad, Amazon, E-Bay oder Alibaba bezogen werden. Meist lohnt sich jetzt schon die Planung von mehreren TonUINO-Boxen. Im Folgenden Amazon-Affiliate-Links von Komponenten, die Thorsten und andere aus der Community erfolgreich verbaut haben. In der [Community Hardware FAQ](https://discourse.voss.earth/t/faq-kategorie-hardware/926/2) gibt es weitere wertvolle Hinweise. #### Notwendige Grundausstattung (ca. 30 EUR) @@ -45,11 +45,11 @@ Es muss gelötet werden. Wir gehen davon aus, dass Lötkolben, Lötzinn und Löt | (1) | [DFPlayer Mini](https://amzn.to/2K2JavA) | Zum Abspielen der Musik | Dieser Player ist recht empfindlich was die genaue Bespielung der SD-Karte angeht | ca. 3-6 EUR / Stück | | (1) | [RFID Kit RC522](http://amzn.to/2FnyHJj) | Zum Lesen und Beschreiben der NFC-Karten | | ca. 2-6 EUR / Stück | | (4) | [RFID-Karten](https://amzn.to/2NXZQuL) | Zur Auswahl der Musik | müssen im 13,56 MHz Band funken | ca. 0,40 - 0,80 EUR / Stück | -| 1 | [Passiver Lautsprecher](https://www.amazon.de/dp/B00JRW0M32) | Zum Anhören der Musik | z.B. ein Regallautsprecher oder etwas kleineres | ca. 2-50 EUR / Stück | +| 1 | [Passiver Lautsprecher](https://amzn.to/381ama6) | Zum Anhören der Musik | z.B. ein Regallautsprecher oder etwas kleineres | ca. 2-50 EUR / Stück | | 1 | [MicroSD-Karte](http://amzn.to/2oXOxDw) | Zum Speichern der Musik | Maximal 32 GB | ca. 4-6 EUR / Stück | | 3 | [Knöpfe](Knöpfe) | Zum starten/stoppen, lauter/leiser stellen, ... | Es gibt auch Varianten mit 5 Knöpfen. Knöpfe mit eingebauter LED haben weitere Vorteile. | ca. 0,50 EUR / Stück | -| 20 | [Kabel](https://www.amazon.de/dp/B074P726ZR) | Zum Verbinden | Der Bedarf an Kabeln kann schnell nach oben gehen (siehe Erweiterungen unten) | ca. 0,05 EUR / Stück | -| 1 | [1K Resistor](https://www.amazon.de//dp/B00I8NOILI/) | zum X | Einzeln zu kaufen ggf. recht teuer | ca. 0,01 EUR / Stück | +| 20 | [Kabel](https://amzn.to/2uJCVLf) | Zum Verbinden | Der Bedarf an Kabeln kann schnell nach oben gehen (siehe Erweiterungen unten) | ca. 0,05 EUR / Stück | +| 1 | [1K Resistor](https://amzn.to/2NicnqM) | zum X | Einzeln zu kaufen ggf. recht teuer | ca. 0,01 EUR / Stück | #### Optionale erweiterte Ausstattung @@ -57,10 +57,10 @@ Es muss gelötet werden. Wir gehen davon aus, dass Lötkolben, Lötzinn und Löt | --- | --- | --- | --- | --- | | 1 | [TonUINO-Platine](http://discourse.voss.earth/t/neue-platine-version-1-51/63) | Für weniger Kabelsalat. Enthält auch die o.g. Kabel und den Resistor. Wird auch in der o.g. YouTube-Anleitung genutzt. | Kann von Thorsten [per E-Mail](TonUINO@voss.earth) bestellt werden | ca. 10 EUR / Stück | 1 | [Köpfhörer-Platine](http://discourse.voss.earth/t/kopfhoererbuchsenplatine/2463) | Zum Anschluss von Kopfhörern |Kann von Thorsten [per E-Mail](TonUINO@voss.earth) bestellt werden | ca. 7,50 EUR / Stück -| 1 | [Akku](https://www.amazon.de/gp/product/B07RFVK6BQ) | Zum Kabellosen Betrieb | Dazu gibt es einige [Diskussionen](http://discourse.voss.earth/c/stromversorgung/5) und Alternativen (z.B. Wemos Battery Shield). Gute Erfahrungen gibt es mit dem Hersteller RAVPower. Wichtige Eigenschaften: power pass trough, automatische Abschaltung. | ca. 15 EUR / Stück | -| 1 | [Micro-SD-Verlängerung](https://www.amazon.de/gp/product/B0749GC75F) | Zum Austausch der SD-Karte von außen | Je nachdem wie das Gehäuse gebaut ist. Auch könnte eine externe USB-Buchse genutzt werden, [um MP3-Dateien aufzuspielen](http://discourse.voss.earth/t/daten-auf-sd-kopieren-ueber-usb-anschluss/2185/8). | ca. 3 EUR / Stück | -| 1 | [USB-Buchse](https://www.amazon.de/gp/product/B0718XQPGB/) | Zum Aufladen bei Akkubetrieb | [Kein einfaches Thema](http://discourse.voss.earth/t/micro-usb-buchse-fuer-das-gehaeuse/3280/14) und kann sowohl zum Aufladen als auch für ein [Firmware-Upgrade](http://discourse.voss.earth/t/benoetige-hilfe-bei-der-trennung-von-daten-und-strom-des-usb-kabels/975) oder zum [MP3-Aktualisieren](http://discourse.voss.earth/t/daten-auf-sd-kopieren-ueber-usb-anschluss/2185/8) gleichzeitig genutzt werden. | ca. 4-20 EUR / Stück | -| 1 | [Ein- und Ausschalter](https://www.amazon.de/gp/product/B07X1DP8LV/) | Zum Strom sparen und Wiederbeleben bei Akkubetrieb | Ein Schalter mit Lichtindikator erscheint sinnvoll [für eine gewisse Grundlast](http://discourse.voss.earth/t/grundlast-erhoehen-um-powerbank-nicht-autom-abzuschalten/1899/9) | ca. 0,50-20 EUR / Stück| +| 1 | [Akku](https://amzn.to/35LX14a) | Zum Kabellosen Betrieb | Dazu gibt es einige [Diskussionen](http://discourse.voss.earth/c/stromversorgung/5) und Alternativen (z.B. Wemos Battery Shield). Gute Erfahrungen gibt es mit dem Hersteller RAVPower. Wichtige Eigenschaften: power pass trough, automatische Abschaltung. | ca. 15 EUR / Stück | +| 1 | [Micro-SD-Verlängerung](https://amzn.to/36MW50K) | Zum Austausch der SD-Karte von außen | Je nachdem wie das Gehäuse gebaut ist. Auch könnte eine externe USB-Buchse genutzt werden, [um MP3-Dateien aufzuspielen](http://discourse.voss.earth/t/daten-auf-sd-kopieren-ueber-usb-anschluss/2185/8). | ca. 3 EUR / Stück | +| 1 | [USB-Buchse](https://amzn.to/2uHgKoQ) | Zum Aufladen bei Akkubetrieb | [Kein einfaches Thema](http://discourse.voss.earth/t/micro-usb-buchse-fuer-das-gehaeuse/3280/14) und kann sowohl zum Aufladen als auch für ein [Firmware-Upgrade](http://discourse.voss.earth/t/benoetige-hilfe-bei-der-trennung-von-daten-und-strom-des-usb-kabels/975) oder zum [MP3-Aktualisieren](http://discourse.voss.earth/t/daten-auf-sd-kopieren-ueber-usb-anschluss/2185/8) gleichzeitig genutzt werden. | ca. 4-20 EUR / Stück | +| 1 | [Ein- und Ausschalter](https://amzn.to/30icuHZ) | Zum Strom sparen und Wiederbeleben bei Akkubetrieb | Ein Schalter mit Lichtindikator erscheint sinnvoll [für eine gewisse Grundlast](http://discourse.voss.earth/t/grundlast-erhoehen-um-powerbank-nicht-autom-abzuschalten/1899/9) | ca. 0,50-20 EUR / Stück| | Mehrere | [Etiketten](https://amzn.to/2R0eHSL) | Zum Bekleben der NFC-Karten, denn diese müssen irgendwie auseinandergehalten werden | Es gibt ganz viele weitere Varianten zum Bedrucken. Ein einfacher Edding reicht jedoch auch.| ca. 0,80 EUR / Stück| Es gibt zahllose weitere Ergänzungen, wie [LED-Stripes](http://discourse.voss.earth/t/integration-led-strip-und-ring-mit-neopixel/2760), [Bluetooth-Anschluss](http://discourse.voss.earth/t/erweiterung-anschluss-bluetooth-kopfhoerer-vorerst-theorie/3556/14), etc. pp. Positive Erfahrungen sollten gerne in diese Liste hier integriert werden. @@ -73,7 +73,7 @@ Es gibt zwar, wie bei jeder Software, ein paar kleine Software-Fehler, die jedoc #### Für Benutzer -Als einfacher Benutzer sollte die Programmierung so einfach gestaltet sein wie möglich. Im Folgenden die notwendigen Schritte. Eine [Community FAQ](https://discourse.voss.earth/t/faq-kategorie-software/924) gibt weitere Hilfestellungen. +Als einfacher Benutzer sollte die Programmierung so einfach gestaltet sein wie möglich. Im Folgenden die notwendigen Schritte. Eine [Community Software FAQ](https://discourse.voss.earth/t/faq-kategorie-software/924) gibt weitere Hilfestellungen. 1. Download der Firmware von [Originalrepository](https://github.com/xfjx/TonUINO/tree/DEV) oder von hier. Dazu oben rechts auf `Clone or Download` klicken und dann auf `Download ZIP` 2. Die Datei `DEV.zip` landet dann im `Download`-Verzeichnis und muss mit einem Doppelklick entpackt werden. Es sollte dann ein Verzeichnis `TonUINO-DEV` existieren, in der sich die Datei `Tonuino.ino` befindet. From cfb27e4e7c0138682af4ad304ffca6bea738fc32 Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Sun, 12 Jan 2020 21:09:33 +0100 Subject: [PATCH 27/40] added Bluetooth --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f3ffb083..2465520b 100644 --- a/README.md +++ b/README.md @@ -62,14 +62,15 @@ Es muss gelötet werden. Wir gehen davon aus, dass Lötkolben, Lötzinn und Löt | 1 | [USB-Buchse](https://amzn.to/2uHgKoQ) | Zum Aufladen bei Akkubetrieb | [Kein einfaches Thema](http://discourse.voss.earth/t/micro-usb-buchse-fuer-das-gehaeuse/3280/14) und kann sowohl zum Aufladen als auch für ein [Firmware-Upgrade](http://discourse.voss.earth/t/benoetige-hilfe-bei-der-trennung-von-daten-und-strom-des-usb-kabels/975) oder zum [MP3-Aktualisieren](http://discourse.voss.earth/t/daten-auf-sd-kopieren-ueber-usb-anschluss/2185/8) gleichzeitig genutzt werden. | ca. 4-20 EUR / Stück | | 1 | [Ein- und Ausschalter](https://amzn.to/30icuHZ) | Zum Strom sparen und Wiederbeleben bei Akkubetrieb | Ein Schalter mit Lichtindikator erscheint sinnvoll [für eine gewisse Grundlast](http://discourse.voss.earth/t/grundlast-erhoehen-um-powerbank-nicht-autom-abzuschalten/1899/9) | ca. 0,50-20 EUR / Stück| | Mehrere | [Etiketten](https://amzn.to/2R0eHSL) | Zum Bekleben der NFC-Karten, denn diese müssen irgendwie auseinandergehalten werden | Es gibt ganz viele weitere Varianten zum Bedrucken. Ein einfacher Edding reicht jedoch auch.| ca. 0,80 EUR / Stück| +| 1 | [Bluetooh-Sender](https://amzn.to/3a5hzrx) | Zum Anschluss von kabellosen Kopfhörern | Details zum Anschluss im Forum [hier](http://discourse.voss.earth/t/hoerbuch-fuer-meine-frau/4344/3) oder [hier](http://discourse.voss.earth/t/erweiterung-anschluss-bluetooth-kopfhoerer-vorerst-theorie/3556/14). | ca. 19 EUR / Stück | -Es gibt zahllose weitere Ergänzungen, wie [LED-Stripes](http://discourse.voss.earth/t/integration-led-strip-und-ring-mit-neopixel/2760), [Bluetooth-Anschluss](http://discourse.voss.earth/t/erweiterung-anschluss-bluetooth-kopfhoerer-vorerst-theorie/3556/14), etc. pp. Positive Erfahrungen sollten gerne in diese Liste hier integriert werden. +Es gibt zahllose weitere Ergänzungen, wie [LED-Stripes](http://discourse.voss.earth/t/integration-led-strip-und-ring-mit-neopixel/2760) etc. pp. Positive Erfahrungen sollten gerne in diese Liste hier integriert werden. ### Systemnahe Programmierung Es muss nicht unbedingt programmiert werden. Die Installation der Firmware auf den Arduino ist sehr einfach. Die Anleitung auf der [offiziellen Webseite](https://www.voss.earth/tonuino/) ist gut. Wenn jedoch mehr Knöpfe angesprochen werden sollen (siehe oben), muss die Software auch geringfügig angepasst werden. -Es gibt zwar, wie bei jeder Software, ein paar kleine Software-Fehler, die jedoch in [unterschiedlichen Branches](https://github.com/xfjx/TonUINO/network) gefixt wurden. Ziel ist es, diese Änderungen in so wenigen Branches wie möglich pflegen zu müssen. +Es gibt zwar, wie bei jeder Software, ein paar kleine Software-Fehler, die jedoch in [unterschiedlichen Branches](https://github.com/xfjx/TonUINO/network) gefixt wurden. Ziel ist es, diese Änderungen in so wenigen Branches wie möglich pflegen zu müssen. #### Für Benutzer From 83c7a182504eaf8729ee59e9a0d86101bf43f0a8 Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Mon, 13 Jan 2020 10:55:05 +0100 Subject: [PATCH 28/40] removed reference --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2465520b..edb47cb9 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ For various reasons, we've decided to write this guide in German only. However, ## Zusammenfassung -Kinder zu beschenken ist nie einfach. Das Ziel des Projektes [TonUINO](https://www.voss.earth/tonuino/) von [Thorsten Voss](https://www.voss.earth/ueber-mich/) ist es, nach dem Vorbild der [Toniebox](https://tonies.de/toniebox/), eine “Musikbox (nicht nur) für Kinder” selbst zu bauen. Es macht einen riesigen Spaß, die meisten Kinder sind begeistert und diese Seite soll der großartigen Community etwas wieder geben. Denn so gut die [Webseite](https://www.voss.earth/tonuino/), das [Forum](http://discourse.voss.earth/) und die [Videos](https://www.youtube.com/channel/UCeXF2J1Pz8b1plIne-jQy1A) auch sind, der Bau der ersten Box(en) wäre mit weniger Zeitaufwand möglich. +Kinder zu beschenken ist nie einfach. Das Ziel des Projektes [TonUINO](https://www.voss.earth/tonuino/) von [Thorsten Voss](https://www.voss.earth/ueber-mich/) ist es, eine “Musikbox (nicht nur) für Kinder” selbst zu bauen. Es macht einen riesigen Spaß, die meisten Kinder sind begeistert und diese Seite soll der großartigen Community etwas wieder geben. Denn so gut die [Webseite](https://www.voss.earth/tonuino/), das [Forum](http://discourse.voss.earth/) und die [Videos](https://www.youtube.com/channel/UCeXF2J1Pz8b1plIne-jQy1A) auch sind, der Bau der ersten Box(en) wäre mit weniger Zeitaufwand möglich. Insbesondere unterstützt diese Anleitung hier “Newbies” bei der Auswahl der Hardware, geht sequenzieller durch die notwendigen Schritte, beinhaltet Links zu den wichtigsten Informationsquellen und optimiert den Code für Softwareentwickler. Hoffentlich werden diese Anregungen hier irgendwann in die offizielle Dokumentation aufgenommen und machen diese Seite damit zukünftig überflüssig. Jede Art von [Pull Requests](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests), die die Dokumentation oder den Code gemeinsam verbessern, sind mehr als willkommen! From e512d12279044fc9c05120cf448bf1be30e763fc Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Wed, 15 Jan 2020 08:27:31 +0100 Subject: [PATCH 29/40] added badget ; moved to releases --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index edb47cb9..c60b6757 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ -[![GitHub Actions | AlexanderWillner/tonuino](https://github.com/AlexanderWillner/tonuino/workflows/building/badge.svg)](https://github.com/AlexanderWillner/tonuino/actions?workflow=building) +[![GitHub Actions | AlexanderWillner/tonuino](https://github.com/AlexanderWillner/tonuino/workflows/building/badge.svg)](https://github.com/AlexanderWillner/tonuino/actions?workflow=building) [![license](https://img.shields.io/github/license/alexanderwillner/tonuino)](https://github.com/AlexanderWillner/TonUINO/blob/DEV/LICENSE) + # TonUINO @@ -76,8 +77,8 @@ Es gibt zwar, wie bei jeder Software, ein paar kleine Software-Fehler, die jedoc Als einfacher Benutzer sollte die Programmierung so einfach gestaltet sein wie möglich. Im Folgenden die notwendigen Schritte. Eine [Community Software FAQ](https://discourse.voss.earth/t/faq-kategorie-software/924) gibt weitere Hilfestellungen. -1. Download der Firmware von [Originalrepository](https://github.com/xfjx/TonUINO/tree/DEV) oder von hier. Dazu oben rechts auf `Clone or Download` klicken und dann auf `Download ZIP` -2. Die Datei `DEV.zip` landet dann im `Download`-Verzeichnis und muss mit einem Doppelklick entpackt werden. Es sollte dann ein Verzeichnis `TonUINO-DEV` existieren, in der sich die Datei `Tonuino.ino` befindet. +1. Download der Firmware. Dazu oben auf `release` klicken und dann auf den Pfeil bei `Assets` der aktuellsten Version und über `Source code (zip)` den Quelltext herunter laden. +2. Die Datei `TonUINO-xxxx.zip` landet dann im `Download`-Verzeichnis und muss mit einem Doppelklick entpackt werden. Es sollte dann ein Verzeichnis `TonUINO-xxxx` existieren, in der sich die Datei `Tonuino.ino` befindet. 3. Anschließend muss die [Arduino GUI](https://www.arduino.cc/en/main/software) herunter geladen und installiert werden (unter macOS mit [Homebrew](http://brew.sh) einfach über `brew cask install arduino`). 4. Nach dem Starten der Arduino GUI muss die o.g. Datei geöffnet werden und notwendige Bibliotheken herunter geladen werden. Unter `Werkzeuge` und dann `Bibliotheken Verwalten` folgende Pakete suchen und installieren: 1. `JC_Button` (von dem Entwickler `Jack Christiansen`) From 04b725f9988440d3c242aaa59daa6ea36b537c22 Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Wed, 15 Jan 2020 08:31:56 +0100 Subject: [PATCH 30/40] added downloads badge --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index c60b6757..36ed048a 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,4 @@ -[![GitHub Actions | AlexanderWillner/tonuino](https://github.com/AlexanderWillner/tonuino/workflows/building/badge.svg)](https://github.com/AlexanderWillner/tonuino/actions?workflow=building) [![license](https://img.shields.io/github/license/alexanderwillner/tonuino)](https://github.com/AlexanderWillner/TonUINO/blob/DEV/LICENSE) - +[![GitHub Actions | AlexanderWillner/tonuino](https://github.com/AlexanderWillner/tonuino/workflows/building/badge.svg)](https://github.com/AlexanderWillner/tonuino/actions?workflow=building) [![license](https://img.shields.io/github/license/alexanderwillner/tonuino)](https://github.com/AlexanderWillner/TonUINO/blob/DEV/LICENSE) [![download](https://img.shields.io/github/downloads/AlexanderWillner/TonUINO/total)](https://github.com/AlexanderWillner/TonUINO/releases) # TonUINO From 749098ece8ea356664a5efd0051bde10e094504f Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Wed, 15 Jan 2020 08:32:25 +0100 Subject: [PATCH 31/40] merged badges to dev --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a1916a11..61794feb 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[![GitHub Actions | AlexanderWillner/tonuino](https://github.com/AlexanderWillner/tonuino/workflows/building/badge.svg)](https://github.com/AlexanderWillner/tonuino/actions?workflow=building) +[![GitHub Actions | AlexanderWillner/tonuino](https://github.com/AlexanderWillner/tonuino/workflows/building/badge.svg)](https://github.com/AlexanderWillner/tonuino/actions?workflow=building) [![license](https://img.shields.io/github/license/alexanderwillner/tonuino)](https://github.com/AlexanderWillner/TonUINO/blob/DEV/LICENSE) [![download](https://img.shields.io/github/downloads/AlexanderWillner/TonUINO/total)](https://github.com/AlexanderWillner/TonUINO/releases) # Änderungen in diesem Repository From 16e7e782da98e37278e725eefd528bdc0a0ba0eb Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 22 Jan 2020 23:45:30 +0100 Subject: [PATCH 32/40] Move to GitHub Releases --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 36ed048a..c27a892f 100644 --- a/README.md +++ b/README.md @@ -76,8 +76,8 @@ Es gibt zwar, wie bei jeder Software, ein paar kleine Software-Fehler, die jedoc Als einfacher Benutzer sollte die Programmierung so einfach gestaltet sein wie möglich. Im Folgenden die notwendigen Schritte. Eine [Community Software FAQ](https://discourse.voss.earth/t/faq-kategorie-software/924) gibt weitere Hilfestellungen. -1. Download der Firmware. Dazu oben auf `release` klicken und dann auf den Pfeil bei `Assets` der aktuellsten Version und über `Source code (zip)` den Quelltext herunter laden. -2. Die Datei `TonUINO-xxxx.zip` landet dann im `Download`-Verzeichnis und muss mit einem Doppelklick entpackt werden. Es sollte dann ein Verzeichnis `TonUINO-xxxx` existieren, in der sich die Datei `Tonuino.ino` befindet. +1. Download [der aktuellen Firmware](https://github.com/AlexanderWillner/TonUINO/releases/latest/download/TonUINO.zip). +2. Die Datei `TonUINO.zip` landet dann im `Download`-Verzeichnis und muss mit einem Doppelklick entpackt werden. Es sollte dann ein Verzeichnis `TonUINO` existieren, in der sich die Datei `Tonuino.ino` befindet. 3. Anschließend muss die [Arduino GUI](https://www.arduino.cc/en/main/software) herunter geladen und installiert werden (unter macOS mit [Homebrew](http://brew.sh) einfach über `brew cask install arduino`). 4. Nach dem Starten der Arduino GUI muss die o.g. Datei geöffnet werden und notwendige Bibliotheken herunter geladen werden. Unter `Werkzeuge` und dann `Bibliotheken Verwalten` folgende Pakete suchen und installieren: 1. `JC_Button` (von dem Entwickler `Jack Christiansen`) From 3ea887c923574cf51b55ace826795c96f317f093 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 9 Feb 2020 23:58:27 +0100 Subject: [PATCH 33/40] Added table with PINs --- README.md | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c27a892f..08c1b6d6 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,27 @@ Es ist wichtig zu wissen, dass die Kunst ein TonUINO zu bauen grundsätzlich als ### Mikrocontroller-Hardware -Es muss gelötet werden. Wir gehen davon aus, dass Lötkolben, Lötzinn und Löterfahrung vorhanden sind. Eine sehr gute Anleitung gibt es bei [YouTube](https://www.youtube.com/watch?v=RmE09dsY-l0) und einen Schaltplan auf der [offiziellen Webseite](https://www.voss.earth/tonuino/). Da hier jedoch die genaue Orientierung der Pins nicht ersichtlich ist, hilft auch noch ein alternativer Schaltplan von [dieser Webseite](https://smarthomeyourself.de/anleitung-zum-selber-bauen/unabhaengige-projekte/tonuino-der-kinderfreundliche-rfid-audio-player/), um die richtigen Pins zu identifizieren. Die notwendigen Komponenten können über Reichelt, Conrad, Amazon, E-Bay oder Alibaba bezogen werden. Meist lohnt sich jetzt schon die Planung von mehreren TonUINO-Boxen. Im Folgenden Amazon-Affiliate-Links von Komponenten, die Thorsten und andere aus der Community erfolgreich verbaut haben. In der [Community Hardware FAQ](https://discourse.voss.earth/t/faq-kategorie-hardware/926/2) gibt es weitere wertvolle Hinweise. +Es muss gelötet werden. Wir gehen davon aus, dass Lötkolben, Lötzinn und Löterfahrung vorhanden sind. Eine sehr gute Anleitung gibt es bei [YouTube](https://www.youtube.com/watch?v=RmE09dsY-l0) und einen Schaltplan auf der [offiziellen Webseite](https://www.voss.earth/tonuino/). Da hier jedoch die genaue Orientierung der Pins nicht ersichtlich ist, hilft auch noch ein alternativer Schaltplan von [dieser Webseite](https://smarthomeyourself.de/anleitung-zum-selber-bauen/unabhaengige-projekte/tonuino-der-kinderfreundliche-rfid-audio-player/), um die richtigen Pins zu identifizieren. Auf Basis eines [Forum-Beitrages](http://discourse.voss.earth/t/einfacher-schaltplan/5021) im Folgenden eine tabellarische Übersicht: + +| Text | Pin | Gerät | Ardunio: Pin | Ardunio: Text | Ardunio: Text | Ardunio: Pin | Gerät | Pin | Test | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| | | | 01 | D0 | Vin | 30 | | | | +| | | | 02 | D1 | GND | 29 | RFID | 6 | GND | +| | | | 03 | | | 28 | | | | +| GND | 10 | MP3 | 04 | GND | 5V | 27 | | | | +| TX | 3 | MP3 | 05 | D2 | A7 | 26 | | | | +| RX | 2 | MP3 | 06 | D3 | A6 | 25 | | | | +| BSY | 16 | MP3 | 07 | D4 | A5 | 24 | | | | +| | | | 08 | D5 | A4 | 23 | | | | +| | | | 09 | D6 | A3 | 22 | | | | +| | | | 10 | D7 | A2 | 21 | Knopf | 3 | - | +| | | | 11 | D8 | A1 | 20 | Knopf | 2 | + | +| RST | 7 | RFID | 12 | D9 | A0 | 19 | Knopf | 1 | Play | +| SDA | 1 | RFID | 13 | D10 | REF | 18 | | | | +| MOSI | 3 | RFID | 14 | D11 | 3,3V | 17 | RFID | 8 | 3,3V | +| MISO | 4 | RFID | 15 | D12 | D13 | 16 | RFID | 2 | SCK | + +Die notwendigen Komponenten können über Reichelt, Conrad, Amazon, E-Bay oder Alibaba bezogen werden. Meist lohnt sich jetzt schon die Planung von mehreren TonUINO-Boxen. Im Folgenden Amazon-Affiliate-Links von Komponenten, die Thorsten und andere aus der Community erfolgreich verbaut haben. In der [Community Hardware FAQ](https://discourse.voss.earth/t/faq-kategorie-hardware/926/2) gibt es weitere wertvolle Hinweise. #### Notwendige Grundausstattung (ca. 30 EUR) From f4139be7ba62c47ae8c86383db6128e42a79c36c Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Mon, 10 Feb 2020 00:03:35 +0100 Subject: [PATCH 34/40] added some pictures --- README.md | 6 +++++- TonUINO_PINs.jpg | Bin 0 -> 47983 bytes TonUINO_Schaltplan.png | Bin 0 -> 153994 bytes 3 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 TonUINO_PINs.jpg create mode 100644 TonUINO_Schaltplan.png diff --git a/README.md b/README.md index 08c1b6d6..4f5e9785 100644 --- a/README.md +++ b/README.md @@ -54,10 +54,14 @@ Es muss gelötet werden. Wir gehen davon aus, dass Lötkolben, Lötzinn und Löt | MOSI | 3 | RFID | 14 | D11 | 3,3V | 17 | RFID | 8 | 3,3V | | MISO | 4 | RFID | 15 | D12 | D13 | 16 | RFID | 2 | SCK | -Die notwendigen Komponenten können über Reichelt, Conrad, Amazon, E-Bay oder Alibaba bezogen werden. Meist lohnt sich jetzt schon die Planung von mehreren TonUINO-Boxen. Im Folgenden Amazon-Affiliate-Links von Komponenten, die Thorsten und andere aus der Community erfolgreich verbaut haben. In der [Community Hardware FAQ](https://discourse.voss.earth/t/faq-kategorie-hardware/926/2) gibt es weitere wertvolle Hinweise. +Die passenden Abbildungen: + +![PIN-Belegung](TonUINO_PINs.jpg) ![PIN-Schaltplan](TonUINO_Schaltplan.png) #### Notwendige Grundausstattung (ca. 30 EUR) +Die notwendigen Komponenten können über Reichelt, Conrad, Amazon, E-Bay oder Alibaba bezogen werden. Meist lohnt sich jetzt schon die Planung von mehreren TonUINO-Boxen. Im Folgenden Amazon-Affiliate-Links von Komponenten, die Thorsten und andere aus der Community erfolgreich verbaut haben. In der [Community Hardware FAQ](https://discourse.voss.earth/t/faq-kategorie-hardware/926/2) gibt es weitere wertvolle Hinweise. + | Anzahl | Produkt | Beschreibung | Hinweis | Kosten | | --- | --- | --- | --- | --- | | 1 | [TonUINO Set](https://amzn.to/2pHTJQ3) | Die Hauptkomponenten | Sollte das Set ausverkauft sein, im Folgenden die vier Komponenten | ca. xx EUR / Stück | diff --git a/TonUINO_PINs.jpg b/TonUINO_PINs.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1d72fd58a78738b151166d96420f9d84b27dbf62 GIT binary patch literal 47983 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ǘ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

-wvQ#3Of;s(Dt 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 Date: Tue, 11 Feb 2020 16:37:19 +0100 Subject: [PATCH 35/40] Kurzanleitung zum Aufspielen der Firmware --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 4f5e9785..6aa31055 100644 --- a/README.md +++ b/README.md @@ -143,6 +143,10 @@ Available commands: - clean : delete temporary files ``` +Kurzanleitung zum Aufspielen der Firmware für Entwickler: + +[![Kurzanleitung zum Aufspielen der Firmware für Entwickler](https://asciinema.org/a/yduPdLWRVGB7ZifyKckmnVFFu.png)](https://asciinema.org/a/yduPdLWRVGB7ZifyKckmnVFFu) + Darüber hinaus gibt es * auf der [offiziellen Webseite](https://www.voss.earth/tonuino/) und im Repository noch einige nützliche Skripte, die noch nicht in das `Makefile` integriert sind * [Firmware-Alternativen](https://github.com/seisfeld/TonUINO), die je nach Planung ggf. weitere notwendige Features unterstützen From df323a5d831303c3444b56e2e3a01ae9b284ac60 Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Tue, 11 Feb 2020 16:37:58 +0100 Subject: [PATCH 36/40] allow overriding variables --- Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index c1a84a27..60580a28 100644 --- a/Makefile +++ b/Makefile @@ -6,11 +6,11 @@ # Config ## Arduino Nano (old bootloader) -MCU = arduino:avr:nano:cpu=atmega328old -BOARD = arduino:avr -SERIAL = /dev/cu.usbserial-1410 +MCU ?= arduino:avr:nano:cpu=atmega328old +BOARD ?= arduino:avr +SERIAL ?= /dev/cu.usbserial-1420 ## Main -SKETCH = Tonuino +SKETCH ?= Tonuino ## Helper OS = $(shell uname -s) .PHONY: help From 938076969fc6959dbb15051a4741dc466a4bb4db Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 11 Feb 2020 18:44:35 +0100 Subject: [PATCH 37/40] Video: Kurzanleitung zum Aufspielen der Firmware --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 6aa31055..7adee27a 100644 --- a/README.md +++ b/README.md @@ -113,6 +113,10 @@ Als einfacher Benutzer sollte die Programmierung so einfach gestaltet sein wie m 3. `Port` den Punkt `/dev/cu.wchusbserial???` auswählen (je nach Betriebssystem könnte es anders aussehen) 6. Nun kann die Software unter `Sketch` und dann `Hochladen` auf den Arduino hoch geladen werden. +Kurzanleitung zum Aufspielen der Firmware für Benutzer: + +[![Kurzanleitung zum Aufspielen der Firmware für Benutzer](https://j.gifs.com/3Q0rM4.gif)](https://youtu.be/OxXnBpHxEyY) + Darüber hinaus muss noch die SD-Karte vorbereitet werden: 1. Die Karte mit FAT32 formatieren. From ba07aa62fd7d13d85f48c80b2edc8765a916328b Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 9 Feb 2020 17:05:28 +0100 Subject: [PATCH 38/40] Pause playback when card is removed --- Tonuino.ino | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 82 insertions(+), 5 deletions(-) diff --git a/Tonuino.ino b/Tonuino.ino index ac359337..4d041656 100644 --- a/Tonuino.ino +++ b/Tonuino.ino @@ -20,6 +20,9 @@ // uncomment the below line to enable five button support //#define FIVEBUTTONS +// uncomment the below line to stop playback when card is removed +#define PAUSEONCARDREMOVAL + static const uint32_t cardCookie = 322417479; // DFPlayer Mini @@ -48,6 +51,9 @@ struct nfcTagObject { // uint8_t special2; }; +bool card_present = false; +bool card_present_prev = false; + // admin settings stored in eeprom struct adminSettings { uint32_t cookie; @@ -944,7 +950,28 @@ void playShortCut(uint8_t shortCut) { } void loop() { + int _rfid_error_counter = 0; + do { + +#ifdef PAUSEONCARDREMOVAL + // auf Lesefehler des RFID Moduls prüfen + _rfid_error_counter += 1; + if(_rfid_error_counter > 2){ + card_present = false; + } + + // Ist eine Karte aufgelegt? + byte bufferATQA[2]; + byte bufferSize = sizeof(bufferATQA); + MFRC522::StatusCode result = mfrc522.PICC_RequestA(bufferATQA, &bufferSize); + + if(result == mfrc522.STATUS_OK){ + _rfid_error_counter = 0; + card_present = true; + } +#endif + checkStandbyAtMillis(); mp3.loop(); @@ -1088,10 +1115,11 @@ void loop() { } #endif // Ende der Buttons - } while (!mfrc522.PICC_IsNewCardPresent()); +#ifndef PAUSEONCARDREMOVAL + } while (!mfrc522.PICC_IsNewCardPresent()); + // RFID Karte wurde aufgelegt - if (!mfrc522.PICC_ReadCardSerial()) return; @@ -1099,7 +1127,7 @@ void loop() { if (myCard.cookie == cardCookie && myCard.nfcFolderSettings.folder != 0 && myCard.nfcFolderSettings.mode != 0) { playFolder(); } - + // Neue Karte konfigurieren else if (myCard.cookie != cardCookie) { knownCard = false; @@ -1107,9 +1135,58 @@ void loop() { waitForTrackToFinish(); setupCard(); } + } + mfrc522.PICC_HaltA(); + mfrc522.PCD_StopCrypto1(); + +#endif +#ifdef PAUSEONCARDREMOVAL + // solange keine Karte aufgelegt oder heruntergenommen wird + } while ( !(!card_present && card_present_prev) && !(card_present && !card_present_prev) ); + + // RFID Karte wurde entfernt + if (!card_present && card_present_prev){ + card_present_prev = card_present; + // pausiere + if (activeModifier != NULL) + if (activeModifier->handlePause() == true) + return; + if (ignorePauseButton == false) + if (isPlaying()) { + mp3.pause(); + setstandbyTimer(); + } + else if (knownCard) { + mp3.start(); + disablestandbyTimer(); + } + ignorePauseButton = false; + return; + } + + // RFID Karte wurde aufgelegt + if (card_present && !card_present_prev){ + card_present_prev = card_present; + + if (!mfrc522.PICC_ReadCardSerial()) + return; + + if (readCard(&myCard) == true) { + if (myCard.cookie == cardCookie && myCard.nfcFolderSettings.folder != 0 && myCard.nfcFolderSettings.mode != 0) { + playFolder(); + } + + // Neue Karte konfigurieren + else if (myCard.cookie != cardCookie) { + knownCard = false; + mp3.playMp3FolderTrack(300); + waitForTrackToFinish(); + setupCard(); + } + } + mfrc522.PCD_StopCrypto1(); } - mfrc522.PICC_HaltA(); - mfrc522.PCD_StopCrypto1(); +#endif } void adminMenu(bool fromCard = false) { From d91f4a952ecb0ac9df4cca1ff191053f7599f88f Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Sun, 16 Feb 2020 09:38:33 +0100 Subject: [PATCH 39/40] added a few more links, added some lessons learned, fixed markdown validation issues, ... --- README.md | 55 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 7adee27a..503a5d75 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,32 @@ -[![GitHub Actions | AlexanderWillner/tonuino](https://github.com/AlexanderWillner/tonuino/workflows/building/badge.svg)](https://github.com/AlexanderWillner/tonuino/actions?workflow=building) [![license](https://img.shields.io/github/license/alexanderwillner/tonuino)](https://github.com/AlexanderWillner/TonUINO/blob/DEV/LICENSE) [![download](https://img.shields.io/github/downloads/AlexanderWillner/TonUINO/total)](https://github.com/AlexanderWillner/TonUINO/releases) - # TonUINO Die DIY Musikbox (nicht nur) für Kinder. +[![GitHub Actions | AlexanderWillner/tonuino](https://github.com/AlexanderWillner/tonuino/workflows/building/badge.svg)](https://github.com/AlexanderWillner/tonuino/actions?workflow=building) [![license](https://img.shields.io/github/license/alexanderwillner/tonuino)](https://github.com/AlexanderWillner/TonUINO/blob/DEV/LICENSE) [![download](https://img.shields.io/github/downloads/AlexanderWillner/TonUINO/total)](https://github.com/AlexanderWillner/TonUINO/releases) + - [TonUINO](#tonuino) - [English Readers (für unsere englischsprachige Leserschaft)](#english-readers-f%c3%bcr-unsere-englischsprachige-leserschaft) - [Zusammenfassung](#zusammenfassung) - [Drei Bausteine](#drei-bausteine) - [Mikrocontroller-Hardware](#mikrocontroller-hardware) - [Notwendige Grundausstattung (ca. 30 EUR)](#notwendige-grundausstattung-ca-30-eur) - - [Optionale erweiterte Ausstattung](#optionale-erweiterte-ausstattung) + - [Optionale erweiterte Hardwareausstattung](#optionale-erweiterte-hardwareausstattung) - [Systemnahe Programmierung](#systemnahe-programmierung) - [Für Benutzer](#f%c3%bcr-benutzer) - [Für Entwickler](#f%c3%bcr-entwickler) - [Gehäusebau](#geh%c3%a4usebau) - [Notwendige Grundausstattung](#notwendige-grundausstattung) - - [Optionale erweiterte Ausstattung](#optionale-erweiterte-ausstattung-1) + - [Optionale erweiterte Gehäuseausstattung](#optionale-erweiterte-geh%c3%a4useausstattung) ## English Readers (für unsere englischsprachige Leserschaft) -For various reasons, we've decided to write this guide in German only. However, you can copy the text on this web page and paste it at [DeepL](https://www.deepl.com/) to easily translate the whole documentation at once. +For various reasons, we've decided to write this guide in German only. However, you can copy the text from this web page and paste it to [DeepL](https://www.deepl.com/) to easily translate the whole documentation at once. ## Zusammenfassung Kinder zu beschenken ist nie einfach. Das Ziel des Projektes [TonUINO](https://www.voss.earth/tonuino/) von [Thorsten Voss](https://www.voss.earth/ueber-mich/) ist es, eine “Musikbox (nicht nur) für Kinder” selbst zu bauen. Es macht einen riesigen Spaß, die meisten Kinder sind begeistert und diese Seite soll der großartigen Community etwas wieder geben. Denn so gut die [Webseite](https://www.voss.earth/tonuino/), das [Forum](http://discourse.voss.earth/) und die [Videos](https://www.youtube.com/channel/UCeXF2J1Pz8b1plIne-jQy1A) auch sind, der Bau der ersten Box(en) wäre mit weniger Zeitaufwand möglich. -Insbesondere unterstützt diese Anleitung hier “Newbies” bei der Auswahl der Hardware, geht sequenzieller durch die notwendigen Schritte, beinhaltet Links zu den wichtigsten Informationsquellen und optimiert den Code für Softwareentwickler. Hoffentlich werden diese Anregungen hier irgendwann in die offizielle Dokumentation aufgenommen und machen diese Seite damit zukünftig überflüssig. Jede Art von [Pull Requests](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests), die die Dokumentation oder den Code gemeinsam verbessern, sind mehr als willkommen! +Insbesondere unterstützt diese Anleitung hier “Newbies” bei der Auswahl der Hardware, geht sequenzieller durch die notwendigen Schritte, beinhaltet Links zu den wichtigsten Informationsquellen und optimiert den Code für Softwareentwickler. Hoffentlich werden diese Anregungen hier irgendwann in die offizielle Dokumentation aufgenommen und machen diese Seite damit zukünftig überflüssig. Jede Art von [Pull Requests](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests) oder [Issues](https://github.com/alexanderwillner/tonuino/issues), die die Dokumentation oder den Code gemeinsam verbessern, sind mehr als willkommen! ## Drei Bausteine @@ -68,25 +68,25 @@ Die notwendigen Komponenten können über Reichelt, Conrad, Amazon, E-Bay oder A | (1)| [Arduino Nano](https://amzn.to/2mQNHaY) | Zum Ansteuern | Es können auch andere Arduino-Varianten gekauft werden | ca. 4 - 8 EUR / Stück | | (1) | [DFPlayer Mini](https://amzn.to/2K2JavA) | Zum Abspielen der Musik | Dieser Player ist recht empfindlich was die genaue Bespielung der SD-Karte angeht | ca. 3-6 EUR / Stück | | (1) | [RFID Kit RC522](http://amzn.to/2FnyHJj) | Zum Lesen und Beschreiben der NFC-Karten | | ca. 2-6 EUR / Stück | -| (4) | [RFID-Karten](https://amzn.to/2NXZQuL) | Zur Auswahl der Musik | müssen im 13,56 MHz Band funken | ca. 0,40 - 0,80 EUR / Stück | +| (4) | [RFID-Karten](https://amzn.to/2NXZQuL) | Zur Auswahl der Musik | müssen im 13,56 MHz Band funken | ca. 0,40 - 0,80 EUR / Stück | | 1 | [Passiver Lautsprecher](https://amzn.to/381ama6) | Zum Anhören der Musik | z.B. ein Regallautsprecher oder etwas kleineres | ca. 2-50 EUR / Stück | -| 1 | [MicroSD-Karte](http://amzn.to/2oXOxDw) | Zum Speichern der Musik | Maximal 32 GB | ca. 4-6 EUR / Stück | -| 3 | [Knöpfe](Knöpfe) | Zum starten/stoppen, lauter/leiser stellen, ... | Es gibt auch Varianten mit 5 Knöpfen. Knöpfe mit eingebauter LED haben weitere Vorteile. | ca. 0,50 EUR / Stück | -| 20 | [Kabel](https://amzn.to/2uJCVLf) | Zum Verbinden | Der Bedarf an Kabeln kann schnell nach oben gehen (siehe Erweiterungen unten) | ca. 0,05 EUR / Stück | -| 1 | [1K Resistor](https://amzn.to/2NicnqM) | zum X | Einzeln zu kaufen ggf. recht teuer | ca. 0,01 EUR / Stück | +| 1 | [MicroSD-Karte](http://amzn.to/2oXOxDw) | Zum Speichern der Musik | Maximal 32 GB | ca. 4-6 EUR / Stück | +| 3 | [Knöpfe](https://amzn.to/2mRnyZC) | Zum starten/stoppen, lauter/leiser stellen, ... | Es gibt auch Varianten mit 5 Knöpfen. Knöpfe mit eingebauter LED haben weitere Vorteile. | ca. 0,50 EUR / Stück | +| 20 | [Kabel](https://amzn.to/3bL6M74) | Zum Verbinden | Der Bedarf an Kabeln kann schnell nach oben gehen (siehe Erweiterungen unten) | ca. 0,05 EUR / Stück | +| 1 | [1K Resistor](https://amzn.to/3bH3rWA) | zum X | Einzeln zu kaufen ggf. recht teuer | ca. 0,01 EUR / Stück | -#### Optionale erweiterte Ausstattung +#### Optionale erweiterte Hardwareausstattung | Anzahl | Produkt | Beschreibung | Hinweis | Kosten | | --- | --- | --- | --- | --- | | 1 | [TonUINO-Platine](http://discourse.voss.earth/t/neue-platine-version-1-51/63) | Für weniger Kabelsalat. Enthält auch die o.g. Kabel und den Resistor. Wird auch in der o.g. YouTube-Anleitung genutzt. | Kann von Thorsten [per E-Mail](TonUINO@voss.earth) bestellt werden | ca. 10 EUR / Stück -| 1 | [Köpfhörer-Platine](http://discourse.voss.earth/t/kopfhoererbuchsenplatine/2463) | Zum Anschluss von Kopfhörern |Kann von Thorsten [per E-Mail](TonUINO@voss.earth) bestellt werden | ca. 7,50 EUR / Stück -| 1 | [Akku](https://amzn.to/35LX14a) | Zum Kabellosen Betrieb | Dazu gibt es einige [Diskussionen](http://discourse.voss.earth/c/stromversorgung/5) und Alternativen (z.B. Wemos Battery Shield). Gute Erfahrungen gibt es mit dem Hersteller RAVPower. Wichtige Eigenschaften: power pass trough, automatische Abschaltung. | ca. 15 EUR / Stück | -| 1 | [Micro-SD-Verlängerung](https://amzn.to/36MW50K) | Zum Austausch der SD-Karte von außen | Je nachdem wie das Gehäuse gebaut ist. Auch könnte eine externe USB-Buchse genutzt werden, [um MP3-Dateien aufzuspielen](http://discourse.voss.earth/t/daten-auf-sd-kopieren-ueber-usb-anschluss/2185/8). | ca. 3 EUR / Stück | -| 1 | [USB-Buchse](https://amzn.to/2uHgKoQ) | Zum Aufladen bei Akkubetrieb | [Kein einfaches Thema](http://discourse.voss.earth/t/micro-usb-buchse-fuer-das-gehaeuse/3280/14) und kann sowohl zum Aufladen als auch für ein [Firmware-Upgrade](http://discourse.voss.earth/t/benoetige-hilfe-bei-der-trennung-von-daten-und-strom-des-usb-kabels/975) oder zum [MP3-Aktualisieren](http://discourse.voss.earth/t/daten-auf-sd-kopieren-ueber-usb-anschluss/2185/8) gleichzeitig genutzt werden. | ca. 4-20 EUR / Stück | -| 1 | [Ein- und Ausschalter](https://amzn.to/30icuHZ) | Zum Strom sparen und Wiederbeleben bei Akkubetrieb | Ein Schalter mit Lichtindikator erscheint sinnvoll [für eine gewisse Grundlast](http://discourse.voss.earth/t/grundlast-erhoehen-um-powerbank-nicht-autom-abzuschalten/1899/9) | ca. 0,50-20 EUR / Stück| -| Mehrere | [Etiketten](https://amzn.to/2R0eHSL) | Zum Bekleben der NFC-Karten, denn diese müssen irgendwie auseinandergehalten werden | Es gibt ganz viele weitere Varianten zum Bedrucken. Ein einfacher Edding reicht jedoch auch.| ca. 0,80 EUR / Stück| -| 1 | [Bluetooh-Sender](https://amzn.to/3a5hzrx) | Zum Anschluss von kabellosen Kopfhörern | Details zum Anschluss im Forum [hier](http://discourse.voss.earth/t/hoerbuch-fuer-meine-frau/4344/3) oder [hier](http://discourse.voss.earth/t/erweiterung-anschluss-bluetooth-kopfhoerer-vorerst-theorie/3556/14). | ca. 19 EUR / Stück | +| 1 | [Köpfhörer-Platine](http://discourse.voss.earth/t/kopfhoererbuchsenplatine/2463) | Zum Anschluss von Kopfhörern |Kann von Thorsten [per E-Mail](TonUINO@voss.earth) bestellt werden. Alternativ [der klassische Weg](https://discourse.voss.earth/t/kopfhoereranschluss-moeglich/96/84). | ca. 7,50 EUR / Stück +| 1 | [Akku](https://amzn.to/2Stuvki) | Zum Kabellosen Betrieb | Dazu gibt es einige [Diskussionen](http://discourse.voss.earth/c/stromversorgung/5) und Alternativen (z.B. Wemos Battery Shield). Gute Erfahrungen gibt es mit dem Hersteller RAVPower. Wichtige Eigenschaften: power pass trough, automatische Abschaltung. | ca. 15 EUR / Stück | +| 1 | [Micro-SD-Verlängerung](https://amzn.to/2Svbu0N) | Zum Austausch der SD-Karte von außen | Je nachdem wie das Gehäuse gebaut ist. Auch könnte eine externe USB-Buchse genutzt werden, [um MP3-Dateien aufzuspielen](http://discourse.voss.earth/t/daten-auf-sd-kopieren-ueber-usb-anschluss/2185/8). Das Kabel kann allerdings unter Umständen die [Autoabschaltung verhindern](https://discourse.voss.earth/t/sd-verlaengerungskabel-verhindert-poweroff/1780/4). | ca. 3 EUR / Stück | +| 1 | [USB-Buchse](https://amzn.to/37yji6e) | Zum Aufladen bei Akkubetrieb | [Kein einfaches Thema](http://discourse.voss.earth/t/micro-usb-buchse-fuer-das-gehaeuse/3280/14) und kann sowohl zum Aufladen als auch für ein [Firmware-Upgrade](http://discourse.voss.earth/t/benoetige-hilfe-bei-der-trennung-von-daten-und-strom-des-usb-kabels/975) oder zum [MP3-Aktualisieren](http://discourse.voss.earth/t/daten-auf-sd-kopieren-ueber-usb-anschluss/2185/8) gleichzeitig genutzt werden. | ca. 4-20 EUR / Stück | +| 1 | [Ein- und Ausschalter](https://amzn.to/37yiVsm) | Zum Strom sparen und Wiederbeleben bei Akkubetrieb | Ein Schalter mit Lichtindikator erscheint sinnvoll [für eine gewisse Grundlast](http://discourse.voss.earth/t/grundlast-erhoehen-um-powerbank-nicht-autom-abzuschalten/1899/9) | ca. 0,50-20 EUR / Stück| +| Mehrere | [Etiketten](https://amzn.to/2R0eHSL) | Zum Bekleben der NFC-Karten, denn diese müssen irgendwie auseinandergehalten werden | Es gibt ganz viele weitere Varianten zum Bedrucken. Am Ende sollte ein [DIN EN71-3 Klarlack](https://amzn.to/38t4xmM) aufgetragen werden. Ein einfacher Edding zum Beschriften reicht jedoch auch.| ca. 0,80 EUR / Stück| +| 1 | [Bluetooh-Sender](https://amzn.to/2SvbcqJ) | Zum Anschluss von kabellosen Kopfhörern | Details zum Anschluss im Forum [hier](http://discourse.voss.earth/t/hoerbuch-fuer-meine-frau/4344/3) oder [hier](http://discourse.voss.earth/t/erweiterung-anschluss-bluetooth-kopfhoerer-vorerst-theorie/3556/14). | ca. 19 EUR / Stück | Es gibt zahllose weitere Ergänzungen, wie [LED-Stripes](http://discourse.voss.earth/t/integration-led-strip-und-ring-mit-neopixel/2760) etc. pp. Positive Erfahrungen sollten gerne in diese Liste hier integriert werden. @@ -98,7 +98,7 @@ Es gibt zwar, wie bei jeder Software, ein paar kleine Software-Fehler, die jedoc #### Für Benutzer -Als einfacher Benutzer sollte die Programmierung so einfach gestaltet sein wie möglich. Im Folgenden die notwendigen Schritte. Eine [Community Software FAQ](https://discourse.voss.earth/t/faq-kategorie-software/924) gibt weitere Hilfestellungen. +Als einfacher Benutzer sollte die Programmierung so einfach gestaltet sein wie möglich. Im Folgenden die notwendigen Schritte. Eine [Community Software FAQ](https://discourse.voss.earth/t/faq-kategorie-software/924) gibt weitere Hilfestellungen. Unten gibt es einen Ablauf als Video. 1. Download [der aktuellen Firmware](https://github.com/AlexanderWillner/TonUINO/releases/latest/download/TonUINO.zip). 2. Die Datei `TonUINO.zip` landet dann im `Download`-Verzeichnis und muss mit einem Doppelklick entpackt werden. Es sollte dann ein Verzeichnis `TonUINO` existieren, in der sich die Datei `Tonuino.ino` befindet. @@ -113,7 +113,7 @@ Als einfacher Benutzer sollte die Programmierung so einfach gestaltet sein wie m 3. `Port` den Punkt `/dev/cu.wchusbserial???` auswählen (je nach Betriebssystem könnte es anders aussehen) 6. Nun kann die Software unter `Sketch` und dann `Hochladen` auf den Arduino hoch geladen werden. -Kurzanleitung zum Aufspielen der Firmware für Benutzer: +Kurzanleitung zum Aufspielen der Firmware für Benutzer (auf das Video klicken): [![Kurzanleitung zum Aufspielen der Firmware für Benutzer](https://j.gifs.com/3Q0rM4.gif)](https://youtu.be/OxXnBpHxEyY) @@ -151,11 +151,12 @@ Kurzanleitung zum Aufspielen der Firmware für Entwickler: [![Kurzanleitung zum Aufspielen der Firmware für Entwickler](https://asciinema.org/a/yduPdLWRVGB7ZifyKckmnVFFu.png)](https://asciinema.org/a/yduPdLWRVGB7ZifyKckmnVFFu) -Darüber hinaus gibt es -* auf der [offiziellen Webseite](https://www.voss.earth/tonuino/) und im Repository noch einige nützliche Skripte, die noch nicht in das `Makefile` integriert sind -* [Firmware-Alternativen](https://github.com/seisfeld/TonUINO), die je nach Planung ggf. weitere notwendige Features unterstützen -* die [Fritzing GUI](https://fritzing.org/), um kompliziertere Aufbauten zunächst am Rechner zu visualisieren und zu planen (unter macOS mit [Homebrew](http://brew.sh) einfach über `brew cask install fritzing`) -* ein [change log](CHANGELOG.md), die Änderungen der Software dokumentiert +Darüber hinaus gibt es + +- auf der [offiziellen Webseite](https://www.voss.earth/tonuino/) und im Repository noch einige nützliche Skripte, die noch nicht in das `Makefile` integriert sind +- [Firmware-Alternativen](https://github.com/seisfeld/TonUINO), die je nach Planung ggf. weitere notwendige Features unterstützen +- die [Fritzing GUI](https://fritzing.org/), um kompliziertere Aufbauten zunächst am Rechner zu visualisieren und zu planen (unter macOS mit [Homebrew](http://brew.sh) einfach über `brew cask install fritzing`) +- ein [change log](CHANGELOG.md), die Änderungen der Software dokumentiert ### Gehäusebau @@ -165,6 +166,6 @@ Man sollte kreativ werden. Nach dem Zusammenbau der Hardware, dem Aufspielen der Eine stabile Pappschachtel (z.B. die Verpackung des Mobiltelefons oder eine Taschentuchbox) zusammen mit einem günstigen Lautsprecher oder eine fertige Lautsprecherbox aus Holz. Eine Heißklebepistole oder doppelseitiges Klebeband können zum besten Freund werden. -#### Optionale erweiterte Ausstattung +#### Optionale erweiterte Gehäuseausstattung Es gibt erstaunliche Arbeiten, die z.B. in der [Gallerie](http://discourse.voss.earth/t/tonuino-gehaeuse-galerie/786/27) aufgeführt sind, und hier kommt die eigentliche Kreativität zum Einsatz ([Stofftiere](http://discourse.voss.earth/t/die-musikeule-ein-stofftier-mit-kick/2541), [Schatzkisten](http://discourse.voss.earth/t/vorstellung-musik-schatzkiste/2641), [LED-bestückte Jukeboxen](http://discourse.voss.earth/t/vorstellung-marabox-bambus-3d-druck-neopixel-ring/4608/22), ...). Hier kann mit einem 3D-Drucker kann das eigene Projekt natürlich noch auf eine ganz andere Ebene gehoben werden. From 5d6f1b4700430a75040b8f9bb35746e0e62d6922 Mon Sep 17 00:00:00 2001 From: Alexander Willner Date: Sun, 16 Feb 2020 09:41:39 +0100 Subject: [PATCH 40/40] added 'make feedback' --- Makefile | 20 ++++++++++++-------- README.md | 17 +++++++++-------- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/Makefile b/Makefile index 60580a28..509cfc89 100644 --- a/Makefile +++ b/Makefile @@ -22,14 +22,15 @@ info: $(info Configured to use MCU "$(MCU)" attached to port "$(SERIAL)".) $(info ) $(info Available commands:) - $(info - help : get support from the community) - $(info - install : installation of required binaries (arduino-cli)) - $(info - init : initialize environment (arduino-cli)) - $(info - compile : create binary) - $(info - upload : store binary on board flash) - $(info - find : get information about the pluged-in board) - $(info - test : run some basic tests on the code) - $(info - clean : delete temporary files) + $(info - help : get support from the community) + $(info - install : installation of required binaries (arduino-cli)) + $(info - init : initialize environment (arduino-cli)) + $(info - compile : create binary) + $(info - upload : store binary on board flash) + $(info - find : get information about the pluged-in board) + $(info - test : run some basic tests on the code) + $(info - clean : delete temporary files) + $(info - feedback : provide feedback and report issues) @true help: @@ -91,3 +92,6 @@ check: *.ino clean: @rm -rf "$(SKETCH)" @rm -rf ".pio/build/" + +feedback: + @python -m webbrowser "https://github.com/alexanderwillner/tonuino/issues" \ No newline at end of file diff --git a/README.md b/README.md index 503a5d75..0ccc177e 100644 --- a/README.md +++ b/README.md @@ -137,14 +137,15 @@ TonUINO Makefile Configured to use MCU "arduino:avr:nano:cpu=atmega328old" attached to port "/dev/cu.usbserial-1410". Available commands: -- help : get support from the community -- install : installation of required binaries (arduino-cli) -- init : initialize environment (arduino-cli) -- compile : create binary -- upload : store binary on board flash -- find : get information about the pluged-in board -- test : run some basic tests on the code -- clean : delete temporary files +- help : get support from the community +- install : installation of required binaries (arduino-cli) +- init : initialize environment (arduino-cli) +- compile : create binary +- upload : store binary on board flash +- find : get information about the pluged-in board +- test : run some basic tests on the code +- clean : delete temporary files +- feedback : provide feedback and report issues ``` Kurzanleitung zum Aufspielen der Firmware für Entwickler: