BLE with ESP32 tutorial part 1: the Server

แชร์
ฝัง
  • เผยแพร่เมื่อ 15 มิ.ย. 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.

ความคิดเห็น • 120

  • @davidkempton2894
    @davidkempton2894 3 หลายเดือนก่อน +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  2 หลายเดือนก่อน

      You're welcome!

  • @ollydsouza
    @ollydsouza ปีที่แล้ว +3

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

  • @leisergeist
    @leisergeist 4 หลายเดือนก่อน +1

    I rarely comment but had to say… fantastic job making a great clear but concise tutorial! Thanks a bunch for your effort

    • @mothunderz
      @mothunderz  2 หลายเดือนก่อน +1

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

  • @xzerr
    @xzerr 5 หลายเดือนก่อน +1

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

    • @mothunderz
      @mothunderz  4 หลายเดือนก่อน

      Glad you enjoyed it!

  • @erenkaya5371
    @erenkaya5371 ปีที่แล้ว +1

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

    • @mothunderz
      @mothunderz  ปีที่แล้ว

      Glad it was helpful!

  • @ivekuukkeli2156
    @ivekuukkeli2156 8 หลายเดือนก่อน

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

    • @mothunderz
      @mothunderz  7 หลายเดือนก่อน

      Glad it was helpful!

  • @madwilliamflint
    @madwilliamflint 11 หลายเดือนก่อน +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  9 หลายเดือนก่อน +1

      Great to hear! Thank you 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 11 หลายเดือนก่อน

      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 6 หลายเดือนก่อน

      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.

  • @mychannelmarco
    @mychannelmarco 2 วันที่ผ่านมา

    Amazing tutorial! Thank you very much

  • @gaborungvari784
    @gaborungvari784 4 หลายเดือนก่อน +2

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

    • @mothunderz
      @mothunderz  2 หลายเดือนก่อน

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

  • @nicoladellino8124
    @nicoladellino8124 11 หลายเดือนก่อน

    Very nice and useful video, THX.

    • @mothunderz
      @mothunderz  11 หลายเดือนก่อน

      Glad it was helpful!

  • @Galeazzi2006
    @Galeazzi2006 6 หลายเดือนก่อน

    Thank you!
    Awesome video!

    • @mothunderz
      @mothunderz  4 หลายเดือนก่อน

      Glad you liked it!

  • @erokfussell
    @erokfussell ปีที่แล้ว

    You are a God among men.

    • @mothunderz
      @mothunderz  ปีที่แล้ว

      Thank you, well appreciated :-)

  • @rydinorwin
    @rydinorwin 5 หลายเดือนก่อน

    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  4 หลายเดือนก่อน

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

    • @cristian980t
      @cristian980t 4 หลายเดือนก่อน +1

      Delay 1000 means 1 second😅

  • @ridwanmulyana99
    @ridwanmulyana99 ปีที่แล้ว

    nice tutorial bro👍

    • @mothunderz
      @mothunderz  ปีที่แล้ว

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

  • @dominiclee6682
    @dominiclee6682 17 วันที่ผ่านมา

    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?

  • @jmmi9780
    @jmmi9780 3 หลายเดือนก่อน

    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 ปีที่แล้ว

    that helps a lot

    • @mothunderz
      @mothunderz  ปีที่แล้ว +1

      you are welcome :-)

  • @melvin-rh2gr
    @melvin-rh2gr หลายเดือนก่อน

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

  • @varunshah2384
    @varunshah2384 11 วันที่ผ่านมา

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

  • @SahanPanditharathne
    @SahanPanditharathne หลายเดือนก่อน

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

  • @adAbsurdum07
    @adAbsurdum07 หลายเดือนก่อน

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

  • @MattijsVandebroek
    @MattijsVandebroek หลายเดือนก่อน

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

  • @nicholasng8291
    @nicholasng8291 9 หลายเดือนก่อน

    Thanks!

    • @mothunderz
      @mothunderz  9 หลายเดือนก่อน

      You're welcome!

  • @quadepchai
    @quadepchai 3 หลายเดือนก่อน

    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?

  • @_om3ga41
    @_om3ga41 8 หลายเดือนก่อน +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  7 หลายเดือนก่อน

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

  • @adwait_natu
    @adwait_natu 6 หลายเดือนก่อน

    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  4 หลายเดือนก่อน +1

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

  • @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
      th-cam.com/video/aM2ktMKAunw/w-d-xo.html

    • @betech2879
      @betech2879 ปีที่แล้ว

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

  • @baconsledge
    @baconsledge 5 หลายเดือนก่อน

    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  4 หลายเดือนก่อน

      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.

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

    • @yasserarts1058
      @yasserarts1058 หลายเดือนก่อน

      @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 17 วันที่ผ่านมา +1

      @@yasserarts1058 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.

    • @yasserarts1058
      @yasserarts1058 17 วันที่ผ่านมา

      @@dominiclee6682 thank you it did work

  • @raffialidina5580
    @raffialidina5580 5 หลายเดือนก่อน

    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  4 หลายเดือนก่อน

      Are you using Iphone or Android? For Android the app I use it MIT app inventor (dont have an iphone myself):
      th-cam.com/video/RvbWl8rZOoQ/w-d-xo.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!

  • @dancevideo2
    @dancevideo2 6 หลายเดือนก่อน +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  4 หลายเดือนก่อน

      Yes absolutely, that should have been milliseconds :-)

  • @MungomaChristopher-he5kn
    @MungomaChristopher-he5kn 9 หลายเดือนก่อน

    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  9 หลายเดือนก่อน

      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.

  • @asaelmaia5553
    @asaelmaia5553 8 หลายเดือนก่อน

    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  7 หลายเดือนก่อน

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

    • @markvervaart1956
      @markvervaart1956 5 หลายเดือนก่อน

      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

  • @stephenhookings1985
    @stephenhookings1985 10 หลายเดือนก่อน

    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  9 หลายเดือนก่อน

      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?

  • @firdoshdiakus4841
    @firdoshdiakus4841 6 หลายเดือนก่อน

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

    • @mothunderz
      @mothunderz  4 หลายเดือนก่อน

      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.

  • @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.

  • @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 8 หลายเดือนก่อน +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()

  • @user-dc1gb9mm5c
    @user-dc1gb9mm5c 11 หลายเดือนก่อน

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

    • @mothunderz
      @mothunderz  11 หลายเดือนก่อน

      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.

  • @fitzgeraldmistral97
    @fitzgeraldmistral97 8 วันที่ผ่านมา

    The 'delay' is in milliseconds, not nanoseconds.

  • @YousufAlam-jx4qd
    @YousufAlam-jx4qd 5 หลายเดือนก่อน

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

    • @mothunderz
      @mothunderz  4 หลายเดือนก่อน

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

  • @ashutoshjangir4918
    @ashutoshjangir4918 4 หลายเดือนก่อน

    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  2 หลายเดือนก่อน

      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 4 หลายเดือนก่อน +1

    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 4 หลายเดือนก่อน

      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 4 หลายเดือนก่อน

      @@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  2 หลายเดือนก่อน

      Excellent you were able to solve the problem!

  • @colesturdevant2363
    @colesturdevant2363 10 หลายเดือนก่อน

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

    • @mothunderz
      @mothunderz  9 หลายเดือนก่อน

      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 7 หลายเดือนก่อน +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.

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

  • @Kwatch
    @Kwatch ปีที่แล้ว

    5 star

    • @mothunderz
      @mothunderz  11 หลายเดือนก่อน

      Thank you!

  • @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):
      th-cam.com/video/RvbWl8rZOoQ/w-d-xo.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 2 หลายเดือนก่อน

    3 milliseconds, of course.

  • @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.

  • @guyprovost
    @guyprovost 6 หลายเดือนก่อน +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  4 หลายเดือนก่อน

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

  • @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.