- Aan de slag met ESP32 Bluetooth
- Inzicht in Bluetooth Low Energy (BLE) en ESP32 Classic Bluetooth
- Arduino IDE voorbereiden voor ESP32
- Serieel Bluetooth-programma voor ESP32
- Seriële Bluetooth testen met ESP32
Bluetooth-modules zoals HC-05 en HC-06 zijn eenvoudig in te stellen en snel te gebruiken met Arduino IDE, maar ze hebben hun eigen beperking zoals een hoog stroomverbruik en ze werken op de oude Bluetooth V2.0. Ook heb ik onlangs een nieuwe ESP32 DEV-kit gekocht, deze modules hebben een aantal functies zoals ingebouwde Wi-Fi en Bluetooth, voldoende ADC- en DAC-pinnen, audio-ondersteuning, SD-kaartondersteuning, diepe slaapmodus enz. alles om IoT-projecten te bouwen.
En zoals elke hobbyist het geweldig zou vinden, wordt de ESP32 nu officieel ondersteund door de Arduino IDE. Eerder moesten we een enorme oplossing vinden met Neil Kolbans Library, maar dankzij het harde werk van deze gast is het programmeren van ESP32 met Arduino IDE een taartwandeling geworden. Daarom startte ik mijn Arduino IDE en ging ik door met enkele voorbeeld-BLE-programma's, waardoor ik niets begreep. Na een lange tijd van surfen en youtubing realiseerde ik me dat er nog veel meer te begrijpen valt als je met Bluetooth Low Energy (BLE) moet werken met ESP32. Ik besloot om de BLE in afzonderlijke artikelen te behandelen, dus hier zullen we de klassieke seriële Bluetooth van ESP32 gebruiken om een LED te schakelen met Smart Phone. Als je geïnteresseerd bent in het gebruik van de BLE-functies, bekijk dan dit artikel over ESP32 BLE Server en ESP32 BLE Client
Aan de slag met ESP32 Bluetooth
Het eerste programma dat ik wilde proberen, was een eenvoudig programma waarmee ik een LED aan of uit kan zetten vanaf een Bluetooth Terminal-applicatie van een mobiele telefoon, net als de goede oude HC-05-dagen. Maar het blijkt dat Bluetooth Low Energy (BLE) daar niet voor is ingesprongen. Ik ontdekte ook dat er twee soorten Bluetooth in de ESP32-module zitten, de ene is de klassieke Bluetooth en de andere is BLE Bluetooth Low Energy. Oké, maar waarom?…. waarom hebben we twee soorten Bluetooth en wat moet ik gebruiken voor mijn project?
Inzicht in Bluetooth Low Energy (BLE) en ESP32 Classic Bluetooth
De Bluetooth Low Energy, zoals de naam al aangeeft, verbruikt minder stroom dan klassieke Bluetooth. Dit wordt bereikt door gegevens naar behoefte te verzenden met vooraf gedefinieerde periodieke updates. Maar in tegenstelling tot klassieke Bluetooth wordt het niet gebruikt om bestanden of muziek over te zetten. Heeft u zich ooit afgevraagd hoe uw telefoon automatisch herkent dat het Bluetooth-apparaat dat u zojuist hebt gekoppeld een audioapparaat of een laptop of telefoon is, dan heeft u wellicht ook gezien dat het batterijniveau van een draadloze audiospeler of fitnessband automatisch wordt weergegeven in de statusbalk van jouw mobiel; dit alles is mogelijk met de kenmerken van BLE-apparaten. Een BLE-apparaat werkt met Bluetooth V4.0 en kan met een laag stroomverbruik werken als server of als client die maaktBLE een ideale keuze voor bakens, slimme horloges, fitnessbanden enz.
Klassieke Bluetooth aan de andere kant is gewoon de simpele, gewone Bluetooth die we gebruiken om bestanden en andere gegevens over te dragen. Aan bijna alle BLE-apparaten is klassieke Bluetooth-functionaliteit gekoppeld. De Bluetooth die wordt gebruikt in modules zoals HC-05 is een versie van de klassieke Bluetooth genaamd Bluetooth SSP (Serial Port Protocol), wat betekent dat Bluetooth het standaard seriële protocol volgt, wat het gemakkelijker maakt om gegevens te verzenden en ontvangen zonder veel overhead. Aan het einde van deze tutorial zullen we leren hoe we de seriële Bluetooth-functionaliteit in ESP32 kunnen gebruiken.
Hier in dit artikel zullen we de seriële Bluetooth-functie op ESP32 gebruiken om deze te koppelen met een smartphone en een bestaande Bluetooth Terminal-app uit de Play Store gebruiken om opdrachten naar de ESP32 te sturen en de ingebouwde LED dienovereenkomstig in te schakelen.
In latere artikelen behandelen we ESP32 BLE zowel als server als als client. De BLE-server wordt over het algemeen gebruikt om BLE-gegevens naar andere Bluetooth-apparaten te sturen en de BLE-client wordt gebruikt om andere BLE-apparaten te scannen en fungeert dus als baken.
Arduino IDE voorbereiden voor ESP32
Merk op dat Arduino IDE standaard geen ESP32-kaart ondersteunt; je moet ze downloaden en installeren met de boardmanager. Als dit je eerste programma met ESP32 is, volg dan deze tutorial om aan de slag te gaan om het ESP32-bord aan je Arduino toe te voegen en een testschets te uploaden.
Verder kunt u meer projecten doen met ESP32, zonder er een Microcontroller mee te gebruiken.
Serieel Bluetooth-programma voor ESP32
Het complete programma om een LED te schakelen met ESP32 Bluetooth wordt aan het einde van deze pagina gegeven. Laten we onder deze kop de code opsplitsen in kleine fragmenten en proberen ze te begrijpen. Als je al andere Bluetooth-modules zoals HC-05 hebt gebruikt, zou je merken dat dit ESP32 Bluetooth Classic-voorbeeldprogramma erg op elkaar lijkt.
Het idee van het programma is om een seriële Bluetooth-verbinding te initialiseren met ESP32 en te luisteren naar gegevens van gekoppelde apparaten. Als de binnenkomende gegevens '1' zijn, zetten we de LED aan en als deze '0' is, moeten we de LED uitschakelen. We beginnen ons programma door het headerbestand BluetoothSerial toe te voegen, waardoor de ESP32 Bluetooth werkt als Bluetoth SSP.
#include "BluetoothSerial.h" // Headerbestand voor seriële Bluetooth, wordt standaard toegevoegd aan Arduino
Er gebeuren veel dingen achter deze bibliotheek, maar we hebben ervoor gekozen om er niet diep op in te gaan om het simpel te houden. Het volgende dat we nodig hebben, is een object voor onze Bluetooth-gerelateerde bewerkingen. Hier heb ik de mijne ESP_BT genoemd , maar je kunt elke naam kiezen.
BluetoothSerial ESP_BT; // Object voor Bluetooth
Vervolgens binnen de void setup () -functie. We beginnen de seriële communicatie met baudrate 9600 en initialiseren het Bluetooth-signaal met een naam. Hier heb ik het "ESP32_LED_Control " genoemd, dit zal de naam zijn die onze telefoon zal vinden wanneer we proberen te koppelen. Eindelijk heb ik de ingebouwde LED-pin als outputpin verklaard, omdat we deze gaan schakelen op basis van het Bluetooth-signaal.
void setup () { Serial.begin (9600); // Start seriële monitor in 9600 ESP_BT.begin ("ESP32_LED_Control"); // Naam van uw Bluetooth-signaal Serial.println ("Bluetooth-apparaat is gereed om te koppelen"); pinMode (LED_BUILTIN, OUTPUT); // Specificeer dat LED-pin wordt uitgevoerd }
Binnen de oneindige lege lus- functie controleren we of er gegevens binnenkomen vanuit de Bluetooth-module, zo ja, dan worden de gegevens gelezen en opgeslagen in de variabele inkomend . We drukken deze waarde ook af op de seriële monitor om te controleren wat er door de Arduino wordt ontvangen.
if (ESP_BT.available ()) // Controleer of we iets ontvangen van Bluetooth { inkomend = ESP_BT.read (); // Lees wat we ontvangen Serial.print ("Ontvangen:"); Serial.println (inkomend);
Nu worden alle gegevens die worden ontvangen, opgeslagen in de variabele inkomende , zodat we deze variabele direct kunnen vergelijken met de verwachte waarde en de vereiste actie kunnen uitvoeren. Maar de waarde die vanaf Bluetooth wordt verzonden, heeft de vorm van een teken en Arduino leest de decimale waarde van het teken dat vanaf de telefoon wordt verzonden. In ons geval is voor char '0' de decimale waarde 48 en voor char '1' de decimale waarde 49. U kunt het ASCII-diagram raadplegen om te begrijpen wat de decimale waarde voor elk karakter zal zijn.
Hier hebben we de inkomende variabele vergeleken met 48 en 49 om respectievelijk op 0 en 1 te controleren. Als het een 1 is, schakelen we de LED uit en drukken we ook een bevestigingsbericht terug naar Bluetooth waarin staat dat de LED was uitgeschakeld en vice versa voor 0.
if (inkomend == 49) { digitalWrite (LED_BUILTIN, HIGH); ESP_BT.println ("LED ingeschakeld"); } if (inkomend == 48) { digitalWrite (LED_BUILTIN, LOW); ESP_BT.println ("LED uitgeschakeld"); }
Seriële Bluetooth testen met ESP32
Sluit uw ESP aan op uw Arduino IDE en selecteer het juiste bord en de juiste poort, zoals besproken in de handleiding Aan de slag. Aangezien het een 3 e board manager is, kan het wat langer duren voordat de code is gecompileerd en geüpload. Na het uploaden start u de seriële monitoren (alleen voor foutopsporing) en opent u de Bluetooth-instelling op uw telefoon. U zou een Bluetooth-apparaat moeten vinden met de naam ESP32_LED_Control pair with.
Nu kunt u elke Bluetooth-terminal-app op uw smartphone openen. Ik gebruik degene met de naam "Bluetooth Terminal" die is gedownload van de Google App Store. Verbind de Bluetooth-applicatie met het apparaat dat we zojuist hebben gekoppeld en typ 1 en druk op verzenden.
De ESP32-module zou het moeten ontvangen en de LED moeten inschakelen volgens ons programma en u ook een bevestigingsbericht moeten geven dat de LED is ingeschakeld, zoals in de bovenstaande schermafbeelding. Je kunt ook de seriële monitor bekijken die de gegevens toont die worden ontvangen door de ESP32 Bluetooth in decimaal formaat, dat wil zeggen dat je Arduino 48 voor 0 en 49 voor 1 zal lezen, zoals eerder uitgelegd. De momentopname van mijn terminalvenster wordt hieronder weergegeven.
Evenzo zou u ook in staat moeten zijn om de LED uit te schakelen door 0 te verzenden vanuit de mobiele applicatie. De volledige werking wordt getoond in de onderstaande video. Ik hoop dat je de tutorial hebt begrepen en iets nuttigs hebt geleerd. Als je twijfels hebt, laat ze dan achter in de commentaarsectie hieronder of gebruik onze forums voor andere technische hulp.