Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /********* Pleasedontcode.com **********
- Pleasedontcode thanks you for automatic code generation! Enjoy your code!
- - Terms and Conditions:
- You have a non-exclusive, revocable, worldwide, royalty-free license
- for personal and commercial use. Attribution is optional; modifications
- are allowed, but you're responsible for code maintenance. We're not
- liable for any loss or damage. For full terms,
- please visit pleasedontcode.com/termsandconditions.
- - Project: "ESP32 Mesh"
- - Source Code NOT compiled for: ESP32 DevKit V1
- - Source Code created on: 2024-06-06 09:36:12
- ********* Pleasedontcode.com **********/
- /****** SYSTEM REQUIREMENTS *****/
- /****** SYSTEM REQUIREMENT 1 *****/
- /* Use Arduino ID, mirroring of ten digital pins */
- /* between two ESP32 devices using BLE Mesh without */
- /* using any delay() commands and only transmit data */
- /* to receiver when change the pin state, you'll need */
- /* to set up one ESP32 as the sender and the other as */
- /* the */
- /****** END SYSTEM REQUIREMENTS *****/
- /****** DEFINITION OF LIBRARIES *****/
- #include <BLEDevice.h>
- #include <BLEUtils.h>
- #include <BLEServer.h>
- #include <BLE2902.h>
- #include <BLEMesh.h>
- /****** FUNCTION PROTOTYPES *****/
- void setup(void);
- void loop(void);
- void updateOutputs();
- void pinStateChanged(void * parameter);
- /***** DEFINITION OF DIGITAL PINS *****/
- const uint8_t PINS[10] = {2, 4, 5, 12, 13, 14, 15, 16, 17, 18};
- /***** DEFINITION OF OUTPUT RAW VARIABLES *****/
- /***** used to store raw data *****/
- bool pinStates[10] = {0};
- /***** BLE Mesh Variables *****/
- BLEMesh mesh;
- bool isSender = true; // Set this to false for the receiver
- void setup(void)
- {
- // Initialize serial communication
- Serial.begin(115200);
- // Initialize pin modes
- for (int i = 0; i < 10; i++) {
- pinMode(PINS[i], isSender ? INPUT_PULLUP : OUTPUT);
- }
- // Initialize BLE Mesh
- BLEDevice::init("ESP32_Mesh");
- mesh.begin("ESP32_Mesh_Network");
- if (isSender) {
- // Set up a task to monitor pin state changes
- xTaskCreate(
- pinStateChanged, // Function to implement the task
- "pinStateChanged", // Name of the task
- 10000, // Stack size in words
- NULL, // Task input parameter
- 1, // Priority of the task
- NULL // Task handle
- );
- }
- }
- void loop(void)
- {
- // put your main code here, to run repeatedly:
- if (!isSender) {
- // Receiver logic to update outputs
- updateOutputs();
- }
- }
- void updateOutputs()
- {
- for (int i = 0; i < 10; i++) {
- digitalWrite(PINS[i], pinStates[i]);
- }
- }
- void pinStateChanged(void * parameter)
- {
- for (;;) {
- for (int i = 0; i < 10; i++) {
- bool currentState = digitalRead(PINS[i]);
- if (currentState != pinStates[i]) {
- pinStates[i] = currentState;
- // Transmit the state change via BLE Mesh
- mesh.send("ESP32_Mesh_Network", (uint8_t*)&pinStates, sizeof(pinStates));
- }
- }
- vTaskDelay(10 / portTICK_PERIOD_MS); // Small delay to prevent task hogging
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement