A Bluetooth Low Energy (BLE) communication system demonstrating bidirectional data exchange between an ESP32-S3 development board and a Flutter mobile application.
- Device discovery and connection management for ESP32-S3 BLE devices
- Bidirectional data transmission between mobile app and ESP32
- Real-time notification handling and display
- Intuitive user interface with device scanning capabilities
- Graceful connection termination and error handling
| Device Scanning | Active Connection |
|---|---|
![]() |
![]() |
ESP32-S3-BLE-App/
├── flutter_app/ # Flutter mobile application
├── esp32_ble_firmware/ # ESP32 Arduino firmware
└── README.md # Project documentation
- Arduino IDE 1.8.x or later
- Flutter SDK 3.0 or later
- ESP32-S3 development board
- Physical Android or iOS device (BLE not supported in emulators)
-
Install Arduino IDE
Download from the official Arduino website.
-
Configure ESP32 Board Support
- Navigate to File > Preferences
- Add the following URL to Additional Boards Manager URLs:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json - Open Tools > Board > Boards Manager
- Search for "ESP32" and install "ESP32 by Espressif Systems"
-
Install Required Libraries
- Open Tools > Manage Libraries
- Search and install "ESP32 BLE Arduino"
-
Upload Firmware
- Open
esp32_ble_firmware.inofrom theesp32_ble_firmware/directory - Select your ESP32-S3 board from Tools > Board
- Connect your ESP32-S3 via USB
- Click Upload
- Open Serial Monitor (115200 baud) to verify BLE advertising status
- Open
-
Install Flutter
Follow the official Flutter installation guide for your operating system.
-
Clone Repository
https://github.com/senurah/ESP32-S3-Flutter-BLE-Communicator.git
-
Install Dependencies
flutter pub get
-
Configure Permissions
Android: Ensure the following permissions are declared in
android/app/src/main/AndroidManifest.xml:BLUETOOTHBLUETOOTH_ADMINBLUETOOTH_SCANBLUETOOTH_CONNECTACCESS_FINE_LOCATION
iOS: Add required keys to
ios/Runner/Info.plist:NSBluetoothAlwaysUsageDescriptionNSBluetoothPeripheralUsageDescription
-
Deploy Application
flutter run
- Power on your ESP32-S3 device
- Launch the Flutter application
- Tap "Scan for Devices"
- Select "ESP32-S3-BLE-Example" from the discovered devices list
- Enter your message in the text input field
- Press Enter or tap Send
- Verify receipt in the ESP32 Serial Monitor
The application automatically receives and displays notifications from the ESP32 in real-time through Snackbar messages.
Press the "Disconnect" button to terminate the BLE connection safely.
| Issue | Resolution |
|---|---|
| ESP32 not detected during scan | Verify ESP32 is powered and advertising. Check Serial Monitor output. Restart device if necessary. |
| Application crashes on launch | Verify all Flutter dependencies are properly installed. Run flutter doctor to check configuration. |
| Permission errors on Android | Manually grant Bluetooth and Location permissions in device settings. |
| BLE scan frequency errors | Implement scan throttling with minimum 10-second intervals between scans. |
Contributions are welcome and encouraged. To contribute:
- Fork the repository
- Create a feature branch (
git checkout -b feature/improvement) - Commit your changes (
git commit -am 'Add new feature') - Push to the branch (
git push origin feature/improvement) - Open a Pull Request
Areas for contribution include:
- Bug reports and fixes
- Performance optimizations
- Feature enhancements
- Documentation improvements
This project is licensed under the MIT License. See the LICENSE file for details.
For bug reports, feature requests, or general questions:
- Open an issue on GitHub Issues
- Contact the maintainer: GitHub - senurah
Built with ESP32 Arduino Core and Flutter's flutter_blue_plus package.

