forked from hacknology/website
Merge #31 NodeSP2 added. Minor formatting and (re-)moved webm
parent
8faef45da4
commit
ebc0b09bb1
After Width: | Height: | Size: 410 KiB |
After Width: | Height: | Size: 222 KiB |
After Width: | Height: | Size: 57 KiB |
After Width: | Height: | Size: 49 KiB |
After Width: | Height: | Size: 383 KiB |
@ -0,0 +1,119 @@
|
||||
---
|
||||
|
||||
title: NodeSP Part II (Digital)
|
||||
author: kaqu
|
||||
status: Aktiv
|
||||
difficulty: geht so ...
|
||||
time: ~1h
|
||||
date: 2020-08-01
|
||||
image: /projekt/2020/nodesp2/NodeSP2_Overview.jpg
|
||||
keywords: Odroid-Go,ESP32,FFT,Assembler,S32C1I,Semaphore
|
||||
---
|
||||
|
||||
## Motivation
|
||||
Für das Verständnis dieses Eintrags sollte man unbedingt diesen hier
|
||||
gelesen haben:
|
||||
https://www.hacknology.de/projekt/2020/nodesp/
|
||||
|
||||
Um die Schwächen der ersten Implementierung zu beseitigen, sollen ein
|
||||
I2S-Mikrofon und DMA-Transfer genutzt werden.
|
||||
|
||||
{{<fluid_img alt="Showtime" src="/projekt/2020/nodesp2/NodeSP2_Overview.jpg" >}}
|
||||
|
||||
|
||||
## 1. Versuch
|
||||
Zunächst habe ich mir das I2S-Mikrofon von Adafruit besorgt (SPH0645
|
||||
auf Breakout-Board). Außerdem habe ich zunächst noch im alten Kontext
|
||||
'NodeMCU' gearbeitet. Nach längerem rumprobieren ohne Erfolg (inkl.
|
||||
fast aller im Internet auffindbarer Timing-Tricks), gab ich das Projekt
|
||||
zunächst wieder auf. Auch mit dem Oszi konnte ich das eigentliche
|
||||
Problem nicht identifizieren?!
|
||||
|
||||
<img width="320" height="240" alt="Oszi Timing 1" src="/projekt/2020/nodesp2/NodeSP2_Oszi1.png">
|
||||
|
||||
<img width="320" height="240" alt="Oszi Timing 2" src="/projekt/2020/nodesp2/NodeSP2_Oszi2.png">
|
||||
|
||||
Immer wieder war ich bei meinen Recherchen auch auf
|
||||
Hinweise gestoßen, wonach speziell dieses Mikrofon an der
|
||||
ESP32-I2S-Schnittstelle Probleme bereite, mit dem INMP441 jedoch eine
|
||||
Lösung bereit stünde. Ich habe mir dann diesen Typ schließlich
|
||||
ebenfalls besorgt.
|
||||
|
||||
## 2. Versuch
|
||||
Nachdem ich zwischendurch mal was Lustigeres eingeschoben hatte (
|
||||
https://www.hacknology.de/projekt/2020/pimpedwebcam/ ), habe ich mich
|
||||
schließlich an die Fortsetzung meiner Versuche gemacht. Zufällig hatte
|
||||
ich mir im Frühjahr auch ein Odroid-Go besorgt. Dies sollte die Basis
|
||||
meiner weiteren Versuche bilden.
|
||||
|
||||
## Odroid-Go
|
||||
Das Odroid-Go ist ein Konsolen-Emulator auf ESP32-Basis (siehe
|
||||
https://wiki.odroid.com/odroid_go/odroid_go );
|
||||
Zu dieser Plattform finden sich nützliche Programmierhinweise z.Bsp. hier
|
||||
http://cool-web.de/esp8266-esp32/odroid-go-esp32-mit-arduino-programmieren-gpio-pinout-und-library-funktionen.htm
|
||||
. Mit diesen Informationen bewaffnet, sollte doch was gehen?
|
||||
|
||||
## Aufbau
|
||||
Das MEMS-Mikrofon (INMP441) habe ich leider verkehrt herum mit seinen
|
||||
Steckerleisten versehen (... funktioniert trotzdem ;-) .
|
||||
|
||||
{{<fluid_img alt="INMP441" src="/projekt/2020/nodesp2/NodeSP2_INMP441.jpg" >}}
|
||||
|
||||
Pin 1 auf der Steckerleiste am Odroid-Go ist auf der Rückseite gekennzeichnet.
|
||||
Die Verbindungsdrähte habe ich wie folgt aufgelegt:
|
||||
|
||||
| Odroid-Go.| Aderfarbe | INMP441 |
|
||||
|:----------|:---------:|--------:|
|
||||
| *1/GND* | *sw* | *GND* |
|
||||
| *3/GPIO12*| *ws* | *SCK* |
|
||||
| *4/GPIO15*| *gr* | *WS* |
|
||||
| *5/GPIO4* | *vt* | *SD* |
|
||||
|*6/VCC(3,3V)*| *ge* | *VDD* |
|
||||
|
||||
|
||||
{{<fluid_img alt="Connections" src="/projekt/2020/nodesp2/NodeSP2_Connections.jpg" >}}
|
||||
|
||||
## Programmierung
|
||||
Die Programmierung muß leider ohne Debugger erfolgen. Außerdem wird das Programm
|
||||
in eine 'Firmware'-Datei konvertiert - und nicht direkt aus VSC geladen.
|
||||
Hierbei wird ein Bild für die Auswahl im Start-Programm hinzugefügt.
|
||||
Das Ergebnis wird unter odroid/firmware/NodeSP2.fw
|
||||
auf der vorbereiteten Micro-SD-Speicherkarte abgelegt.
|
||||
(alle Anleitungen hierzu unter https://wiki.odroid.com/odroid_go/odroid_go ).
|
||||
Wenn man jetzt beim Einschalten des Odroid-Go die Taste **B** gedrückt hält, wird
|
||||
das Start-Programm aktiviert. Hier kann mittels der Odroid-Funktionstasten
|
||||
(Steuerkreuz für rauf & runter, Taste **A** zur Auswahl) das gewünschte Programm
|
||||
(hier: NodeSP2) ausgewählt werden zwecks flashen (von externer Speicherkarte
|
||||
auf internen Speicher).
|
||||
Ein entsprechendes Script (ggf. an lokale Verhältnisse anpassen!) liegt mit den
|
||||
Sourcen auf https://git.hacknology.de/projekte/NodeSP2 .
|
||||
|
||||
Das Programm aktiviert die I2S-Schnittstelle, weist die passenden ESP32-I/O-Pins zu
|
||||
und startet eine im Hintergrund laufende Datensammel-Task. Diese füllt (ggf.)
|
||||
wechselweise zwei Ergebnispuffer. Das Auslesen erfolgt in der Standard-Arduino Task
|
||||
(loop()!) in der auch die Darstellung der Daten auf dem Display und die Tastenabfrage
|
||||
durchgeführt werden. Folgende Tasten sind mit Funktionen belegt:
|
||||
**Steuerkreuz** Rauf bzw. Runter ermöglichen das Verändern der Dämpfung ('Empfindlichkeit').
|
||||
**Start** Führt eine Geräuschunterdrückungsmessung durch, die anschließend angewandt wird
|
||||
**Volume** Schaltet die Tastenabfrage ab (falls der Lautsprecher aktiv ist, knackt es dort
|
||||
dann weniger ...). Empfehlung: Lautsprecher ausstecken!
|
||||
|
||||
Da im Programm auch zwei boolsche Variablen zwischen beiden Tasks geteilt werden, d.h.
|
||||
beide haben - unter bestimmten Umständen - Schreibberechtigung, habe ich noch eine
|
||||
einfache (inlined!) Semaphorenlogik hinzugefügt ... die hier eigentlich völlig
|
||||
überflüssig ist, jedoch zeigt wie der ESP32 atomare Operationen ermöglicht (S32C1I).
|
||||
|
||||
## Showtime!
|
||||
|
||||
Zum Schluß noch ein kleines Demo:
|
||||
|
||||
|
||||
<video width="640" height="480" controls>
|
||||
<source src="//media.hacknology.de/images/NodeSP2/NodeSP2.webm" type="video/webm">
|
||||
Your browser does not support the video tag.
|
||||
</video>
|
||||
|
||||
## Was bleibt zu tun?
|
||||
Man könnte einen steckbaren Aufsatz für das Odroid-Go als Mikrofonhalterung mit FreeCAD
|
||||
konstruieren für den 3D-Drucker (oder gibt's vielleicht schon?) ...
|
||||
|
Loading…
Reference in new issue