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:
# 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);
// LED an Pin 18
int LED = 18;
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
BluetoothLE
WiFi
#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: