BLE with ESP32 tutorial part 1: the Server

Поделиться
HTML-код
  • Опубликовано: 20 июл 2024
  • 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.

Комментарии • 121

  • @leisergeist
    @leisergeist 5 месяцев назад +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  3 месяца назад +1

      Thank you very much for your feedback, I really appreciate it :-)

  • @ollydsouza
    @ollydsouza Год назад +4

    @mothunderz - most useful content and BLE presentation I have listened to while trying it out -in many years! Thanks

    • @mothunderz
      @mothunderz  Год назад +1

      Thank you very much for your feedback!

  • @drdave611
    @drdave611 Год назад +2

    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 Год назад

      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 8 месяцев назад

      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.

  • @davidkempton2894
    @davidkempton2894 4 месяца назад +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!

  • @gaborungvari784
    @gaborungvari784 5 месяцев назад +2

    Thx a lot for the effort to create the video! Great content!

    • @mothunderz
      @mothunderz  3 месяца назад

      Thank you for the feedback!

  • @infinitychromeful
    @infinitychromeful Год назад

    welcome back i am waiting for you since web server tutorial

    • @mothunderz
      @mothunderz  Год назад +1

      Thanks! Yes, I was quite busy lately, happy to get this one out, now working on part 2 ;-)

  • @mychannelmarco
    @mychannelmarco Месяц назад

    Amazing tutorial! Thank you very much

  • @erenkaya5371
    @erenkaya5371 Год назад +1

    Thank you for this great work and explanation. This is what we were waiting for.

  • @xzerr
    @xzerr 6 месяцев назад +1

    A wonderful workshop, thank you! Extremely useful from the beginning to the end

    • @mothunderz
      @mothunderz  6 месяцев назад

      Glad you enjoyed it!

  • @madwilliamflint
    @madwilliamflint Год назад +1

    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  11 месяцев назад +1

      Great to hear! Thank you for your feedback :-)

  • @nicoladellino8124
    @nicoladellino8124 Год назад

    Very nice and useful video, THX.

  • @ivekuukkeli2156
    @ivekuukkeli2156 9 месяцев назад

    Deep thanks for this tutorial in practice. Now I can understand much better the BLE connection.

    • @mothunderz
      @mothunderz  8 месяцев назад

      Glad it was helpful!

  • @Galeazzi2006
    @Galeazzi2006 7 месяцев назад

    Thank you!
    Awesome video!

    • @mothunderz
      @mothunderz  6 месяцев назад

      Glad you liked it!

  • @rydinorwin
    @rydinorwin 7 месяцев назад

    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  6 месяцев назад

      Yes, thank you for the correction. I should add that to the correction list of the video :-) Cheers!

    • @cristian980t
      @cristian980t 5 месяцев назад +1

      Delay 1000 means 1 second😅

  • @erokfussell
    @erokfussell Год назад

    You are a God among men.

    • @mothunderz
      @mothunderz  Год назад

      Thank you, well appreciated :-)

  • @ridwanmulyana99
    @ridwanmulyana99 Год назад

    nice tutorial bro👍

    • @mothunderz
      @mothunderz  Год назад

      Glad you liked it, almost done with part 2...

  • @adwait_natu
    @adwait_natu 7 месяцев назад

    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  6 месяцев назад +1

      Thank you for the feedback. At the moment I am a bit overloaded with work, but will look into this

  • @dominiclee6682
    @dominiclee6682 Месяц назад

    I've delved into numerous videos on the topic but this video makes me understand the most about the BLE with ESP32. Thank you very much.
    Moreover, I encountered interesting twist using nRF Connect on my Android mobile. The app would occasionally hang after connecting to my ESP32 and clicking the continuous fetch of characteristics value. However, following the adjustment from 3ns delay to 1s delay, the app operates smoothly without further hanging. Is it because too frequent updates would overwhelm the app?

  • @hamzabejaoui5669
    @hamzabejaoui5669 Год назад

    that helps a lot

  • @baconsledge
    @baconsledge 6 месяцев назад

    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  6 месяцев назад

      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.

  • @jmmi9780
    @jmmi9780 4 месяца назад

    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.

  • @betech2879
    @betech2879 Год назад +1

    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  Год назад +1

      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
      ruclips.net/video/aM2ktMKAunw/видео.html

    • @betech2879
      @betech2879 Год назад

      @@mothunderz thanks a lot for your help I will send you the details and zip file

  • @dancevideo2
    @dancevideo2 8 месяцев назад +1

    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  6 месяцев назад

      Yes absolutely, that should have been milliseconds :-)

  • @BlaineL
    @BlaineL Год назад +1

    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  Год назад +3

      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. :)

    • @suiiiiii1707
      @suiiiiii1707 3 месяца назад

      @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

    • @dominiclee6682
      @dominiclee6682 Месяц назад +1

      @@suiiiiii1707 I met same error before. It was found that we no longer require to add ESP32 BLE Arduino library. You can remove the added "ESP32 BLE Arduino" library and compile again. The build-in library already includes BLE. You can find example: BLE / Notify. It looks the same as that included in ESP32 BLE Arduino.

    • @suiiiiii1707
      @suiiiiii1707 Месяц назад

      @@dominiclee6682 thank you it did work

  • @nicholasng8291
    @nicholasng8291 10 месяцев назад

    Thanks!

  • @veljac99
    @veljac99 Год назад +3

    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  Год назад

      Haha, thanks for the correction of the correction :-)

    • @cristian980t
      @cristian980t 9 месяцев назад +1

      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()

  • @_om3ga41
    @_om3ga41 9 месяцев назад +1

    I have a question... In this case is the "Server" the Central Device or the Peripheral in terms of the BLE Spec

    • @mothunderz
      @mothunderz  8 месяцев назад

      This will be the Peripheral device (the one that advertises). I got that the wrong way around in the video, apologies for that

  • @raffialidina5580
    @raffialidina5580 6 месяцев назад

    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  6 месяцев назад

      Are you using Iphone or Android? For Android the app I use it MIT app inventor (dont have an iphone myself):
      ruclips.net/video/RvbWl8rZOoQ/видео.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!

  • @melvin-rh2gr
    @melvin-rh2gr 3 месяца назад

    @mothunderz: any idea on how many devices can be connected to esp32 through BLE?

  • @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  Год назад

      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.

  • @fitzgeraldmistral97
    @fitzgeraldmistral97 Месяц назад

    The 'delay' is in milliseconds, not nanoseconds.

  • @doug6503
    @doug6503 5 месяцев назад +2

    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 5 месяцев назад

      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 5 месяцев назад

      @@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  3 месяца назад

      Excellent you were able to solve the problem!

  • @SahanPanditharathne
    @SahanPanditharathne 2 месяца назад

    How can I use BLE to sync data between my ESP32 and the mobile app

  • @firdoshdiakus4841
    @firdoshdiakus4841 7 месяцев назад

    Hi great tutorial how do I go about using this for asset tracking?

    • @mothunderz
      @mothunderz  6 месяцев назад

      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.

  • @asaelmaia5553
    @asaelmaia5553 9 месяцев назад

    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  8 месяцев назад

      Can you provide the exact fault you get? Any additional information is well appreciated. What ESP are you using? Thank you

    • @markvervaart1956
      @markvervaart1956 6 месяцев назад

      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

  • @MungomaChristopher-he5kn
    @MungomaChristopher-he5kn 10 месяцев назад

    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  10 месяцев назад

      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.

  • @stephenhookings1985
    @stephenhookings1985 Год назад

    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  11 месяцев назад

      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?

  • @varunshah2384
    @varunshah2384 Месяц назад

    which esp 32 board to use??
    As I am getting an error using wroom esp 32 da module

  • @quadepchai
    @quadepchai 4 месяца назад

    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?

  • @adAbsurdum07
    @adAbsurdum07 2 месяца назад

    Do you know how tro send more than just 20 bytes over a characteristic?

  • @MattijsVandebroek
    @MattijsVandebroek 3 месяца назад

    Is it also possible to send a file from SPIFFS using ble?

  • @guhaganesh6032
    @guhaganesh6032 Год назад +5

    It's 3 milliseconds not nanoseconds, great video though!

    • @mothunderz
      @mothunderz  Год назад +4

      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!!

  • @Ashutosh_Jangir
    @Ashutosh_Jangir 5 месяцев назад

    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  3 месяца назад

      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.

  • @user-dc1gb9mm5c
    @user-dc1gb9mm5c Год назад

    after run code i can not see any value on serial monitor. i checked baud. could you please help me

    • @mothunderz
      @mothunderz  Год назад

      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 6 месяцев назад

    Sir, please can u tell me can I use deep sleep features in this code, if yes then how?

    • @mothunderz
      @mothunderz  6 месяцев назад

      So far I have not yet looked into deep sleep on the ESP

  • @colesturdevant2363
    @colesturdevant2363 11 месяцев назад

    When I set notifications to true on the descriptor, I don't automatically get the message. Maybe it's an ios thing?

    • @mothunderz
      @mothunderz  11 месяцев назад

      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 8 месяцев назад +1

      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.

  • @Kwatch
    @Kwatch Год назад

    5 star

  • @logeshwaranc2948
    @logeshwaranc2948 Год назад

    how notify update from client to sever

    • @mothunderz
      @mothunderz  Год назад +1

      This can be done with a callback function. Please see the last part of this video (starting at 39:03):
      ruclips.net/video/RvbWl8rZOoQ/видео.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?

  • @AbdulQadeer-em7ib
    @AbdulQadeer-em7ib Год назад

    How we can send more than 20 bytes data?

    • @mothunderz
      @mothunderz  Год назад +1

      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 Год назад

      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  Год назад

      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 месяца назад

    3 milliseconds, of course.

  • @guyprovost
    @guyprovost 7 месяцев назад +1

    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  6 месяцев назад

      yes, thanks for the feedback... my bad there :-) it should be milliseconds

  • @menoone2042
    @menoone2042 Год назад

    Hi, can I create mesh network instead of server-client model ?

    • @mothunderz
      @mothunderz  Год назад +1

      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 Год назад

    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  Год назад +1

      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 Год назад

      @@mothunderz can you give me some advice then?

    • @mothunderz
      @mothunderz  Год назад +1

      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.

  • @butchalline
    @butchalline 25 дней назад

    Using IDE 2.3.2, sketch BLE_server, ESP dev module
    I get error ...Compilation error: 'init' is not a member of 'BLEDevice'
    Could not find ESP32 BLE Arduino, so I used🤕 these includes:
    BLEDevice.h
    BLEServer.h
    BLEUtils.h
    BLE2902.h