Das Board
Der Arduino Nano 33 IoT ist ein Mikrocontroller-Board im Nano-Format. Es besteht aus dem eigentlichen Mikrocontroller, digitalen Ein- und Ausgängen und analogen Eingängen. Zusätzlich ist ein WiFi-Modul und ein Bluetooth-LE-Modul verbaut.

Quelle: 🔗https://docs.arduino.cc/hardware/nano-33-iot (abgerufen am 11.03.23)
An diese Ein- und Ausgänge können zum Beispiel ⇒LEDs, Lautsprecher, Displays, Motoren oder Sensoren angeschlossen werden. Der Mikrocontroller kann alle diese Bauteile steuern, Signale auslesen und aufgrund der gelesenen Daten verschiedene Aktionen auslösen.
- Der Reset-Knopf startet das gerade hochgeladene Programm neu.
- Die digitalen Ein-/Ausgänge liefern im Normalfall ein HIGH (1) oder LOW (0). Eine Ausnahme bilden die mit einem ~ gekennzeichneten Pins. Sie können mit der ⇒Pulsweitenmodulation angesprochen werden.
- Die analogen Eingänge messen die anliegende Spannung. Diese Spannung wird vom Analog-Digital-Wandler (ADC = Analog Digital Converter) in digitale Werte zwischen 0 und 1023 umgewandelt.
- Die Eingänge SCL (A5) und SDA (A4) werden über den ⇒I2C-Bus angesteuert.
- die Pins RX (Receiver = Empfänger) und TX (Transmitter = Sender) werden für die Kommunikation mit dem Computer über die USB-Schnittstelle verwendet. Sie können nur dann als digitale Ein- oder Ausgänge verwendet werden, wenn der Arduino über eine externe Stromzufuhr betrieben wird.
Board installieren

- Icon für den Boardverwalter anklicken oder Werkzeuge-> Board -> Boardverwalter
- nach dem SAMD Board suchen
- Board installieren
Bluetooth LE
Das Programm
Zunächst musst du die Bibliothek ArduinoBLE installieren:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | #include “ArduinoBLE.h” /* eindeutige UUID bestimmen: https://www.guidgenerator.com/online-guid-generator.aspx https://www.uuidgenerator.net/ BLERead | BLEWrite | BLENotify -> schreiben, lesen, Info */ // Name BLE-Service BLEService LEDSchalten(“19b10000-e8f2-537e-4f6c-d104768a1214”); BLEUnsignedCharCharacteristic Auswahl(“19b10000-e8f2-537e-4f6c-d104768a1214”, BLERead | BLEWrite | BLENotify); void setup() { Serial.begin(9600); // auf serielle Verbindung warten while (!Serial); delay(1000); // pinMode festlegen pinMode(LED_BUILTIN, OUTPUT); // BLE starten if (!BLE.begin()) Serial.println(“Bluetooth-Modul konnte nicht gestartet werden!”); else Serial.println(“Bluetooth-Modul erfolgreich gestartet!”); // Name festlegen (wird in der App angezeigt) und den Service (LEDSchalten) zuweisen BLE.setLocalName(“LED schalten”); BLE.setAdvertisedService(LEDSchalten); // Auswahl als Platzhalter für den in der App gewählten Wert LEDSchalten.addCharacteristic(Auswahl); // Service LEDSchalten hinzufügen BLE.addService(LEDSchalten); // Startwert für die Kommunikation schreiben Auswahl.writeValue(0); // Zuweisung starten BLE.advertise(); } void loop() { // auf die Verbindung zu Geräten warten BLEDevice Verbindung = BLE.central(); // wenn der ESP32 mit einem Gerät verbunden ist … if (Verbindung) { Serial.println(“Verbunden … ”); // solange der Controller mit einem Gerät verbunden ist … while (Verbindung.connected()) { if (Auswahl.written()) { // LED einschalten if (Auswahl.value() == ‘1’) { Serial.print(char(Auswahl.value())); Serial.println(“ -> LED ein”); digitalWrite(LED_BUILTIN, HIGH); } // LED ausschalten if (Auswahl.value() == ‘0’) { Serial.print(char(Auswahl.value())); Serial.println(F(“ -> LED aus”)); digitalWrite(LED_BUILTIN, LOW); } } } } } |
Smartphone-Apps
BLE Terminal (Android: Innovators Den)
![]() | ![]() | ![]() |
BLE Terminal (iOS)
![]() | ![]() |
BluetoothLE (iOS)
![]() | ![]() | ![]() | ![]() |
LightBlue (iOS Android)
![]() | ![]() | ![]() |
| Android zeigt als Name LED schalten | ||
![]() | ![]() | ![]() |
Bluetooth for Arduino
![]() | ![]() | ![]() | ![]() | ![]() |
Webserver
Installiere zunächst die benötigte Bibliothek WiFiNINA:

Das Programm zeigt im Browser 6 Zufallszahlen an.
Im Seriellen Monitor wird die mit DHCP ermittelte IP angezeigt.

Diese Adresse musst du in einem Browser deiner Wahl eingeben.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | #include “WiFiNINA.h” // WiFi-Daten char Router[] = “Router_SSID”; char Passwort[] = “xxxxxxx”; // Minimum/Maximum der Zufallszahlen const byte Minimum = 1; const byte Maximum = 49; WiFiServer WiFiServer(80); WiFiClient WiFiClient; void setup() { Serial.begin(9600); // auf serielle Verbindung warten while (!Serial) ; delay(500); // WiFi starten WiFi.begin(Router, Passwort); // Verbindung herstellen while (WiFi.status() != WL_CONNECTED) { delay(200); Serial.print(“.”); } // SSID des Routers anzeigen Serial.println(); Serial.print(“Verbunden mit ”); Serial.println(WiFi.SSID()); // IP anzeigen Serial.println(WiFi.localIP()); // Webserver starten WiFiServer.begin(); // IP des Servers/des verbunden Computers anzeigen Serial.print(“Server: ”); Serial.println(WiFi.SSID()); // IP des Arduinos anzeigen Serial.print(“IP Adresse Arduino DHCP: ”); Serial.println(WiFi.localIP()); // Zufallsgenerator mit dem Signal an A0 starten randomSeed(analogRead(A0)); } void loop() { // auf WiFiClienten warten … WiFiClient = WiFiServer.available(); if (WiFiClient) { // Seite aufbauen wenn SeiteAufbauen true ist boolean SeiteAufbauen = true; // solange der WiFiClient verbunden ist … while (WiFiClient.connected()) { if (WiFiClient.available()) { // Anforderung vom WiFiClienten lesen … char Zeichen = WiFiClient.read(); // wenn als Zeichen neue Zeile (\n) übergeben wird // SeiteAufbauen true ist -> Seite anzeigen if (Zeichen == ‘\n’ && SeiteAufbauen) { /* HTML-Seite aufbauen die folgenden Anweisungen müssen mit print oder println gesendet werden println “verschönert” den Quelltext (erzeugt einen Zeilenumbruch im Quelltext) */ WiFiClient.println(“HTTP/1.1 200 OK”); WiFiClient.println(“Content-type:text/html”); // Leerzeile zwingend erforderlich WiFiClient.println(); WiFiClient.println(“<!doctype html>”); WiFiClient.println(“<html>”); WiFiClient.println(“<body>”); // <h2> Überschrift H2 WiFiClient.println(“<h2>Zufallszahlen</h2>”); // <hr> horizontale Linie WiFiClient.println(“<hr>”); // Zufallszahlen anzeigen for (int i = 0; i < 6; i++) { int Zahl = random(Minimum, Maximum); WiFiClient.println(Zahl); WiFiClient.println(“ ”); } WiFiClient.print(“<hr>”); // IPs anzeigen WiFiClient.print(“Eigene IP-Adresse: ”); WiFiClient.print(WiFiClient.remoteIP()); WiFiClient.print(“</b>”); WiFiClient.print(“<br>IP-Adresse Arduino: ”); WiFiClient.print(WiFi.localIP()); WiFiClient.println(“</body>”); WiFiClient.println(“</html>”); // HTTP-Antwort endet mit neuer Zeile WiFiClient.println(); // Seite vollständig geladen -> loop verlassen break; } // neue Zeile -> SeiteAufbauen auf true setzen if (Zeichen == ‘\n’) SeiteAufbauen = true; // die aktuelle Zeile enthält ein Zeichen else if (Zeichen != ‘\r’) SeiteAufbauen = false; } } delay(1); WiFiClient.stop(); } } |
Letzte Aktualisierung:



















