BLE with ESP32 tutorial part 1: the Server

  Переглядів 68,014

MoThunderz

MoThunderz

День тому

This tutorial explains how to use Bluetooth Low Energy (BLE) with the ESP32. In Part 1 first some BLE basics are discussed and then focuses on the BLE Server.
Link for the pre-defined Services, Characteristics and Descriptors:
www.bluetooth.com/specificati...
Link for UUID generation:
www.uuidgenerator.net/
Code:
github.com/mo-thunderz/Esp32B...
Correction:
05:13 the "ESP32 BLE" library is included in the latest releases of the ESP32 compiler and you dont need to add an extra library. To check if the library is included go to File - Examples and search for "ESP32 BLE Arduino". If these examples are present, the library is installed.
05:28 correction, the real author is Neil Kolban, but it might show up under Dariusz Krempa. Anyway, on new installations the library is included per default and you do not need to install anymore.
09:50 delay(3) will provide a 3ms delay, not 3ns as I state in the video.

КОМЕНТАРІ: 111
@davidkempton2894
@davidkempton2894 2 місяці тому
This video was just what I was looking for. So many of the other ones dont show you how to set up a server. Thanks VERY much!
@mothunderz
@mothunderz 18 днів тому
You're welcome!
@ollydsouza
@ollydsouza Рік тому
@mothunderz - most useful content and BLE presentation I have listened to while trying it out -in many years! Thanks
@mothunderz
@mothunderz Рік тому
Thank you very much for your feedback!
@leisergeist
@leisergeist 2 місяці тому
I rarely comment but had to say… fantastic job making a great clear but concise tutorial! Thanks a bunch for your effort
@mothunderz
@mothunderz 18 днів тому
Thank you very much for your feedback, I really appreciate it :-)
@xzerr
@xzerr 3 місяці тому
A wonderful workshop, thank you! Extremely useful from the beginning to the end
@mothunderz
@mothunderz 3 місяці тому
Glad you enjoyed it!
@madwilliamflint
@madwilliamflint 9 місяців тому
This series is great. I'm about to embark on a project with a bunch of esp32s running sensors. Didn't occur to me that BLE was actually within reach.
@mothunderz
@mothunderz 8 місяців тому
Great to hear! Thank you for your feedback :-)
@erenkaya5371
@erenkaya5371 10 місяців тому
Thank you for this great work and explanation. This is what we were waiting for.
@mothunderz
@mothunderz 10 місяців тому
Glad it was helpful!
@ivekuukkeli2156
@ivekuukkeli2156 6 місяців тому
Deep thanks for this tutorial in practice. Now I can understand much better the BLE connection.
@mothunderz
@mothunderz 5 місяців тому
Glad it was helpful!
@gaborungvari784
@gaborungvari784 2 місяці тому
Thx a lot for the effort to create the video! Great content!
@mothunderz
@mothunderz 18 днів тому
Thank you for the feedback!
@drdave611
@drdave611 Рік тому
Unbelievably timely for me! I've been slowly accumulating some understanding of BLE for several months in order to implement some moisture sensors in my garden. I think your clear explanation (and especially, the demonstrating of how the parameters actually work! ) is going to help a ton. One issue that I've been having trouble with using the tiny Xiao ESP32-C3 is that the BLE-Arduino doesn't seem to work... errors during compilation. However, the NimBLE version does, so I'm hopeful...
@mothunderz
@mothunderz Рік тому
I noticed as well that there are many ESP32 versions out there and that there is not one single BLE library that works for all of them. Glad to hear you found a version that works!
@footpad9047
@footpad9047 9 місяців тому
This comment is reassuring: I'm trying to follow this tutorial using a Xiao ESP32-S3 and it simply doesn't build. I was wondering if I was doing something wrong. Same use case as you by the way!
@dancevideo2
@dancevideo2 5 місяців тому
FWIW I got a Xiao ESP32-S3 today. I selected the "XIAO_ESP32S3" board in my Arduino IDE 2.2.1 and the example code I see under "ESP32 BLE Arduino" seem to compile and run as expected, at least "BLE_notify" and "BLE_server" do. I can see the device appear using a BLE Scanner app on my phone, and I get each notification as expected.
@infinitychromeful
@infinitychromeful Рік тому
welcome back i am waiting for you since web server tutorial
@mothunderz
@mothunderz Рік тому
Thanks! Yes, I was quite busy lately, happy to get this one out, now working on part 2 ;-)
@Galeazzi2006
@Galeazzi2006 4 місяці тому
Thank you! Awesome video!
@mothunderz
@mothunderz 3 місяці тому
Glad you liked it!
@nicoladellino8124
@nicoladellino8124 9 місяців тому
Very nice and useful video, THX.
@mothunderz
@mothunderz 9 місяців тому
Glad it was helpful!
@ridwanmulyana99
@ridwanmulyana99 Рік тому
nice tutorial bro👍
@mothunderz
@mothunderz Рік тому
Glad you liked it, almost done with part 2...
@erokfussell
@erokfussell Рік тому
You are a God among men.
@mothunderz
@mothunderz Рік тому
Thank you, well appreciated :-)
@rydinorwin
@rydinorwin 4 місяці тому
Absolutely awesome! You know delay(1) - this is milli seconds, so delay(1000) is 12 second! I am sure other people have mentioned this. So very clear, fantastic - thank you!
@mothunderz
@mothunderz 3 місяці тому
Yes, thank you for the correction. I should add that to the correction list of the video :-) Cheers!
@cristian980t
@cristian980t 3 місяці тому
Delay 1000 means 1 second😅
@nicholasng8291
@nicholasng8291 7 місяців тому
Thanks!
@mothunderz
@mothunderz 7 місяців тому
You're welcome!
@jmmi9780
@jmmi9780 Місяць тому
Thank you for the tutorial, that was very helpful. BTW, I have a problem, I've tried with two possible apps from the market, the one you mentioned on your tutorial and other called BLEScanner. Both of them allowed me sending just 4 bytes from the app to the ESP32 BLE Server. I wonder if it is possible to send a bigger package of data from the app to the Server. Could you help me please? Thanks again and regards.
@hamzabejaoui5669
@hamzabejaoui5669 11 місяців тому
that helps a lot
@mothunderz
@mothunderz 11 місяців тому
you are welcome :-)
@melvin-rh2gr
@melvin-rh2gr 8 днів тому
@mothunderz: any idea on how many devices can be connected to esp32 through BLE?
@adwait_natu
@adwait_natu 4 місяці тому
Thank you so much! I've followed along your video and everything works good except the last part where 2901 descriptor is added. I can see only one descriptor i.e. 2902 but value is showing as Incorrect data length(16bit expected) : (0x) 41 --- So many bytes ---65, then actual message "A very interesting variable"
@mothunderz
@mothunderz 3 місяці тому
Thank you for the feedback. At the moment I am a bit overloaded with work, but will look into this
@baconsledge
@baconsledge 3 місяці тому
Have you considered walking a user through reading data from a General TS04 BLE Multimeter (cheap) with an ESP-32? There are many of these types of devices that only have phone apps but many of us would like to use a Windows/Linux PC to capture data. This would truly be a practical application.
@mothunderz
@mothunderz 3 місяці тому
Thank you for this suggestion! That is an excellent application. However, at the moment I unfortunately dont have time to make videos. As soon as I have time I will look into this.
@MattijsVandebroek
@MattijsVandebroek 9 днів тому
Is it also possible to send a file from SPIFFS using ble?
@veljac99
@veljac99 11 місяців тому
correction of the correction: 3 is 3ms = 3000 µs = 3000000 ns (ms = 1E-3, µs =1E-6, ns= 1E-9) >>09:50 delay(3) will provide a 3µs delay, not 3ns as I state in the video.
@mothunderz
@mothunderz 11 місяців тому
Haha, thanks for the correction of the correction :-)
@cristian980t
@cristian980t 6 місяців тому
The way the delay() function works is pretty simple. It accepts a single integer (or number) argument. This number represents the time (measured in milliseconds). So delay(3) means wait 3 milliseconds, for microseconds there is another method named delayMicroseconds()
@betech2879
@betech2879 Рік тому
Good to see you again my friend Thanks for your time to sharing this videos with us and I am a big fan of your videos. I been working in project that can control 12load and monitor ac volt by using esp-12e and zmpt101b and 12relay module and control by use app I have been make it in mit app inventor and every thing is working very good but when I add EmonLib and make it send volt to app the esp Restart over and over I know that problem because it takes time to calculate the ac volt and that make esp restarted and cut the wifi can you help me how can connect with you......
@mothunderz
@mothunderz Рік тому
Thank you for your feedback. Sounds like a fun project. I am not familiar with the EmonLib, so not sure to what degree I can help here, but lets see. I dont post my email address in text online to limit spam from bots, but in this video, see the right top at 8:30 ukposts.info/have/v-deo/mX1jn6qEgnemz6s.html
@betech2879
@betech2879 Рік тому
@@mothunderz thanks a lot for your help I will send you the details and zip file
@raffialidina5580
@raffialidina5580 3 місяці тому
Cool project. do you have an example where BLE Tx a link and smart phone gets a push notification to go or not to go to the link. thanks
@mothunderz
@mothunderz 3 місяці тому
Are you using Iphone or Android? For Android the app I use it MIT app inventor (dont have an iphone myself): ukposts.info/have/v-deo/iqaTi6JvqZCA0IU.html If you want push notifications, these can be added with an extension to MIT app inventor: community.appinventor.mit.edu/t/what-is-the-latest-push-notification-extension/39529 I have not tried this myself, but stuff in MIT app inventor is mostly pretty straightforward. Hope this works out for you!
@MungomaChristopher-he5kn
@MungomaChristopher-he5kn 7 місяців тому
is it possible for me to connect more than one bluetooth at once, the project am working on needs like 5 devices connected to like a server device???
@mothunderz
@mothunderz 7 місяців тому
Multiple clients can be supported on the ESP, but I have not looked into this so far. There is a demo for multiple clients in the examples you get with the library. I recommend looking into that.
@_om3ga41
@_om3ga41 6 місяців тому
I have a question... In this case is the "Server" the Central Device or the Peripheral in terms of the BLE Spec
@mothunderz
@mothunderz 5 місяців тому
This will be the Peripheral device (the one that advertises). I got that the wrong way around in the video, apologies for that
@BlaineL
@BlaineL Рік тому
Thank you for this video. Uhm... I do not see the ESP32 BLE Arduino library by Krempa in the manager. I do see the one by Neil Kolban, but on his GitHUB page it says that the BLE is already incorporated directly in Arduino and that it is only for archive. Can you offer guidance as I'd like to follow along with your tutorial and learn about using BLE. I'm wondering if I can follow along using other libraries (ie I'm using an ESP32-S3 by lilygo - T Display S3) or would it be too confusing?
@mothunderz
@mothunderz Рік тому
Can you please navigate in your arduino IDE to File -> Examples: can you find "ESP32 BLE Arduino" there? If so, there is no need to install anything and you can move forward in the video to 5:55.
@BlaineL
@BlaineL Рік тому
@@mothunderz perfect ! Thank you. Yes. I'm just using the included files. Got it all working. :)
@yasserarts1058
@yasserarts1058 9 днів тому
@mothunderz hi i use the example that comes with the bord (file-> Example-> ESP32 BLE Arduino) but when i compile the code, it shows me an error "BLEDevice.h : no such file or directory" and when i install the library mentioned in the video it says that 'ringbuf_type_t' is not declared
@dancevideo2
@dancevideo2 5 місяців тому
In the video at 9:53 I believe your delay(3); waits for 3 milliseconds, not 3 nanoseconds as the voiceover indicates. Nanoseconds are a little bit smaller :-)
@mothunderz
@mothunderz 3 місяці тому
Yes absolutely, that should have been milliseconds :-)
@OMNI_INFINITY
@OMNI_INFINITY Рік тому
Hmmm...seems that is actually one of the libraries by Neil Kolban. Maybe that "dariusz krempa" downloaded neil's library and put his name on it and then somebody at Arduino corrected that later?
@mothunderz
@mothunderz 11 місяців тому
Thank you for mentioning that. Yes, I guess something like that happened. Anyway, the library is now included in the ESP32 package by default, so no need to manually install it anymore.
@firdoshdiakus4841
@firdoshdiakus4841 4 місяці тому
Hi great tutorial how do I go about using this for asset tracking?
@mothunderz
@mothunderz 3 місяці тому
There are many ways to realize asset tracking. Unfortunately I am overloaded with work and cannot make videos at the moment, so my apologies for not being able to assist with your request here.
@quadepchai
@quadepchai Місяць тому
Hello, I have a small problem in my application, I want to create an application that when the BLE device emits a signal and the phone catches that signal, my application will go to a screen or the layout contains certain information, do you think it is feasible?
@asaelmaia5553
@asaelmaia5553 6 місяців тому
Very interesting, but on my laptop the BLE NOTIFY example keeps complaining about BLEDevice, present on line 56. Any idea of might ? The example itself doesn't want to run.
@mothunderz
@mothunderz 5 місяців тому
Can you provide the exact fault you get? Any additional information is well appreciated. What ESP are you using? Thank you
@markvervaart1956
@markvervaart1956 3 місяці тому
Heyhey, I have exactly the same problem with line 56. I want to compile for ESP32-C3 development board. De compiler says 'init' is not a member of 'BLEDevice'. Any help welcome... @@mothunderz
@colesturdevant2363
@colesturdevant2363 8 місяців тому
When I set notifications to true on the descriptor, I don't automatically get the message. Maybe it's an ios thing?
@mothunderz
@mothunderz 8 місяців тому
Hmm, nordic nRF should behave the same, but I dont have an ios, so unfortunately cannot verify...
@a_boy_can_dream
@a_boy_can_dream 5 місяців тому
I tested on both and can confirm that it's not working on the iOS version of NRF Connect. Also, iOS was not showing the 2901 descriptor.
@stephenhookings1985
@stephenhookings1985 9 місяців тому
I was searching for a way to fix the ID of the BLE so that my phone reliably finds the ESP32. Otherwise when my app closes the phone needs to forget the paired device and repair. Want to avoid this. Maybe the GUID will do it.
@mothunderz
@mothunderz 8 місяців тому
My apologies for the late reply, I am a bit swamped with work to date. I am not entirely sure what the problem is that you are trying to solve: is it the ID management on the ESP or on the phone?
@user-dc1gb9mm5c
@user-dc1gb9mm5c 10 місяців тому
after run code i can not see any value on serial monitor. i checked baud. could you please help me
@mothunderz
@mothunderz 10 місяців тому
This is a very generic and basic error. Before you start with BLE you should first get your basics in order. There are plenty of vids on that topic: esp32io.com/tutorials/esp32-serial-monitor if you have that working, pls proceed with this video.
@YousufAlam-jx4qd
@YousufAlam-jx4qd 3 місяці тому
Sir, please can u tell me can I use deep sleep features in this code, if yes then how?
@mothunderz
@mothunderz 3 місяці тому
So far I have not yet looked into deep sleep on the ESP
@ashutoshjangir4918
@ashutoshjangir4918 2 місяці тому
Hii I am learning this part but when I upload thw code it gives me an error 61 | Ringbuffer(size_t length, ringbuf_type_t type = RINGBUF_TYPE_NOSPLIT); | ^~~~~~~~~~~~~~ Multiple libraries were found for "BLEDevice.h" Used: C:\Users\ashut\OneDrive\Documents\Arduino\libraries\ESP32_BLE_Arduino Not used: C:\Users\ashut\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.0-alpha3\libraries\BLE exit status 1 can you guide me?
@mothunderz
@mothunderz 18 днів тому
See the comment below from another user: You don't need to install the library since it is now included. The error is because you now have it installed twice. Remove the library and it will compile.
@doug6503
@doug6503 3 місяці тому
My code will not download nor compile! I get a lot of errors , not sure how to post them. But the serial counsel has ‘ringbuf_type_t’ has not been declared in Scr/FreeRTOS.h file in ESP32 BLE arduino directory.
@robertboll1503
@robertboll1503 3 місяці тому
You don't need to install the library since it is now included. The error is because you now have it installed twice. Remove the library and it will compile.
@dougrichardson9256
@dougrichardson9256 3 місяці тому
@@robertboll1503 I had just found another web site that explained this. I removed the second directory and pow it compiles and loads ! Thanks !
@mothunderz
@mothunderz 18 днів тому
Excellent you were able to solve the problem!
@guhaganesh6032
@guhaganesh6032 Рік тому
It's 3 milliseconds not nanoseconds, great video though!
@mothunderz
@mothunderz Рік тому
Thanks for pointing this out. Not sure where the ns came from 😅
@guhaganesh6032
@guhaganesh6032 Рік тому
@@mothunderz np I heard ns and I was like WAIT I can get it to send that fast no wayy!!
@logeshwaranc2948
@logeshwaranc2948 Рік тому
how notify update from client to sever
@mothunderz
@mothunderz Рік тому
This can be done with a callback function. Please see the last part of this video (starting at 39:03): ukposts.info/have/v-deo/iqaTi6JvqZCA0IU.html
@logeshwaranc2948
@logeshwaranc2948 Рік тому
@@mothunderz any tutorial in idf ?? please
@mothunderz
@mothunderz Рік тому
I have not yet looked into idf. What is the advantage for you of idf over the Arduino IDE?
@Kwatch
@Kwatch 10 місяців тому
5 star
@mothunderz
@mothunderz 10 місяців тому
Thank you!
@AbdulQadeer-em7ib
@AbdulQadeer-em7ib Рік тому
How we can send more than 20 bytes data?
@mothunderz
@mothunderz 11 місяців тому
First of all: the limit of 20 bytes is only present for Notify. Read and Write to not have this limit. You can use longer bytes by configuring a longer MTU. This is done in the server by adding right under BLEDevice::init("ESP32"); the following command: BLEDevice::setMTU(517); -> note that 517 bytes is the maximum you can use with BLE Notifications In the client you need to also do the same and add right under pClient->connect(myDevice); the following command: pClient->setMTU(517); Hope this works for you!
@AbdulQadeer-em7ib
@AbdulQadeer-em7ib 11 місяців тому
Thanks for your reply, yes it works for me In my case I want to send a jason packet from server which is very large and I want to send it in chunks and size of one chunk is that which I set from client which is mtu value and I set the mtu from client but I am unable to read that mtu value from server so accoording to that value I can send jason packet from server side in chunks, how can I read that mtu value in server which is set from client? I use getmtu() function on server but It did not work for me or I can use that function in wrong way Please help me in this regard.
@mothunderz
@mothunderz 11 місяців тому
I have not yet had the need to read the mtu. Besides you will need to set the mtu upon configuration of the setup, so why would you not define it in both server and client?
@michealmorrow1481
@michealmorrow1481 Місяць тому
3 milliseconds, of course.
@menoone2042
@menoone2042 11 місяців тому
Hi, can I create mesh network instead of server-client model ?
@mothunderz
@mothunderz 11 місяців тому
Yes, that is definitely possible. I have not looked into this myself, but it seems rather straightforward. Please go to the examples and there you will find an example for a mesh network.
@SA-oj3bo
@SA-oj3bo 11 місяців тому
Hi I try to replace the HM10 by the ESP32 BLE, can you help me? I want to use APP's that work with HM10 with ESP32 BLE. Stuck now. Can mail?
@mothunderz
@mothunderz 11 місяців тому
My apologies, but I unfortunately do not have the time at the moment to re-write code from HM10 to ESP32.
@SA-oj3bo
@SA-oj3bo 11 місяців тому
@@mothunderz can you give me some advice then?
@mothunderz
@mothunderz 11 місяців тому
Well, I dont know the exact code, but with BLE there are some basic building blocks to send and receive information. You should replace the HM10 specific ones with those for the ESP32. The first thing to check though is whether BLE or serial Bluetooth is used (see the beginning of this video). Then figure out if notify, read or write is used. Finally I recommend to start with a simple program and gradually increase complexity.
@guyprovost
@guyprovost 4 місяці тому
I dont think that the Delay function works with "nanoseconds" but rather "milliseconds". The precision of a board like a ESP32 can not be that precise. Heck, even a register in a CPU isn,t that precise.
@mothunderz
@mothunderz 3 місяці тому
yes, thanks for the feedback... my bad there :-) it should be milliseconds
BLE with ESP32 tutorial part 2: the client
36:07
MoThunderz
Переглядів 26 тис.
Create a BLE app for your mobile phone! Control an ESP32 with BLE
47:04
You’ve Never Seen A Race Like This 🚀
00:21
Red Bull
Переглядів 35 млн
Эффект Карбонаро у глазного врача 
01:00
История одного вокалиста
Переглядів 7 млн
Try these 16 Brilliant ESP32 projects!!!
11:18
ToP Projects Compilation
Переглядів 502 тис.
Master BLE Basics in Just 10 Minutes: The Ultimate Guide!
9:15
Novel Bits
Переглядів 85 тис.
Make your bed SMART with ESP32 and Home Assistant
4:30
Tricks And Things
Переглядів 7 тис.
Bluetooth Low Energy - Protocol Stack (Part 1)
8:39
Bina Bhatt
Переглядів 54 тис.
451 Which Processor can kill the ESP32?
11:24
Andreas Spiess
Переглядів 330 тис.
Modern Graphical User Interfaces in Python
11:12
NeuralNine
Переглядів 1,4 млн
#419 ESP32 Audio Tutorial with lots of examples
13:48
Andreas Spiess
Переглядів 219 тис.
The EASIEST Way to Connect to a Car's CAN Bus
4:46
MrDIY
Переглядів 241 тис.
How I Would Learn To Code (If I Could Start Over)
23:50
Jacob Sucks At Code
Переглядів 32 тис.
You’ve Never Seen A Race Like This 🚀
00:21
Red Bull
Переглядів 35 млн