Oxocard in C programmieren

NanoPy ist die Standard-IDE für Oxocard-Projekte. Durch den in der Oxocard eingesetzten ESP32 als Oxocard-Basis bietet sich aber auch die Arduino -IDE mit C++ als Entwicklungsumgebung an. Bei der Programmierung kann das Vorteile bringen, wie der vom Titel her gleichlautende Artikel in der Zeitschrift Make 7/2025 S. 98-102 zeigt.

Im Github-Repository make-magazin.de/xn1x zum Artikel finden Sie folgende Programmbeispiele:

  • Breadboardtest
  • Grafiktest
  • Oxocard Cartridge Detektion
  • Distanzmessung mit ToF Sensor VL53L5CX
  • Finden einer Oxocard-Position über die Google Geolocation API
  • Oxocard MQTT Client sendet Daten an Wetter Portale
  • ESP32 MQTT Broker mit integriertem Webinterface

2025-12-23/CK

Qualcomm übernimmt Arduino

Wie die Pressemitteilung von Qualcomm zum Ausdruck bringt, sollen Entwickler schnelleren Zugang zu modernster Computertechnologie und KI erhalten. Hier ist der Wortlaut der PM zu lesen.

Der Arduino UNO Q wird das erste Board sein, welches einen STM32U585 Mikrocontroller und einen Qualcomm Dragonwing QRB2210 auf dem Board vereint. Arduino und Qualcomm bewerben das Board auch für KI-Anwendungen (Edge AI). Das Board soll Ende Oktober verfügbar sein.

Als Entwicklunsumgebung dient das neue Arduino App Lab.


2025-10-08/ck

Local ESP32 MQTT Broker

MQTT (Message Queuing Telemetry Transport) is a messaging protocol developed for IoT (Internet of Things) applications. It enables efficient data exchange between devices, even when bandwidth, energy, or computing power are limited.


MQTT uses the publish/subscribe model. A central MQTT broker mediates all messages:


A publisher sends a message with a specific topic, which can be understood here as a path.


Subscribers who have subscribed to this topic then receive the message.

Senders and recipients – publishers and subscribers – are completely decoupled, do not need to know each other, and do not need to be online at the same time.

MQTT is therefore a lean communication protocol for the reliable, simple, and flexible exchange of messages between devices – locally or via the Internet.

MQTT brokers are the central hub for communication via MQTT and can be located in the cloud or on an external server. This allows data to be sent and received from anywhere via the Internet – ideal for distributed IoT systems.


Local communication directly in the LAN/WLAN prevents delays caused by routing via external servers and is perfect for time-critical applications. Added to this is the security aspect, as data remains in the local network and full control over access (encryption (TLS), user rights, etc.) is maintained.

Cloud brokers can fail or stop providing services. A local broker continues to run stably as long as the system is switched on.


Therefore, there are many good reasons for using a local network with a local MQTT broker if requirements allow you to do without the Internet.

MQTT (Message Queuing Telemetry Transport) ist ein für IoT-Anwendungen (Internet of Things) entwickeltes Nachrichtenprotokoll. Es ermöglicht den effizienten Datenaustausch zwischen Geräten, auch wenn Bandbreite, Energie oder Rechenleistung begrenzt sind.

MQTT verwendet das Publish/Subscribe-Modell. Ein zentraler MQTT-Broker vermittelt alle Nachrichten:

Ein Publisher sendet eine Nachricht mit einem bestimmten Topic, welcher hier als Pfad verstanden werden kann.

Subscriber, die diesen Topic abonniert haben, erhalten dann die Nachricht

Sender und Empfänger – Publisher und Subscriber – sind komplett entkoppelt, müssen sich nicht kennen oder gleichzeitig online sein.

Also ist MQTT ein schlankes Kommunikationsprotokoll für das zuverlässige, einfache und flexible Austauschen von Nachrichten zwischen Geräten – lokal oder übers Internet.

MQTT-Broker sind die zentrale Schaltstelle bei der Kommunikation über MQTT und können sich in der Cloud oder auf einem externen Server befinden. Dadurch können Daten von überall über das Internet gesendet und empfangen werden – ideal für verteilte IoT-Systeme.

Lokale Kommunikation direkt im LAN/WLAN verhindert Verzögerungen durch das Routing über externe Server und ist perfekt für zeitkritische Anwendungen. Hinzu kommt der Sicherheitsaspekt, wenn Daten im lokalen Netzwerk bleiben und die volle Kontrolle über den Zugriff (Verschlüsselung (TLS), Benutzerrechte etc.) gegeben ist.

Cloud-Broker können ausfallen oder Dienste einstellen. Ein lokaler Broker läuft stabil weiter, solange das System eingeschaltet ist.

Es spricht also einiges für ein lokales Netzwerk mit einem lokalen MQTT-Broker, wenn es die Anforderungen erlauben, auf das Internet zu verzichten.


„Local ESP32 MQTT Broker“ weiterlesen

Arduino – Das umfassende Handbuch

Von der ersten Auflage des Arduino Handbuchs sind heute genau noch fünf Restexemplare vorhanden, die ich zu einem stark reduzierten Preis anbiete.

https://store74641781.company.site/Arduino-Das-umfassende-Handbuch-p731369079

Für Bestellungen aus der Schweiz ist der Preis
CHF 15.80 :

Embedded TWINT button

Die Grundlagen sind in den neuen Auflagen unverändert übernommen, allerdings sind aktuelle Mikrocontroller und neue Anwendungen mit aufgenommen. Sind diese Neuentwicklungen nicht von vorrangigem Interesse, dann kann diese Auflage dennoch hilfreich sein.

Zu Ihrer besseren Orientierung und als Entscheidungshilfe habe ich die Inhaltsverzeichnisse in einer tabellarischen Übersicht vergleichend zusammengestellt.


2025-04-12/CK

Programmieren mit ChatGPT

Für die Temperaturmessung mit einem DS18B20 Sensor und einem XIAO nRF52840 mit XIAO Expansions Board habe ich ChatGPT um Unterstützung beim Programmieren gebeten.

ChatGPT Prompt:

Erstelle ein Arduino Programm für einen DS18B20 an einem Seeedstudio XIAO nRF52840 und zeige die gemessene Temperatur auf einem OLED an.

ChatGPT Antwort:

Hier ist ein Arduino-Sketch, der die Temperatur von einem DS18B20-Sensor misst und auf einem OLED-Display mit dem Seeedstudio XIAO nRF52840 ausgibt. Dieser Code verwendet die Libraries OneWire und DallasTemperature für den Temperatursensor sowie Adafruit SSD1306 für das OLED-Display.

Voraussetzungen

  1. Installiere die Libraries:
    • OneWire und DallasTemperature (über den Bibliotheks-Manager in der Arduino-IDE).
    • Adafruit SSD1306 und Adafruit GFX (ebenfalls über den Bibliotheks-Manager).
  2. Schließe den DS18B20-Sensor und das OLED korrekt an das Seeedstudio XIAO nRF52840 an:
    • DS18B20:
      • Datenleitung an einen digitalen Pin (z. B. D2).
      • Widerstand von 4,7 kOhm zwischen Datenleitung und VCC.
    • OLED:
      • Verbinde SDA und SCL mit den entsprechenden Pins auf dem Board.

Code

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <OneWire.h>
#include <DallasTemperature.h>

// Pin-Konfiguration
#define ONE_WIRE_BUS 2  // DS18B20 Datenleitung an Pin D2
#define SCREEN_WIDTH 128 // OLED Breite
#define SCREEN_HEIGHT 64 // OLED Höhe
#define OLED_RESET    -1 // Kein Reset-Pin benötigt
#define OLED_I2C_ADDR 0x3C // I2C-Adresse des OLED-Displays

// Objekte für DS18B20 und OLED
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void setup() {
  // Serieller Monitor
  Serial.begin(9600);
  // OLED initialisieren
  if (!display.begin(SSD1306_I2C_ADDRESS, OLED_I2C_ADDR)) {
    Serial.println(F("OLED-Initialisierung fehlgeschlagen!"));
    for (;;);
  }

  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println(F("Start DS18B20 Test"));
  display.display();
  // DS18B20 initialisieren
  sensors.begin();
  delay(1000);
}

void loop() {
  // Temperatur messen
  sensors.requestTemperatures(); 
  float temperatureC = sensors.getTempCByIndex(0);
  // Temperatur auf dem seriellen Monitor ausgeben
  Serial.print(F("Temperatur: "));
  Serial.print(temperatureC);
  Serial.println(F(" °C"));
  // OLED aktualisieren
  display.clearDisplay();
  display.setTextSize(2);
  display.setCursor(0, 0);
  display.println(F("Temp:"));
  display.setCursor(0, 20);
  display.setTextSize(3);
  display.print(temperatureC, 1);
  display.print(F(" C"));
  display.display();
  // Kurze Pause
  delay(1000);
}

Verkabelung

  1. DS18B20:
    • VCC -> 3.3V (oder 5V)
    • GND -> GND
    • Daten -> D2 (ONE_WIRE_BUS)
    • 4,7 kOhm Widerstand zwischen Daten und VCC
  2. OLED:
    • SDA -> SDA-Pin (standardmäßig D6 beim XIAO nRF52840)
    • SCL -> SCL-Pin (standardmäßig D7 beim XIAO nRF52840)
    • VCC -> 3.3V
    • GND -> GND

Hinweis

Falls der DS18B20 mehrere Sensoren unterstützt (z. B. durch Daisy-Chaining), kann man die individuelle Adresse jedes Sensors abfragen und verwenden. Der obige Code liest jedoch nur den ersten angeschlossenen Sensor aus.

Verwendete Hardware

Im Bild ist das XIAO Expansions Board mit aufgestecktem XIAO nRF52840 Controller zu sehen. Nach außen stehen eine I2C- und eine UART-Schnittstelle sowie eine digitale I/O (D0) zur Verfügung. Für den hier eingesetzten DS18B20 wird die digitale I/O verwendet. Die Erweiterungen über das I2C- und UART-Interface werden hier nicht betrachtet.

Angepasste Softwareanwendung

Der von ChatGPT vorgeschlagene Code bedarf einiger Anpassungen, die im folgenden Listing fett markiert sind.

Zum Anschluss des DS18B20 wird hier Pin D0 verwendet. Die serielle Schnittstelle wird auf 115200 Baud eingestellt, was allerdings nicht zwingend ist. Die Anweisung zur Initialisierung des OLED von ChatGPT ist nicht korrekt und muss entsprechend angepasst werden. Die Ausgabe auf dem OLED wird auch leicht modifiziert, was aber eine Geschmacksfrage und optional ist.

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <OneWire.h>
#include <DallasTemperature.h>

// Pin-Konfiguration
#define ONE_WIRE_BUS 0  // DS18B20 Datenleitung an Pin D0
#define SCREEN_WIDTH 128 // OLED Breite
#define SCREEN_HEIGHT 64 // OLED Höhe
#define OLED_RESET    -1 // Kein Reset-Pin benötigt
#define OLED_I2C_ADDR 0x3C // I2C-Adresse des OLED-Displays

// Objekte für DS18B20 und OLED
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void setup() 
{
  // Serieller Monitor
  Serial.begin(115200);

  // OLED initialisieren
  if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_I2C_ADDR)) {
    Serial.println(F("OLED-Initialisierung fehlgeschlagen!"));
    for (;;);
  }
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println(F("Start DS18B20 Test"));
  display.display();

  // DS18B20 initialisieren
  sensors.begin();
  delay(1000);
}

void loop() 
{
  // Temperatur messen
  sensors.requestTemperatures();  
  float temperatureC = sensors.getTempCByIndex(0);

  // Temperatur auf dem seriellen Monitor ausgeben
  Serial.print(F("Temperatur: "));
  Serial.print(temperatureC);
  Serial.println(F(" °C"));

  // OLED aktualisieren
  display.clearDisplay();
  display.setTextSize(2);
  display.setCursor(0, 0);
  display.println(F("Temperatur"));
  display.setCursor(0, 30);
  display.setTextSize(3);
  display.print(temperatureC, 1);
  display.print(F(" C"));
  display.display();

  // Kurze Pause
  delay(1000);
}

Anhand einer einfachen Aufgabenstellung wollte ich zeigen, wie ChatGPT bei der Programmierung helfen kann. Es sollte nicht erwartet werden, dass ein von ChatGPT vorgeschlagenes Programm fehlerfrei ist resp. kein Optimierungspotential aufweist.

Innerhalb kurzer Zeit steht allerdings ein Programmgerüst für das Debugging und die Optimierung zur Verfügung, wodurch die Zeit für die Programmierung deutlich reduziert werden kann.

Nutzen Sie KI zur Unterstützung bei der Programmierung? Ich bin an Ihren Erfahrungen interessiert.


2024-12-04/CK

Raspberry Pi Pico 2: Leistungsstarker Mikrocontroller im Test

Raspberry Pi Pico 2 ist ein Mikrocontroller-Board, das auf dem Raspberry Pi RP2350 Mikrocontroller-Chip basiert (im Bild links). Der Raspberry Pi Pico 2 W weist zusätzlich noch eine WiFi-Schnittstelle auf Basis des CYW43439 von Infineon auf (im Bild rechts).

Der Raspberry Pi Pico 2 wurde als kostengünstige und dennoch flexible Entwicklungsplattform für den RP2350 mit den folgenden Hauptmerkmalen entwickelt:
– RP2350A-Mikrocontroller mit 4 MB Flash
– RP2350A weist Dual-Core Cortex-M33 und alternativ Hazard3 RISC-V (RV32IMAC) auf
– microUSB B-Anschluss für Spannung und Daten-Upload
– 40-polige 21× 51 ‚DIP‘-Style 1 mm dicke Leiterplatte mit 0,1″ Through-Hole-Pins und Castellated Pins
◦ mit 26 Multi-Funktions 3.3 V General Purpose I/O (GPIO), 3 können für ADC verwendet werden
◦ kann als Modul oberflächenmontiert werden
– 3-poliger ARM Serial Wire Debug (SWD)-Anschluss
– Einfache und dennoch hochflexible Stromversorgungsarchitektur
◦ Verschiedene Optionen für die einfache Stromversorgung des Geräts über microUSB, externe Stromversorgungen oder Batterien
– Hohe Qualität, niedrige Kosten, hohe Verfügbarkeit (bis 2040 garantiert)
– Umfassendes SDK, Softwarebeispiele und Dokumentation

Alle Einzelheiten zum RP2350A-Mikrocontroller finden Sie im über 1300 Seiten umfassenden RP2350-Datenblatt.

Programmiert werden kann der Raspberry Pi Pico 2 (W) mit dem Raspberry Pi Pico C/C++ SDK, der Arduino IDE und in MicroPython.

Die Arduino IDE  ist durch das BSP https://github.com/earlephilhower/arduino-pico/releases zu erweitern, wodurch RP2350-basierte Boards wie das Raspberry Pi Pico 2 W, Sparkfun Thing Plus RP2350 und Pimoroni Pico Plus 2 W zusätzlich einen WiFi-Support erfahren. Die Arduino IDE unterstützt Cortex-M33 und RISC-V.

Zum Test der Performance habe ich für Cortex-M33 und RISC-V den CoreMark Benchmark laufen lassen und habe die folgenden, nahezu identischen Ergebnisse erzielt:

CoreMark Benchmark
Cortex-M33340.2
RISC-V332.8

Zum Vergleich mit anderen Mikrocontrollern möchte ich auf die Benchmark-Übersicht in meinem Blog verweisen.


Die XIAO Mikrocontroller-Familie ist nun durch den XIAO RP2350 um den RP2350 von Raspberry Pi erweitert.

Alle technischen Details finden Sie unter https://wiki.seeedstudio.com/getting-started-xiao-rp2350/.


2024-12-24/CK

Arduino – Das umfassende Handbuch

Am 1. August 2024 wird die 3. aktualisierte Auflage mit dem gleichlautenden Titel Arduino – Das umfassende Handbuch vom Rheinwerk-Verlag veröffentlicht und ist im Buchhandel erhältlich.
Das Interesse meiner Leserschaft hat diese dritte Auflage möglich gemacht. Dafür möchte ich Dank sagen.

Obwohl weniger aktuelle Themen gekürzt oder gar gestrichen wurden, hat der Umfang nochmal zugenommen:

887 Seiten, 3., aktualisierte Auflage 2024, gebunden, in Farbe Rheinwerk Computing,
ISBN 978-3-367-10279-2

Weitere Details unter Seite zum Buch.

Das Buch ist bestellbar über https://www.rheinwerk-verlag.de/arduino-das-umfassende-handbuch/ oder
https://www.amazon.de/Arduino-umfassende-Schaltungsskizzen-Code-Beispielen-Abbildungen/dp/3836291045/

Infineon for Makers

Beim Besuch der diesjährigen Embedded World in Nürnberg wurde ich auf diesen Slogan auf dem Infineon-Messestand aufmerksam.

Schon seit Jahren im Arduino-Umfeld unterwegs, kannte ich zwar die IDE DAVE im Zusammenhang mit 8051- und 80C166-Mikrocontrollern, doch die Aktivitäten im Bereich Arduino-kompatibler Cortex-Mikrocontroller hatte ich nicht auf dem Schirm. Kompetente Beratung am Stand brachte mir diesen Teil näher und ich konnte verschiedene Boards zum Test mit nach Hause nehmen.

Da die Arduino-kompatiblen XMC-Mikrocontroller von Infineon noch nicht in meinem Arduino Handbuch behandelt werden, möchte ich hiermit diese Lücke schließen.

Infineon4Makers

Infineon4Makers ist eine Plattform für Ingenieure, Maker und Enthusiasten, die ihre Ideen in innovative Entwürfe umsetzen wollen. Die Produktlinie umfasst eine breite Palette von Anwendungs- und Evaluation-Boards, Arduino-kompatible Shields und 2Go-Kits.

Seit einigen Jahren unterstützt eine wachsende Zahl von Infineon-Boards auch die Arduino-Plattform.

Arduino-Uno-Formfaktor

Die Integration in die Arduino-IDE und der Arduino-Uno-Formfaktor werden von ausgewählten Mikrocontroller-Boards (Controller und Shields) unterstützt.

XMC1100– und XMC4700-Boards sind Arduino-Uno-kompatible Mikrocontroller, die Arduino-Shields direkt kontaktieren können. An Arduino-Shields von Infineon gibt es eine breite Palette von Motorcontrollern bis hin zu leistungsstarken FET-Schaltern.

XMC1100 Boot Kit
XMC4700 Relax Kit
2Go

Die 2Go-Entwicklungskits sind auf die Bedürfnisse von Makern zugeschnitten, preisgünstig und vollständig kompatibel mit Infineons umfangreichem Portfolio an Maker-Tools, einschließlich Arduino.

Das XMC 2Go Kit mit dem XMC1100-Mikrocontroller ist ein sehr kompaktes, mit einem ARM® Cortex-M0 und einem On-board J-Link Lite Debugger ausgestattetes Evaluationsboard.

Ergänzt wird dieses Board durch die Infineon XENSIV – Sensor 2Go Kits und Shield2Go-Boards. Sensor 2Go Kits sind Plug-and-Measure-Evaluierungsboards, die bereits mit einem Sensor in Kombination mit einer ARM® Cortex®-M0 CPU ausgestattet sind.

MyIoT-Adapter ist ein Baseboard für die Aufnahme von Shield2Go-Boards und kann mit externer Hardware wie Arduino und Raspberry Pi kontaktiert werden.

Das Prototyping-Konzept, aufbauend auf Shield2Go-Boards und dem MyIoT-Adapter, bietet reichlich Flexibilität beim Prototyping.

Prototyping mit 2Go

In einem Anwendungsbeispiel zeige ich einen Prototyp eines CO2-Sensors auf Basis des XMC2Go-Mikrocontrollers und des XENSIVTM PAS CO2 Sensors auf einem MyIoT-Adapter. Zur Kontaktierung werden im Lieferumfang enthaltene Buchsen- und Stiftleisten montiert.

Die folgende Abbildung zeigt die Pinbelegung des XMC2Go, damit der Quelltext des Programms interpretiert werden kann. Dieses und weitere Programmbeispiele sind unter https://github.com/ckuehnel/Arduino2023/tree/main/XMC abgelegt.

XMC1100 XMC2Go Pinout

Da der XMC1100 XMC2Go die vom XENSIV PAS CO2 Sensors benötigten 5 V DC nicht bereitstellt, muss dieser Anschluss extern gespeist werden. Wird der MyIoT-Adapter hingegen durch einen Arduino Uno versorgt, dann stehen die 5 V auf der Arduino-Stiftleiste zur Verfügung.

Die Ausgabe des CO₂-Sensors über die Console zeigt der Screenshot in Abbildung 5.

Ausgabe CO2-Sensor

 Mit der vorgestellten 2Go-Hardware lassen sich sehr schnell Prototypen erstellen und in der Arduino IDE programmieren.

Eine Anleitung zur Einrichtung der Arduino IDE finden Sie unter https://community.infineon.com/t5/Projects/XMC-For-Arduino/ba-p/436495 und ein Repository unter https://github.com/Infineon/XMC-for-Arduino.


2024-05-03/CK

Solar-powered LoRaWAN node – online for over three years

In the blog post on WisBlock components from RAKwireless, I presented a LoRaWAN sensor node consisting of the following components:

Im Blogbeitrag zu WisBlock-Komponenten von RAKwireless habe ich einen LoRaWAN-Sensorknoten bestehend aus den folgenden Komponenten vorgestellt:

RAK4631Nordic nRF52840 BLE Core Module for LoRaWAN with LoRa SX1262
RAK1901Temperature and Humidity Sensor Sensirion SHTC3
RAK5005_OWisBlock Base Board
RAKBox-B2RAKBox-B2 Enclosure with solar panel
WisBlock Components

The test started on 18.03.2022 14:15 and has now been running for more than three years.

You can follow the function of the solar-buffered LoRaWAN node via the adjacent QR code or this public link.

Der Test startete am 18.03.2022 14:15 und läuft nun seit mehr als drei Jahren.

Über den nebenstehenden QR-Code oder diesen Public Link können Sie die Funktion des solar-gepufferten LoRaWAN-Knotens verfolgen.

I really like to work with the RAKwireless WisBlock components, which make prototyping very easy and convenient.

IoT projects for makers are described in the following book. The book is available in English, German and Spanish.

For more download options, visit the RAKwireless website.

More applications with WisBlock hardware can be found in this blog.

Ich arbeite sehr gern mit den WisBlock-Komponenten von RAKwireless, die ein komfortables Prototyping möglich machen.

IoT-Projekte für Maker sind im folgenden Buch beschrieben. Der Titel ist in Deutsch, Englisch und Spanisch erhältlich.

Auf der RAKwireless‘ Website finden Sie weitere Downloadmöglichkeiten.

Sie finden weitere Anwendungen mit WisBlock Hardware in diesem Blog.


2025-05-03/CK