From 4e66481a771c7509d9c79c597d7d2a022144def0 Mon Sep 17 00:00:00 2001 From: Joscha Ledermann Date: Tue, 1 Sep 2026 14:48:01 +0200 Subject: [PATCH 01/11] Initial commit --- docs/hardware/wifi.mdx | 47 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/docs/hardware/wifi.mdx b/docs/hardware/wifi.mdx index 6aef3e45..20e5cd9c 100644 --- a/docs/hardware/wifi.mdx +++ b/docs/hardware/wifi.mdx @@ -9,6 +9,8 @@ hide_title: false import wifiModul from '@site/static/img/mcus2/wifi-modul-s2.png' import AlertBox from '@site/src/components/AlertBox/AlertBox' import ImageWithText from '@site/src/components/ImageWithText/ImageWithText' +import { useBoardStore } from '@site/src/lib/stores/store' +import CodeBlock from '@theme/CodeBlock' # WiFi-Modul @@ -64,6 +66,51 @@ Mit dem `Initialisiere WLAN Access Point`-Block kann deine senseBox ein WLAN-Net ![](/img/blockly-bilder/web-wifi/blockly-Web-Wifi-2.svg) +{useBoardStore((state) => (state.board === 'MCU-S2' || state.board === ':edu S2') && ( +<> +

Programmierung (CircuitPython)

+ +

Um den Sensor mit CircuitPython zu programmieren, muss die senseBox MCU-S2 zunächst mit CircuitPython geflasht werden. Eine Anleitung dazu findest du hier.

+ +

Software Bibliothek

+ +

Lade dir die SCD30 CircuitPython Bibliothek herunter. Entpacke die .zip Datei und kopiere die adafruit_scd30.mpy Datei aus dem lib Ordner in den lib Ordner deiner senseBox (CIRCUITPY Laufwerk).

+ +

Code

+ +

Mit dem CircuitPython Editor deiner Wahl kannst du nun den Sensor programmieren und seine Werte auslesen. Dieser Code gibt die CO2-Konzentration, Temperatur und Luftfeuchtigkeit in der Konsole aus:

+ + +{`import time +import board +import busio +import digitalio +import adafruit_scd30 + +io_enable_pin = digitalio.DigitalInOut(board.IO_POWER) +io_enable_pin.direction = digitalio.Direction.OUTPUT +io_enable_pin.value = True + +time.sleep(0.5) + +i2c = busio.I2C(board.SCL, board.SDA, frequency=50000) +scd = adafruit_scd30.SCD30(i2c) + +while True: + if scd.data_available: + print("Data Available!") + print("CO2:", scd.CO2, "PPM") + print("Temperature:", scd.temperature, "degrees C") + print("Humidity:", scd.relative_humidity, "%%rH") + print("") + print("Waiting for new data...") + print("") + + time.sleep(0.5)`} + + +))} + ## Projekte - #### [Kommunikation zwischen senseBoxen mit ESP-NOW](https://sensebox.de/projects/de/2024-03-24-esp-now) From ec4d0bbd6780255d1947f64acac792a9032b9246 Mon Sep 17 00:00:00 2001 From: Joscha Ledermann Date: Tue, 1 Sep 2026 15:16:42 +0200 Subject: [PATCH 02/11] wifi python --- docs/hardware/wifi.mdx | 49 ++++++++++++------------------------------ 1 file changed, 14 insertions(+), 35 deletions(-) diff --git a/docs/hardware/wifi.mdx b/docs/hardware/wifi.mdx index 20e5cd9c..d018d72c 100644 --- a/docs/hardware/wifi.mdx +++ b/docs/hardware/wifi.mdx @@ -70,43 +70,22 @@ Mit dem `Initialisiere WLAN Access Point`-Block kann deine senseBox ein WLAN-Net <>

Programmierung (CircuitPython)

-

Um den Sensor mit CircuitPython zu programmieren, muss die senseBox MCU-S2 zunächst mit CircuitPython geflasht werden. Eine Anleitung dazu findest du hier.

- -

Software Bibliothek

- -

Lade dir die SCD30 CircuitPython Bibliothek herunter. Entpacke die .zip Datei und kopiere die adafruit_scd30.mpy Datei aus dem lib Ordner in den lib Ordner deiner senseBox (CIRCUITPY Laufwerk).

- -

Code

- -

Mit dem CircuitPython Editor deiner Wahl kannst du nun den Sensor programmieren und seine Werte auslesen. Dieser Code gibt die CO2-Konzentration, Temperatur und Luftfeuchtigkeit in der Konsole aus:

+

Mit dem CircuitPython Editor deiner Wahl kannst du deine senseBox mit einem WLAN-Netzwerk verbinden. Trage dazu in den Variablen `CIRCUITPY_WIFI_SSID` und `CIRCUITPY_WIFI_PASSWORD` den Namen deines WLANs und das zugehörige Passwort ein. Anschließend wird die WLAN-Verbindung hergestellt und der Verbindungsstatus in der Konsole ausgegeben.

-{`import time -import board -import busio -import digitalio -import adafruit_scd30 - -io_enable_pin = digitalio.DigitalInOut(board.IO_POWER) -io_enable_pin.direction = digitalio.Direction.OUTPUT -io_enable_pin.value = True - -time.sleep(0.5) - -i2c = busio.I2C(board.SCL, board.SDA, frequency=50000) -scd = adafruit_scd30.SCD30(i2c) - -while True: - if scd.data_available: - print("Data Available!") - print("CO2:", scd.CO2, "PPM") - print("Temperature:", scd.temperature, "degrees C") - print("Humidity:", scd.relative_humidity, "%%rH") - print("") - print("Waiting for new data...") - print("") - - time.sleep(0.5)`} +{`import wifi + +# WLAN Zugangsdaten +CIRCUITPY_WIFI_SSID = "SSID" +CIRCUITPY_WIFI_PASSWORD = "Password" + +# Verbindung zum WiFi herstellen +print(f"Connecting to {CIRCUITPY_WIFI_SSID}") +wifi.radio.connect( + CIRCUITPY_WIFI_SSID, + CIRCUITPY_WIFI_PASSWORD +) +print(f"Connected!")`} ))} From b6c4e24e5d55d1e3c7e9899e2f4bb0c4c290d2ef Mon Sep 17 00:00:00 2001 From: Joscha Ledermann Date: Wed, 2 Sep 2026 11:39:05 +0200 Subject: [PATCH 03/11] more sensors added --- .../luftdruck-temperatur/circuitpy-dps310.py | 15 ++++++++++++ .../sensors/mpu6050/circuitpy-mpu6050.py | 17 +++++++++++++ .../circuitoy-hdc1080.py | 24 +++++++++++++++++++ docs/wifi/circuitpy-wifi.py | 13 ++++++++++ 4 files changed, 69 insertions(+) create mode 100644 docs/hardware/sensors/luftdruck-temperatur/circuitpy-dps310.py create mode 100644 docs/hardware/sensors/mpu6050/circuitpy-mpu6050.py create mode 100644 docs/hardware/sensors/temperatur-luftfeuchte/circuitoy-hdc1080.py create mode 100644 docs/wifi/circuitpy-wifi.py diff --git a/docs/hardware/sensors/luftdruck-temperatur/circuitpy-dps310.py b/docs/hardware/sensors/luftdruck-temperatur/circuitpy-dps310.py new file mode 100644 index 00000000..812f2c2c --- /dev/null +++ b/docs/hardware/sensors/luftdruck-temperatur/circuitpy-dps310.py @@ -0,0 +1,15 @@ +import time +import board +import digitalio +from adafruit_dps310.basic import DPS310 +# IO Enable +io_enable_pin = digitalio.DigitalInOut(board.IO_POWER) +io_enable_pin.direction = digitalio.Direction.OUTPUT +io_enable_pin.value = False +i2c = board.I2C() +dps310 = DPS310(i2c, 0x76) +while True: + print("Temperature = %.2f *C" % dps310.temperature) + print("Pressure = %.2f hPa" % dps310.pressure) + print("") + time.sleep(1.0) \ No newline at end of file diff --git a/docs/hardware/sensors/mpu6050/circuitpy-mpu6050.py b/docs/hardware/sensors/mpu6050/circuitpy-mpu6050.py new file mode 100644 index 00000000..c4784df2 --- /dev/null +++ b/docs/hardware/sensors/mpu6050/circuitpy-mpu6050.py @@ -0,0 +1,17 @@ +import time +import busio +import microcontroller +import adafruit_mpu6050 + +scl = microcontroller.pin.GPIO42 +sda = microcontroller.pin.GPIO45 + +i2c = busio.I2C(scl, sda) +mpu = adafruit_mpu6050.MPU6050(i2c) + +while True: + print("Acceleration: X:%.2f, Y: %.2f, Z: %.2f m/s^2"%(mpu.acceleration)) + print("Gyro X:%.2f, Y: %.2f, Z: %.2f degrees/s"%(mpu.gyro)) + print("Temperature: %.2f C"%mpu.temperature) + print("") + time.sleep(1) \ No newline at end of file diff --git a/docs/hardware/sensors/temperatur-luftfeuchte/circuitoy-hdc1080.py b/docs/hardware/sensors/temperatur-luftfeuchte/circuitoy-hdc1080.py new file mode 100644 index 00000000..e1c78c7b --- /dev/null +++ b/docs/hardware/sensors/temperatur-luftfeuchte/circuitoy-hdc1080.py @@ -0,0 +1,24 @@ +import time +import board +import digitalio +from hdc1080 import HDC1080 + +# IO Enable Pin (only needed for senseBox MCU-S2) +io_enable_pin = digitalio.DigitalInOut(board.IO_POWER) +io_enable_pin.direction = digitalio.Direction.OUTPUT +io_enable_pin.value = False + +# Initialize I2C bus +i2c = board.I2C() + +# Initialize HDC1080 sensor +sensor = HDC1080(i2c) + +while True: + temperature = sensor.temperature + humidity = sensor.humidity + + print("Temperature: {:.2f} °C".format(temperature)) + print("Humidity: {:.2f} %".format(humidity)) + + time.sleep(2) # Wait for 2 seconds before next reading \ No newline at end of file diff --git a/docs/wifi/circuitpy-wifi.py b/docs/wifi/circuitpy-wifi.py new file mode 100644 index 00000000..25af07a6 --- /dev/null +++ b/docs/wifi/circuitpy-wifi.py @@ -0,0 +1,13 @@ +import wifi + +# WLAN Zugangsdaten +CIRCUITPY_WIFI_SSID = "SSID" +CIRCUITPY_WIFI_PASSWORD = "Password" + +# Verbindung zum WiFi herstellen +print(f"Connecting to {CIRCUITPY_WIFI_SSID}") +wifi.radio.connect( + CIRCUITPY_WIFI_SSID, + CIRCUITPY_WIFI_PASSWORD +) +print(f"Connected!") \ No newline at end of file From 9ad2a97a90ddc1cc48bd9c12d706b49aedb7753d Mon Sep 17 00:00:00 2001 From: Joscha Ledermann Date: Wed, 2 Sep 2026 13:32:18 +0200 Subject: [PATCH 04/11] more sensors added --- .../hardware/sensors/tof/arduino-vl53lxcx.ino | 50 +++++++++++++++++++ .../sensors/tof/circuitpy-vl53lxcx.py | 38 ++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 docs/hardware/sensors/tof/arduino-vl53lxcx.ino create mode 100644 docs/hardware/sensors/tof/circuitpy-vl53lxcx.py diff --git a/docs/hardware/sensors/tof/arduino-vl53lxcx.ino b/docs/hardware/sensors/tof/arduino-vl53lxcx.ino new file mode 100644 index 00000000..21c65793 --- /dev/null +++ b/docs/hardware/sensors/tof/arduino-vl53lxcx.ino @@ -0,0 +1,50 @@ +#include +#include + +VL53L8CX sensor_vl53l8cx(&Wire, -1, -1); +float oldVl53l8cxMin = -1.0; + +// Function to get the minimum distance measured by the ToF sensor (VL53L8CX) +// Funktion um die minimale Distanz gemessen durch den ToF Sensor (VL53L8CX) zu erhalten +float getVl53l8cxMin() { + VL53L8CX_ResultsData Results; + uint8_t NewDataReady = 0; + uint8_t status; + + status = sensor_vl53l8cx.check_data_ready(&NewDataReady); + + if ((!status) && (NewDataReady != 0)) { + sensor_vl53l8cx.get_ranging_data(&Results); + float min = 10000.0; + for(int i = 0; i < VL53L8CX_RESOLUTION_8X8*VL53L8CX_NB_TARGET_PER_ZONE; i++) { + if((&Results)->target_status[i]!=255){ + float distance = (&Results)->distance_mm[i]; + if(min > distance) { + min = distance; + } + } + } + oldVl53l8cxMin = (min==10000.0) ? 0.0 : min; + } + return oldVl53l8cxMin; + } + + + +void setup(){ + Serial.begin(9600); + Wire.begin(); + Wire.setClock(1000000); //Sensor has max I2C freq of 1MHz + sensor_vl53l8cx.set_i2c_address(0x51); // need to change address first, because default address is shared with LTR329 + sensor_vl53l8cx.begin(); + sensor_vl53l8cx.init(); + sensor_vl53l8cx.set_ranging_frequency_hz(30); + sensor_vl53l8cx.set_resolution(VL53L8CX_RESOLUTION_8X8); + sensor_vl53l8cx.start_ranging(); + +} + +void loop(){ + Serial.println(getVl53l8cxMin()); + delay(10); // delay, to keep serial connection from overflowing +} diff --git a/docs/hardware/sensors/tof/circuitpy-vl53lxcx.py b/docs/hardware/sensors/tof/circuitpy-vl53lxcx.py new file mode 100644 index 00000000..0eb9de26 --- /dev/null +++ b/docs/hardware/sensors/tof/circuitpy-vl53lxcx.py @@ -0,0 +1,38 @@ +from vl53lxcx import ( + DATA_DISTANCE_MM, + DATA_TARGET_STATUS, + RESOLUTION_8X8, + STATUS_VALID, + VL53L8CX, +) +import busio +import board +from digitalio import DigitalInOut, Direction + +i2c = busio.I2C(board.SCL, board.SDA, frequency=1_000_000) +lpn = DigitalInOut(board.D3) +lpn.direction = Direction.OUTPUT +lpn.value = True + +tof = VL53L8CX(i2c, lpn=lpn) + +def main(): + tof.reset() + if not tof.is_alive(): + raise ValueError("VL53L8CX not detected") + + tof.init() + tof.resolution = RESOLUTION_8X8 + grid = 7 + tof.ranging_freq = 2 + + tof.start_ranging({DATA_DISTANCE_MM, DATA_TARGET_STATUS}) + + while True: + if tof.check_data_ready(): + results = tof.get_ranging_data() + distance = results.distance_mm + status = results.target_status + # enumerate(distance) ... + +main() \ No newline at end of file From 7b4fecbe512ca3dfd63d715d3c6bc2ba58568795 Mon Sep 17 00:00:00 2001 From: Joscha Ledermann Date: Wed, 2 Sep 2026 16:06:29 +0200 Subject: [PATCH 05/11] added dps310, bme680, rgb-led and led-matrix --- .../accessoires/display/arduino-display.ino | 27 ++++++ .../accessoires/display/circuitpy-display.py | 63 +++++++++++++ .../led-matrix/circuitpy-led-matrix.py | 76 ++++++++++++++++ .../rgb-led-esp32/arduino-rgb-led-esp32.ino | 16 ++++ .../rgb-led-esp32/circuitpy-rgb-led-esp32.py | 21 +++++ .../sensors/icm-20948/circuitpy-icm-20948.py | 31 +++++++ .../luftdruck-temperatur/arduino-dps310.ino | 22 +++++ .../sensors/mpu6050/arduino-mpu6050.ino | 33 +++++++ .../arduino-hdc1080.ino | 15 ++++ ...cuitoy-hdc1080.py => circuitpy-hdc1080.py} | 0 .../sensors/umweltsensor/arduino-bme680.ino | 88 +++++++++++++++++++ .../sensors/umweltsensor/circuipy-bme680.py | 19 ++++ 12 files changed, 411 insertions(+) create mode 100644 docs/hardware/accessoires/display/arduino-display.ino create mode 100644 docs/hardware/accessoires/display/circuitpy-display.py create mode 100644 docs/hardware/accessoires/led-matrix/circuitpy-led-matrix.py create mode 100644 docs/hardware/accessoires/rgb-led-esp32/arduino-rgb-led-esp32.ino create mode 100644 docs/hardware/accessoires/rgb-led-esp32/circuitpy-rgb-led-esp32.py create mode 100644 docs/hardware/sensors/icm-20948/circuitpy-icm-20948.py create mode 100644 docs/hardware/sensors/luftdruck-temperatur/arduino-dps310.ino create mode 100644 docs/hardware/sensors/mpu6050/arduino-mpu6050.ino create mode 100644 docs/hardware/sensors/temperatur-luftfeuchte/arduino-hdc1080.ino rename docs/hardware/sensors/temperatur-luftfeuchte/{circuitoy-hdc1080.py => circuitpy-hdc1080.py} (100%) create mode 100644 docs/hardware/sensors/umweltsensor/arduino-bme680.ino create mode 100644 docs/hardware/sensors/umweltsensor/circuipy-bme680.py diff --git a/docs/hardware/accessoires/display/arduino-display.ino b/docs/hardware/accessoires/display/arduino-display.ino new file mode 100644 index 00000000..cf92a85f --- /dev/null +++ b/docs/hardware/accessoires/display/arduino-display.ino @@ -0,0 +1,27 @@ +#include +#include +#include // http://librarymanager/All#Adafruit_GFX_Library +#include // http://librarymanager/All#Adafruit_SSD1306 + + +#define SCREEN_WIDTH 128 +#define SCREEN_HEIGHT 64 +#define OLED_RESET -1 + +Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); + +void setup() { + display.begin(SSD1306_SWITCHCAPVCC, 0x3D); + display.display(); + delay(100); + display.clearDisplay(); +} + + +void loop() { + display.setCursor(0,0); + display.setTextSize(1); + display.setTextColor(WHITE,BLACK); + display.println("Hallo Welt!"); + display.display(); +} \ No newline at end of file diff --git a/docs/hardware/accessoires/display/circuitpy-display.py b/docs/hardware/accessoires/display/circuitpy-display.py new file mode 100644 index 00000000..168e0827 --- /dev/null +++ b/docs/hardware/accessoires/display/circuitpy-display.py @@ -0,0 +1,63 @@ +import board +import displayio +import digitalio +import terminalio +from adafruit_display_text import label +import adafruit_displayio_ssd1306 + +# IO Enable +io_enable_pin = digitalio.DigitalInOut(board.IO_POWER) +io_enable_pin.direction = digitalio.Direction.OUTPUT +io_enable_pin.value = False + +displayio.release_displays() + +#oled_reset = board.D9 + +# Use for I2C +i2c = board.I2C() # uses board.SCL and board.SDA +# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller +display_bus = displayio.I2CDisplay(i2c, device_address=0x3D) + +# Use for SPI +# spi = board.SPI() +# oled_cs = board.D5 +# oled_dc = board.D6 +# display_bus = displayio.FourWire(spi, command=oled_dc, chip_select=oled_cs, +# reset=oled_reset, baudrate=1000000) + +WIDTH = 128 +HEIGHT = 64 # Change to 64 if needed +BORDER = 5 + +display = adafruit_displayio_ssd1306.SSD1306(display_bus, width=WIDTH, height=HEIGHT) + +# Make the display context +splash = displayio.Group() +display.root_group = splash + +color_bitmap = displayio.Bitmap(WIDTH, HEIGHT, 1) +color_palette = displayio.Palette(1) +color_palette[0] = 0xFFFFFF # White + +bg_sprite = displayio.TileGrid(color_bitmap, pixel_shader=color_palette, x=0, y=0) +splash.append(bg_sprite) + +# Draw a smaller inner rectangle +inner_bitmap = displayio.Bitmap(WIDTH - BORDER * 2, HEIGHT - BORDER * 2, 1) +inner_palette = displayio.Palette(1) +inner_palette[0] = 0x000000 # Black +inner_sprite = displayio.TileGrid( + inner_bitmap, pixel_shader=inner_palette, x=BORDER, y=BORDER +) +splash.append(inner_sprite) + +# Draw a label +text = "Hello senseBox!" +text_area = label.Label( + terminalio.FONT, text=text, color=0xFFFFFF, x=28, y=HEIGHT // 2 - 1 +) +splash.append(text_area) + +while True: + pass \ No newline at end of file diff --git a/docs/hardware/accessoires/led-matrix/circuitpy-led-matrix.py b/docs/hardware/accessoires/led-matrix/circuitpy-led-matrix.py new file mode 100644 index 00000000..d302b8fe --- /dev/null +++ b/docs/hardware/accessoires/led-matrix/circuitpy-led-matrix.py @@ -0,0 +1,76 @@ +import board +import digitalio +import neopixel +from adafruit_pixel_framebuf import PixelFramebuffer +import time + + +# Stromversorgung der IO-Ports der senseBox MCU-S2 aktivieren +io_enable_pin = digitalio.DigitalInOut(board.IO_POWER) +io_enable_pin.direction = digitalio.Direction.OUTPUT +io_enable_pin.value = False + + +# Datenpin der LED-Matrix +# Die Matrix ist an Port A / D2 angeschlossen +pixel_pin = board.D2 + + +# Abmessungen der LED-Matrix +WIDTH = 12 +HEIGHT = 8 + + +# NeoPixel-Objekt für alle 96 LEDs der Matrix erstellen +pixels = neopixel.NeoPixel( + pixel_pin, # Datenpin + WIDTH * HEIGHT, # Anzahl der LEDs: 12 * 8 = 96 + brightness=0.05, # Helligkeit von 0.0 bis 1.0 + pixel_order=neopixel.GRB, # Die senseBox-Matrix verwendet GRB statt RGB + auto_write=False # Änderungen erst mit display() anzeigen +) + + +# Die NeoPixel-Kette als 12 x 8 Pixel große Matrix verwenden +matrix = PixelFramebuffer( + pixels, + WIDTH, + HEIGHT, + alternating=True # LEDs sind zeilenweise abwechselnd verdrahtet +) + + +# Text, der über die Matrix laufen soll +text = "Hello world!" + + +# Endlosschleife: Der Text wird immer wieder neu gescrollt +while True: + + # Die verwendete Schrift ist 5 Pixel breit. + # Zusätzlich wird 1 Pixel Abstand zwischen den Zeichen eingeplant. + # Daher benötigt jedes Zeichen ungefähr 6 Pixel Breite. + text_width = len(text) * 6 + + # x startet bei 12, also rechts außerhalb der Matrix. + # Danach wird x bei jedem Durchlauf um 1 kleiner. + # Der Text bewegt sich dadurch von rechts nach links. + for x in range(WIDTH, -text_width, -1): + + # Alle LEDs ausschalten, damit die vorherige Textposition verschwindet + matrix.fill(0x000000) + + # Text an der aktuellen Position zeichnen + matrix.text( + text, # anzuzeigender Text + x, # horizontale Position + 0, # vertikale Position + 0xFF0000 # Textfarbe: Rot + ) + + # Gezeichneten Inhalt auf die LED-Matrix übertragen + matrix.display() + + # Kurze Pause zwischen den einzelnen Positionen + # Kleinere Werte = schnelleres Scrollen + time.sleep(0.1) \ No newline at end of file diff --git a/docs/hardware/accessoires/rgb-led-esp32/arduino-rgb-led-esp32.ino b/docs/hardware/accessoires/rgb-led-esp32/arduino-rgb-led-esp32.ino new file mode 100644 index 00000000..adbbe467 --- /dev/null +++ b/docs/hardware/accessoires/rgb-led-esp32/arduino-rgb-led-esp32.ino @@ -0,0 +1,16 @@ +#include +Adafruit_NeoPixel rgb_led_1 + +void setup() { + rgb_led_1.begin(); + rgb_led_1.setBrightness(30); +} + +void loop() { + if (time_startInterval > time_actualInterval + intervalInterval) + { + time_actualInterval = millis(); + rgb_led_1.setPixelColor(0,rgb_led_1.Color(random(0, 255), random(0, 255), random(0, 255))); + rgb_led_1.show(); + } +} \ No newline at end of file diff --git a/docs/hardware/accessoires/rgb-led-esp32/circuitpy-rgb-led-esp32.py b/docs/hardware/accessoires/rgb-led-esp32/circuitpy-rgb-led-esp32.py new file mode 100644 index 00000000..048c3f1c --- /dev/null +++ b/docs/hardware/accessoires/rgb-led-esp32/circuitpy-rgb-led-esp32.py @@ -0,0 +1,21 @@ +import time +import board +import neopixel + +# Konfiguration +PIXEL_PIN = board.D1 # der Pin, an dem der NeoPixel angeschlossen ist +# Der NeoPixel auf dem senseBox MCU-S2 verwendet offenbar die Reihenfolge GRB statt RGB +ORDER = neopixel.GRB # Reihenfolge der Farben (RGB oder GRB) +COLOR = (0, 255, 0) # Farbe, die geblinkt werden soll (RGB-Werte von 0 bis 255) +CLEAR = (0, 0, 0) # LED im ausgeschalteten Zustand (oder eine andere Farbe, wenn gewünscht) +DELAY = 0.25 # Blinkgeschwindigkeit in Sekunden (0,25 Sekunden = 250 Millisekunden) + +# Erstelle ein NeoPixel-Objekt für die LED +pixel = neopixel.NeoPixel(PIXEL_PIN, 1, pixel_order=ORDER) + +# Endlosschleife, um die LED blinken zu lassen +while True: + pixel[0] = COLOR + time.sleep(DELAY) + pixel[0] = CLEAR + time.sleep(DELAY) \ No newline at end of file diff --git a/docs/hardware/sensors/icm-20948/circuitpy-icm-20948.py b/docs/hardware/sensors/icm-20948/circuitpy-icm-20948.py new file mode 100644 index 00000000..fba1edca --- /dev/null +++ b/docs/hardware/sensors/icm-20948/circuitpy-icm-20948.py @@ -0,0 +1,31 @@ +import time +import adafruit_icm20x +import busio +import microcontroller + +# Define the GPIO pins used for the I2C connection +scl = microcontroller.pin.GPIO42 +sda = microcontroller.pin.GPIO45 + +# Initialize the I2C bus for communication with the ICM-20948 +i2c_icm = busio.I2C(scl, sda) + +# Initialize the ICM-20948 sensor at I2C address 0x68 +icm = adafruit_icm20x.ICM20948(i2c_icm, address=0x68) + +while True: + + # Read and print acceleration on the X, Y and Z axes in m/s^2 + print("Acceleration: X:%.2f, Y: %.2f, Z: %.2f m/s^2" % (icm.acceleration)) + + # Read and print angular velocity on the X, Y and Z axes in rad/s + print("Gyro X:%.2f, Y: %.2f, Z: %.2f rad/s" % (icm.gyro)) + + # Read and print magnetic field strength on the X, Y and Z axes in microtesla + print("Magnetometer X:%.2f, Y: %.2f, Z: %.2f uT" % (icm.magnetic)) + + # Print an empty line for better readability + print("") + + # Wait 0.5 seconds before taking the next measurement + time.sleep(0.5) \ No newline at end of file diff --git a/docs/hardware/sensors/luftdruck-temperatur/arduino-dps310.ino b/docs/hardware/sensors/luftdruck-temperatur/arduino-dps310.ino new file mode 100644 index 00000000..d9ffe888 --- /dev/null +++ b/docs/hardware/sensors/luftdruck-temperatur/arduino-dps310.ino @@ -0,0 +1,22 @@ +#include // http://librarymanager/All#Adafruit_DPS310 + +Adafruit_DPS310 dps; + +void setup() { + Serial.begin(9600); + + dps.begin_I2C(0x76); + dps.configurePressure(DPS310_64HZ, DPS310_64SAMPLES); + dps.configureTemperature(DPS310_64HZ, DPS310_64SAMPLES); + +} + +void loop() { + sensors_event_t temp_event, pressure_event; + dps.getEvents(&temp_event, &pressure_event); + + Serial.print("Pressure: "); + Serial.println(pressure_event.pressure); + Serial.print("Temperature: "); + Serial.println(temp_event.temperature); +} \ No newline at end of file diff --git a/docs/hardware/sensors/mpu6050/arduino-mpu6050.ino b/docs/hardware/sensors/mpu6050/arduino-mpu6050.ino new file mode 100644 index 00000000..377a7a60 --- /dev/null +++ b/docs/hardware/sensors/mpu6050/arduino-mpu6050.ino @@ -0,0 +1,33 @@ +#include +#include + +Adafruit_MPU6050 mpu; +sensors_event_t a, g, temp; + +void setup() { + // Serielle Kommunikation starten + Serial.begin(115200); + + Wire1.begin(); + mpu.begin(0x68, &Wire1); + mpu.setAccelerometerRange(MPU6050_RANGE_8_G); + + + Serial.println("MPU6050 bereit!"); +} + +void loop() { + mpu.getEvent(&a, &g, &temp); + + + // Beschleunigungsdaten ausgeben + Serial.print("X:"); + Serial.print(a.acceleration.x); + Serial.print(",Y:"); + Serial.print(a.acceleration.y); + Serial.print(",Z:"); + Serial.println(a.acceleration.z); + + // Kurze Pause, um die Ausgabe lesbar zu halten + delay(100); +} \ No newline at end of file diff --git a/docs/hardware/sensors/temperatur-luftfeuchte/arduino-hdc1080.ino b/docs/hardware/sensors/temperatur-luftfeuchte/arduino-hdc1080.ino new file mode 100644 index 00000000..9202f04b --- /dev/null +++ b/docs/hardware/sensors/temperatur-luftfeuchte/arduino-hdc1080.ino @@ -0,0 +1,15 @@ +#include // http://librarymanager/All#Adafruit_HDC1000_Library + +Adafruit_HDC1000 hdc = Adafruit_HDC1000(); + +void setup(){ + Serial.begin(9600); + hdc.begin(); +} + +void loop(){ + Serial.print("Temperature: "); + Serial.println(hdc.readTemperature()); + Serial.print("Humidity: "); + Serial.println(hdc.readHumidity()); +} \ No newline at end of file diff --git a/docs/hardware/sensors/temperatur-luftfeuchte/circuitoy-hdc1080.py b/docs/hardware/sensors/temperatur-luftfeuchte/circuitpy-hdc1080.py similarity index 100% rename from docs/hardware/sensors/temperatur-luftfeuchte/circuitoy-hdc1080.py rename to docs/hardware/sensors/temperatur-luftfeuchte/circuitpy-hdc1080.py diff --git a/docs/hardware/sensors/umweltsensor/arduino-bme680.ino b/docs/hardware/sensors/umweltsensor/arduino-bme680.ino new file mode 100644 index 00000000..e10452d0 --- /dev/null +++ b/docs/hardware/sensors/umweltsensor/arduino-bme680.ino @@ -0,0 +1,88 @@ +#include +#include // http://librarymanager/All#BSEC_Software_Library + +float bmeTemperatur; +float bmeHumidity; +double bmePressure; +float bmeIAQ; +float bmeIAQAccuracy; +int bmeCO2; +float bmeBreathVocEquivalent; + +Bsec iaqSensor; + +void checkIaqSensorStatus(void) + { + if (iaqSensor.bsecStatus != BSEC_OK) { + if (iaqSensor.bsecStatus < BSEC_OK) { + for (;;) + errLeds(); /* Halt in case of failure */ + } + } + + if (iaqSensor.bme68xStatus != BME68X_OK) { + if (iaqSensor.bme68xStatus < BME68X_OK) { + for (;;) + errLeds(); /* Halt in case of failure */ + } + } +} + + +void errLeds(void) +{ + pinMode(LED_BUILTIN, OUTPUT); + digitalWrite(LED_BUILTIN, HIGH); + delay(100); + digitalWrite(LED_BUILTIN, LOW); + delay(100); +} + + +void setup() { + Wire.begin(); + iaqSensor.begin(BME68X_I2C_ADDR_LOW, Wire); + checkIaqSensorStatus(); + + bsec_virtual_sensor_t sensorList[13] = { + BSEC_OUTPUT_IAQ, + BSEC_OUTPUT_STATIC_IAQ, + BSEC_OUTPUT_CO2_EQUIVALENT, + BSEC_OUTPUT_BREATH_VOC_EQUIVALENT, + BSEC_OUTPUT_RAW_TEMPERATURE, + BSEC_OUTPUT_RAW_PRESSURE, + BSEC_OUTPUT_RAW_HUMIDITY, + BSEC_OUTPUT_RAW_GAS, + BSEC_OUTPUT_STABILIZATION_STATUS, + BSEC_OUTPUT_RUN_IN_STATUS, + BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE, + BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY, + BSEC_OUTPUT_GAS_PERCENTAGE + }; + + + iaqSensor.updateSubscription(sensorList, 13, BSEC_SAMPLE_RATE_LP); + checkIaqSensorStatus(); + + + +} + + +void loop() { + + if (iaqSensor.run()) { + bmeTemperatur = iaqSensor.temperature; + bmeHumidity = iaqSensor.humidity; + bmePressure = iaqSensor.pressure; + bmeIAQ = iaqSensor.iaq; + bmeIAQAccuracy = iaqSensor.iaqAccuracy; + bmeCO2 = iaqSensor.co2Equivalent; + bmeBreathVocEquivalent = iaqSensor.breathVocEquivalent; + } else { + checkIaqSensorStatus(); + } + + Serial.println(bmeTemperatur); + +} \ No newline at end of file diff --git a/docs/hardware/sensors/umweltsensor/circuipy-bme680.py b/docs/hardware/sensors/umweltsensor/circuipy-bme680.py new file mode 100644 index 00000000..b40ff565 --- /dev/null +++ b/docs/hardware/sensors/umweltsensor/circuipy-bme680.py @@ -0,0 +1,19 @@ +import adafruit_bme680 +import time +import board + +# Create sensor object, communicating over the board's default I2C bus +i2c = board.I2C() # uses board.SCL and board.SDA +bme680 = adafruit_bme680.Adafruit_BME680_I2C(i2c, address=0x76) + +# change this to match the location's pressure (hPa) at sea level +bme680.sea_level_pressure = 1013.25 + +while True: + print("\nTemperature: %0.1f C" % bme680.temperature) + print("Gas: %d ohm" % bme680.gas) + print("Humidity: %0.1f %%" % bme680.relative_humidity) + print("Pressure: %0.3f hPa" % bme680.pressure) + print("Altitude = %0.2f meters" % bme680.altitude) + + time.sleep(2) \ No newline at end of file From d5be55b08fc70df74dd56c5e145f29b77f98258a Mon Sep 17 00:00:00 2001 From: Joscha Ledermann Date: Thu, 3 Sep 2026 12:54:01 +0200 Subject: [PATCH 06/11] added more code snippets --- .../helligkeit-uv/arduino-ltr329-veml6070.ino | 101 ++++++++++++++++++ .../sensors/helligkeit-uv/circuitpy-ltr329.py | 28 +++++ .../helligkeit-uv/circuitpy-veml6070.py | 16 +++ .../sensors/photodiode/arduino-photodiode.ino | 15 +++ .../photodiode/circuitpython-photodiode.py | 36 +++++++ docs/hardware/wifi/arduino-wifi.ino | 18 ++++ docs/{ => hardware}/wifi/circuitpy-wifi.py | 0 7 files changed, 214 insertions(+) create mode 100644 docs/hardware/sensors/helligkeit-uv/arduino-ltr329-veml6070.ino create mode 100644 docs/hardware/sensors/helligkeit-uv/circuitpy-ltr329.py create mode 100644 docs/hardware/sensors/helligkeit-uv/circuitpy-veml6070.py create mode 100644 docs/hardware/sensors/photodiode/arduino-photodiode.ino create mode 100644 docs/hardware/sensors/photodiode/circuitpython-photodiode.py create mode 100644 docs/hardware/wifi/arduino-wifi.ino rename docs/{ => hardware}/wifi/circuitpy-wifi.py (100%) diff --git a/docs/hardware/sensors/helligkeit-uv/arduino-ltr329-veml6070.ino b/docs/hardware/sensors/helligkeit-uv/arduino-ltr329-veml6070.ino new file mode 100644 index 00000000..e014e8e4 --- /dev/null +++ b/docs/hardware/sensors/helligkeit-uv/arduino-ltr329-veml6070.ino @@ -0,0 +1,101 @@ +#include +#include +#include +#include + +bool lightsensortype = 0; //0 for tsl - 1 for ltr +//settings for LTR sensor +LTR329 LTR; +unsigned char gain = 1; +unsigned char integrationTime = 0; +unsigned char measurementRate = 3; +VEML6070 veml; + + +int read_reg(byte address, uint8_t reg) + { + int i = 0; + Wire.beginTransmission(address); + Wire.write(reg); + Wire.endTransmission(); + Wire.requestFrom((uint8_t)address, (uint8_t)1); + delay(1); + if(Wire.available()) + i = Wire.read(); + return i; + } + + +void write_reg(byte address, uint8_t reg, uint8_t val) + { + Wire.beginTransmission(address); + Wire.write(reg); + Wire.write(val); + Wire.endTransmission(); + } + +void Lightsensor_begin() + { + Wire.begin(); + unsigned int u = 0; + u = read_reg(0x29, 0x80 | 0x0A); //id register + if ((u & 0xF0) == 0xA0) // TSL45315 + { + write_reg(0x29, 0x80 | 0x00, 0x03); //control: power on + write_reg(0x29, 0x80 | 0x01, 0x02); //config: M=4 T=100ms + delay(120); + lightsensortype = 0; //TSL45315 + } + else + { + LTR.begin(); + LTR.setControl(gain, false, false); + LTR.setMeasurementRate(integrationTime, measurementRate); + LTR.setPowerUp(); //power on with default settings + delay(10); //Wait 10 ms (max) - wakeup time from standby + lightsensortype = 1; // + } + } + + +unsigned int Lightsensor_getIlluminance() + { + unsigned int lux = 0; + if (lightsensortype == 0) // TSL45315 + { + unsigned int u = (read_reg(0x29, 0x80 | 0x04) << 0); //data low + u |= (read_reg(0x29, 0x80 | 0x05) << 8); //data high + lux = u * 4; // calc lux with M=4 and T=100ms + } + else if (lightsensortype == 1) //LTR-329ALS-01 + { + delay(100); + unsigned int data0, data1; + for (int i = 0; i < 5; i++) { + if (LTR.getData(data0, data1)) { + if(LTR.getLux(gain, integrationTime, data0, data1, lux)); + if(lux > 0) break; + else delay(10); + } + else { + byte error = LTR.getError(); + } + } + } + return lux; + } + + +void setup() { + Serial.begin(9600); + Lightsensor_begin(); + veml.begin(); + +} + +void loop() { + Serial.print("Illuminance: "); + Serial.println(ightsensor_getIlluminance()); + Serial.print("UV-Intensity: "); + Serial.println(veml.getUV()); +} \ No newline at end of file diff --git a/docs/hardware/sensors/helligkeit-uv/circuitpy-ltr329.py b/docs/hardware/sensors/helligkeit-uv/circuitpy-ltr329.py new file mode 100644 index 00000000..fb2076ef --- /dev/null +++ b/docs/hardware/sensors/helligkeit-uv/circuitpy-ltr329.py @@ -0,0 +1,28 @@ +import time +import board +from adafruit_ltr329_ltr303 import LTR329 + + +# I2C-Schnittstelle des Boards initialisieren +i2c = board.I2C() + +# Kurze Pause, damit die I2C-Schnittstelle bereit ist +time.sleep(0.1) + +# LTR329-Lichtsensor über I2C initialisieren +ltr329 = LTR329(i2c) + + +# Messwerte dauerhaft auslesen +while True: + # Sichtbares Licht zusammen mit Infrarotlicht ausgeben + print("Visible + IR:", ltr329.visible_plus_ir_light) + + # Infrarotlicht separat ausgeben + print("Infrared :", ltr329.ir_light) + + # Leerzeile für eine bessere Übersicht + print() + + # Eine halbe Sekunde bis zur nächsten Messung warten + time.sleep(0.5) \ No newline at end of file diff --git a/docs/hardware/sensors/helligkeit-uv/circuitpy-veml6070.py b/docs/hardware/sensors/helligkeit-uv/circuitpy-veml6070.py new file mode 100644 index 00000000..2659fa7b --- /dev/null +++ b/docs/hardware/sensors/helligkeit-uv/circuitpy-veml6070.py @@ -0,0 +1,16 @@ +import time +import board +from adafruit_veml6070 import VEML6070 + +with board.I2C() as i2c: + uv = VEML6070(i2c) + # Alternative constructors with parameters + #uv = VEML6070(i2c, 'VEML6070_1_T') + #uv = VEML6070(i2c, 'VEML6070_HALF_T', True) + + # take 10 readings + for j in range(10): + uv_raw = uv.uv_raw + risk_level = uv.get_index(uv_raw) + print('Reading: {0} | Risk Level: {1}'.format(uv_raw, risk_level)) + time.sleep(1) \ No newline at end of file diff --git a/docs/hardware/sensors/photodiode/arduino-photodiode.ino b/docs/hardware/sensors/photodiode/arduino-photodiode.ino new file mode 100644 index 00000000..98938852 --- /dev/null +++ b/docs/hardware/sensors/photodiode/arduino-photodiode.ino @@ -0,0 +1,15 @@ +void setup() { + // put your setup code here, to run once: + pinMode(PD_ENABLE, OUTPUT); + analogReadResolution(12); + digitalWrite(PD_ENABLE, HIGH); + + Serial.begin(9600); +} + +void loop() { + // put your main code here, to run repeatedly: + + Serial.println(analogRead(PD_SENSE)); + delay(100); +} \ No newline at end of file diff --git a/docs/hardware/sensors/photodiode/circuitpython-photodiode.py b/docs/hardware/sensors/photodiode/circuitpython-photodiode.py new file mode 100644 index 00000000..e9d1dc95 --- /dev/null +++ b/docs/hardware/sensors/photodiode/circuitpython-photodiode.py @@ -0,0 +1,36 @@ +import time +import board +import analogio +import digitalio + +# Stromversorgung der eingebauten Photodiode einschalten +pd_power = digitalio.DigitalInOut(board.PD_POWER) +pd_power.direction = digitalio.Direction.OUTPUT +pd_power.value = True + +# Kurz warten, bis die Schaltung stabil ist +time.sleep(0.1) + +# Analoge Messleitung der Photodiode +photodiode = analogio.AnalogIn(board.PD_PIN) + +def get_voltage(raw_value, reference_voltage): + return (raw_value * reference_voltage) / 65535 + + +while True: + # Photodiode genau einmal auslesen + raw_value = photodiode.value + + # Spannung aus demselben Messwert berechnen + voltage = get_voltage( + raw_value, + photodiode.reference_voltage + ) + + print( + f"Rohwert: {raw_value} | " + f"Spannung: {voltage:.2f} V" + ) + + time.sleep(0.5) \ No newline at end of file diff --git a/docs/hardware/wifi/arduino-wifi.ino b/docs/hardware/wifi/arduino-wifi.ino new file mode 100644 index 00000000..db38ec2d --- /dev/null +++ b/docs/hardware/wifi/arduino-wifi.ino @@ -0,0 +1,18 @@ +#include + +char ssid[] = "SSID"; +char pass[] = "Password"; + +void setup() { + Serial.begin(9600); + WiFi.begin(ssid, pass); + if(WiFi.status() == WL_NO_SHIELD){ + Serial.println("No WiFi shield is present"); + while(true); + } +} + +void loop(){ + Serial.println(WiFi.localIP()); + delay(1000); +} \ No newline at end of file diff --git a/docs/wifi/circuitpy-wifi.py b/docs/hardware/wifi/circuitpy-wifi.py similarity index 100% rename from docs/wifi/circuitpy-wifi.py rename to docs/hardware/wifi/circuitpy-wifi.py From a55a23fd0336f7fa86b40ff7717ff84756035d1e Mon Sep 17 00:00:00 2001 From: Joscha Ledermann Date: Thu, 3 Sep 2026 13:00:05 +0200 Subject: [PATCH 07/11] refactoring --- docs/boards/mcu/mcu-overview.mdx | 2 +- docs/boards/mcus2/mcu-s2-overview.mdx | 2 +- docs/hardware/sensors/{ => helligkeit-uv}/helligkeit-uv.mdx | 0 docs/products/home/home-overview.mdx | 2 +- sidebars/eduS2Sidebar.js | 2 +- sidebars/eduSidebar.js | 2 +- sidebars/glossarSidebar.js | 2 +- sidebars/homeSidebar.js | 2 +- sidebars/miniSidebar.js | 2 +- static/_redirects | 4 ++-- 10 files changed, 10 insertions(+), 10 deletions(-) rename docs/hardware/sensors/{ => helligkeit-uv}/helligkeit-uv.mdx (100%) diff --git a/docs/boards/mcu/mcu-overview.mdx b/docs/boards/mcu/mcu-overview.mdx index b9c00f1f..d7c40f0a 100644 --- a/docs/boards/mcu/mcu-overview.mdx +++ b/docs/boards/mcu/mcu-overview.mdx @@ -179,7 +179,7 @@ export const MCUManager = () => { title="Temperatur- und Luftfeuchtesensor" /> { title="Temperatur- und Luftfeuchtesensor" /> { title="Temperatur- und Luftfeuchtesensor" /> Date: Thu, 3 Sep 2026 13:06:39 +0200 Subject: [PATCH 08/11] trying not break dps310 --- docs/boards/mcus2/mcu-s2-overview.mdx | 4 ++-- docs/hardware/sensors/{ => mpu6050}/mpu6050.mdx | 0 docs/hardware/sensors/{ => photodiode}/photodiode.mdx | 0 docs/products/bike/bike-overview.mdx | 2 +- sidebars/bikeSidebar.js | 2 +- sidebars/eduS2Sidebar.js | 4 ++-- sidebars/glossarSidebar.js | 4 ++-- 7 files changed, 8 insertions(+), 8 deletions(-) rename docs/hardware/sensors/{ => mpu6050}/mpu6050.mdx (100%) rename docs/hardware/sensors/{ => photodiode}/photodiode.mdx (100%) diff --git a/docs/boards/mcus2/mcu-s2-overview.mdx b/docs/boards/mcus2/mcu-s2-overview.mdx index 0d101f05..65d27875 100644 --- a/docs/boards/mcus2/mcu-s2-overview.mdx +++ b/docs/boards/mcus2/mcu-s2-overview.mdx @@ -146,11 +146,11 @@ export const MCUManager = () => { title="Luftdruck- und Temperatursensor" /> { title="Temperatur- und Luftfeuchtesensor" /> Date: Thu, 3 Sep 2026 13:15:09 +0200 Subject: [PATCH 09/11] refactoring --- docs/boards/mcu/mcu-overview.mdx | 4 ++-- docs/boards/mcus2/mcu-s2-overview.mdx | 4 ++-- docs/boards/mini/mini-overview.mdx | 2 +- docs/hardware/accessoires/{ => display}/display.mdx | 0 .../accessoires/{ => led-matrix}/led-matrix.mdx | 0 .../luftdruck-temperatur.mdx | 2 +- docs/products/basic/basic-overview.mdx | 2 +- docs/products/co2Ampel/co2Ampel-overview.mdx | 2 +- docs/products/home/home-overview.mdx | 4 ++-- sidebars/basicSidebar.js | 2 +- sidebars/co2AmpelSidebar.js | 2 +- sidebars/eduS2Sidebar.js | 4 ++-- sidebars/eduSidebar.js | 4 ++-- sidebars/glossarSidebar.js | 4 ++-- sidebars/homeSidebar.js | 4 ++-- sidebars/miniSidebar.js | 4 ++-- static/_redirects | 12 ++++++------ 17 files changed, 28 insertions(+), 28 deletions(-) rename docs/hardware/accessoires/{ => display}/display.mdx (100%) rename docs/hardware/accessoires/{ => led-matrix}/led-matrix.mdx (100%) rename docs/hardware/sensors/{ => luftdruck-temperatur}/luftdruck-temperatur.mdx (98%) diff --git a/docs/boards/mcu/mcu-overview.mdx b/docs/boards/mcu/mcu-overview.mdx index d7c40f0a..21ba7d92 100644 --- a/docs/boards/mcu/mcu-overview.mdx +++ b/docs/boards/mcu/mcu-overview.mdx @@ -188,11 +188,11 @@ export const MCUManager = () => { /> { title="Helligkeits- und UV-Sensor" /> { { :::info -Der DPS310 ersetzt den Luftdruck und Temperatursensor BMP280. Welchen von beiden Sensoren du hast kannst du an der Aufschrift auf dem Sensor erkennen, solltest du die Dokuemntation für den BMP280 benötigen findest du diese [hier](/docs/hardware/sensors/luftdruck-temperatur-bmp280). +Der DPS310 ersetzt den Luftdruck und Temperatursensor BMP280. Welchen von beiden Sensoren du hast kannst du an der Aufschrift auf dem Sensor erkennen, solltest du die Dokuemntation für den BMP280 benötigen findest du diese [hier](/docs/hardware/sensors/luftdruck-temperatur/luftdruck-temperatur-bmp280). ::: ## Technische Informationen diff --git a/docs/products/basic/basic-overview.mdx b/docs/products/basic/basic-overview.mdx index 19c69f62..0a8b6c90 100644 --- a/docs/products/basic/basic-overview.mdx +++ b/docs/products/basic/basic-overview.mdx @@ -207,7 +207,7 @@ return (
{ {activeBottomTab === "Hardware" && (
diff --git a/docs/products/home/home-overview.mdx b/docs/products/home/home-overview.mdx index a3951fcf..a0a5454f 100644 --- a/docs/products/home/home-overview.mdx +++ b/docs/products/home/home-overview.mdx @@ -168,11 +168,11 @@ export const MCUManager = () => { /> Date: Thu, 3 Sep 2026 13:38:24 +0200 Subject: [PATCH 10/11] more refactoring done --- docs/boards/mcu/mcu-overview.mdx | 2 +- docs/boards/mcus2/mcu-s2-overview.mdx | 8 ++++---- docs/boards/mini/mini-overview.mdx | 2 +- .../accessoires/{ => rgb-led-esp32}/rgb-led-esp32.mdx | 0 .../temperatur-luftfeuchte.mdx | 0 docs/hardware/sensors/{ => tof}/tof.mdx | 0 .../sensors/{ => umweltsensor}/umweltsensor.mdx | 0 docs/products/basic/basic-overview.mdx | 2 +- docs/products/bike/bike-overview.mdx | 2 +- docs/products/home/home-overview.mdx | 2 +- sidebars/basicSidebar.js | 4 ++-- sidebars/bikeSidebar.js | 2 +- sidebars/eduS2Sidebar.js | 10 +++++----- sidebars/eduSidebar.js | 4 ++-- sidebars/glossarSidebar.js | 10 +++++----- sidebars/homeSidebar.js | 4 ++-- sidebars/miniSidebar.js | 4 ++-- static/_redirects | 8 ++++---- 18 files changed, 32 insertions(+), 32 deletions(-) rename docs/hardware/accessoires/{ => rgb-led-esp32}/rgb-led-esp32.mdx (100%) rename docs/hardware/sensors/{ => temperatur-luftfeuchte}/temperatur-luftfeuchte.mdx (100%) rename docs/hardware/sensors/{ => tof}/tof.mdx (100%) rename docs/hardware/sensors/{ => umweltsensor}/umweltsensor.mdx (100%) diff --git a/docs/boards/mcu/mcu-overview.mdx b/docs/boards/mcu/mcu-overview.mdx index 21ba7d92..8c2fbc16 100644 --- a/docs/boards/mcu/mcu-overview.mdx +++ b/docs/boards/mcu/mcu-overview.mdx @@ -175,7 +175,7 @@ export const MCUManager = () => { {
{ title="Beschleunigungssensor" /> { title="OLED Display" /> { title="OLED Display" /> diff --git a/docs/products/bike/bike-overview.mdx b/docs/products/bike/bike-overview.mdx index 3da57f57..0a9440c6 100644 --- a/docs/products/bike/bike-overview.mdx +++ b/docs/products/bike/bike-overview.mdx @@ -141,7 +141,7 @@ export const MCUManager = () => { <>
{ Date: Thu, 3 Sep 2026 13:43:01 +0200 Subject: [PATCH 11/11] refactoring done --- docs/hardware/{ => wifi}/wifi.mdx | 0 sidebars/eduS2Sidebar.js | 2 +- sidebars/glossarSidebar.js | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename docs/hardware/{ => wifi}/wifi.mdx (100%) diff --git a/docs/hardware/wifi.mdx b/docs/hardware/wifi/wifi.mdx similarity index 100% rename from docs/hardware/wifi.mdx rename to docs/hardware/wifi/wifi.mdx diff --git a/sidebars/eduS2Sidebar.js b/sidebars/eduS2Sidebar.js index 18a46743..4c530aa7 100755 --- a/sidebars/eduS2Sidebar.js +++ b/sidebars/eduS2Sidebar.js @@ -53,7 +53,7 @@ const eduS2Sidebar = { 'hardware/sensors/mpu6050/mpu6050', 'hardware/sensors/tof/tof', 'hardware/bee/bluetooth-bee', - 'hardware/wifi', + 'hardware/wifi/wifi', 'hardware/sd', 'hardware/accessoires/display/display', 'hardware/accessoires/rgb-led-esp32/rgb-led-esp32', diff --git a/sidebars/glossarSidebar.js b/sidebars/glossarSidebar.js index d3df6a0e..d3ae17b4 100644 --- a/sidebars/glossarSidebar.js +++ b/sidebars/glossarSidebar.js @@ -28,7 +28,7 @@ const glossarSidebar = { 'hardware/bee/lora-bee', 'hardware/bee/sd-bee', 'hardware/bee/wifi-bee', - 'hardware/wifi', + 'hardware/wifi/wifi', 'hardware/sd', 'hardware/accessoires/display/display', 'hardware/accessoires/expander',