diff --git a/docs/boards/mcu/mcu-overview.mdx b/docs/boards/mcu/mcu-overview.mdx index b9c00f1f..8c2fbc16 100644 --- a/docs/boards/mcu/mcu-overview.mdx +++ b/docs/boards/mcu/mcu-overview.mdx @@ -175,11 +175,11 @@ export const MCUManager = () => { { /> {
{ { +#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/display.mdx b/docs/hardware/accessoires/display/display.mdx similarity index 100% rename from docs/hardware/accessoires/display.mdx rename to docs/hardware/accessoires/display/display.mdx 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/led-matrix.mdx b/docs/hardware/accessoires/led-matrix/led-matrix.mdx similarity index 100% rename from docs/hardware/accessoires/led-matrix.mdx rename to docs/hardware/accessoires/led-matrix/led-matrix.mdx 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/accessoires/rgb-led-esp32.mdx b/docs/hardware/accessoires/rgb-led-esp32/rgb-led-esp32.mdx similarity index 100% rename from docs/hardware/accessoires/rgb-led-esp32.mdx rename to docs/hardware/accessoires/rgb-led-esp32/rgb-led-esp32.mdx 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/helligkeit-uv.mdx b/docs/hardware/sensors/helligkeit-uv/helligkeit-uv.mdx similarity index 100% rename from docs/hardware/sensors/helligkeit-uv.mdx rename to docs/hardware/sensors/helligkeit-uv/helligkeit-uv.mdx 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/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/luftdruck-temperatur.mdx b/docs/hardware/sensors/luftdruck-temperatur/luftdruck-temperatur.mdx similarity index 98% rename from docs/hardware/sensors/luftdruck-temperatur.mdx rename to docs/hardware/sensors/luftdruck-temperatur/luftdruck-temperatur.mdx index 6764c473..c67d4550 100644 --- a/docs/hardware/sensors/luftdruck-temperatur.mdx +++ b/docs/hardware/sensors/luftdruck-temperatur/luftdruck-temperatur.mdx @@ -23,7 +23,7 @@ Der Luftdrucksensor DPS310 ist einer der neuesten Druck- und Temperatursensoren /> :::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/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/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/mpu6050.mdx b/docs/hardware/sensors/mpu6050/mpu6050.mdx similarity index 100% rename from docs/hardware/sensors/mpu6050.mdx rename to docs/hardware/sensors/mpu6050/mpu6050.mdx 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/sensors/photodiode.mdx b/docs/hardware/sensors/photodiode/photodiode.mdx similarity index 100% rename from docs/hardware/sensors/photodiode.mdx rename to docs/hardware/sensors/photodiode/photodiode.mdx 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/circuitpy-hdc1080.py b/docs/hardware/sensors/temperatur-luftfeuchte/circuitpy-hdc1080.py new file mode 100644 index 00000000..e1c78c7b --- /dev/null +++ b/docs/hardware/sensors/temperatur-luftfeuchte/circuitpy-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/hardware/sensors/temperatur-luftfeuchte.mdx b/docs/hardware/sensors/temperatur-luftfeuchte/temperatur-luftfeuchte.mdx similarity index 100% rename from docs/hardware/sensors/temperatur-luftfeuchte.mdx rename to docs/hardware/sensors/temperatur-luftfeuchte/temperatur-luftfeuchte.mdx 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 diff --git a/docs/hardware/sensors/tof.mdx b/docs/hardware/sensors/tof/tof.mdx similarity index 100% rename from docs/hardware/sensors/tof.mdx rename to docs/hardware/sensors/tof/tof.mdx 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 diff --git a/docs/hardware/sensors/umweltsensor.mdx b/docs/hardware/sensors/umweltsensor/umweltsensor.mdx similarity index 100% rename from docs/hardware/sensors/umweltsensor.mdx rename to docs/hardware/sensors/umweltsensor/umweltsensor.mdx 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/hardware/wifi/circuitpy-wifi.py b/docs/hardware/wifi/circuitpy-wifi.py new file mode 100644 index 00000000..25af07a6 --- /dev/null +++ b/docs/hardware/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 diff --git a/docs/hardware/wifi.mdx b/docs/hardware/wifi/wifi.mdx similarity index 72% rename from docs/hardware/wifi.mdx rename to docs/hardware/wifi/wifi.mdx index 6aef3e45..d018d72c 100644 --- a/docs/hardware/wifi.mdx +++ b/docs/hardware/wifi/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,30 @@ 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)

+ +

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 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!")`} + + +))} + ## Projekte - #### [Kommunikation zwischen senseBoxen mit ESP-NOW](https://sensebox.de/projects/de/2024-03-24-esp-now) diff --git a/docs/products/basic/basic-overview.mdx b/docs/products/basic/basic-overview.mdx index 19c69f62..fa194828 100644 --- a/docs/products/basic/basic-overview.mdx +++ b/docs/products/basic/basic-overview.mdx @@ -207,7 +207,7 @@ return (
diff --git a/docs/products/bike/bike-overview.mdx b/docs/products/bike/bike-overview.mdx index 92eb07e1..0a9440c6 100644 --- a/docs/products/bike/bike-overview.mdx +++ b/docs/products/bike/bike-overview.mdx @@ -141,11 +141,11 @@ export const MCUManager = () => { <>
{ {activeBottomTab === "Hardware" && (
diff --git a/docs/products/home/home-overview.mdx b/docs/products/home/home-overview.mdx index 49e02222..7e6a31de 100644 --- a/docs/products/home/home-overview.mdx +++ b/docs/products/home/home-overview.mdx @@ -155,11 +155,11 @@ export const MCUManager = () => { { />