Arduino UNO Q - DIP-Schalter

DIP (Dual In-line Package) Schalter sind kompakte Konfigurationsschalter, die zum Festlegen von Adressen, Aktivieren von Funktionen oder Auswählen von Modi verwendet werden. In diesem Tutorial erfahren Sie, wie Sie einen 4-Positionen-DIP-Schalter an Arduino UNO Q anschließen, den EIN/AUS-Status jeder Position lesen, die Positionen in eine Zahl codieren und Werte remote über Telegram überprüfen.

Arduino UNO Q - DIP-Schalter

Erforderliche Hardware

1×Arduino UNO Q
1×USB-Kabel für Arduino Uno Q
1×DIP-Schalter
1×Breadboard
1×Jumper-Drähte
1×(Empfohlen) Schraubklemmenblock-Shield für Arduino Uno
1×(Empfohlen) Sensors/Servo Expansion Shield for Arduino Uno
1×(Empfohlen) Breadboard-Shield für Arduino Uno
1×(Empfohlen) Gehäuse für Arduino Uno
1×(Empfohlen) Prototyping-Grundplatte & Breadboard-Kit für Arduino Uno

Oder Sie können die folgenden Kits kaufen:

1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über DIP-Schalter

Ein DIP-Schalter ist eine Mehrpositions-Schiebeschalter-Einheit. Jede einzelne Position ist ein unabhängiger EIN/AUS-Schalter. Gängige Varianten haben 2, 4, 5, 6, 8 oder 10 Positionen.

Pinbelegung

Ein DIP-Schalter hat zwei Reihen von Pins — eine Reihe pro Seite jeder Position. Jedes Paar von gegenüberliegenden Pins bildet einen Schiebeschalter. Es spielt keine Rolle, welche Seite mit GND verbunden ist.

DIP-Schalter Pinbelegung

Funktionsweise

Verbinden Sie eine Seite jeder Position mit GND und die andere Seite mit einem digitalen Pin von Arduino UNO Q, der als INPUT_PULLUP konfiguriert ist. Die folgende Tabelle zeigt die Logik:

DIP-Schalter Position Schaltkreis-Status Arduino UNO Q Pin-Status Binär-Wert
EIN GESCHLOSSEN LOW 1
AUS OFFEN HIGH 0

Dieses Tutorial verwendet einen 4-Positionen-DIP-Schalter an den Pins 2, 3, 4, 5. Der gleiche Ansatz funktioniert für 2, 5, 6, 8 oder 10 Positionen — passen Sie einfach die Anzahl der Pins an.

Schaltschema

Arduino UNO Q DIP-Schalter Schaltschema

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

MCU-Code — DIP-Schalter

Arduino UNO Q hat zwei Prozessoren: den STM32 MCU (verwaltet Echtzeit-Hardwaresteuerung) und den Qualcomm MPU (führt Debian Linux aus). In diesem Abschnitt wird nur der STM32 MCU programmiert — die Linux-Seite bleibt untätig. Ein späterer Abschnitt zeigt, wie beide Prozessoren zusammenarbeiten.

Es werden zwei Code-Beispiele bereitgestellt:

  • Lesen jeder Position als EIN/AUS
  • Codierung aller Positionen in eine einzelne Ganzzahl

MCU-Code — Lesen jeder DIP-Position als EIN/AUS

/* * Dieser Arduino UNO Q Code wurde von newbiely.de entwickelt * Dieser Arduino UNO Q Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-uno-q/arduino-uno-q-dip-switch */ #define POSITION_NUM 4 #define ON LOW #define OFF HIGH // define the pins connected to the DIP switch const int SWITCH_PINS[] = { 2, 3, 4, 5 }; void setup() { // set the DIP switch pins as inputs with pull-up resistors enabled for (int i = 0; i < POSITION_NUM; i++) pinMode(SWITCH_PINS[i], INPUT_PULLUP); } void loop() { // Read the state of each switch position for (int i = 0; i < POSITION_NUM; i++) { int state = digitalRead(SWITCH_PINS[i]); if (state == ON) { // position i+1 is ON // TO DO: add action for ON position here } else { // position i+1 is OFF // TO DO: add action for OFF position here } } delay(500); }

Schnelle Schritte

  • Erste Verwendung mit Arduino UNO Q? Folgen Sie dem Tutorial Erste Schritte mit Arduino UNO Q, um Ihre Entwicklungsumgebung vorzubereiten, bevor Sie fortfahren.
  • Schließen Sie den DIP-Schalter an: Verbinden Sie eine Seite jeder Position mit GND und die andere Seite mit den Pins 2–5 des Arduino UNO Q.
  • Verbindung: Schließen Sie Arduino UNO Q mit einem USB-C-Kabel an Ihren Computer an.
  • Öffnen Sie Arduino App Lab: Starten Sie Arduino App Lab und warten Sie, bis es Ihren Arduino UNO Q erkennt.
  • Erstellen Sie eine neue App: Klicken Sie auf die Schaltfläche Neue App erstellen.
Neue App in Arduino App Lab auf Arduino UNO Q erstellen
  • Geben Sie der App einen Namen, zum Beispiel: DIYables_DIPSwitch
  • Klicken Sie auf Erstellen, um zu bestätigen.
  • Sie sehen einen Satz von Ordnern und Dateien, die in Ihrer neuen App generiert werden.
Arduino App Lab App-Ordner und Dateien auf Arduino UNO Q
  • Suchen Sie die Datei sketch/sketch.ino — hier fügen Sie die MCU-Skizze ein.
  • Fügen Sie die Skizze ein: Kopieren Sie den MCU-Code oben und fügen Sie ihn in die Skizze-Datei ein. Behalten Sie andere Dateien als Standard.
    • Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.
    Add sketch library in Arduino App Lab on Arduino UNO Q
    • Search for Arduino_RouterBridge created by Arduino and click the Install button.
    My Apps / DIYables Apps
    Run
    Bricks
    No bricks added...
    Sketch Libraries
    No sketch libra...
    Files
    python
    sketch
    .gitignore
    README.md
    app.yaml
    sketch.ino
    Add sketch library
    Arduino_RouterBridge Arduino

    This library provides a simple RPC bridge for Arduino UNO Q boards, allowing communication between the board and other devices using MsgPack serialization.

    0.4.1
    Install
    More Info
    • Hochladen: Klicken Sie auf die Schaltfläche Ausführen in Arduino App Lab, um zu kompilieren und auf den STM32 hochzuladen.
    Klicken Sie auf die Schaltfläche Ausführen in Arduino App Lab auf Arduino UNO Q
    • Schalten Sie die DIP-Positionen nacheinander um. Der Status wird alle 500 ms gelesen und über Bridge Monitor im nächsten Abschnitt protokolliert.
    • Profi-Tipp: Sie können POSITION_NUM und SWITCH_PINS[] erweitern, um 6, 8 oder 10-Positionen-DIP-Schalter zu unterstützen.

    MCU-Code — Codierung von DIP-Positionen in eine Zahl

    /* * Dieser Arduino UNO Q Code wurde von newbiely.de entwickelt * Dieser Arduino UNO Q Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-uno-q/arduino-uno-q-dip-switch */ #define POSITION_NUM 4 #define ON LOW #define OFF HIGH // define the pins connected to the DIP switch const int SWITCH_PINS[] = { 2, 3, 4, 5 }; void setup() { // set the DIP switch pins as inputs with pull-up resistors enabled for (int i = 0; i < POSITION_NUM; i++) pinMode(SWITCH_PINS[i], INPUT_PULLUP); } void loop() { int encoded_state = 0; for (int i = 0; i < POSITION_NUM; i++) { int state = digitalRead(SWITCH_PINS[i]); if (state == ON) encoded_state |= 1 << (POSITION_NUM - i - 1); } // TO DO: use encoded_state (0-15) in your logic here delay(500); }

    Schnelle Schritte

    • Verwenden Sie die gleiche App und Verkabelung aus dem vorherigen Beispiel.
    • Ersetzen Sie die Skizze durch den Codierungs-Code oben und klicken Sie auf Ausführen.
    • Schalten Sie DIP-Positionen zu verschiedenen Kombinationen um und beobachten Sie die Änderung des codierten Werts im Bridge Monitor.

    Linux + MCU Bridge-Programmierung

    Arduino UNO Q hat zwei Prozessoren, die zusammenarbeiten: den MPU (Qualcomm, führt Debian Linux aus) und den MCU (STM32, führt Zephyr OS mit Ihrer Arduino-Skizze aus). Sie kommunizieren mit RPC über die Bibliothek Arduino_RouterBridge — nie über rohe serielle Anschlüsse.

    • Der DIP-Schalter ist mit dem MCU (STM32) verbunden — verdrahtet mit digitalen Eingabepins auf dem STM32. Der MCU liest jede Position mit digitalRead() mit INPUT_PULLUP.
    • Der MPU kann den DIP-Schalter nicht direkt lesen — er muss den Status über Bridge.call() vom MCU anfordern. Der MCU antwortet sofort.
    • Der MPU hat Wi-Fi — da der MPU vollständiges Debian Linux mit Wi-Fi ausführt, kann er den DIP-Status bei Bedarf über Telegram melden.
    • Kommunikation: Bridge.call() auf der Linux-Seite ruft Bridge.provide() Funktionen auf der MCU-Seite auf
    • ⚠️ Reserviert: /dev/ttyHS1 (Linux) und Serial1 (MCU) werden vom Arduino Router verwendet — öffnen Sie sie nie direkt

    Kurz gesagt: MPU fordert DIP-Status an → MCU liest Pins → MCU meldet Positionen und codierten Wert → MPU protokolliert oder leitet ihn weiter.

    MCU-Skizze — DIP-Schalter mit Bridge und Monitor-Ausgabe:

    /* * Dieser Arduino UNO Q Code wurde von newbiely.de entwickelt * Dieser Arduino UNO Q Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-uno-q/arduino-uno-q-dip-switch */ #include "Arduino_RouterBridge.h" #define POSITION_NUM 4 #define ON LOW #define OFF HIGH const int SWITCH_PINS[] = { 2, 3, 4, 5 }; void get_dip_state() { for (int i = 0; i < POSITION_NUM; i++) { int state = digitalRead(SWITCH_PINS[i]); Monitor.print("position "); Monitor.print(i + 1); Monitor.print(": "); Monitor.println(state == ON ? "ON" : "OFF"); } } void get_encoded_state() { int encoded_state = 0; for (int i = 0; i < POSITION_NUM; i++) { int state = digitalRead(SWITCH_PINS[i]); if (state == ON) encoded_state |= 1 << (POSITION_NUM - i - 1); } Monitor.println(encoded_state); } void setup() { for (int i = 0; i < POSITION_NUM; i++) pinMode(SWITCH_PINS[i], INPUT_PULLUP); Bridge.begin(); Monitor.begin(); Bridge.provide("get_dip_state", get_dip_state); Bridge.provide("get_encoded_state", get_encoded_state); Monitor.println("DIP Switch Bridge ready"); } void loop() {}

    Python-Skript (Arduino App Lab) — Pollen des DIP-Status von Linux:

    /* * Dieser Arduino UNO Q Code wurde von newbiely.de entwickelt * Dieser Arduino UNO Q Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-uno-q/arduino-uno-q-dip-switch */ from arduino.app_utils import * import time def loop(): while True: Bridge.call("get_dip_state") encoded = Bridge.call("get_encoded_state") print(f"Encoded value: {encoded}") time.sleep(2) App.run(user_loop=loop)
    • Hinweis: Stellen Sie sicher, dass Bridge.begin() in der MCU-Skizze aufgerufen wird und die Skizze hochgeladen wird, bevor Sie das Python-Skript auf der Linux-Seite ausführen.
    • ⚠️ Warnung: Öffnen Sie nie direkt /dev/ttyHS1 (auf Linux) oder verwenden Sie Serial1 (auf MCU) in Ihrem Code — diese sind vom Arduino Router reserviert, und der Zugriff darauf unterbricht die Bridge.

    Schnelle Schritte

    • MCU-Skizze hochladen: Öffnen Sie Arduino App Lab, erstellen Sie eine neue App, fügen Sie die Bridge MCU-Skizze oben in sketch/sketch.ino ein, installieren Sie die Bibliothek Arduino_RouterBridge, und klicken Sie auf Ausführen.
    • Fügen Sie das Python-Skript hinzu: Fügen Sie den Python-Code oben auf der Python-Registerkarte der gleichen App ein.
    • Führen Sie die App aus: Klicken Sie auf Ausführen — die Python-Seite pollen den DIP-Schalter alle 2 Sekunden.
    • Schalten Sie DIP-Positionen zu verschiedenen Kombinationen um.
    • Überprüfen Sie die Konsole: Öffnen Sie die Registerkarte Konsole → MCU Monitor-Unterregisterkarte, um Positionen und codierten Wert in Echtzeit protokolliert zu sehen.

    App Lab Konsolenausgabe

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    Message (Enter to send a message to "Newbiely" on usb(2820070321))
    New Line
    9600 baud
    DIP Switch Bridge ready position 1: OFF position 2: OFF position 3: OFF position 4: OFF position 1: ON position 2: OFF position 3: OFF position 4: OFF

    Telegram-Integration

    Lesen Sie den aktuellen DIP-Schalter-Status remote von überall über Telegram.

    Wenn Sie noch keinen Telegram-Bot haben, siehe So erstellen Sie einen Telegram-Bot, um Ihr Bot-Token vor dem Fortfahren zu erhalten.

    MCU-Skizze: Behalten Sie die gleiche MCU-Skizze aus dem vorherigen Bridge-Abschnitt — keine Änderungen erforderlich. Stellen Sie sicher, dass sie bereits hochgeladen ist und auf dem STM32 läuft, bevor Sie fortfahren.

    Python-Skript (Arduino App Lab) — Telegram-Bot für DIP-Schalter-Status:

    /* * Dieser Arduino UNO Q Code wurde von newbiely.de entwickelt * Dieser Arduino UNO Q Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino-uno-q/arduino-uno-q-dip-switch */ from arduino.app_utils import * import requests import time BOT_TOKEN = "YOUR_BOT_TOKEN" API_URL = f"https://api.telegram.org/bot{BOT_TOKEN}" last_update_id = 0 def send_message(chat_id, text): requests.post(f"{API_URL}/sendMessage", json={"chat_id": chat_id, "text": text}) def get_updates(): global last_update_id resp = requests.get(f"{API_URL}/getUpdates", params={"offset": last_update_id + 1, "timeout": 5}) return resp.json().get("result", []) def loop(): global last_update_id updates = get_updates() for update in updates: last_update_id = update["update_id"] msg = update.get("message", {}) chat_id = msg.get("chat", {}).get("id") text = msg.get("text", "").strip() if text == "/state": state = Bridge.call("get_dip_state") send_message(chat_id, state) elif text == "/value": encoded = Bridge.call("get_encoded_state") send_message(chat_id, f"DIP switch encoded value: {encoded}") else: send_message(chat_id, "Commands:\n/state — read each DIP position (ON/OFF)\n/value — get encoded integer value") time.sleep(1) App.run(user_loop=loop)
    • Hinweis: Ersetzen Sie YOUR_BOT_TOKEN durch das Token, das Sie von @BotFather auf Telegram erhalten haben.
    • Senden Sie /state, um den EIN/AUS-Status jeder Position zu sehen.
    • Senden Sie /value, um den codierten Ganzzahlwert (0–15 für einen 4-Positionen-DIP-Schalter) zu erhalten.

    Schnelle Schritte

    • MCU-Skizze hochladen: Verwenden Sie die Bridge MCU-Skizze aus dem vorherigen Abschnitt (laden Sie sie zuerst hoch, falls nicht bereits geschehen).
    • Fügen Sie das Telegram-Skript ein: Kopieren Sie den Python-Code oben auf der Python-Registerkarte Ihrer App in Arduino App Lab ein.
    • Legen Sie Ihr Token fest: Ersetzen Sie YOUR_BOT_TOKEN im Skript durch Ihr tatsächliches Bot-Token.
    • Führen Sie die App aus: Klicken Sie auf Ausführen — der Bot beginnt, auf Telegram-Nachrichten zu lauschen.
    • Testen Sie es: Schalten Sie einige DIP-Positionen um, senden Sie /value — bestätigen Sie, dass die Ganzzahl Ihrem Schalter-Muster entspricht.

    App Lab Konsolenausgabe

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    [2026-04-29 12:00:01] Telegram: /value [2026-04-29 12:00:01] DIP switch encoded value: 5 [2026-04-29 12:03:20] Telegram: /state [2026-04-29 12:03:20] position 1: ON position 2: OFF position 3: ON position 4: OFF
    Telegram
    Telegram 12:45
    Welcome to Telegram!
    ArduinoBot 10:19
    Chatting with Arduino...
    telegram-botfather
    BotFather Yesterday
    Your bot has been created.

    ArduinoBot

    bot
    Today
    /value
    10:15 AM ✓✓
    DIP switch encoded value: 5
    10:16 AM
    /state
    10:17 AM ✓✓
    position 1: ON position 2: OFF position 3: ON position 4: OFF
    10:18 AM

    OpenClaw-Integration

    Sie können OpenClaw an dieses Tutorial anpassen, indem Sie die Anleitung zum Tutorial Arduino Uno Q - OpenClaw lesen.

    Anwendungs- / Projektideen

    • Adressauswahl: Verwenden Sie einen DIP-Schalter, um einer eindeutigen Geräteadresse in einem Mehrgeräte-Netzwerk zuzuweisen
    • Fernmodus-Überprüfung: Senden Sie /value über Telegram, um zu überprüfen, welcher Betriebsmodus konfiguriert ist
    • Feature-Flaggen: Weisen Sie jede DIP-Position einem Feature-Toggle zu (Debug-Modus, Protokollierung usw.)
    • Sicherheits-Code-Eintrag: Verwenden Sie eine 4-Positionen-DIP-Schalter-Kombination als einfachen Zugriffscode
    • Konfigurationsberichterstattung: Senden Sie den aktuellen DIP-Status automatisch über Telegram beim Hochfahren

    Fordern Sie sich selbst heraus

    • Einfach: Fügen Sie Code hinzu, um Positionsetiketten (z. B. "Debug: EIN", "Verbose: AUS") auf der Grundlage der Bedeutung jeder DIP-Position zu drucken
    • Mittel: Erweitern Sie die Bridge-Skizze, um alle 4 Positionen einzeln als separate get_position_N() Rückrufe verfügbar zu machen
    • Fortgeschritten: Erstellen Sie einen Telegram-Bot, der eine Benachrichtigung sendet, wann immer sich der codierte DIP-Wert ändert — verfolgen Sie den vorherigen Wert und vergleichen Sie auf jede Abfrage

    Funktionsreferenzen

    ※ UNSERE NACHRICHTEN

    • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!