summaryrefslogtreecommitdiff
path: root/.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestBLE
diff options
context:
space:
mode:
Diffstat (limited to '.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestBLE')
-rw-r--r--.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestBLE/.none.test.only0
-rw-r--r--.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestBLE/BLESerial.cpp141
-rw-r--r--.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestBLE/BLESerial.h53
-rw-r--r--.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestBLE/StrandtestBLE.ino192
4 files changed, 386 insertions, 0 deletions
diff --git a/.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestBLE/.none.test.only b/.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestBLE/.none.test.only
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestBLE/.none.test.only
diff --git a/.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestBLE/BLESerial.cpp b/.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestBLE/BLESerial.cpp
new file mode 100644
index 0000000..20d2a0c
--- /dev/null
+++ b/.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestBLE/BLESerial.cpp
@@ -0,0 +1,141 @@
+#include "BLESerial.h"
+
+// #define BLE_SERIAL_DEBUG
+
+BLESerial *BLESerial::_instance = NULL;
+
+BLESerial::BLESerial(unsigned char req, unsigned char rdy, unsigned char rst)
+ : BLEPeripheral(req, rdy, rst) {
+ this->_txCount = 0;
+ this->_rxHead = this->_rxTail = 0;
+ this->_flushed = 0;
+ BLESerial::_instance = this;
+
+ addAttribute(this->_uartService);
+ addAttribute(this->_uartNameDescriptor);
+ setAdvertisedServiceUuid(this->_uartService.uuid());
+ addAttribute(this->_rxCharacteristic);
+ addAttribute(this->_rxNameDescriptor);
+ this->_rxCharacteristic.setEventHandler(BLEWritten, BLESerial::_received);
+ addAttribute(this->_txCharacteristic);
+ addAttribute(this->_txNameDescriptor);
+}
+
+void BLESerial::begin(...) {
+ BLEPeripheral::begin();
+#ifdef BLE_SERIAL_DEBUG
+ Serial.println(F("BLESerial::begin()"));
+#endif
+}
+
+void BLESerial::poll() {
+ if (millis() < this->_flushed + 100) {
+ BLEPeripheral::poll();
+ } else {
+ flush();
+ }
+}
+
+void BLESerial::end() {
+ this->_rxCharacteristic.setEventHandler(BLEWritten, NULL);
+ this->_rxHead = this->_rxTail = 0;
+ flush();
+ BLEPeripheral::disconnect();
+}
+
+int BLESerial::available(void) {
+ BLEPeripheral::poll();
+ int retval = (this->_rxHead - this->_rxTail + sizeof(this->_rxBuffer)) %
+ sizeof(this->_rxBuffer);
+#ifdef BLE_SERIAL_DEBUG
+ Serial.print(F("BLESerial::available() = "));
+ Serial.println(retval);
+#endif
+ return retval;
+}
+
+int BLESerial::peek(void) {
+ BLEPeripheral::poll();
+ if (this->_rxTail == this->_rxHead)
+ return -1;
+ uint8_t byte = this->_rxBuffer[this->_rxTail];
+#ifdef BLE_SERIAL_DEBUG
+ Serial.print(F("BLESerial::peek() = "));
+ Serial.print((char)byte);
+ Serial.print(F(" 0x"));
+ Serial.println(byte, HEX);
+#endif
+ return byte;
+}
+
+int BLESerial::read(void) {
+ BLEPeripheral::poll();
+ if (this->_rxTail == this->_rxHead)
+ return -1;
+ this->_rxTail = (this->_rxTail + 1) % sizeof(this->_rxBuffer);
+ uint8_t byte = this->_rxBuffer[this->_rxTail];
+#ifdef BLE_SERIAL_DEBUG
+ Serial.print(F("BLESerial::read() = "));
+ Serial.print((char)byte);
+ Serial.print(F(" 0x"));
+ Serial.println(byte, HEX);
+#endif
+ return byte;
+}
+
+void BLESerial::flush(void) {
+ if (this->_txCount == 0)
+ return;
+ this->_txCharacteristic.setValue(this->_txBuffer, this->_txCount);
+ this->_flushed = millis();
+ this->_txCount = 0;
+ BLEPeripheral::poll();
+#ifdef BLE_SERIAL_DEBUG
+ Serial.println(F("BLESerial::flush()"));
+#endif
+}
+
+size_t BLESerial::write(uint8_t byte) {
+ BLEPeripheral::poll();
+ if (this->_txCharacteristic.subscribed() == false)
+ return 0;
+ this->_txBuffer[this->_txCount++] = byte;
+ if (this->_txCount == sizeof(this->_txBuffer))
+ flush();
+#ifdef BLE_SERIAL_DEBUG
+ Serial.print(F("BLESerial::write("));
+ Serial.print((char)byte);
+ Serial.print(F(" 0x"));
+ Serial.print(byte, HEX);
+ Serial.println(F(") = 1"));
+#endif
+ return 1;
+}
+
+BLESerial::operator bool() {
+ bool retval = BLEPeripheral::connected();
+#ifdef BLE_SERIAL_DEBUG
+ Serial.print(F("BLESerial::operator bool() = "));
+ Serial.println(retval);
+#endif
+ return retval;
+}
+
+void BLESerial::_received(const uint8_t *data, size_t size) {
+ for (int i = 0; i < size; i++) {
+ this->_rxHead = (this->_rxHead + 1) % sizeof(this->_rxBuffer);
+ this->_rxBuffer[this->_rxHead] = data[i];
+ }
+#ifdef BLE_SERIAL_DEBUG
+ Serial.print(F("BLESerial::received("));
+ for (int i = 0; i < size; i++)
+ Serial.print((char)data[i]);
+ Serial.println(F(")"));
+#endif
+}
+
+void BLESerial::_received(BLECentral & /*central*/,
+ BLECharacteristic &rxCharacteristic) {
+ BLESerial::_instance->_received(rxCharacteristic.value(),
+ rxCharacteristic.valueLength());
+}
diff --git a/.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestBLE/BLESerial.h b/.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestBLE/BLESerial.h
new file mode 100644
index 0000000..950bfb0
--- /dev/null
+++ b/.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestBLE/BLESerial.h
@@ -0,0 +1,53 @@
+#ifndef _BLE_SERIAL_H_
+#define _BLE_SERIAL_H_
+
+#include <Arduino.h>
+#include <BLEPeripheral.h>
+
+class BLESerial : public BLEPeripheral, public Stream {
+ public:
+ BLESerial(unsigned char req, unsigned char rdy, unsigned char rst);
+
+ void begin(...);
+ void poll();
+ void end();
+
+ virtual int available(void);
+ virtual int peek(void);
+ virtual int read(void);
+ virtual void flush(void);
+ virtual size_t write(uint8_t byte);
+ using Print::write;
+ virtual operator bool();
+
+ private:
+ unsigned long _flushed;
+ static BLESerial *_instance;
+
+ size_t _rxHead;
+ size_t _rxTail;
+ size_t _rxCount() const;
+ uint8_t _rxBuffer[BLE_ATTRIBUTE_MAX_VALUE_LENGTH];
+ size_t _txCount;
+ uint8_t _txBuffer[BLE_ATTRIBUTE_MAX_VALUE_LENGTH];
+
+ BLEService _uartService =
+ BLEService("6E400001-B5A3-F393-E0A9-E50E24DCCA9E");
+ BLEDescriptor _uartNameDescriptor = BLEDescriptor("2901", "UART");
+ BLECharacteristic _rxCharacteristic = BLECharacteristic(
+ "6E400002-B5A3-F393-E0A9-E50E24DCCA9E", BLEWriteWithoutResponse,
+ BLE_ATTRIBUTE_MAX_VALUE_LENGTH);
+ BLEDescriptor _rxNameDescriptor =
+ BLEDescriptor("2901", "RX - Receive Data (Write)");
+ BLECharacteristic _txCharacteristic =
+ BLECharacteristic("6E400003-B5A3-F393-E0A9-E50E24DCCA9E", BLENotify,
+ BLE_ATTRIBUTE_MAX_VALUE_LENGTH);
+ BLEDescriptor _txNameDescriptor =
+ BLEDescriptor("2901", "TX - Transfer Data (Notify)");
+
+ void _received(const uint8_t *data, size_t size);
+ static void _received(BLECentral & /*central*/,
+ BLECharacteristic &rxCharacteristic);
+};
+
+#endif
diff --git a/.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestBLE/StrandtestBLE.ino b/.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestBLE/StrandtestBLE.ino
new file mode 100644
index 0000000..593b35b
--- /dev/null
+++ b/.pio/libdeps/esp32-s3-n16r8/Adafruit NeoPixel/examples/StrandtestBLE/StrandtestBLE.ino
@@ -0,0 +1,192 @@
+/****************************************************************************
+ * This example was developed by the Hackerspace San Salvador to demonstrate
+ * the simultaneous use of the NeoPixel library and the Bluetooth SoftDevice.
+ * To compile this example you'll need to add support for the NRF52 based
+ * following the instructions at:
+ * https://github.com/sandeepmistry/arduino-nRF5
+ * Or adding the following URL to the board manager URLs on Arduino preferences:
+ * https://sandeepmistry.github.io/arduino-nRF5/package_nRF5_boards_index.json
+ * Then you can install the BLEPeripheral library avaiable at:
+ * https://github.com/sandeepmistry/arduino-BLEPeripheral
+ * To test it, compile this example and use the UART module from the nRF
+ * Toolbox App for Android. Edit the interface and send the characters
+ * 'a' to 'i' to switch the animation.
+ * There is a delay because this example blocks the thread of execution but
+ * the change will be shown after the current animation ends. (This might
+ * take a couple of seconds)
+ * For more info write us at: info _at- teubi.co
+ */
+#include <SPI.h>
+#include <BLEPeripheral.h>
+#include "BLESerial.h"
+#include <Adafruit_NeoPixel.h>
+
+#define PIN 15 // Pin where NeoPixels are connected
+
+// Declare our NeoPixel strip object:
+Adafruit_NeoPixel strip(64, PIN, NEO_GRB + NEO_KHZ800);
+// Argument 1 = Number of pixels in NeoPixel strip
+// Argument 2 = Arduino pin number (most are valid)
+// Argument 3 = Pixel type flags, add together as needed:
+// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
+// NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
+// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)
+// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
+// NEO_RGBW Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
+
+// NEOPIXEL BEST PRACTICES for most reliable operation:
+// - Add 1000 uF CAPACITOR between NeoPixel strip's + and - connections.
+// - MINIMIZE WIRING LENGTH between microcontroller board and first pixel.
+// - NeoPixel strip's DATA-IN should pass through a 300-500 OHM RESISTOR.
+// - AVOID connecting NeoPixels on a LIVE CIRCUIT. If you must, ALWAYS
+// connect GROUND (-) first, then +, then data.
+// - When using a 3.3V microcontroller with a 5V-powered NeoPixel strip,
+// a LOGIC-LEVEL CONVERTER on the data line is STRONGLY RECOMMENDED.
+// (Skipping these may work OK on your workbench but can fail in the field)
+
+// define pins (varies per shield/board)
+#define BLE_REQ 10
+#define BLE_RDY 2
+#define BLE_RST 9
+
+// create ble serial instance, see pinouts above
+BLESerial BLESerial(BLE_REQ, BLE_RDY, BLE_RST);
+
+uint8_t current_state = 0;
+uint8_t rgb_values[3];
+
+void setup() {
+ Serial.begin(115200);
+ Serial.println("Hello World!");
+ // custom services and characteristics can be added as well
+ BLESerial.setLocalName("UART_HS");
+ BLESerial.begin();
+
+ strip.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
+ strip.show(); // Turn OFF all pixels ASAP
+
+ //pinMode(PIN, OUTPUT);
+ //digitalWrite(PIN, LOW);
+
+ current_state = 'a';
+}
+
+void loop() {
+ while(BLESerial.available()) {
+ uint8_t character = BLESerial.read();
+ switch(character) {
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'e':
+ case 'f':
+ case 'g':
+ case 'h':
+ current_state = character;
+ break;
+ };
+ }
+ switch(current_state) {
+ case 'a':
+ colorWipe(strip.Color(255, 0, 0), 20); // Red
+ break;
+ case 'b':
+ colorWipe(strip.Color( 0, 255, 0), 20); // Green
+ break;
+ case 'c':
+ colorWipe(strip.Color( 0, 0, 255), 20); // Blue
+ break;
+ case 'd':
+ theaterChase(strip.Color(255, 0, 0), 20); // Red
+ break;
+ case 'e':
+ theaterChase(strip.Color( 0, 255, 0), 20); // Green
+ break;
+ case 'f':
+ theaterChase(strip.Color(255, 0, 255), 20); // Cyan
+ break;
+ case 'g':
+ rainbow(10);
+ break;
+ case 'h':
+ theaterChaseRainbow(20);
+ break;
+ }
+}
+
+// Fill strip pixels one after another with a color. Strip is NOT cleared
+// first; anything there will be covered pixel by pixel. Pass in color
+// (as a single 'packed' 32-bit value, which you can get by calling
+// strip.Color(red, green, blue) as shown in the loop() function above),
+// and a delay time (in milliseconds) between pixels.
+void colorWipe(uint32_t color, int wait) {
+ for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
+ strip.setPixelColor(i, color); // Set pixel's color (in RAM)
+ strip.show(); // Update strip to match
+ delay(wait); // Pause for a moment
+ }
+}
+
+// Theater-marquee-style chasing lights. Pass in a color (32-bit value,
+// a la strip.Color(r,g,b) as mentioned above), and a delay time (in ms)
+// between frames.
+void theaterChase(uint32_t color, int wait) {
+ for(int a=0; a<10; a++) { // Repeat 10 times...
+ for(int b=0; b<3; b++) { // 'b' counts from 0 to 2...
+ strip.clear(); // Set all pixels in RAM to 0 (off)
+ // 'c' counts up from 'b' to end of strip in steps of 3...
+ for(int c=b; c<strip.numPixels(); c += 3) {
+ strip.setPixelColor(c, color); // Set pixel 'c' to value 'color'
+ }
+ strip.show(); // Update strip with new contents
+ delay(wait); // Pause for a moment
+ }
+ }
+}
+
+// Rainbow cycle along whole strip. Pass delay time (in ms) between frames.
+void rainbow(int wait) {
+ // Hue of first pixel runs 5 complete loops through the color wheel.
+ // Color wheel has a range of 65536 but it's OK if we roll over, so
+ // just count from 0 to 5*65536. Adding 256 to firstPixelHue each time
+ // means we'll make 5*65536/256 = 1280 passes through this outer loop:
+ for(long firstPixelHue = 0; firstPixelHue < 5*65536; firstPixelHue += 256) {
+ for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
+ // Offset pixel hue by an amount to make one full revolution of the
+ // color wheel (range of 65536) along the length of the strip
+ // (strip.numPixels() steps):
+ int pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
+ // strip.ColorHSV() can take 1 or 3 arguments: a hue (0 to 65535) or
+ // optionally add saturation and value (brightness) (each 0 to 255).
+ // Here we're using just the single-argument hue variant. The result
+ // is passed through strip.gamma32() to provide 'truer' colors
+ // before assigning to each pixel:
+ strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
+ }
+ strip.show(); // Update strip with new contents
+ delay(wait); // Pause for a moment
+ }
+}
+
+// Rainbow-enhanced theater marquee. Pass delay time (in ms) between frames.
+void theaterChaseRainbow(int wait) {
+ int firstPixelHue = 0; // First pixel starts at red (hue 0)
+ for(int a=0; a<30; a++) { // Repeat 30 times...
+ for(int b=0; b<3; b++) { // 'b' counts from 0 to 2...
+ strip.clear(); // Set all pixels in RAM to 0 (off)
+ // 'c' counts up from 'b' to end of strip in increments of 3...
+ for(int c=b; c<strip.numPixels(); c += 3) {
+ // hue of pixel 'c' is offset by an amount to make one full
+ // revolution of the color wheel (range 65536) along the length
+ // of the strip (strip.numPixels() steps):
+ int hue = firstPixelHue + c * 65536L / strip.numPixels();
+ uint32_t color = strip.gamma32(strip.ColorHSV(hue)); // hue -> RGB
+ strip.setPixelColor(c, color); // Set pixel 'c' to value 'color'
+ }
+ strip.show(); // Update strip with new contents
+ delay(wait); // Pause for a moment
+ firstPixelHue += 65536 / 90; // One cycle of color wheel over 90 frames
+ }
+ }
+}