diff --git a/platformio.ini b/platformio.ini index 972848a..6421b5d 100644 --- a/platformio.ini +++ b/platformio.ini @@ -9,7 +9,7 @@ ; http://docs.platformio.org/page/projectconf.html [platformio] -env_default = button +env_default = mesh [common] framework = arduino @@ -35,13 +35,13 @@ upload_speed = ${common.upload_speed} monitor_baud = ${common.monitor_baud} framework = ${common.framework} lib_deps = ${common.lib_deps} - + #build_flags = -DLED_PIN=2 -g ;upload_port = /dev/ttyUSB0 ;upload_port = 192.168.1.168 [env:basic] -src_filter = +<*> - - + +src_filter = +<*> - + platform = ${common.platform} board = ${common.board} upload_speed = ${common.upload_speed} @@ -50,7 +50,7 @@ framework = ${common.framework} lib_deps = ${common.lib_deps} [env:mesh] -src_filter = +<*> - - + +src_filter = +<*> - + platform = ${common.platform} board = ${common.board} upload_speed = ${common.upload_speed} @@ -59,30 +59,11 @@ framework = ${common.framework} lib_deps = ${common.lib_deps} [env:meshMqttBridge] -src_filter = +<*> - - + +src_filter = +<*> - + platform = espressif8266 board = esp12e upload_speed = ${common.upload_speed} monitor_baud = ${common.monitor_baud} framework = ${common.framework} lib_deps = ${common.lib_deps} - PubSubClient - -[env:illucat] -src_filter = +<*> - - + -platform = ${common.platform} -board = ${common.board} -upload_speed = ${common.upload_speed} -monitor_baud = ${common.monitor_baud} -framework = ${common.framework} -lib_deps = ${common.lib_deps} - Adafruit NeoPixel - -[env:button] -src_filter = +<*> - - + -platform = ${common.platform} -board = ${common.board} -upload_speed = ${common.upload_speed} -monitor_baud = ${common.monitor_baud} -framework = ${common.framework} -lib_deps = ${common.lib_deps} \ No newline at end of file + PubSubClient \ No newline at end of file diff --git a/src/examples/button/Button.h b/src/examples/button/Button.h deleted file mode 100644 index f26d90a..0000000 --- a/src/examples/button/Button.h +++ /dev/null @@ -1,47 +0,0 @@ - #ifndef __MESH_APP__ -#define __MESH_APP__ - -#include -#include -#include - -using namespace std; -using namespace std::placeholders; - -class Button : public Sprocket { - public: - Task btnTask; - MeshNet* net; - int pin; - Button(SprocketConfig cfg) : Sprocket(cfg) {} - Sprocket* activate(Scheduler* scheduler, Network* network) { - pin = D2; - pinMode(pin, INPUT_PULLUP); - net = static_cast(network); - net->mesh.onReceive(bind(&Button::receivedCallback,this, _1, _2)); - btnTask.set(TASK_MILLISECOND * 500, TASK_FOREVER, - bind(&Button::readPin, this, net)); - scheduler->addTask(btnTask); - btnTask.enable(); - } using Sprocket::activate; - - void readPin(MeshNet* network){ - if(digitalRead(pin)){ - Serial.println("btn pressed"); - network->broadcast("EE1B2E"); - } - } - - void receivedCallback( uint32_t from, String &msg ) { - Serial.printf("button: Received from %u msg=%s\n", from, msg.c_str()); - // respond in receive callback can cause an endless loop when all nodes run the same firmware - //String foo = String("cheerz back to ") + String(from); - //net->broadcast(foo); - } - void loop() { - net->update(); - scheduler.execute(); - } -}; - -#endif \ No newline at end of file diff --git a/src/examples/button/config.h b/src/examples/button/config.h deleted file mode 100644 index c27cb09..0000000 --- a/src/examples/button/config.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef __MESH_CONFIG__ -#define __MESH_CONFIG__ - -// Scheduler config -#define _TASK_SLEEP_ON_IDLE_RUN -#define _TASK_STD_FUNCTION - -// Chip config -#define SERIAL_BAUD_RATE 115200 -#define STARTUP_DELAY 3000 - -// Mesh config -#define STATION_MODE 0 -#define WIFI_CHANNEL 11 -#define MESH_PORT 5555 -#define MESH_PREFIX "whateverYouLike" -#define MESH_PASSWORD "somethingSneaky" -#define STATION_SSID "Th1ngs4P" -#define STATION_PASSWORD "th3r31sn0sp00n" -#define HOSTNAME "mesh-node" -#define MESH_DEBUG_TYPES ERROR | STARTUP | CONNECTION - -#define BUTTON_PIN D2 - -#endif \ No newline at end of file diff --git a/src/examples/button/main.cpp b/src/examples/button/main.cpp deleted file mode 100644 index 061f47f..0000000 --- a/src/examples/button/main.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include "config.h" -#include "MeshNet.h" -#include "Button.h" - -MeshNet net({ - STATION_MODE, WIFI_CHANNEL, - MESH_PORT, MESH_PREFIX, MESH_PASSWORD, - STATION_SSID, STATION_PASSWORD, HOSTNAME, - MESH_DEBUG_TYPES -}); -Button sprocket({ STARTUP_DELAY, SERIAL_BAUD_RATE }); - -void setup() { - sprocket.join(net); -} - -void loop() { - sprocket.loop(); - yield(); -} \ No newline at end of file diff --git a/src/examples/illucat/Illucat.h b/src/examples/illucat/Illucat.h deleted file mode 100644 index 0991f6c..0000000 --- a/src/examples/illucat/Illucat.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef __MESH_APP__ -#define __MESH_APP__ - -#include -#include -#include -#include "NeoPattern.h" - -using namespace std; -using namespace std::placeholders; - -struct NeoPixelConfig { - int pin; - int length; -}; - -class Illucat : public Sprocket { - public: - MeshNet* net; - NeoPattern* pixels; - Illucat(SprocketConfig cfg, NeoPixelConfig pixelCfg) : Sprocket(cfg) { - pixels = new NeoPattern(pixelCfg.length, pixelCfg.pin, NEO_GRB + NEO_KHZ800, [](int pixels){}); - } - Sprocket* activate(Scheduler* scheduler, Network* network) { - net = static_cast(network); - net->mesh.onReceive(bind(&Illucat::messageReceived,this, _1, _2)); - // TODO default rainbow task - } using Sprocket::activate; - - void messageReceived( uint32_t from, String &msg ) { - Serial.printf("illucat: received from %u msg=%s\n", from, msg.c_str()); - setHexColor(msg.c_str()); - } - void setHexColor(const char *hex){ - int r, g, b; - sscanf(hex, "%02x%02x%02x", &r, &g, &b); - pixels->ColorSet(pixels->Color(r,g,b)); - } - void loop() { - net->update(); - scheduler.execute(); - } -}; - -#endif \ No newline at end of file diff --git a/src/examples/illucat/NeoPattern.h b/src/examples/illucat/NeoPattern.h deleted file mode 100644 index f2b1a58..0000000 --- a/src/examples/illucat/NeoPattern.h +++ /dev/null @@ -1,304 +0,0 @@ -#ifndef __NeoPattern_H_INCLUDED__ -#define __NeoPattern_H_INCLUDED__ - -#include - -/** - * NeoPattern by Bill Earl - * https://learn.adafruit.com/multi-tasking-the-arduino-part-3/overview - */ - -// Pattern types supported: -enum pattern { NONE, RAINBOW_CYCLE, THEATER_CHASE, COLOR_WIPE, SCANNER, FADE }; -// Patern directions supported: -enum direction { FORWARD, REVERSE }; - -// NeoPattern Class - derived from the Adafruit_NeoPixel class -class NeoPattern : public Adafruit_NeoPixel -{ - public: - - // Member Variables: - pattern ActivePattern; // which pattern is running - direction Direction; // direction to run the pattern - - unsigned long Interval; // milliseconds between updates - unsigned long lastUpdate; // last update of position - - uint32_t Color1, Color2; // What colors are in use - uint16_t TotalSteps; // total number of steps in the pattern - uint16_t Index; // current step within the pattern - uint16_t completed = 0; - - void (*OnComplete)(int); // Callback on completion of pattern - - // Constructor - calls base-class constructor to initialize strip - NeoPattern(uint16_t pixels, uint8_t pin, uint8_t type, void (*callback)(int)) - :Adafruit_NeoPixel(pixels, pin, type) - { - OnComplete = callback; - } - - // Update the pattern - void Update() - { - if((millis() - lastUpdate) > Interval) // time to update - { - lastUpdate = millis(); - switch(ActivePattern) - { - case RAINBOW_CYCLE: - RainbowCycleUpdate(); - break; - case THEATER_CHASE: - TheaterChaseUpdate(); - break; - case COLOR_WIPE: - ColorWipeUpdate(); - break; - case SCANNER: - ScannerUpdate(); - break; - case FADE: - FadeUpdate(); - break; - default: - break; - } - } - } - - // Increment the Index and reset at the end - void Increment() - { - completed = 0; - if (Direction == FORWARD) - { - Index++; - if (Index >= TotalSteps) - { - Index = 0; - if (OnComplete != NULL) - { - completed = 1; - OnComplete(numPixels()); // call the comlpetion callback - } - } - } - else // Direction == REVERSE - { - --Index; - if (Index <= 0) - { - Index = TotalSteps-1; - if (OnComplete != NULL) - { - completed = 1; - OnComplete(numPixels()); // call the comlpetion callback - } - } - } - } - - // Reverse pattern direction - void Reverse() - { - if (Direction == FORWARD) - { - Direction = REVERSE; - Index = TotalSteps-1; - } - else - { - Direction = FORWARD; - Index = 0; - } - } - - // Initialize for a RainbowCycle - void RainbowCycle(uint8_t interval, direction dir = FORWARD) - { - ActivePattern = RAINBOW_CYCLE; - Interval = interval; - TotalSteps = 255; - Index = 0; - Direction = dir; - } - - // Update the Rainbow Cycle Pattern - void RainbowCycleUpdate() - { - for(int i=0; i< numPixels(); i++) - { - setPixelColor(i, Wheel(((i * 256 / numPixels()) + Index) & 255)); - } - show(); - Increment(); - } - - // Initialize for a Theater Chase - void TheaterChase(uint32_t color1, uint32_t color2, uint16_t interval, direction dir = FORWARD) - { - ActivePattern = THEATER_CHASE; - Interval = interval; - TotalSteps = numPixels(); - Color1 = color1; - Color2 = color2; - Index = 0; - Direction = dir; - } - - // Update the Theater Chase Pattern - void TheaterChaseUpdate() - { - for(int i=0; i< numPixels(); i++) - { - if ((i + Index) % 3 == 0) - { - setPixelColor(i, Color1); - } - else - { - setPixelColor(i, Color2); - } - } - show(); - Increment(); - } - - // Initialize for a ColorWipe - void ColorWipe(uint32_t color, uint8_t interval, direction dir = FORWARD) - { - ActivePattern = COLOR_WIPE; - Interval = interval; - TotalSteps = numPixels(); - Color1 = color; - Index = 0; - Direction = dir; - } - - // Update the Color Wipe Pattern - void ColorWipeUpdate() - { - setPixelColor(Index, Color1); - show(); - Increment(); - } - - // Initialize for a SCANNNER - void Scanner(uint32_t color1, uint8_t interval) - { - ActivePattern = SCANNER; - Interval = interval; - TotalSteps = (numPixels() - 1) * 2; - Color1 = color1; - Index = 0; - } - - // Update the Scanner Pattern - void ScannerUpdate() - { - for (int i = 0; i < numPixels(); i++) - { - if (i == Index) // Scan Pixel to the right - { - setPixelColor(i, Color1); - } - else if (i == TotalSteps - Index) // Scan Pixel to the left - { - setPixelColor(i, Color1); - } - else // Fading tail - { - setPixelColor(i, DimColor(getPixelColor(i))); - } - } - show(); - Increment(); - } - - // Initialize for a Fade - void Fade(uint32_t color1, uint32_t color2, uint16_t steps, uint8_t interval, direction dir = FORWARD) - { - ActivePattern = FADE; - Interval = interval; - TotalSteps = steps; - Color1 = color1; - Color2 = color2; - Index = 0; - Direction = dir; - } - - // Update the Fade Pattern - void FadeUpdate() - { - // Calculate linear interpolation between Color1 and Color2 - // Optimise order of operations to minimize truncation error - uint8_t red = ((Red(Color1) * (TotalSteps - Index)) + (Red(Color2) * Index)) / TotalSteps; - uint8_t green = ((Green(Color1) * (TotalSteps - Index)) + (Green(Color2) * Index)) / TotalSteps; - uint8_t blue = ((Blue(Color1) * (TotalSteps - Index)) + (Blue(Color2) * Index)) / TotalSteps; - - ColorSet(Color(red, green, blue)); - show(); - Increment(); - } - - // Calculate 50% dimmed version of a color (used by ScannerUpdate) - uint32_t DimColor(uint32_t color) - { - // Shift R, G and B components one bit to the right - uint32_t dimColor = Color(Red(color) >> 1, Green(color) >> 1, Blue(color) >> 1); - return dimColor; - } - - // Set all pixels to a color (synchronously) - void ColorSet(uint32_t color) - { - for (int i = 0; i < numPixels(); i++) - { - setPixelColor(i, color); - } - show(); - } - - // Returns the Red component of a 32-bit color - uint8_t Red(uint32_t color) - { - return (color >> 16) & 0xFF; - } - - // Returns the Green component of a 32-bit color - uint8_t Green(uint32_t color) - { - return (color >> 8) & 0xFF; - } - - // Returns the Blue component of a 32-bit color - uint8_t Blue(uint32_t color) - { - return color & 0xFF; - } - - // Input a value 0 to 255 to get a color value. - // The colours are a transition r - g - b - back to r. - uint32_t Wheel(byte WheelPos) - { - WheelPos = 255 - WheelPos; - if(WheelPos < 85) - { - return Color(255 - WheelPos * 3, 0, WheelPos * 3); - } - else if(WheelPos < 170) - { - WheelPos -= 85; - return Color(0, WheelPos * 3, 255 - WheelPos * 3); - } - else - { - WheelPos -= 170; - return Color(WheelPos * 3, 255 - WheelPos * 3, 0); - } - } -}; - -#endif \ No newline at end of file diff --git a/src/examples/illucat/config.h b/src/examples/illucat/config.h deleted file mode 100644 index f099c01..0000000 --- a/src/examples/illucat/config.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef __MESH_CONFIG__ -#define __MESH_CONFIG__ - -// Scheduler config -#define _TASK_SLEEP_ON_IDLE_RUN -#define _TASK_STD_FUNCTION - -// Chip config -#define SERIAL_BAUD_RATE 115200 -#define STARTUP_DELAY 3000 - -// Mesh config -#define STATION_MODE 0 -#define WIFI_CHANNEL 11 -#define MESH_PORT 5555 -#define MESH_PREFIX "whateverYouLike" -#define MESH_PASSWORD "somethingSneaky" -#define STATION_SSID "Th1ngs4P" -#define STATION_PASSWORD "th3r31sn0sp00n" -#define HOSTNAME "mesh-node" -#define MESH_DEBUG_TYPES ERROR | STARTUP | CONNECTION - -// illucat -#define LED_STRIP_PIN D2 -#define LED_STRIP_LENGTH 8 -#define LED_STRIP_BRIGHTNESS 32 - - -#endif \ No newline at end of file diff --git a/src/examples/illucat/main.cpp b/src/examples/illucat/main.cpp deleted file mode 100644 index 9c12dbf..0000000 --- a/src/examples/illucat/main.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include "config.h" -#include "MeshNet.h" -#include "Illucat.h" - -MeshNet net({ - STATION_MODE, WIFI_CHANNEL, - MESH_PORT, MESH_PREFIX, MESH_PASSWORD, - STATION_SSID, STATION_PASSWORD, HOSTNAME, - MESH_DEBUG_TYPES -}); -Illucat sprocket({ STARTUP_DELAY, SERIAL_BAUD_RATE }, - { LED_STRIP_PIN, LED_STRIP_LENGTH }); - -void setup() { - sprocket.join(net); -} - -void loop() { - sprocket.loop(); - yield(); -} \ No newline at end of file diff --git a/src/examples/mesh/config.h b/src/examples/mesh/config.h index a9cd7eb..743cae6 100644 --- a/src/examples/mesh/config.h +++ b/src/examples/mesh/config.h @@ -13,7 +13,7 @@ #define STATION_MODE 0 #define WIFI_CHANNEL 11 #define MESH_PORT 5555 -#define MESH_PREFIX "whateverYouLike" +#define MESH_PREFIX "WirelosContraption" #define MESH_PASSWORD "somethingSneaky" #define STATION_SSID "Th1ngs4P" #define STATION_PASSWORD "th3r31sn0sp00n" diff --git a/src/examples/mqttBridge/config.h b/src/examples/mqttBridge/config.h index 67b0c67..f60e49e 100644 --- a/src/examples/mqttBridge/config.h +++ b/src/examples/mqttBridge/config.h @@ -13,16 +13,16 @@ #define STATION_MODE 1 #define WIFI_CHANNEL 11 #define MESH_PORT 5555 -#define MESH_PREFIX "wirelos_contraption" -#define MESH_PASSWORD "th3r31sn0sp00n" +#define MESH_PREFIX "WirelosContraption" +#define MESH_PASSWORD "somethingSneaky" #define STATION_SSID "Th1ngs4P" #define STATION_PASSWORD "th3r31sn0sp00n" -#define HOSTNAME "sprocket" +#define HOSTNAME "mqtt-bridge" #define MESH_DEBUG_TYPES ERROR | STARTUP | CONNECTION // Bridge config #define MQTT_CLIENT_NAME HOSTNAME -#define MQTT_BROKER "citadel.lan" +#define MQTT_BROKER "iot.eclipse.org" #define MQTT_PORT 1883 #define MQTT_TOPIC_ROOT "mesh" diff --git a/src/firmware/BaseSprocket.h b/src/firmware/BaseSprocket.h deleted file mode 100644 index 9cb0398..0000000 --- a/src/firmware/BaseSprocket.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef __BASE_SPROCKET__ -#define __BASE_SPROCKET__ - -#include -#include - -using namespace std; -using namespace std::placeholders; - -// TODO remove someTask and replace with OTA stuff -class BaseSprocket : public Sprocket { - public: - Task someTask; - MeshNet* net; - BaseSprocket(SprocketConfig cfg) : Sprocket(cfg) { - - } - Sprocket* activate(Scheduler* scheduler, Network* network) { - net = static_cast(network); - net->mesh.onReceive(bind(&BaseSprocket::receivedCallback,this, _1, _2)); - // add a task that sends stuff to the mesh - someTask.set(TASK_SECOND * 5, TASK_FOREVER, - bind(&BaseSprocket::heartbeat, this, net)); - scheduler->addTask(someTask); - someTask.enable(); - } using Sprocket::activate; - - void heartbeat(MeshNet* network){ - String msg = "{ \"alive \": 1 }"; - network->broadcast(msg); - } - - virtual void receivedCallback( uint32_t from, String &msg ) { - Serial.printf("RECV %u = %s\n", from, msg.c_str()); - } -}; - -#endif \ No newline at end of file diff --git a/src/firmware/config.h b/src/firmware/config.h deleted file mode 100644 index 0a19cd1..0000000 --- a/src/firmware/config.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef __BRIDGE_CONFIG__ -#define __BRIDGE_CONFIG__ - -// Scheduler config -#define _TASK_SLEEP_ON_IDLE_RUN -#define _TASK_STD_FUNCTION - -// Chip config -#define SERIAL_BAUD_RATE 115200 -#define STARTUP_DELAY 3000 - -// Mesh config -#define STATION_MODE 0 // 1 = connect to AP using STATION params -#define WIFI_CHANNEL 11 -#define MESH_PORT 5555 -#define MESH_PREFIX "wirelos_contraption" -#define MESH_PASSWORD "th3r31sn0sp00n" -#define STATION_SSID "Th1ngs4P" -#define STATION_PASSWORD "th3r31sn0sp00n" -#define HOSTNAME "sprocket" -#define MESH_DEBUG_TYPES ERROR | STARTUP | CONNECTION - -#define MQTT_CLIENT_NAME HOSTNAME -#define MQTT_BROKER "citadel.lan" -#define MQTT_PORT 1883 -#define MQTT_TOPIC_ROOT "mesh" - -#endif \ No newline at end of file diff --git a/src/firmware/main.cpp b/src/firmware/main.cpp deleted file mode 100644 index ab78d91..0000000 --- a/src/firmware/main.cpp +++ /dev/null @@ -1,23 +0,0 @@ -#include "config.h" -#include "MeshNet.h" -#include "BaseSprocket.h" - -MeshNet net({ - STATION_MODE, WIFI_CHANNEL, - MESH_PORT, MESH_PREFIX, MESH_PASSWORD, - STATION_SSID, STATION_PASSWORD, HOSTNAME, - MESH_DEBUG_TYPES -}); - -BaseSprocket sprocket( - { STARTUP_DELAY, SERIAL_BAUD_RATE } -); - -void setup() { - sprocket.join(net); -} - -void loop() { - sprocket.loop(); - yield(); -} \ No newline at end of file