mirror of
https://gitlab.com/zwirbel/illucat.git
synced 2025-12-19 03:05:50 +01:00
Compare commits
1 Commits
documentat
...
color-pot
| Author | SHA1 | Date | |
|---|---|---|---|
| 1fc90511ac |
@@ -1,13 +1,9 @@
|
||||
image: python:2.7-stretch
|
||||
|
||||
variables:
|
||||
S3_BUCKET_NAME: "wirelos"
|
||||
PROJECT_NAME: "illucat"
|
||||
|
||||
stages:
|
||||
- build
|
||||
- test
|
||||
- release
|
||||
- build
|
||||
- production
|
||||
|
||||
cache:
|
||||
key: ${CI_COMMIT_REF_SLUG}
|
||||
@@ -22,20 +18,15 @@ firmware:
|
||||
script:
|
||||
- mv data/example.config.json data/config.json
|
||||
- pio run -t clean
|
||||
- pio run -e release
|
||||
- pio run -e release -t buildfs
|
||||
- pio run
|
||||
- pio run -t buildfs
|
||||
|
||||
release:
|
||||
stage: release
|
||||
only:
|
||||
- /^release-.*$/
|
||||
image: python:latest
|
||||
stage: production
|
||||
script:
|
||||
- pip install awscli
|
||||
- mkdir -p ${PROJECT_NAME}/${CI_COMMIT_TAG}
|
||||
- mv .pioenvs/release/firmware.bin ${PROJECT_NAME}/${CI_COMMIT_TAG}
|
||||
- mv .pioenvs/release/spiffs.bin ${PROJECT_NAME}/${CI_COMMIT_TAG}
|
||||
- aws s3 --endpoint-url=https://$DO_SPACE_ENDPOINT cp ./ s3://$S3_BUCKET_NAME/ --recursive --exclude "*" --include "*.bin"
|
||||
- mkdir release
|
||||
- mv .pioenvs/build/firmware.bin release
|
||||
- mv .pioenvs/build/spiffs.bin release
|
||||
artifacts:
|
||||
paths:
|
||||
- ${PROJECT_NAME}/${CI_COMMIT_TAG}
|
||||
- release
|
||||
|
||||
23
.vscode/settings.json
vendored
23
.vscode/settings.json
vendored
@@ -15,27 +15,6 @@
|
||||
"unordered_map": "cpp",
|
||||
"vector": "cpp",
|
||||
"tuple": "cpp",
|
||||
"utility": "cpp",
|
||||
"cctype": "cpp",
|
||||
"clocale": "cpp",
|
||||
"cmath": "cpp",
|
||||
"cstdarg": "cpp",
|
||||
"cstdint": "cpp",
|
||||
"cstdio": "cpp",
|
||||
"cstdlib": "cpp",
|
||||
"cwchar": "cpp",
|
||||
"cwctype": "cpp",
|
||||
"exception": "cpp",
|
||||
"fstream": "cpp",
|
||||
"iosfwd": "cpp",
|
||||
"istream": "cpp",
|
||||
"limits": "cpp",
|
||||
"new": "cpp",
|
||||
"ostream": "cpp",
|
||||
"numeric": "cpp",
|
||||
"stdexcept": "cpp",
|
||||
"streambuf": "cpp",
|
||||
"cinttypes": "cpp",
|
||||
"typeinfo": "cpp"
|
||||
"utility": "cpp"
|
||||
}
|
||||
}
|
||||
11
README.md
11
README.md
@@ -1,16 +1,9 @@
|
||||
# Illumination-Cat
|
||||
The Illumination-Cat (short IlluCat) is the collaborative work of several streams, ranging from 3D modeling, electronics and programming.
|
||||
Originating from the Chaos-Drucker Club with the idea of having
|
||||
a cool status indicator for 3D printers, the project grew beyond the original idea.
|
||||
|
||||
From the software point of view, the IlluCat is the exemplary model of the [Sprocket framework](https://gitlab.com/wirelos/sprocket-lib), implementing the various aspects and possibilities of the framework.
|
||||
IlluCat can embed several plugins, like web interface, MQTT, IRC or even mesh networking.
|
||||
As the framework supports easy integration of many available Arduino libraries, IlluCat can be easily customized to your needs. This repository contains some example implementations that you can use to build your own custom cat.
|
||||
This is the brain of the the almighty Illumination-Cat.
|
||||
|
||||
## Resources & Documentation
|
||||
[3D Model](https://www.thingiverse.com/thing:2974862)
|
||||
[Installation](https://gitlab.com/0x1d/illucat/blob/master/installation.md)
|
||||
[API](https://gitlab.com/0x1d/illucat/blob/master/api.md)
|
||||
[OctoPrint Stuff](https://github.com/FrYakaTKoP/simple-octo-ws2812)
|
||||
[Sprocket framework](https://gitlab.com/wirelos/sprocket-lib)
|
||||
[Sprocket plugins](https://gitlab.com/wirelos)
|
||||
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
{
|
||||
"stationMode": 0,
|
||||
"hostname": "illucat",
|
||||
"apSSID": "illucat",
|
||||
"apPassword": "illumination",
|
||||
"connectTimeout": 20000,
|
||||
"stationSSID": "MyWifi",
|
||||
"stationPassword": "myWifiPassword",
|
||||
"meshSSID": "illucat",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"pin": 4,
|
||||
"length": 8,
|
||||
"length": 300,
|
||||
"brightness": 64,
|
||||
"updateInterval": 100,
|
||||
"updateInterval": 50,
|
||||
"defaultColor": 100
|
||||
}
|
||||
@@ -4,14 +4,16 @@
|
||||
- download and flash firmware and filesystem
|
||||
- or: rename example.config.json to config.json, build and upload it yourself
|
||||
|
||||
## Enduser Setup (Standalone)
|
||||
## Enduser Setup
|
||||
1. Scan for access points
|
||||
1. connect to the access point "illucat" with password "illumination"
|
||||
1. open a web browser and navigate to http://192.168.4.1
|
||||
1. To connect the cat to your own WiFi, open the "Settings" section and change "stationMode" to 1 and set "stationSSID" and "stationPassword" according to your own access point's credentials
|
||||
1. connect to illucat access point
|
||||
1. open web browser and navigate to the gateway IP
|
||||
1. change stationMode to 1 in the Settings section for connecting the cat to your own AP. leave it 0 to build a mesh.
|
||||
1. change stationSSID and stationPassword to match your AP settings
|
||||
1. change the NeoPixel settings according to your hardware. The pin needs to be specified as the pin id of your board, e.g. 4 = D2 on a Wemos D1 Mini.
|
||||
1. submit all changes
|
||||
1. open the "System" section and hit "Restart"
|
||||
1. illucat connects to your network and can be reached through http://illucat (might take some time, depending on your DNS server)
|
||||
1. hit restart under the System section
|
||||
1. illucat connects to your network and can be reached with http://illucat (or any other configured hostname)
|
||||
|
||||
|
||||
## Install and setup Python
|
||||
@@ -62,6 +64,21 @@ hint: you can crank the baudrate up to 921600 bps ;)
|
||||
|
||||
python -m esptool --port COM11 --baud 115200 write_flash 0x00000 firmware.bin 0x00300000 spiffs.bin
|
||||
|
||||
# Configuration after first boot
|
||||
|
||||
the esp will build a AP with ssid name **illu** and password **illumination**
|
||||
|
||||
when connected browse to **http://illucat**
|
||||
|
||||
now you can enter the SSID and Password of your WLAN and set StationMode to 1
|
||||
then press save and reset the esp)
|
||||
|
||||
the Cat should now joined your network
|
||||
|
||||
find the ip of your cat in your DHCP table
|
||||
|
||||
have fun
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -31,20 +31,6 @@ lib_deps =
|
||||
Adafruit NeoPixel
|
||||
|
||||
[env:build]
|
||||
src_filter = +<*> -<wifiMesh/> +<wifi/>
|
||||
platform = ${common.platform}
|
||||
board = ${common.board}
|
||||
upload_speed = ${common.upload_speed}
|
||||
monitor_baud = ${common.monitor_baud}
|
||||
framework = ${common.framework}
|
||||
build_flags = -Wl,-Teagle.flash.4m1m.ld
|
||||
-DSPROCKET_PRINT=1
|
||||
lib_deps = ${common.lib_deps}
|
||||
https://gitlab.com/wirelos/sprocket-core.git#develop
|
||||
|
||||
|
||||
[env:build-mesh]
|
||||
src_filter = +<*> +<wifiMesh/> -<wifi/>
|
||||
platform = ${common.platform}
|
||||
board = ${common.board}
|
||||
upload_speed = ${common.upload_speed}
|
||||
@@ -56,7 +42,6 @@ lib_deps = ${common.lib_deps}
|
||||
https://gitlab.com/wirelos/sprocket-core.git#develop
|
||||
|
||||
[env:release]
|
||||
src_filter = +<*> -<wifiMesh/> +<wifi/>
|
||||
platform = ${common.platform}
|
||||
board = ${common.board}
|
||||
upload_speed = ${common.upload_speed}
|
||||
@@ -65,11 +50,10 @@ framework = ${common.framework}
|
||||
build_flags = -Wl,-Teagle.flash.4m1m.ld
|
||||
-DSPROCKET_PRINT=0
|
||||
lib_deps = ${common.lib_deps}
|
||||
https://gitlab.com/wirelos/sprocket-core.git#develop
|
||||
https://gitlab.com/wirelos/sprocket-core.git#master
|
||||
|
||||
|
||||
[env:nodemcu]
|
||||
src_filter = +<*> -<wifiMesh/> +<wifi/>
|
||||
platform = ${common.platform}
|
||||
board = nodemcu
|
||||
upload_speed = ${common.upload_speed}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
#ifndef __MESH_APP__
|
||||
#define __MESH_APP__
|
||||
|
||||
#include <TaskScheduler.h>
|
||||
#include <painlessMesh.h>
|
||||
#include <base/MeshSprocket.h>
|
||||
#include <MeshNet.h>
|
||||
#include <Sprocket.h>
|
||||
|
||||
#include "config.h"
|
||||
#include "NeoPattern.cpp"
|
||||
@@ -17,19 +17,19 @@
|
||||
#include <plugins/WebServerPlugin.cpp>
|
||||
#include <plugins/WebConfigPlugin.cpp>
|
||||
#include "PixelPlugin.h"
|
||||
#include "PotPlugin.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace std::placeholders;
|
||||
|
||||
|
||||
class IlluCat : public Sprocket {
|
||||
class IlluCat : public MeshSprocket {
|
||||
public:
|
||||
NeoPattern* pixels;
|
||||
NeoPatternDto defaultState;
|
||||
NeoPatternDto state;
|
||||
AsyncWebServer* server;
|
||||
AsyncWebSocket* ws;
|
||||
//AsyncWebSocket* wsStream;
|
||||
AsyncWebSocket* wsStream;
|
||||
|
||||
NeoPixelConfig pixelConfig;
|
||||
SprocketConfig sprocketConfig;
|
||||
@@ -38,25 +38,31 @@ class IlluCat : public Sprocket {
|
||||
|
||||
SprocketMessage currentMessage;
|
||||
|
||||
IlluCat(SprocketConfig cfg, OtaConfig otaCfg, WebServerConfig webCfg) : Sprocket(cfg) {
|
||||
IlluCat(SprocketConfig cfg, OtaConfig otaCfg, WebServerConfig webCfg/* , NeoPixelConfig pixelCfg */) : MeshSprocket(cfg) {
|
||||
//pixelConfig = pixelCfg;
|
||||
|
||||
sprocketConfig = cfg;
|
||||
otaConfig = otaCfg;
|
||||
webConfig = webCfg;
|
||||
|
||||
pixelConfig.pin = 4;
|
||||
pixelConfig.length = 8;
|
||||
pixelConfig.brightness = 32;
|
||||
pixelConfig.updateInterval = 100;
|
||||
pixelConfig.defaultColor = 100;
|
||||
|
||||
}
|
||||
|
||||
virtual void scanningAnimation() {
|
||||
pixels->Scanner(pixels->Wheel(COLOR_NOT_CONNECTED), pixelConfig.updateInterval);
|
||||
}
|
||||
virtual void defaultAnimation() {
|
||||
pixels->RainbowCycle(pixelConfig.updateInterval);
|
||||
String defaultStr = String(defaultState.value);
|
||||
PIXEL_FNCS[defaultState.mode](pixels, defaultStr.c_str());
|
||||
}
|
||||
Sprocket* activate(Scheduler* scheduler, Network* network) {
|
||||
|
||||
net = static_cast<MeshNet*>(network);
|
||||
|
||||
// load config files from SPIFFS
|
||||
if(SPIFFS.begin()){
|
||||
pixelConfig.fromFile("/pixelConfig.json");
|
||||
@@ -68,20 +74,18 @@ class IlluCat : public Sprocket {
|
||||
pixels = new NeoPattern(pixelConfig.length, pixelConfig.pin, NEO_GRB + NEO_KHZ800);
|
||||
server = new AsyncWebServer(80);
|
||||
ws = new AsyncWebSocket("/pixel");
|
||||
//wsStream = new AsyncWebSocket("/stream");
|
||||
defaultAnimation();
|
||||
wsStream = new AsyncWebSocket("/stream");
|
||||
|
||||
// add plugins
|
||||
// TODO add HTTP OTA instead of TCP
|
||||
//addPlugin(new OtaTcpPlugin(otaConfig));
|
||||
addPlugin(new OtaTcpPlugin(otaConfig));
|
||||
addPlugin(new WebServerPlugin(webConfig, server));
|
||||
addPlugin(new WebConfigPlugin(server));
|
||||
addPlugin(new PixelPlugin(pixelConfig, pixels));
|
||||
|
||||
addPlugin(new PotPlugin());
|
||||
defaultAnimation();
|
||||
|
||||
// FIXME move to networking
|
||||
//String softApPrt = "SoftAP IP: " + WiFi.softAPIP().toString();
|
||||
//PRINT_MSG(Serial, SPROCKET_TYPE, softApPrt.c_str());
|
||||
String softApPrt = "SoftAP IP: " + WiFi.softAPIP().toString();
|
||||
PRINT_MSG(Serial, SPROCKET_TYPE, softApPrt.c_str());
|
||||
|
||||
// TODO move to plugin
|
||||
// setup web stuff
|
||||
@@ -89,11 +93,11 @@ class IlluCat : public Sprocket {
|
||||
server->on("/pixel/api", HTTP_POST, bind(&IlluCat::patternWebRequestHandler, this, _1));
|
||||
ws->onEvent(bind(&IlluCat::onWsEvent, this, _1, _2, _3, _4, _5, _6));
|
||||
server->addHandler(ws);
|
||||
//wsStream->onEvent(bind(&IlluCat::onStream, this, _1, _2, _3, _4, _5, _6));
|
||||
//server->addHandler(wsStream);
|
||||
wsStream->onEvent(bind(&IlluCat::onStream, this, _1, _2, _3, _4, _5, _6));
|
||||
server->addHandler(wsStream);
|
||||
|
||||
return Sprocket::activate(scheduler, network);
|
||||
} using Sprocket::activate;
|
||||
return MeshSprocket::activate(scheduler, network);
|
||||
} using MeshSprocket::activate;
|
||||
|
||||
// TODO move to utils
|
||||
String getRequestParameterOrDefault(AsyncWebServerRequest *request, String param, String defaultValue, bool isPost = true){
|
||||
@@ -120,7 +124,7 @@ class IlluCat : public Sprocket {
|
||||
String msg = currentMessage.toJsonString();
|
||||
publish(currentMessage.topic, currentMessage.payload);
|
||||
if(currentMessage.broadcast){
|
||||
network.broadcast(msg);
|
||||
net->mesh.sendBroadcast(msg);
|
||||
}
|
||||
request->send(200, "text/plain", msg);
|
||||
}
|
||||
@@ -129,7 +133,7 @@ class IlluCat : public Sprocket {
|
||||
if(type == WS_EVT_DATA){
|
||||
String frame = WsUtils::parseFrameAsString(type, arg, data, len, 0);
|
||||
dispatch(0, frame);
|
||||
network.broadcast(frame);
|
||||
net->mesh.sendBroadcast(frame);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -142,8 +146,7 @@ class IlluCat : public Sprocket {
|
||||
}
|
||||
|
||||
void loop(){
|
||||
Sprocket::loop();
|
||||
yield();
|
||||
MeshSprocket::loop();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
40
src/PotPlugin.h
Normal file
40
src/PotPlugin.h
Normal file
@@ -0,0 +1,40 @@
|
||||
#ifndef __POT_PLUGIN_H__
|
||||
#define __POT_PLUGIN_H__
|
||||
|
||||
#include <FS.h>
|
||||
#include "TaskSchedulerDeclarations.h"
|
||||
#include "ArduinoOTA.h"
|
||||
#include "Plugin.h"
|
||||
#include "utils_print.h"
|
||||
#include "config.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace std::placeholders;
|
||||
|
||||
class PotPlugin : public Plugin {
|
||||
public:
|
||||
Task inputTask;
|
||||
int currentVal = 0;
|
||||
PotPlugin(){
|
||||
}
|
||||
void activate(Scheduler* userScheduler, Network* network){
|
||||
inputTask.set(TASK_MILLISECOND * 50, TASK_FOREVER, bind(&PotPlugin::checkInput, this));
|
||||
userScheduler->addTask(inputTask);
|
||||
inputTask.enable();
|
||||
PRINT_MSG(Serial, SPROCKET_TYPE, "PotPlugin activated");
|
||||
}
|
||||
long toRange(long x, long in_min, long in_max, long out_min, long out_max){
|
||||
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
|
||||
}
|
||||
void checkInput(){
|
||||
//Serial.println(String("Pot:") + String(analogRead(A0)));
|
||||
int newVal = toRange(analogRead(A0), 0, 1024, 0, 255);
|
||||
if(newVal > 0 &&
|
||||
(newVal >= currentVal + 5 || newVal <= currentVal - 5)){
|
||||
publish("pixels/colorWheel",String(newVal));
|
||||
currentVal = newVal;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -8,20 +8,17 @@
|
||||
// Chip config
|
||||
#define SPROCKET_TYPE "ILLUCAT"
|
||||
#define SERIAL_BAUD_RATE 115200
|
||||
#define STARTUP_DELAY 1000
|
||||
#define STARTUP_DELAY 3000
|
||||
|
||||
// Mesh config
|
||||
#define SPROCKET_MODE 0
|
||||
#define WIFI_CHANNEL 11
|
||||
#define MESH_PORT 5555
|
||||
#define AP_SSID "illucat"
|
||||
#define AP_PASSWORD "illumination"
|
||||
#define MESH_PREFIX "illucat-mesh"
|
||||
#define MESH_PASSWORD "th3r31sn0sp00n"
|
||||
#define STATION_SSID "MyAP"
|
||||
#define STATION_PASSWORD "th3r31sn0sp00n"
|
||||
#define HOSTNAME "illucat"
|
||||
#define CONNECT_TIMEOUT 10000
|
||||
#define MESH_DEBUG_TYPES ERROR | STARTUP | CONNECTION
|
||||
//ERROR | MESH_STATUS | CONNECTION | SYNC | COMMUNICATION | GENERAL | MSG_TYPES | REMOTE
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "config.h"
|
||||
#include "MeshNet.h"
|
||||
#include "MeshCat.h"
|
||||
#include "IlluCat.h"
|
||||
|
||||
MeshNet net({
|
||||
SPROCKET_MODE, WIFI_CHANNEL,
|
||||
@@ -8,10 +8,11 @@ MeshNet net({
|
||||
STATION_SSID, STATION_PASSWORD, HOSTNAME,
|
||||
MESH_DEBUG_TYPES
|
||||
});
|
||||
MeshCat sprocket(
|
||||
IlluCat sprocket(
|
||||
{ STARTUP_DELAY, SERIAL_BAUD_RATE },
|
||||
{ OTA_PORT, OTA_PASSWORD },
|
||||
{ WEB_CONTEXT_PATH, WEB_DOC_ROOT, WEB_DEFAULT_FILE }
|
||||
{ WEB_CONTEXT_PATH, WEB_DOC_ROOT, WEB_DEFAULT_FILE }/* ,
|
||||
{ LED_STRIP_PIN, LED_STRIP_LENGTH, LED_STRIP_BRIGHTNESS, LED_STRIP_UPDATE_INTERVAL, LED_STRIP_DEFAULT_COLOR } */
|
||||
);
|
||||
|
||||
void setup() {
|
||||
@@ -1,118 +0,0 @@
|
||||
#ifndef __WEB_CAT__
|
||||
#define __WEB_CAT__
|
||||
|
||||
#include <TaskScheduler.h>
|
||||
#include <MeshNet.h>
|
||||
#include <Sprocket.h>
|
||||
|
||||
#include "config.h"
|
||||
#include "NeoPattern.cpp"
|
||||
#include "NeoPatternDto.h"
|
||||
#include "NeoPattern_api_json.h"
|
||||
#include "NeoPattern_api_modes.cpp"
|
||||
#include "utils_print.h"
|
||||
#include "utils_ws.h"
|
||||
#include <plugins/WebSO.h>
|
||||
#include <plugins/OtaTcpPlugin.cpp>
|
||||
#include <plugins/WebServerPlugin.cpp>
|
||||
#include <plugins/WebConfigPlugin.cpp>
|
||||
#include "PixelPlugin.h"
|
||||
#include "IlluCat.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace std::placeholders;
|
||||
|
||||
|
||||
class WebCat : public IlluCat {
|
||||
public:
|
||||
AsyncWebServer* server;
|
||||
AsyncWebSocket* ws;
|
||||
//AsyncWebSocket* wsStream;
|
||||
WebServerConfig webConfig;
|
||||
|
||||
SprocketMessage currentMessage;
|
||||
|
||||
WebCat(SprocketConfig cfg, OtaConfig otaCfg, WebServerConfig webCfg) : IlluCat(cfg, otaCfg, webCfg) {
|
||||
webConfig = webCfg;
|
||||
}
|
||||
|
||||
Sprocket* activate(Scheduler* scheduler, Network* network) {
|
||||
|
||||
Serial.println("SETUP SERVER");
|
||||
// initialize services
|
||||
server = new AsyncWebServer(80);
|
||||
ws = new AsyncWebSocket("/pixel");
|
||||
//wsStream = new AsyncWebSocket("/stream");
|
||||
Serial.println("init handlers");
|
||||
// TODO move to plugin
|
||||
// setup web stuff
|
||||
server->serveStatic("/pixelConfig.json", SPIFFS, "pixelConfig.json");
|
||||
server->on("/pixel/api", HTTP_POST, bind(&WebCat::patternWebRequestHandler, this, _1));
|
||||
ws->onEvent(bind(&WebCat::onWsEvent, this, _1, _2, _3, _4, _5, _6));
|
||||
server->addHandler(ws);
|
||||
//wsStream->onEvent(bind(&WebCat::onStream, this, _1, _2, _3, _4, _5, _6));
|
||||
//server->addHandler(wsStream);
|
||||
Serial.println("add plugins");
|
||||
// add plugins
|
||||
// TODO add HTTP OTA instead of TCP
|
||||
//addPlugin(new OtaTcpPlugin(otaConfig));
|
||||
addPlugin(new WebServerPlugin(webConfig, server));
|
||||
addPlugin(new WebConfigPlugin(server));
|
||||
|
||||
return IlluCat::activate(scheduler, network);;
|
||||
};
|
||||
|
||||
|
||||
// TODO move to utils
|
||||
String getRequestParameterOrDefault(AsyncWebServerRequest *request, String param, String defaultValue, bool isPost = true){
|
||||
if(request->hasParam(param, isPost)) {
|
||||
return request->getParam(param, isPost)->value();
|
||||
}
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
|
||||
void onStream(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len) {
|
||||
if(type == WS_EVT_DATA){
|
||||
PRINT_MSG(Serial, SPROCKET_TYPE, WsUtils::parseFrameAsString(type, arg, data, len, 0).c_str());
|
||||
pixels->ActivePattern = NONE;
|
||||
pixels->handleStream(data, len);
|
||||
}
|
||||
}
|
||||
|
||||
void patternWebRequestHandler(AsyncWebServerRequest *request) {
|
||||
PRINT_MSG(Serial, SPROCKET_TYPE, "POST /pixel/api");
|
||||
currentMessage.topic = getRequestParameterOrDefault(request, "topic", "");
|
||||
currentMessage.payload = getRequestParameterOrDefault(request, "payload", "");
|
||||
currentMessage.broadcast = atoi(getRequestParameterOrDefault(request, "broadcast", "0").c_str());
|
||||
String msg = currentMessage.toJsonString();
|
||||
publish(currentMessage.topic, currentMessage.payload);
|
||||
if(currentMessage.broadcast){
|
||||
network.broadcast(msg);
|
||||
}
|
||||
request->send(200, "text/plain", msg);
|
||||
}
|
||||
|
||||
virtual void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len) {
|
||||
if(type == WS_EVT_DATA){
|
||||
String frame = WsUtils::parseFrameAsString(type, arg, data, len, 0);
|
||||
dispatch(0, frame);
|
||||
network.broadcast(frame);
|
||||
}
|
||||
}
|
||||
|
||||
virtual void dispatch( uint32_t from, String &msg ) {
|
||||
currentMessage.fromJsonString(msg);
|
||||
if(currentMessage.valid){
|
||||
currentMessage.from = from;
|
||||
publish(currentMessage.topic, currentMessage.payload);
|
||||
}
|
||||
}
|
||||
|
||||
void loop(){
|
||||
Sprocket::loop();
|
||||
yield();
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,27 +0,0 @@
|
||||
#include "config.h"
|
||||
#include "WiFiNet.h"
|
||||
#include "IlluCat.h"
|
||||
|
||||
WiFiNet net(
|
||||
SPROCKET_MODE,
|
||||
STATION_SSID,
|
||||
STATION_PASSWORD,
|
||||
AP_SSID,
|
||||
AP_PASSWORD,
|
||||
HOSTNAME,
|
||||
CONNECT_TIMEOUT
|
||||
);
|
||||
IlluCat sprocket(
|
||||
{ STARTUP_DELAY, SERIAL_BAUD_RATE },
|
||||
{ OTA_PORT, OTA_PASSWORD },
|
||||
{ WEB_CONTEXT_PATH, WEB_DOC_ROOT, WEB_DEFAULT_FILE }
|
||||
);
|
||||
|
||||
void setup() {
|
||||
sprocket.join(net);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
sprocket.loop();
|
||||
yield();
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
#ifndef __MESHCAT__
|
||||
#define __MESHCAT__
|
||||
|
||||
#include <TaskSchedulerDeclarations.h>
|
||||
#include <MeshNet.h>
|
||||
#include <SprocketConfig.h>
|
||||
#include "utils_print.h"
|
||||
#include "IlluCat.h"
|
||||
#include "config.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace std::placeholders;
|
||||
|
||||
class MeshCat : public IlluCat {
|
||||
public:
|
||||
Scheduler* meshScheduler;
|
||||
|
||||
MeshCat(SprocketConfig cfg, OtaConfig otaCfg, WebServerConfig webCfg) : IlluCat(cfg, otaCfg, webCfg) {
|
||||
meshScheduler = new Scheduler();
|
||||
}
|
||||
|
||||
Sprocket* join(Network& net){
|
||||
PRINT_MSG(Serial, SPROCKET_TYPE, "join mesh network");
|
||||
net.init(meshScheduler);
|
||||
net.onReceive(bind(&IlluCat::dispatch,this, _1, _2));
|
||||
net.connect();
|
||||
network = net;
|
||||
return activate(&scheduler, &net);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
meshScheduler->execute();
|
||||
yield();
|
||||
Sprocket::loop();
|
||||
yield();
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user