diff --git a/.vscode/settings.json b/.vscode/settings.json
index acf27a5..30a0ad1 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,6 +1,6 @@
{
"terminal.integrated.env.linux": {
- "PATH": "/home/master/.platformio/penv/bin:/home/master/.platformio/penv:/home/master/bin:/home/master/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin",
+ "PATH": "/home/master/.platformio/penv/bin:/home/master/.platformio/penv:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl",
"PLATFORMIO_CALLER": "vscode"
},
"files.associations": {
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..6d6c0a2
--- /dev/null
+++ b/README.md
@@ -0,0 +1,4 @@
+# Sprocket Core
+
+## OTA over MQTT
+https://github.com/Imroy/pubsubclient/blob/master/examples/ESP8266-OTA/ESP8266-OTA.ino
\ No newline at end of file
diff --git a/library.json b/library.json
index 6ae6bb2..1ec316d 100644
--- a/library.json
+++ b/library.json
@@ -14,5 +14,12 @@
"url": "https://gitlab.com/wirelos/sprocket-core/"
},
"frameworks": "arduino",
- "platforms": "espressif8266"
+ "platforms": "espressif8266",
+ "examples": "examples/*",
+ "export": {
+ "exclude":
+ [
+ "firmware/"
+ ]
+ }
}
\ No newline at end of file
diff --git a/platformio.ini b/platformio.ini
index 9b9a1c6..0cdaa05 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -9,7 +9,7 @@
; http://docs.platformio.org/page/projectconf.html
[platformio]
-env_default = meshMqttBridge
+env_default = build
[common]
framework = arduino
@@ -39,7 +39,7 @@ lib_deps = ${common.lib_deps}
;upload_port = 192.168.1.168
[env:basic]
-src_filter = +<*> + - -
+src_filter = +<*> - - +
platform = ${common.platform}
board = ${common.board}
upload_speed = ${common.upload_speed}
@@ -48,7 +48,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}
@@ -58,7 +58,7 @@ lib_deps = ${common.lib_deps}
painlessMesh
[env:meshMqttBridge]
-src_filter = +<*> + - -
+src_filter = +<*> - - +
platform = espressif8266
board = esp12e
upload_speed = ${common.upload_speed}
diff --git a/src/MeshNet.cpp b/src/MeshNet.cpp
index 36abada..92ebfd6 100644
--- a/src/MeshNet.cpp
+++ b/src/MeshNet.cpp
@@ -24,9 +24,6 @@ Network* MeshNet::init(){
return this;
}
-Network* MeshNet::connect(){
- return this;
-}
void MeshNet::sendTo(uint32_t target, String msg){
mesh.sendSingle(target, msg);
diff --git a/src/MeshNet.h b/src/MeshNet.h
index 04b8f6c..1275655 100644
--- a/src/MeshNet.h
+++ b/src/MeshNet.h
@@ -27,7 +27,6 @@ class MeshNet : public Network {
MeshNet(MeshConfig cfg);
Network* init();
- Network* connect();
void broadcast(String msg);
void sendTo(uint32_t target, String msg);
diff --git a/src/Sprocket.h b/src/Sprocket.h
index 5a84978..6d485b8 100644
--- a/src/Sprocket.h
+++ b/src/Sprocket.h
@@ -20,7 +20,7 @@ class Sprocket {
Sprocket(SprocketConfig);
Sprocket* init(SprocketConfig);
Sprocket* join(Network&);
- Sprocket* addTask(Task&); // REMOVE ??
+ Sprocket* addTask(Task&);
virtual void loop();
virtual Sprocket* activate();
virtual Sprocket* activate(Scheduler*) { return this; }
diff --git a/src/examples/mesh/MeshApp.h b/src/examples/mesh/MeshApp.h
index cedab31..8c8d28c 100644
--- a/src/examples/mesh/MeshApp.h
+++ b/src/examples/mesh/MeshApp.h
@@ -18,12 +18,12 @@ class MeshApp : public Sprocket {
net->mesh.onReceive(bind(&MeshApp::receivedCallback,this, _1, _2));
// add a task that sends stuff to the mesh
someTask.set(TASK_SECOND * 5, TASK_FOREVER,
- bind(&MeshApp::advertise, this, net));
+ bind(&MeshApp::heartbeat, this, net));
scheduler->addTask(someTask);
someTask.enable();
} using Sprocket::activate;
- void advertise(MeshNet* network){
+ void heartbeat(MeshNet* network){
String msg = "{ \"payload \": 1 }";
network->broadcast(msg);
}
diff --git a/src/examples/mqttBridge/MqttMeshBridge.h b/src/examples/mqttBridge/MqttMeshBridge.h
index 12733d1..9c775e8 100644
--- a/src/examples/mqttBridge/MqttMeshBridge.h
+++ b/src/examples/mqttBridge/MqttMeshBridge.h
@@ -34,16 +34,21 @@ class MqttMeshBridge : public Sprocket {
mqttConfig = cfg;
}
- Sprocket* activate(Scheduler* scheduler, Network* network) {
- Serial.println("activate MQTT bridge");
- net = static_cast(network);
- net->mesh.onReceive(bind(&MqttMeshBridge::receivedCallback,this, _1, _2));
- client = new PubSubClient(mqttConfig.brokerHost, mqttConfig.brokerPort, bind(&MqttMeshBridge::mqttCallback, this, _1, _2, _3), wifiClient);
+ Sprocket* activate(Scheduler* scheduler){
enableConnectTask(scheduler);
enableProcessTask(scheduler);
return this;
}
+ Sprocket* activate(Scheduler* scheduler, Network* network) {
+ Serial.println("activate MQTT bridge");
+ net = static_cast(network);
+ net->mesh.onReceive(bind(&MqttMeshBridge::receivedCallback,this, _1, _2));
+ client = new PubSubClient(mqttConfig.brokerHost, mqttConfig.brokerPort, bind(&MqttMeshBridge::mqttCallback, this, _1, _2, _3), wifiClient);
+ return activate(scheduler);
+ }
+
+ private:
void enableConnectTask(Scheduler* scheduler) {
connectTask.set(TASK_SECOND * 5, TASK_FOREVER, bind(&MqttMeshBridge::connect, this));
scheduler->addTask(connectTask);
diff --git a/src/examples/mqttBridge/config.h b/src/examples/mqttBridge/config.h
index e01f91a..67b0c67 100644
--- a/src/examples/mqttBridge/config.h
+++ b/src/examples/mqttBridge/config.h
@@ -13,11 +13,11 @@
#define STATION_MODE 1
#define WIFI_CHANNEL 11
#define MESH_PORT 5555
-#define MESH_PREFIX "whateverYouLike"
-#define MESH_PASSWORD "somethingSneaky"
-#define STATION_SSID "tErAx1d"
-#define STATION_PASSWORD "ramalamadingdong"
-#define HOSTNAME "mqtt-mesh-bridge"
+#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
// Bridge config
diff --git a/src/firmware/BaseSprocket.h b/src/firmware/BaseSprocket.h
new file mode 100644
index 0000000..9cb0398
--- /dev/null
+++ b/src/firmware/BaseSprocket.h
@@ -0,0 +1,38 @@
+#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
new file mode 100644
index 0000000..0a19cd1
--- /dev/null
+++ b/src/firmware/config.h
@@ -0,0 +1,28 @@
+#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
new file mode 100644
index 0000000..ab78d91
--- /dev/null
+++ b/src/firmware/main.cpp
@@ -0,0 +1,23 @@
+#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