48 changed files with 15731 additions and 0 deletions
@ -0,0 +1,112 @@
@@ -0,0 +1,112 @@
|
||||
/* |
||||
* ESP8266 RGBW controller |
||||
* Copyright 2020 (c) Mark van Renswoude |
||||
* |
||||
* https://git.x2software.net/pub/RGBWifi
|
||||
*/ |
||||
const express = require('express'); |
||||
const bodyParser = require('body-parser'); |
||||
|
||||
const app = express(); |
||||
|
||||
app.use(bodyParser.json()); |
||||
app.use(express.static('web')); |
||||
app.use(express.static('web/dist')); |
||||
|
||||
app.get('/api/status', function(req, res) |
||||
{ |
||||
res.send({ |
||||
systemID: 'dev-server', |
||||
version: 'dev-server', |
||||
resetReason: 2, |
||||
stackTrace: true |
||||
}); |
||||
}); |
||||
|
||||
app.get('/api/connection', function(req, res) |
||||
{ |
||||
res.send({ |
||||
hostname: 'dev-server', |
||||
accesspoint: true, |
||||
station: true, |
||||
ssid: 'MyWiFiSSID', |
||||
password: 'supersecret', |
||||
dhcp: true, |
||||
ip: '192.168.1.234', |
||||
subnetmask: '255.255.255.0', |
||||
gateway: '192.168.1.0' |
||||
}); |
||||
}); |
||||
|
||||
app.get('/api/connection/status', function(req, res) |
||||
{ |
||||
res.send({ |
||||
"ap": { |
||||
"enabled": true, |
||||
"ip": "192.168.4.1" |
||||
}, |
||||
"station": { |
||||
"enabled": true, |
||||
"status": 1, |
||||
"ip": "0.0.0.0" |
||||
} |
||||
}); |
||||
}); |
||||
|
||||
app.post('/api/connection', function(req, res) |
||||
{ |
||||
res.sendStatus(200); |
||||
}); |
||||
|
||||
app.post('/api/firmware', function(req, res) |
||||
{ |
||||
res.sendStatus(200); |
||||
}); |
||||
|
||||
|
||||
var system = { |
||||
pins: { |
||||
ledAP: 4, |
||||
ledSTA: 5, |
||||
apButton: 2, |
||||
} |
||||
}; |
||||
|
||||
app.get('/api/system', function(req, res) |
||||
{ |
||||
res.send(system); |
||||
}); |
||||
|
||||
app.post('/api/system', function(req, res) |
||||
{ |
||||
var body = req.body; |
||||
if (body) |
||||
{ |
||||
system.pins.ledAP = body.pins.ledAP || system.pins.ledAP; |
||||
system.pins.ledSTA = body.pins.ledSTA || system.pins.ledSTA; |
||||
system.pins.apButton = body.pins.apButton || system.pins.apButton; |
||||
|
||||
res.sendStatus(200); |
||||
} |
||||
else |
||||
res.sendStatus(400); |
||||
}); |
||||
|
||||
|
||||
|
||||
app.get('/api/stacktrace/get', function(req, res) |
||||
{ |
||||
res.send("Nothing to see here, move along!"); |
||||
}); |
||||
|
||||
app.get('/api/stacktrace/delete', function(req, res) |
||||
{ |
||||
res.sendStatus(200); |
||||
}); |
||||
|
||||
|
||||
app.listen(3000, function() |
||||
{ |
||||
console.log('Development server listening on port 3000') |
||||
console.log('Press Ctrl-C to stop') |
||||
}); |
@ -0,0 +1,168 @@
@@ -0,0 +1,168 @@
|
||||
/* |
||||
* ESP8266 RGBW controller |
||||
* Copyright 2020 (c) Mark van Renswoude |
||||
* |
||||
* https://git.x2software.net/pub/RGBWifi
|
||||
*/ |
||||
'use strict'; |
||||
|
||||
// Borrowed heavily from gulp-concat:
|
||||
// https://github.com/contra/gulp-concat/
|
||||
//
|
||||
// It's very much hardcoded for the ESP8266 Arduino at the moment,
|
||||
// but feel free to hack away at it if you need it for other purposes!
|
||||
var through = require('through2'); |
||||
var path = require('path'); |
||||
var File = require('vinyl'); |
||||
var _ = require('lodash'); |
||||
var Readable = require('stream').Readable; |
||||
|
||||
|
||||
function escapeContent(content, lineLength) |
||||
{ |
||||
var lineRegexp = new RegExp('(.{1,' + (lineLength - 1) + '}[^\\\\])', 'g'); |
||||
|
||||
return content |
||||
.replace(/\\/g, '\\\\') |
||||
.replace(/"/g, '\\"') |
||||
.replace(/\r?\n/g, '\\r\\n') |
||||
.replace(lineRegexp, ' "$1"\r\n') |
||||
.replace(/\r\n$/, ''); |
||||
}; |
||||
|
||||
|
||||
function escapeContentAsByteArray(content, lineLength) |
||||
{ |
||||
var bytesPerLine = Math.floor(lineLength / 5); |
||||
var lineRegexp = new RegExp('((?:0x..,){1,' + bytesPerLine + '})', 'g'); |
||||
|
||||
return content |
||||
.replace(/(.{2})/g, '0x$1,') |
||||
.replace(lineRegexp, ' $1\r\n') |
||||
.replace(/,\r\n$/, ''); |
||||
}; |
||||
|
||||
|
||||
function encodeFile(file, opts) |
||||
{ |
||||
var variableName; |
||||
|
||||
if (opts.map.hasOwnProperty(file.relative)) |
||||
variableName = opts.map[file.relative]; |
||||
else |
||||
variableName = file.relative.replace(/[^a-zA-Z0-9_]/g, '_'); |
||||
|
||||
if (variableName === null) |
||||
return ''; |
||||
|
||||
variableName = opts.variablePrefix + variableName; |
||||
|
||||
var escapedContent; |
||||
var output; |
||||
|
||||
if (opts.byteArray) |
||||
{ |
||||
escapedContent = escapeContentAsByteArray(file.contents.toString('hex'), opts.lineLength); |
||||
output = "const uint8_t " + variableName + "[] PROGMEM = {\r\n" + escapedContent + "};\r\n\r\n"; |
||||
} |
||||
else |
||||
{ |
||||
escapedContent = escapeContent(file.contents.toString('utf-8'), opts.lineLength); |
||||
output = "const char " + variableName + "[] PROGMEM = \r\n" + escapedContent + ";\r\n\r\n"; |
||||
} |
||||
|
||||
return output; |
||||
} |
||||
|
||||
|
||||
module.exports = function(file, opts) |
||||
{ |
||||
if (!file) |
||||
throw new Error('gulp-cppstringify: Missing file option'); |
||||
|
||||
opts = _.extend({ |
||||
map: [], |
||||
headerDefineName: '__Embedded', |
||||
variablePrefix: 'Embedded', |
||||
lineLength: 100, |
||||
byteArray: false |
||||
}, opts || {}); |
||||
|
||||
var fileName; |
||||
var latestFile = false; |
||||
var latestMod = 0; |
||||
var output = null; |
||||
|
||||
|
||||
if (typeof file === 'string') |
||||
fileName = file; |
||||
else if (typeof file.path === 'string') |
||||
fileName = path.basename(file.path); |
||||
else |
||||
throw new Error('gulp-cppstringify: Missing path in file options'); |
||||
|
||||
|
||||
function bufferContents(file, enc, cb) |
||||
{ |
||||
if (file.isNull()) |
||||
{ |
||||
cb(); |
||||
return; |
||||
} |
||||
|
||||
if (file.isStream()) |
||||
{ |
||||
this.emit('error', new Error('gulp-cppstringify: Streaming not supported')); |
||||
cb(); |
||||
return; |
||||
} |
||||
|
||||
if (!latestMod || file.stat && file.stat.mtime > latestMod) |
||||
{ |
||||
latestFile = file; |
||||
latestMod = file.stat && file.stat.mtime; |
||||
} |
||||
|
||||
if (output == null) |
||||
{ |
||||
output = new Readable(); |
||||
output._read = function noop() {}; |
||||
|
||||
output.push("#ifndef " + opts.headerDefineName + "\r\n"); |
||||
output.push("#define " + opts.headerDefineName + "\r\n\r\n"); |
||||
output.push("#include <pgmspace.h>\r\n\r\n"); |
||||
} |
||||
|
||||
output.push(encodeFile(file, opts)); |
||||
cb(); |
||||
} |
||||
|
||||
|
||||
function endStream(cb) |
||||
{ |
||||
if (!latestFile) |
||||
{ |
||||
cb(); |
||||
return; |
||||
} |
||||
|
||||
var headerFile; |
||||
|
||||
if (typeof file === 'string') |
||||
{ |
||||
headerFile = latestFile.clone({contents: false}); |
||||
headerFile.path = path.join(latestFile.base, file); |
||||
} |
||||
else |
||||
headerFile = new File(file); |
||||
|
||||
output.push("#endif\r\n"); |
||||
output.push(null); |
||||
headerFile.contents = output; |
||||
|
||||
this.push(headerFile); |
||||
cb(); |
||||
} |
||||
|
||||
return through.obj(bufferContents, endStream); |
||||
}; |
@ -0,0 +1,304 @@
@@ -0,0 +1,304 @@
|
||||
/* |
||||
* ESP8266 RGBW controller |
||||
* Copyright 2020 (c) Mark van Renswoude |
||||
* |
||||
* https://git.x2software.net/pub/RGBWifi
|
||||
*/ |
||||
'use strict'; |
||||
|
||||
const gulp = require('gulp'); |
||||
const htmlmin = require('gulp-htmlmin'); |
||||
const cppstringify = require('./gulp-cppstringify'); |
||||
const fs = require('fs'); |
||||
const plumber = require('gulp-plumber'); |
||||
const sass = require('gulp-sass'); |
||||
const cleanCSS = require('gulp-clean-css'); |
||||
const watch = require('gulp-debounced-watch'); |
||||
const uglify = require('gulp-uglify'); |
||||
const concat = require('gulp-concat'); |
||||
const print = require('gulp-print'); |
||||
const path = require('path'); |
||||
const gzip = require('gulp-gzip'); |
||||
|
||||
|
||||
const config = { |
||||
assetsPath: 'web/', |
||||
distPath: 'web/dist/', |
||||
outputPath: 'src/assets/', |
||||
|
||||
firmwareArtifact: '.pioenvs/esp12e/firmware.bin', |
||||
firmwareOutputPath: 'bin/' |
||||
}; |
||||
|
||||
|
||||
const HTMLMap = { |
||||
'index.html': 'Index' |
||||
}; |
||||
|
||||
const JSMap = { |
||||
'bundle.js': 'BundleJS' |
||||
}; |
||||
|
||||
const CSSMap = { |
||||
'bundle.css': 'BundleCSS' |
||||
}; |
||||
|
||||
|
||||
// There is an issue in the AsyncWebServer where it's apparantly running
|
||||
// out of memory on simultaneous requests. We'll work around it by
|
||||
// merging all the JS into one big file.
|
||||
//
|
||||
// https://github.com/me-no-dev/ESPAsyncWebServer/issues/256
|
||||
const JSSrc = [ |
||||
'node_modules/axios/dist/axios.min.js', |
||||
'node_modules/vue/dist/vue.min.js', |
||||
'node_modules/vue-i18n/dist/vue-i18n.min.js', |
||||
'web/lang.js', |
||||
'web/app.js' |
||||
]; |
||||
|
||||
const SCSSSrc = [ |
||||
'web/site.scss' |
||||
] |
||||
|
||||
|
||||
|
||||
|
||||
gulp.task('embedHTML', () => |
||||
{ |
||||
return gulp.src(config.assetsPath + '*.html') |
||||
.pipe(print(filepath => { return 'HTML: ' + filepath; })) |
||||
.pipe(htmlmin({ |
||||
collapseWhitespace: true, |
||||
removeComments: true, |
||||
minifyCSS: true, |
||||
minifyJS: true |
||||
})) |
||||
.pipe(gzip({ append: false })) |
||||
.pipe(cppstringify('html.h', { |
||||
headerDefineName: '__assets_html', |
||||
map: HTMLMap, |
||||
byteArray: true |
||||
})) |
||||
.pipe(gulp.dest(config.outputPath)); |
||||
}); |
||||
|
||||
|
||||
gulp.task('compileScss', () => |
||||
{ |
||||
return gulp.src(SCSSSrc) |
||||
.pipe(plumber({ |
||||
errorHandler: error => |
||||
{ |
||||
console.log(error.toString()); |
||||
this.emit('end'); |
||||
}})) |
||||
.pipe(print(filepath => { return 'SCSS: ' + filepath })) |
||||
.pipe(sass({ |
||||
includePaths: ['node_modules/milligram/src'] |
||||
})) |
||||
.pipe(cleanCSS({compatibility: 'ie9'})) |
||||
.pipe(concat('bundle.css')) |
||||
.pipe(gulp.dest(config.distPath)); |
||||
}); |
||||
|
||||
|
||||
gulp.task('compileJS', () => |
||||
{ |
||||
return gulp.src(JSSrc) |
||||
.pipe(plumber({ |
||||
errorHandler: error => |
||||
{ |
||||
console.log(error.toString()); |
||||
this.emit('end'); |
||||
}})) |
||||
.pipe(print(filepath => { return 'JS: ' + filepath })) |
||||
.pipe(concat('bundle.js')) |
||||
.pipe(uglify()) |
||||
.pipe(gulp.dest(config.distPath)); |
||||
}); |
||||
|
||||
|
||||
gulp.task('embedJS', gulp.series('compileJS', () => |
||||
{ |
||||
return gulp.src([config.distPath + 'bundle.js']) |
||||
.pipe(gzip({ append: false })) |
||||
.pipe(cppstringify('js.h', { |
||||
headerDefineName: '__assets_js', |
||||
map: JSMap, |
||||
byteArray: true |
||||
})) |
||||
.pipe(gulp.dest(config.outputPath)); |
||||
})); |
||||
|
||||
|
||||
gulp.task('embedCSS', gulp.series('compileScss', () => |
||||
{ |
||||
return gulp.src([config.distPath + 'bundle.css']) |
||||
.pipe(gzip({ append: false })) |
||||
.pipe(cppstringify('css.h', { |
||||
headerDefineName: '__embed_css', |
||||
map: CSSMap, |
||||
byteArray: true |
||||
})) |
||||
.pipe(gulp.dest(config.outputPath)); |
||||
})); |
||||
|
||||
|
||||
gulp.task('watch', gulp.series( |
||||
'compileScss', |
||||
'compileJS', |
||||
() => |
||||
{ |
||||
watch(config.assetsPath + '*.scss', () => { gulp.series('compileScss')(); }); |
||||
watch(config.assetsPath + '*.js', () => { gulp.series('compileJS')(); }); |
||||
} |
||||
)); |
||||
|
||||
|
||||
|
||||
var version = false; |
||||
function getVersion(callback) |
||||
{ |
||||
return new Promise((resolve, reject) => |
||||
{ |
||||
if (version !== false) |
||||
{ |
||||
resolve(version); |
||||
return; |
||||
} |
||||
|
||||
var versionData = ''; |
||||
const cmd = spawn('gitversion'); |
||||
|
||||
cmd.stdout.on('data', data => |
||||
{ |
||||
versionData += data; |
||||
}); |
||||
|
||||
cmd.stderr.on('data', data => |
||||
{ |
||||
console.log(data.toString().trim()); |
||||
}); |
||||
|
||||
cmd.on('exit', code => |
||||
{ |
||||
if (code != 0) |
||||
{ |
||||
reject(code); |
||||
return; |
||||
} |
||||
|
||||
var version = JSON.parse(versionData); |
||||
Promise.resolve(callback(version)) |
||||
.then(resolve) |
||||
.catch(reject); |
||||
}); |
||||
}); |
||||
} |
||||
|
||||
|
||||
gulp.task('embedVersion', () => |
||||
{ |
||||
return getVersion(version => |
||||
{ |
||||
return new Promise((resolve, reject) => |
||||
{ |
||||
var headerFile = "#ifndef __assets_version\r\n"; |
||||
headerFile += "#define __assets_version\r\n\r\n"; |
||||
headerFile += "const uint8_t VersionMajor = " + version.Major + ";\r\n"; |
||||
headerFile += "const uint8_t VersionMinor = " + version.Minor + ";\r\n"; |
||||
headerFile += "const uint8_t VersionPatch = " + version.Patch + ";\r\n"; |
||||
headerFile += "const uint8_t VersionMetadata = " + (version.BuildMetaData ? version.BuildMetaData : '0') + ";\r\n"; |
||||
|
||||
headerFile += "const char VersionBranch[] = \"" + version.BranchName + "\";\r\n"; |
||||
|
||||
headerFile += "const char VersionSemVer[] = \"" + version.SemVer + "\";\r\n"; |
||||
headerFile += "const char VersionFullSemVer[] = \"" + version.FullSemVer + "\";\r\n"; |
||||
|
||||
headerFile += "const char VersionCommitDate[] = \"" + version.CommitDate + "\";\r\n"; |
||||
|
||||
headerFile += "\r\n#endif\r\n"; |
||||
|
||||
fs.writeFile(config.outputPath + 'version.h', headerFile, err => |
||||
{ |
||||
if (err) |
||||
reject(err); |
||||
else |
||||
resolve(); |
||||
}); |
||||
}) |
||||
}); |
||||
}); |
||||
|
||||
|
||||
gulp.task('copyBinary', () => |
||||
{ |
||||
if (!fs.existsSync(config.firmwareOutputPath)) |
||||
fs.mkdirSync(config.firmwareOutputPath, '0777', true); |
||||
|
||||
return getVersion(version => |
||||
{ |
||||
return new Promise((resolve, reject) => |
||||
{ |
||||
var target = path.join(config.firmwareOutputPath, version.FullSemVer + '.bin'); |
||||
console.log('Target: ' + target); |
||||
|
||||
var reader = fs.createReadStream(config.firmwareArtifact); |
||||
reader.pipe(fs.createWriteStream(target)); |
||||
reader.on('end', resolve); |
||||
}); |
||||
}); |
||||
}); |
||||
|
||||
|
||||
gulp.task('embedAssets', gulp.series('embedHTML', 'embedJS', 'embedCSS', 'embedVersion')); |
||||
|
||||
|
||||
|
||||
// PlatformIO
|
||||
const spawn = require('child_process').spawn; |
||||
const argv = require('yargs').argv; |
||||
|
||||
var platformio = function(target) |
||||
{ |
||||
var args = ['run']; |
||||
if ("e" in argv) |
||||
{ |
||||
args.push('-e'); |
||||
args.push(argv.e); |
||||
} |
||||
|
||||
if ("p" in argv) |
||||
{ |
||||
args.push('--upload-port'); |
||||
args.push(argv.p); |
||||
} |
||||
|
||||
if (target) |
||||
{ |
||||
args.push('-t'); |
||||
args.push(target); |
||||
} |
||||
|
||||
const cmd = spawn('platformio', args); |
||||
cmd.stdout.on('data', data => |
||||
{ |
||||
console.log(data.toString().trim()); |
||||
}); |
||||
|
||||
cmd.stderr.on('data', data => |
||||
{ |
||||
console.log(data.toString().trim()); |
||||
}); |
||||
|
||||
cmd.on('exit', code => |
||||
{ |
||||
if (code != 0) return; |
||||
gulp.start('copyBinary'); |
||||
}); |
||||
} |
||||
|
||||
gulp.task('upload', gulp.series('embedAssets', () => { platformio('upload'); })); |
||||
gulp.task('build', gulp.series('embedAssets', () => { platformio(false); })); |
||||
gulp.task('default', gulp.series('embedAssets')); |
@ -0,0 +1,42 @@
@@ -0,0 +1,42 @@
|
||||
{ |
||||
"name": "rgbwifi", |
||||
"version": "1.0.0", |
||||
"description": "RGBWifi", |
||||
"main": "gulpfile.js", |
||||
"scripts": { |
||||
"test": "echo \"Error: no test specified\" && exit 1", |
||||
"dev": "node devserver.js" |
||||
}, |
||||
"repository": { |
||||
"type": "git", |
||||
"url": "https://git.x2software.net/pub/RGBWifi.git" |
||||
}, |
||||
"author": "Mark van Renswoude <mark@x2software.net>", |
||||
"license": "Unlicense", |
||||
"devDependencies": { |
||||
"axios": "^0.20.0", |
||||
"body-parser": "^1.18.2", |
||||
"child_process": "^1.0.2", |
||||
"express": "^4.16.2", |
||||
"gulp-clean-css": "^3.9.0", |
||||
"gulp-concat": "^2.6.1", |
||||
"gulp-debounced-watch": "^1.0.4", |
||||
"gulp-gzip": "^1.4.1", |
||||
"gulp-htmlmin": "^3.0.0", |
||||
"gulp-plumber": "^1.1.0", |
||||
"gulp-print": "^2.0.1", |
||||
"gulp-sass": "^3.1.0", |
||||
"gulp-uglify": "^3.0.0", |
||||
"lodash": "^4.17.4", |
||||
"path": "^0.12.7", |
||||
"through2": "^2.0.3", |
||||
"vinyl": "^2.1.0", |
||||
"vue": "^2.5.13", |
||||
"vue-i18n": "^7.3.3", |
||||
"yargs": "^16.0.3" |
||||
}, |
||||
"dependencies": { |
||||
"gulp": "^4.0.2", |
||||
"npm": "^6.14.8" |
||||
} |
||||
} |
@ -0,0 +1,20 @@
@@ -0,0 +1,20 @@
|
||||
; PlatformIO Project Configuration File |
||||
; |
||||
; Build options: build flags, source filter |
||||
; Upload options: custom upload port, speed and extra flags |
||||
; Library options: dependencies, extra library storages |
||||
; Advanced options: extra scripting |
||||
; |
||||
; Please visit documentation for the other options and examples |
||||
; http://docs.platformio.org/page/projectconf.html |
||||
|
||||
[env:esp12e] |
||||
platform = https://github.com/platformio/platform-espressif8266.git |
||||
board = esp12e |
||||
framework = arduino |
||||
upload_speed = 115200 |
||||
lib_deps = |
||||
ArduinoJson |
||||
ESP Async WebServer |
||||
EspSaveCrash |
||||
NeoPixelBus |
@ -0,0 +1,106 @@
@@ -0,0 +1,106 @@
|
||||
#ifndef __embed_css |
||||
#define __embed_css |
||||
|
||||
#include <pgmspace.h> |
||||
|
||||
const uint8_t EmbeddedBundleCSS[] PROGMEM = { |
||||
0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0xad,0x59,0xdb,0x6e,0xa3,0x38,0x18,0x7e,0x95,0x48, |
||||
0xd5,0x48,0xd3,0x15,0x20,0x92,0x94,0xb4,0x05,0xed,0x6a,0x57,0xfb,0x06,0x7b,0xb1,0x37,0xa3,0x5e,0x18, |
||||
0x30,0xc1,0x2a,0xc1,0xc8,0x38,0x4d,0x5b,0xc4,0xbb,0xef,0xef,0x13,0xb1,0xc1,0xc9,0x64,0x66,0x47,0xa8, |
||||
0x4d,0xb0,0xfd,0x1f,0xfd,0x1f,0x3e,0x3b,0x35,0x3f,0x34,0x43,0x4e,0xdf,0xc3,0x9e,0x7c,0x92,0x76,0x9f, |
||||
0xe6,0x94,0x95,0x98,0x85,0x30,0x92,0x55,0xb4,0xe5,0x62,0x18,0xa7,0xbb,0x4d,0x94,0x7c,0x19,0x7f,0x0b, |
||||
0x52,0x54,0x71,0xcc,0x82,0x34,0xc7,0x15,0x65,0xd8,0x26,0x23,0x6d,0x8d,0x19,0xe1,0x63,0x4e,0xcb,0x8f, |
||||
0x21,0x47,0xc5,0xeb,0x9e,0xd1,0x63,0x5b,0x86,0x05,0x6d,0x28,0x4b,0xef,0xe2,0x38,0xce,0xf4,0xd7,0xaa, |
||||
0xaa,0x14,0xe7,0x0a,0x1d,0x48,0xf3,0x91,0xfe,0x8b,0x59,0x89,0x5a,0x14,0xfc,0xc5,0x08,0x6a,0x82,0x1e, |
||||
0xb5,0x7d,0xd8,0x03,0xab,0xca,0x12,0xbf,0x8e,0xb6,0xf8,0xa0,0xde,0x4f,0x98,0xec,0x6b,0x9e,0x6e,0x81, |
||||
0x5f,0x83,0x39,0x28,0x13,0xf6,0x1d,0x2a,0x84,0x06,0x51,0xbc,0x86,0x45,0x0d,0x69,0x71,0x58,0xab,0x45, |
||||
0x40,0x96,0x75,0xa8,0x2c,0x61,0x16,0xec,0xe1,0x9c,0x1e,0xd2,0x2d,0xc3,0x87,0xf1,0xcf,0x03,0x2e,0x09, |
||||
0x5a,0xf5,0x05,0xc3,0xb8,0x5d,0xa1,0xb6,0x5c,0x7d,0x3d,0x90,0x36,0x3c,0x91,0x92,0xd7,0xe9,0xe3,0xee, |
||||
0xa9,0x7b,0xbf,0x1f,0xa4,0x1d,0x86,0x98,0xd3,0x4e,0x51,0x8e,0x68,0xe0,0xf8,0x9d,0x87,0x25,0x2e,0x28, |
||||
0x43,0x9c,0xd0,0x36,0x6d,0x69,0x8b,0xc7,0x6f,0x6f,0x61,0xd1,0x50,0xf4,0xfa,0x32,0x94,0xa4,0xef,0x1a, |
||||
0xf4,0xa1,0x86,0xef,0x0a,0x50,0x19,0x81,0x46,0xcc,0x72,0x49,0x7a,0xb7,0x89,0xc5,0x93,0x1d,0x10,0xdb, |
||||
0x83,0x58,0xc1,0x7c,0x03,0xcc,0x8d,0xaa,0xe9,0x5a,0xbc,0x48,0xd7,0xd6,0xa8,0xa4,0xa7,0x34,0x5e,0xc5, |
||||
0xab,0x24,0xee,0xde,0x57,0x77,0x55,0x51,0xed,0x8a,0x2a,0x53,0x5b,0x94,0xf6,0xb4,0x21,0xe5,0x6a,0x2d, |
||||
0x26,0xc0,0xbd,0x37,0x59,0x65,0x29,0x64,0x8d,0x1b,0x4d,0x1a,0x5c,0xf1,0x14,0x1d,0x39,0x35,0x03,0x4c, |
||||
0xba,0x51,0x8c,0x8c,0x63,0x54,0x63,0x04,0x52,0x87,0x8e,0xf6,0x44,0x1a,0xce,0x70,0x03,0x1e,0x78,0xc3, |
||||
0x66,0x66,0x45,0x0e,0xfb,0xa1,0x02,0x2f,0xf0,0x54,0x30,0x72,0x79,0xac,0x2f,0xf9,0x1d,0xbd,0x4f,0x1a, |
||||
0x3e,0x0a,0x0d,0x0d,0xb3,0xe8,0x44,0x2a,0xd2,0x73,0xc4,0x8f,0xfd,0x50,0x34,0x18,0x31,0x08,0x4c,0x5e, |
||||
0xdb,0x3e,0x53,0x1b,0x72,0x8b,0xd5,0x3e,0x9e,0x93,0x19,0x28,0x07,0x3f,0x1e,0x39,0xce,0x94,0xa2,0x71, |
||||
0x26,0x78,0xc7,0x93,0xbd,0x36,0xd1,0x2a,0x22,0x6d,0x49,0x0a,0xc4,0x29,0x9b,0xf6,0x99,0xb4,0x32,0xe2, |
||||
0xf2,0x86,0x16,0xaf,0x99,0x92,0x2a,0xf7,0xcf,0x84,0xa0,0xda,0x4b,0x99,0x52,0x0c,0x95,0xe4,0xd8,0xa7, |
||||
0x49,0xfc,0xc5,0xf5,0x4d,0x94,0x08,0x4b,0xae,0xcb,0xfb,0x56,0x22,0x8e,0x42,0x35,0xfc,0x3b,0x6c,0x62, |
||||
0x8b,0x0b,0x8e,0xcb,0x17,0x4f,0xa6,0x6d,0x9f,0x77,0x3f,0xc2,0x0b,0xec,0xb0,0xd9,0xcd,0x23,0x6b,0xcf, |
||||
0xf0,0xc7,0x4f,0xa8,0x06,0x61,0xec,0xd3,0xad,0x7a,0xde,0xfe,0x08,0x33,0xcc,0x18,0x65,0x3e,0x3e,0x05, |
||||
0x84,0x7b,0x94,0x1f,0x21,0xa3,0xdb,0x20,0x2a,0x6a,0x5c,0xbc,0xae,0x22,0x11,0xd9,0x8c,0x36,0x41,0xd4, |
||||
0x52,0x0e,0x9c,0x0b,0x99,0x9d,0x41,0xd4,0xa1,0x16,0x37,0x2b,0xf5,0x11,0x8a,0xa4,0x9e,0x0d,0x29,0x6d, |
||||
0x82,0x48,0x6c,0x0e,0xb5,0xb8,0x9c,0x10,0x6b,0xc1,0x8a,0x40,0x4b,0xa9,0xb7,0x01,0x69,0xbb,0x23,0xff, |
||||
0xc6,0x3f,0x3a,0xfc,0x7b,0x7f,0xcc,0x0f,0x84,0xbf,0x04,0x3d,0x6e,0xc0,0x58,0xe3,0x35,0xe1,0x2f,0xe5, |
||||
0xb9,0xbb,0xf5,0x7a,0x3d,0xdb,0xf5,0x2d,0xa4,0x99,0x95,0xd3,0xa4,0xed,0x31,0x87,0xbc,0x16,0x34,0x6c, |
||||
0x9f,0xa3,0xaf,0x9b,0x24,0x09,0xcc,0x5f,0xb4,0xbe,0x0f,0xcc,0x82,0x50,0xac,0xd8,0x9a,0x55,0x71,0x20, |
||||
0x9e,0x68,0x7b,0x9e,0x8f,0x2f,0x32,0x89,0x9f,0xee,0x03,0x35,0xb7,0x99,0x91,0xaf,0x93,0x7b,0xe3,0xbe, |
||||
0x08,0x15,0x22,0x87,0x03,0xfd,0x9a,0xea,0x57,0x77,0xd2,0x9d,0x93,0x7e,0xd0,0x53,0xae,0x3b,0x2c,0x0f, |
||||
0xb5,0xc7,0x43,0x8e,0x99,0x33,0xd4,0xa1,0xbe,0x3f,0x81,0x4f,0x5e,0x3c,0x9e,0x74,0x78,0xab,0x19,0x51, |
||||
0x67,0x5f,0x02,0xf1,0x1f,0x31,0x8c,0xae,0xfb,0xf8,0xdc,0x64,0xe4,0xb0,0x99,0xf3,0x7a,0x7b,0xee,0x8c, |
||||
0x4d,0x62,0xdc,0xe4,0x75,0xe1,0xa8,0x03,0x40,0x6a,0x36,0xdc,0xd2,0xb7,0x46,0xb5,0x14,0x3a,0x55,0xfe, |
||||
0x4a,0x78,0x88,0xba,0x0e,0xaa,0x17,0x6a,0x0b,0x2c,0x7b,0x42,0x16,0x1e,0xe8,0xe7,0x62,0x70,0xf6,0x3e, |
||||
0x05,0xb7,0x2d,0xdc,0x71,0x98,0xbf,0xfe,0x98,0x0e,0x02,0xf6,0x80,0x99,0xa6,0xe1,0x96,0x65,0x99,0xd9, |
||||
0xed,0xe7,0x21,0x16,0x4f,0x56,0x1c,0x59,0x0f,0xd3,0x1d,0x25,0x2d,0xb4,0x51,0xa7,0x71,0xca,0xd2,0x6a, |
||||
0x22,0xa4,0xa2,0xc5,0xb1,0x9f,0x02,0xc4,0x7d,0xab,0xe9,0x1b,0x24,0x8f,0xb3,0xd0,0x59,0xe7,0x2c,0x5b, |
||||
0x5a,0xa1,0x49,0x3c,0xf1,0x70,0x71,0x42,0xb2,0x1a,0x2e,0x58,0x96,0xc4,0xe2,0xc9,0xe8,0x91,0x0b,0x6b, |
||||
0xd2,0xf8,0xff,0x46,0xb9,0xab,0xec,0xc5,0x19,0x4d,0x63,0xb4,0x2a,0x8a,0xc2,0xd1,0x6a,0xf3,0x24,0x1e, |
||||
0xa3,0x4b,0xd8,0x31,0x02,0xe5,0xff,0xc3,0xb7,0xa9,0x0e,0xd5,0x66,0x97,0xa0,0xf5,0x9c,0xca,0xdd,0x0d, |
||||
0x33,0x9a,0xfa,0x47,0x7f,0xb9,0xdb,0x1d,0xfd,0x76,0x8f,0x9b,0x7c,0x37,0x22,0x2d,0xd4,0x8f,0x8b,0xa2, |
||||
0x16,0xbd,0x91,0xbd,0x1c,0xb8,0xd6,0xc5,0x23,0x0e,0x5d,0xf8,0x0f,0xc3,0xc9,0x46,0x23,0xa2,0xfc,0xcd, |
||||
0x2a,0x69,0xec,0x2e,0x4f,0x2b,0xc2,0x7a,0x1e,0x16,0x35,0x69,0x4a,0x87,0x34,0x5e,0x56,0x60,0x59,0x2d, |
||||
0xe1,0x73,0xc6,0xa1,0x41,0x13,0x83,0x99,0x28,0x59,0x79,0x25,0xe1,0x5c,0xa8,0x70,0xd4,0x12,0x0b,0x65, |
||||
0x9f,0x21,0xb4,0x32,0xfc,0x9e,0xc2,0xc6,0x81,0xc3,0x7a,0x69,0xb7,0x8c,0x0a,0xd1,0x48,0x2d,0x44,0xfb, |
||||
0xd4,0xf1,0x4c,0x7a,0x0c,0x35,0x64,0xdf,0xa6,0x05,0x96,0x39,0x38,0x43,0x84,0xa3,0xd3,0xcb,0xfe,0x9e, |
||||
0xa0,0xdb,0x24,0xb6,0x22,0xef,0xb8,0xcc,0x26,0x00,0x69,0x84,0xef,0x76,0xbb,0xdb,0x70,0x91,0x9f,0xbd, |
||||
0x5a,0x93,0xc8,0x12,0x22,0x3d,0x09,0x88,0x65,0x74,0x75,0x71,0x23,0xe1,0xf9,0x11,0xe5,0x4f,0x73,0xc4, |
||||
0xba,0x8e,0x35,0x30,0xb5,0x71,0xff,0xac,0xe6,0x98,0x7a,0x15,0x25,0xa0,0xbd,0x36,0x5e,0x03,0x75,0x85, |
||||
0x88,0x17,0x58,0xf3,0x87,0xcd,0x1a,0x54,0x18,0x2d,0x4d,0x58,0x45,0x07,0xdc,0xf7,0x68,0x8f,0x87,0x53, |
||||
0x4d,0x38,0x96,0xc7,0x08,0x9c,0x76,0x0c,0xbb,0xcb,0x22,0x09,0x42,0x1c,0x7b,0x9f,0x1f,0xb7,0x68,0x0b, |
||||
0xf9,0x2c,0x81,0x87,0x46,0x0e,0xfe,0x7a,0x3c,0x33,0xf7,0xd8,0x8b,0xe3,0x8a,0xc4,0x0c,0xaa,0xec,0xdb, |
||||
0x92,0x5b,0x7a,0x62,0xa8,0xb3,0x43,0xc0,0xe3,0x15,0x31,0x34,0x2e,0x10,0x8f,0x8b,0x5d,0x06,0x4f,0xad, |
||||
0xbf,0x86,0x56,0x77,0xb0,0xcd,0x06,0xad,0x8a,0xef,0x1e,0x80,0xaf,0x05,0x36,0x28,0xc7,0x67,0x71,0xf2, |
||||
0xcd,0x6f,0xb7,0x9d,0x86,0xd2,0x0a,0xc8,0x05,0x0e,0x0e,0x6d,0x74,0xb8,0x83,0x75,0x9a,0xa9,0xfa,0x8f, |
||||
0xcb,0xb9,0x35,0x8b,0x71,0xc7,0xaa,0x5d,0x2c,0x1e,0xc3,0x02,0x54,0x40,0x79,0x83,0x4b,0x43,0x6a,0xde, |
||||
0x07,0xed,0x7e,0xd8,0x4e,0x90,0xdb,0xd0,0x13,0x2e,0xe7,0x24,0xae,0x4d,0xf3,0x61,0x2b,0x75,0xc7,0x05, |
||||
0x40,0x74,0xdf,0x05,0x84,0x95,0xc7,0xbc,0x39,0xd4,0x9f,0x13,0x9a,0x85,0xd6,0xb9,0x78,0x79,0x14,0x11, |
||||
0xbb,0xff,0x60,0xb2,0x4f,0x7c,0x51,0x5b,0x65,0xed,0xd4,0x4e,0x14,0x31,0xbf,0xa7,0x26,0x55,0x2c,0x87, |
||||
0xc9,0x96,0x64,0xe7,0xe7,0x7a,0x86,0x82,0x04,0x22,0x74,0xc3,0xca,0xb0,0xf1,0x6b,0x97,0x5c,0xd5,0x4e, |
||||
0x96,0x58,0xff,0xfe,0xba,0x8e,0xd2,0x27,0x8d,0x25,0xf2,0x7a,0xba,0x37,0xd5,0x5b,0x31,0x17,0x15,0x65, |
||||
0xa3,0xd0,0x5b,0xc6,0x01,0x28,0xf5,0x15,0x65,0x87,0x94,0x51,0x38,0x28,0xe0,0xaf,0xe1,0x43,0x52,0xe2, |
||||
0xfd,0xbd,0x6d,0xa1,0x84,0xcd,0xb1,0x0b,0xf4,0x1c,0x9c,0x67,0xd9,0x2d,0x58,0x85,0x26,0xcc,0xac,0xfc, |
||||
0x5b,0x43,0xae,0xfd,0x04,0xa4,0x9d,0x03,0x57,0x0f,0xf2,0x3a,0x17,0x44,0xa7,0x02,0xea,0x84,0x8c,0x21, |
||||
0x6a,0xcc,0xc9,0xe2,0x2a,0xf1,0x4d,0xb7,0x28,0xb6,0x04,0xdb,0x1c,0x70,0xe2,0x1e,0xbf,0x38,0xf6,0xb2, |
||||
0x45,0xbd,0x91,0xc7,0xf6,0x7a,0x3d,0x9c,0x1b,0xd7,0xe6,0xbc,0x08,0x3a,0x71,0xbd,0xd1,0x81,0xdc,0x93, |
||||
0x06,0x72,0xdc,0xb9,0xb2,0x99,0xad,0xdc,0xda,0x8d,0x70,0x09,0x8f,0x96,0xa4,0x67,0xc5,0xa5,0x12,0x0f, |
||||
0x83,0xbd,0xe2,0x81,0x4d,0xd6,0x98,0xa4,0x7d,0xf1,0xe4,0x7b,0x76,0x49,0xe6,0x4e,0x3c,0xa3,0x5b,0xc2, |
||||
0x9c,0xda,0x75,0xb5,0x00,0x4b,0xba,0x50,0x95,0xbc,0xc1,0x39,0xcb,0x6f,0x6e,0xbd,0x5f,0x8a,0x6a,0xca, |
||||
0xc8,0xa7,0xe8,0xb9,0x8d,0x85,0x8c,0x46,0x6b,0x78,0x75,0xb9,0xc0,0x3a,0xcb,0x3c,0x21,0x7a,0x61,0xfa, |
||||
0x1c,0xae,0x17,0x16,0xa8,0xd0,0xb5,0x27,0xa7,0x30,0xf6,0xd6,0x79,0x75,0xdb,0x23,0x2d,0xd7,0xc1,0x2b, |
||||
0x2b,0xde,0x99,0x5e,0xdd,0x17,0xda,0x06,0xc2,0x2c,0x34,0xc3,0x99,0xcf,0x5d,0x5c,0x64,0xed,0xd9,0x2c, |
||||
0x1a,0xf5,0x4d,0x09,0x48,0x15,0x91,0x31,0xcc,0x60,0xe4,0x12,0x50,0x8d,0x11,0xe0,0x57,0xda,0x89,0xf2, |
||||
0xd5,0x3b,0xd8,0x30,0xb1,0x0e,0x38,0xce,0xfd,0xd2,0x55,0x4c,0x26,0xb3,0x21,0xea,0xa1,0x62,0x01,0xb4, |
||||
0x1b,0x16,0x60,0xad,0xe7,0xb8,0x73,0xa4,0x6c,0xad,0x84,0x62,0xd3,0xc1,0xca,0xd7,0x60,0x05,0xe9,0x4a, |
||||
0x73,0x3e,0x5f,0xd1,0x39,0xa4,0x0f,0x46,0xc4,0x2a,0x7a,0x43,0xcd,0x11,0x7f,0xe7,0x06,0x2b,0x92,0xd9, |
||||
0x6c,0x37,0xb0,0x0b,0xdc,0xe7,0x86,0x5d,0x3c,0xb8,0x9e,0xab,0x93,0x29,0xf3,0x72,0x3b,0x66,0x28,0x1b, |
||||
0xce,0xd3,0x72,0x70,0x59,0xb8,0xac,0x53,0x99,0x92,0x94,0xa6,0x46,0x94,0x7a,0x0f,0x79,0x0d,0xf1,0x7b, |
||||
0x51,0xbe,0x5f,0x9f,0x8d,0x75,0xd9,0xb6,0xf1,0x5f,0xb6,0xd9,0xba,0xe8,0x1b,0x54,0x17,0x98,0x59,0x0a, |
||||
0x89,0xc3,0xb9,0xac,0x8c,0x5a,0x99,0x5f,0x29,0x44,0x5f,0x29,0x79,0xb0,0xe4,0x77,0x81,0xf0,0x62,0xaf, |
||||
0x5a,0x2a,0x2e,0xca,0xec,0x92,0xea,0x09,0x7e,0x19,0xd7,0x4e,0x75,0x91,0x77,0x5e,0x83,0x0f,0x69,0x9b, |
||||
0x9b,0x83,0xd1,0x77,0x3d,0x36,0x2c,0x4f,0x52,0xfa,0x34,0x95,0x4d,0x3f,0x17,0x08,0x5e,0xa6,0x59,0xbb, |
||||
0xf6,0x5c,0x6d,0x62,0x5e,0x79,0xba,0xf4,0x59,0x05,0x5f,0xd8,0xec,0x5b,0x28,0x0f,0xe5,0x22,0x87,0xad, |
||||
0x52,0x74,0x61,0xa5,0x46,0x7a,0xbe,0x39,0xe3,0x48,0x8f,0x42,0xea,0xf7,0x8c,0xd9,0xa9,0x70,0x3a,0x17, |
||||
0x3a,0xb6,0x6d,0x63,0xf1,0x4c,0xb6,0xab,0xa2,0x20,0xb9,0xe8,0xab,0x83,0xb9,0x53,0x6d,0xda,0xfc,0x01, |
||||
0x25,0x4f,0x8e,0x5f,0x74,0x7b,0xb9,0x02,0xdd,0xe5,0xc5,0x7c,0x74,0xc2,0xf8,0xb5,0x44,0x1f,0xfd,0x32, |
||||
0xa1,0xcd,0x8c,0x81,0xb3,0x8a,0xea,0x49,0x4c,0x55,0xa0,0x41,0x28,0xc3,0x24,0x34,0x77,0x23,0x72,0x08, |
||||
0x62,0xe5,0x0d,0xeb,0xa1,0x41,0x02,0x2d,0x55,0x63,0xa8,0xf8,0x91,0x85,0x7f,0xac,0xa2,0xa4,0xb7,0x89, |
||||
0x1d,0x2a,0x4e,0x07,0xbd,0x4c,0x84,0x91,0xcc,0x22,0x27,0xf8,0xe4,0x08,0x54,0x39,0x68,0x28,0xdc,0x73, |
||||
0x74,0xbe,0x62,0xe8,0xc3,0xf3,0x17,0x97,0xfc,0x96,0x5a,0xe9,0xae,0xbf,0xa5,0x66,0xaa,0xfe,0x92,0xb9, |
||||
0xa8,0x5f,0x32,0xc1,0x6d,0x79,0xab,0xc6,0x17,0x7a,0xe2,0x99,0xd1,0x45,0xdd,0x15,0x9e,0xb6,0x54,0x97, |
||||
0x8b,0x2f,0x29,0xae,0xef,0x38,0xae,0xe9,0xbd,0xec,0xbe,0x11,0xc3,0x3d,0xe6,0xff,0x60,0xd4,0xcf,0xee, |
||||
0x59,0x36,0x20,0xf6,0x3f,0x57,0x7a,0x1c,0xe6,0x0a,0x1c,0x00,0x00}; |
||||
|
||||
#endif |
@ -0,0 +1,108 @@
@@ -0,0 +1,108 @@
|
||||
#ifndef __assets_html |
||||
#define __assets_html |
||||
|
||||
#include <pgmspace.h> |
||||
|
||||
const uint8_t EmbeddedIndex[] PROGMEM = { |
||||
0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0xcd,0x58,0xd9,0x7a,0xe2,0x38,0x16,0x7e,0x15,0x97, |
||||
0x7b,0xa6,0xa9,0xfa,0xd2,0x61,0x0b,0x95,0xaa,0x64,0x20,0xd3,0x66,0xdf,0xc3,0x1e,0xe0,0x4e,0xb6,0x85, |
||||
0xad,0x20,0x2f,0x91,0x04,0x84,0xaa,0xce,0xbb,0x8f,0xe4,0x05,0x8c,0xe3,0x6c,0xd5,0x7d,0x31,0x5c,0x00, |
||||
0xd2,0xd9,0xfe,0x73,0x7c,0x16,0x59,0xc5,0x4f,0xd5,0xdb,0xca,0x64,0x31,0xa8,0x49,0x26,0xb3,0xf0,0x4d, |
||||
0x31,0xf8,0x86,0x40,0xbf,0x29,0x5a,0x90,0x01,0x49,0x33,0x01,0xa1,0x90,0x95,0xe4,0xe9,0xa4,0x7e,0xfe, |
||||
0x5d,0xbe,0x29,0x32,0xc4,0x30,0xbc,0x19,0x35,0xca,0x77,0x68,0x85,0x8a,0x19,0x7f,0xe9,0xf3,0xda,0xc0, |
||||
0x82,0x25,0x99,0x99,0xd0,0x82,0xe7,0x9a,0x83,0x1d,0x22,0x4b,0x9a,0x63,0x33,0x68,0x73,0xf1,0xdf,0xb2, |
||||
0xde,0x47,0x3e,0x61,0xdd,0x22,0xb8,0x73,0x1d,0xc2,0x22,0x7c,0x3b,0xa4,0x33,0xb3,0xa4,0xc3,0x2d,0xd2, |
||||
0xe0,0xb9,0xb7,0xf8,0x03,0xd9,0x88,0x21,0x80,0xcf,0xa9,0x06,0x30,0x2c,0xe5,0xb8,0x0a,0x8c,0xec,0xb5, |
||||
0x44,0x20,0x2e,0xc9,0x94,0xed,0x31,0xa4,0x26,0x84,0x5c,0x87,0x49,0xe0,0xaa,0x24,0xab,0x1b,0x5b,0xc7, |
||||
0x30,0xad,0x51,0xca,0x19,0xa9,0x46,0x90,0xcb,0x24,0x4a,0xb4,0x03,0xe1,0x5e,0xec,0x67,0x7c,0x02,0xff, |
||||
0xe3,0xbb,0xaa,0x3a,0xfa,0xfe,0xa6,0xa8,0xa3,0xad,0x84,0xf4,0x92,0x0c,0x5c,0x57,0xf6,0x57,0xdb,0x73, |
||||
0x0d,0x3b,0x60,0xed,0x2f,0x34,0x0c,0x28,0x2d,0xc9,0xb6,0xc3,0xb8,0xe7,0x1a,0x60,0xc8,0xb1,0x2b,0x1c, |
||||
0x36,0x40,0x36,0x24,0xf2,0x8b,0x2c,0xb2,0x74,0x1d,0xec,0xfe,0x94,0x20,0x21,0x0e,0xb9,0x96,0xa2,0x64, |
||||
0xe9,0x53,0x49,0xb2,0x37,0x18,0x4b,0xbf,0xff,0x7e,0xb2,0x9f,0xf6,0x78,0xa5,0x27,0x99,0x63,0x40,0xab, |
||||
0x53,0x95,0xa1,0x8c,0x2c,0xfd,0xa9,0x61,0xa4,0xad,0xd3,0x2e,0x81,0x5b,0x2f,0x7a,0x26,0xd2,0x61,0x3f, |
||||
0x6a,0x9c,0x87,0xc0,0x05,0x76,0x88,0xcb,0x82,0x94,0x02,0x03,0xca,0x37,0x3f,0x7f,0x9e,0x1a,0x0b,0x08, |
||||
0xd2,0xd3,0x13,0x0f,0x0d,0x17,0xe0,0x81,0xe1,0xee,0x84,0xdf,0x61,0x5c,0xb4,0x64,0x6f,0x45,0x08,0xbd, |
||||
0x3d,0x64,0x19,0x7e,0xa8,0x75,0xc0,0xc0,0x35,0xb2,0xb8,0xc6,0x8c,0x6b,0x1b,0xff,0x51,0x01,0x85,0x97, |
||||
0x85,0x3f,0xd0,0xac,0x7c,0x3b,0xda,0x65,0x3b,0x0d,0xc3,0x51,0xf8,0xa7,0x3f,0x9e,0x9a,0xb5,0xa9,0xc1, |
||||
0xff,0x55,0xc5,0x52,0xd9,0x55,0x94,0x05,0xff,0x29,0xcf,0x95,0xad,0xd5,0x14,0x1b,0x8d,0xf9,0xa8,0x7e, |
||||
0xd7,0x1c,0x4d,0xd4,0xfc,0x32,0xab,0xe7,0xeb,0xfb,0xe5,0xb0,0x5c,0x5e,0x36,0xae,0xd0,0x72,0x5c,0x6e, |
||||
0xab,0x77,0x75,0x7b,0x39,0x6b,0xe3,0xc5,0xdd,0xe8,0xab,0xa6,0x61,0x3c,0x10,0x02,0xf3,0x72,0x7b,0x54, |
||||
0xab,0x4f,0x61,0x9f,0xd0,0x3b,0xbd,0xd6,0x37,0xee,0x95,0x61,0x57,0x5b,0x94,0x35,0x65,0xa0,0x29,0x15, |
||||
0x7d,0xd8,0x2f,0x28,0xfd,0x7c,0xaf,0x52,0x30,0x46,0x74,0xd1,0xbe,0xaa,0xf5,0x75,0x65,0xb0,0x50,0xaa, |
||||
0x40,0xa9,0x42,0x57,0x9f,0x9a,0xbd,0xdc,0x43,0xfd,0x7e,0x43,0x0c,0xf7,0x6a,0xac,0xf5,0x9a,0x86,0xfe, |
||||
0x2d,0x77,0x31,0xbb,0x58,0xb1,0xa9,0xfb,0x15,0x36,0x8d,0x5e,0x3d,0x47,0x48,0xa3,0x06,0x36,0x97,0xb3, |
||||
0x66,0x35,0xdf,0xec,0xa9,0xcd,0xaf,0x0f,0xed,0xdb,0x6e,0x93,0x80,0xb3,0xd5,0xfa,0x87,0x4a,0x17,0x23, |
||||
0x6a,0xf6,0xbe,0xbb,0xdd,0x89,0x31,0x6d,0x19,0x63,0x63,0xbb,0xe9,0xf5,0x9c,0xc5,0xee,0x0c,0xf5,0x16, |
||||
0x13,0x72,0x39,0x34,0xfb,0x8b,0x1e,0xe9,0xa3,0xfe,0x7e,0xd7,0xea,0xe2,0xfd,0xac,0xa3,0x6b,0xfb,0xfd, |
||||
0x80,0x5a,0xda,0x88,0xee,0xa7,0x5f,0xb3,0x6b,0xa3,0xc9,0x86,0xc3,0x4d,0x5e,0xd1,0xfb,0xed,0xba,0x5b, |
||||
0x5d,0x2b,0x9d,0x42,0x2b,0xd3,0x6d,0xdd,0xf5,0xd4,0xbc,0x42,0x5b,0x65,0xed,0x21,0x8b,0x46,0x0d,0x38, |
||||
0x6c,0x0c,0x26,0xcb,0xd5,0xec,0x72,0x58,0xcb,0x9e,0x19,0xd5,0x46,0x3d,0x4f,0x1c,0xda,0xa8,0x19,0xbd, |
||||
0xe1,0x63,0x4b,0x31,0xed,0xa5,0x82,0x06,0xfd,0xef,0x85,0x8d,0x3b,0x5a,0x65,0x33,0xb7,0xd8,0xa5,0xdd, |
||||
0x4a,0xd9,0xbd,0xd8,0x3f,0x64,0x35,0xd3,0x60,0x95,0xe9,0x74,0x49,0x46,0xbb,0xcb,0x61,0xf5,0xf6,0xa2, |
||||
0x76,0xd7,0x1c,0x3f,0xd4,0xaf,0x18,0x20,0x4b,0x30,0xee,0xb4,0xe7,0xb0,0x5d,0xd5,0xd5,0x21,0xa6,0xb5, |
||||
0x6c,0xa7,0x7a,0xd9,0xee,0x67,0x3a,0xce,0x88,0x36,0xcc,0xc7,0x79,0xa7,0x82,0x2b,0x9d,0x66,0xbb,0xb5, |
||||
0x5a,0x4f,0xcc,0x5d,0xef,0xce,0x54,0x2e,0xf5,0xf2,0xd8,0xc1,0x23,0x74,0xbf,0x6e,0xdf,0xea,0xb9,0xe5, |
||||
0x74,0x7b,0xb5,0x1f,0x5e,0xdd,0xba,0x0f,0x6a,0xd3,0x45,0x60,0x3a,0x03,0x35,0x75,0x59,0xfb,0xc6,0x5a, |
||||
0xad,0x7b,0xa7,0xdc,0x99,0xef,0xa9,0x43,0x73,0x5a,0x61,0xf6,0x1d,0xaa,0xdd,0x9a,0xae,0x6e,0xf3,0xaa, |
||||
0xd6,0xa3,0xb5,0x6f,0xc6,0xfd,0xa6,0xac,0x6f,0xe7,0xa3,0x71,0xbb,0x50,0x3f,0xcb,0xec,0x1e,0x5a,0xf3, |
||||
0x39,0x69,0x35,0x76,0xd6,0xfc,0xe2,0xc7,0x0e,0x68,0xdd,0xaa,0x09,0xfb,0xb7,0x57,0xb9,0xdb,0xfb,0xee, |
||||
0xb0,0xa3,0xe7,0x0a,0xb3,0x5e,0xb5,0x62,0x2f,0x8c,0xca,0xe3,0xec,0xbe,0x75,0xd1,0x9f,0xc0,0x9c,0x35, |
||||
0x76,0x06,0xd5,0xc2,0xd5,0x63,0x61,0x4c,0x78,0x72,0x5c,0x3d,0x0c,0xec,0x02,0x74,0xb6,0x95,0x9e,0x97, |
||||
0x3d,0x35,0x5c,0x9f,0xac,0xc7,0x9b,0xa1,0x55,0xa9,0xf0,0x4c,0x34,0x73,0x22,0xc5,0xff,0xc5,0x3e,0xa7, |
||||
0xbc,0xfe,0x94,0xfa,0xe2,0x65,0x36,0xdf,0x2d,0x9a,0x79,0x41,0xa1,0x0c,0xb0,0x0d,0x4d,0xd3,0x3d,0x65, |
||||
0xd0,0x6a,0x55,0x79,0x41,0x05,0x55,0xf8,0x5f,0x4f,0x28,0xdc,0xe7,0x72,0x67,0x52,0xea,0x5a,0x4a,0xf1, |
||||
0x9f,0xb8,0x08,0xdf,0x4d,0xf9,0x5a,0xf3,0x27,0xd5,0xb0,0xe3,0x55,0xe5,0xf3,0x9e,0x56,0x09,0x2f,0x1e, |
||||
0x1b,0x6a,0x41,0x51,0x46,0xf6,0x91,0xad,0x8b,0x2a,0x14,0xcd,0xf2,0x5a,0xd4,0xcd,0xb9,0x2f,0xec,0x2b, |
||||
0x1a,0xfb,0x46,0x81,0x9b,0x86,0x36,0x50,0x31,0xd4,0x39,0xc0,0x54,0xa0,0x09,0xea,0x29,0x01,0x42,0x47, |
||||
0xf4,0xb8,0x21,0x07,0x25,0x1b,0x38,0x1f,0x55,0xa1,0x69,0xbc,0xc6,0x5d,0x07,0xd9,0x2c,0x7d,0x8c,0x89, |
||||
0xc4,0x19,0x5f,0xb2,0x73,0xba,0x8f,0x5c,0x6e,0xec,0x15,0x9d,0x1c,0x86,0x27,0x18,0x84,0xfa,0xd0,0x37, |
||||
0x7e,0xd5,0x7b,0x03,0xb2,0x3b,0x54,0xf7,0x2c,0x71,0x21,0xdf,0xe0,0xe7,0x2f,0x2f,0xfb,0x47,0x7d,0x46, |
||||
0xcb,0xd1,0x61,0xcc,0xbf,0x24,0x4d,0x13,0xf8,0xc8,0x3e,0x47,0x90,0xc6,0xbb,0x9d,0xdf,0x73,0x79,0xeb, |
||||
0xd7,0x91,0x6d,0xc8,0x21,0xd8,0x70,0x1d,0x9a,0x0f,0xd6,0x07,0x4b,0xc1,0xba,0x15,0xfa,0x74,0x1a,0x09, |
||||
0x5f,0xe7,0xa7,0x80,0x49,0xf4,0x7b,0x3e,0xcf,0x90,0x4a,0xfc,0x96,0x5e,0x0a,0x32,0xf0,0x34,0x3c,0x3b, |
||||
0x40,0x6c,0x0f,0x81,0x2f,0x6c,0x02,0x3a,0x82,0x7c,0x1a,0xd7,0xc4,0x6c,0xe0,0x9c,0x6e,0x88,0xc4,0x1b, |
||||
0x16,0x69,0x72,0xa0,0x05,0x4f,0xc1,0xe5,0x2c,0xa1,0x2a,0x8f,0x38,0x82,0x80,0x8a,0x47,0xf0,0x5c,0xcc, |
||||
0xa7,0xa4,0x23,0x99,0x1e,0xd9,0x8e,0x68,0xf3,0x81,0xd0,0x43,0xd0,0xb5,0xf5,0x84,0x00,0x0d,0xc6,0x54, |
||||
0x1e,0x09,0x47,0x24,0x20,0x44,0xa2,0x6e,0x18,0xe3,0x1e,0xfb,0x3f,0xe7,0x2e,0xe1,0x83,0x82,0xec,0xc3, |
||||
0xf1,0x9d,0x01,0x2e,0xca,0x78,0xe2,0x4c,0x88,0x67,0x0c,0x31,0xd9,0x3f,0x6a,0xb4,0xea,0xec,0x6c,0x11, |
||||
0xe7,0xc0,0x38,0xb8,0x91,0xe2,0xd6,0xc3,0xd1,0xc9,0x67,0x15,0xc4,0x90,0xc1,0xf1,0x3b,0x94,0x7a,0x8c, |
||||
0x07,0x95,0xcf,0x73,0xdc,0x06,0x5b,0x64,0xf8,0x4f,0x93,0x01,0x55,0x94,0xff,0x33,0xa3,0xc7,0xa3,0x40, |
||||
0x0a,0xf0,0x6a,0xd8,0x42,0xde,0x5c,0xfc,0x3f,0x13,0xa0,0xf2,0x1c,0x90,0x52,0xbe,0x93,0x29,0x31,0xf8, |
||||
0x43,0x84,0x11,0x86,0x03,0xfd,0x80,0x32,0x08,0x0a,0x37,0x38,0x89,0x74,0x3a,0xf0,0x4b,0xb6,0x8f,0x45, |
||||
0xfa,0xb2,0xfd,0x08,0xcf,0x01,0xc3,0x71,0xef,0x9f,0xc1,0xe1,0xf7,0xd8,0x57,0x62,0xe0,0xd3,0x8f,0x31, |
||||
0xf0,0xd6,0x09,0xb6,0xe3,0xc5,0x97,0x18,0x6a,0x31,0x2e,0x2e,0xe2,0xe1,0x8c,0x4e,0x8d,0x8b,0xb7,0x14, |
||||
0x9d,0xc4,0xa4,0xb8,0x72,0x88,0x25,0xfd,0x49,0x37,0xaa,0x85,0xd8,0xf1,0x64,0xc6,0xcf,0x94,0x78,0x5f, |
||||
0x89,0x76,0xc1,0xa3,0xd1,0x68,0xfc,0x62,0x86,0x35,0x13,0x6a,0x6b,0x6e,0x54,0xf4,0x35,0x9c,0x56,0x1d, |
||||
0x07,0x43,0x60,0x47,0xdb,0x69,0xb4,0x09,0xf3,0xd8,0x7a,0xf2,0x25,0x39,0xa6,0x35,0xc2,0x93,0xf2,0x7a, |
||||
0xa8,0xa7,0xf6,0xf4,0x6c,0x68,0x0a,0x05,0x09,0x88,0x22,0xb2,0x4d,0x4f,0x3e,0x72,0x48,0x7c,0x1b,0x5d, |
||||
0xd0,0x96,0x5f,0x44,0x16,0x69,0xdb,0x1f,0x46,0x16,0x91,0x8d,0x23,0x93,0x8a,0x18,0xa8,0x10,0x4b,0xfc, |
||||
0x59,0xf0,0xbe,0x41,0x91,0x9e,0x28,0xcf,0xf7,0x03,0x21,0x8f,0x9b,0x4b,0x21,0xdb,0xdd,0x30,0x89,0xed, |
||||
0x5d,0xf1,0x1e,0xc3,0x67,0x84,0xec,0x9d,0x7b,0x3d,0x05,0xa1,0x9b,0xa7,0xee,0x79,0x94,0xeb,0x70,0xf8, |
||||
0xf1,0xf6,0x9e,0xe0,0xfb,0x29,0x1a,0x97,0xfb,0xb4,0x73,0x48,0x22,0xa2,0x90,0xf6,0x0a,0xaa,0x83,0xb8, |
||||
0x87,0xec,0xb8,0x4a,0x42,0x77,0xa4,0xbe,0x85,0xf0,0x1d,0x4f,0x52,0x37,0x35,0xf7,0x4d,0x45,0x2f,0x3d, |
||||
0x66,0x21,0xcc,0x9f,0x6f,0xf8,0x44,0x45,0x89,0x9c,0x8b,0xb7,0x09,0xe2,0xe0,0x0f,0x3e,0x74,0xa1,0xe9, |
||||
0x59,0x1e,0x46,0x9a,0x30,0xaf,0x3b,0xc7,0x15,0x9c,0xa2,0xff,0x46,0xc2,0x8e,0xdc,0x24,0x6d,0xc8,0x05, |
||||
0xba,0xce,0x07,0x1d,0x7d,0x57,0x1e,0x70,0x1d,0x89,0x71,0x46,0x6f,0x06,0x46,0xfa,0xeb,0x2f,0x29,0x1e, |
||||
0xcb,0x58,0x92,0x6e,0x54,0x1b,0x32,0x0b,0xd0,0x75,0x62,0xaa,0x1e,0xa8,0xef,0x4b,0xd8,0xa3,0xb2,0xe4, |
||||
0xb4,0x8d,0xd0,0xff,0x2e,0x70,0x3e,0xf1,0xe0,0x0e,0xec,0x93,0x50,0x07,0xa4,0x77,0x41,0x0e,0xd5,0x24, |
||||
0xe2,0x3d,0x10,0x7f,0x01,0x6c,0xd0,0xbb,0x23,0x88,0x4d,0x87,0x32,0x71,0xff,0x90,0x04,0x39,0xa4,0xbd, |
||||
0x89,0xf9,0xda,0xc5,0xfc,0x4c,0x60,0x3a,0x98,0xbf,0xfa,0x3e,0x4b,0xf7,0x50,0xcb,0xe0,0xc8,0x23,0xb2, |
||||
0x5f,0xf8,0x79,0x30,0x9e,0xe8,0xe8,0x91,0xfa,0x66,0xc5,0x46,0x72,0xde,0x9f,0xac,0x22,0xe1,0xa3,0x38, |
||||
0xfd,0x09,0x74,0xa2,0x89,0xf2,0x13,0x8a,0x38,0x4d,0x5e,0x6f,0x01,0xde,0xc0,0x70,0x1d,0xbc,0xf4,0x78, |
||||
0x13,0xaa,0xec,0xa9,0x1a,0x7b,0xfb,0x3c,0x06,0xd7,0x71,0x4a,0xea,0x70,0x04,0x2f,0x66,0x44,0x15,0xbf, |
||||
0x39,0x63,0xc3,0x51,0xfd,0xc2,0x58,0xdc,0xb8,0xe2,0x9c,0x56,0x47,0xc4,0xe2,0x47,0x5d,0x78,0x3a,0x8a, |
||||
0xfd,0xa9,0xbe,0x0a,0x68,0x93,0xd8,0x64,0x8c,0xba,0xba,0x42,0x18,0xfa,0xe1,0x0d,0xb9,0xeb,0x62,0xe7, |
||||
0xff,0x20,0x48,0xc7,0xb8,0xf8,0x9e,0x0e,0x88,0x63,0x88,0x7e,0xe3,0xbd,0x71,0xae,0x00,0xa6,0x7e,0x16, |
||||
0xc6,0x88,0x4f,0x4f,0xff,0x3e,0x0d,0xf2,0x2b,0x67,0x8a,0xb1,0x17,0xa6,0xa4,0xc8,0xb9,0xc8,0xa6,0xf1, |
||||
0xa8,0x45,0xaf,0x6d,0x1c,0x82,0x7e,0x88,0x1b,0x1d,0x7c,0xda,0x29,0xb9,0x58,0xb7,0x56,0x55,0x06,0xf1, |
||||
0xe3,0x55,0xb8,0xff,0x4a,0x69,0xd8,0x1b,0x4b,0x85,0x24,0x18,0x4d,0xa1,0x9a,0xc3,0x54,0xf1,0xa9,0x3c, |
||||
0xa0,0x47,0x78,0x69,0x1e,0x71,0x61,0xe9,0xf9,0x61,0xfa,0x75,0x74,0xe3,0x89,0x92,0x0c,0x8f,0x13,0x3e, |
||||
0x84,0x4f,0x28,0x7a,0x0b,0xa0,0x67,0xec,0x43,0x08,0x95,0x81,0x9f,0x08,0x09,0x18,0x43,0xd2,0xfb,0x51, |
||||
0x1e,0x94,0xbd,0x8a,0x13,0xb8,0xa1,0xc9,0xa4,0xf2,0x7c,0xfe,0x3e,0xce,0xe7,0x3b,0x59,0xa1,0x47,0xf9, |
||||
0x45,0x8e,0x2d,0x24,0x14,0x45,0x5c,0xd0,0x1c,0x77,0x4f,0x90,0x61,0x06,0x93,0x57,0x25,0x91,0x7b,0x94, |
||||
0x80,0x37,0x7e,0x8d,0x12,0x16,0xe3,0xcc,0x27,0x7b,0xb7,0x29,0x31,0x89,0xc3,0x2d,0xca,0xb3,0xd7,0xf0, |
||||
0xe0,0xea,0x16,0x03,0xdb,0xd8,0x00,0x83,0x87,0xe5,0x1e,0x6c,0x81,0xbf,0x29,0xdf,0x70,0x2d,0x84,0x29, |
||||
0xae,0xfb,0xf9,0x4b,0xe4,0x2a,0xd7,0xbf,0xc4,0xcd,0x78,0x57,0xd8,0xff,0x03,0x5f,0x4f,0x1f,0xc2,0xd8, |
||||
0x16,0x00,0x00}; |
||||
|
||||
#endif |
@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
|
||||
#ifndef __assets_version |
||||
#define __assets_version |
||||
|
||||
const uint8_t VersionMajor = 0; |
||||
const uint8_t VersionMinor = 1; |
||||
const uint8_t VersionPatch = 0; |
||||
const uint8_t VersionMetadata = 0; |
||||
const char VersionBranch[] = "master"; |
||||
const char VersionSemVer[] = "0.1.0"; |
||||
const char VersionFullSemVer[] = "0.1.0+0"; |
||||
const char VersionCommitDate[] = "2020-09-19"; |
||||
|
||||
#endif |
@ -0,0 +1,44 @@
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* ESP8266 RGBW controller |
||||
* Copyright 2020 (c) Mark van Renswoude |
||||
* |
||||
* https://git.x2software.net/pub/RGBWifi
|
||||
*/ |
||||
#include "./charproperties.h" |
||||
#include <cstddef> |
||||
#include <string.h> |
||||
#include "./debug.h" |
||||
|
||||
void assignChar(char** field, const char* newValue) |
||||
{ |
||||
if (*field != nullptr) |
||||
delete *field; |
||||
|
||||
if (newValue != nullptr) |
||||
{ |
||||
// Include the terminating null character
|
||||
size_t length = strlen(newValue) + 1; |
||||
|
||||
if (length > 0) |
||||
{ |
||||
*field = new char[length]; |
||||
strncpy(*field, newValue, length); |
||||
} |
||||
else |
||||
*field = nullptr; |
||||
} |
||||
else |
||||
*field = nullptr; |
||||
} |
||||
|
||||
|
||||
bool sameStr(const char* value1, const char* value2) |
||||
{ |
||||
if ((value1 == nullptr) != (value2 == nullptr)) |
||||
return true; |
||||
|
||||
if (value1 == nullptr) |
||||
return false; |
||||
|
||||
return strcmp(value1, value2) == 0; |
||||
} |
@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
* ESP8266 RGBW controller |
||||
* Copyright 2020 (c) Mark van Renswoude |
||||
* |
||||
* https://git.x2software.net/pub/RGBWifi
|
||||
*/ |
||||
#ifndef __charproperties |
||||
#define __charproperties |
||||
|
||||
#include <stdint.h> |
||||
|
||||
void assignChar(char** field, const char* newValue); |
||||
bool sameStr(const char* value1, const char* value2); |
||||
|
||||
#endif |
@ -0,0 +1,30 @@
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* ESP8266 RGBW controller |
||||
* Copyright 2020 (c) Mark van Renswoude |
||||
* |
||||
* https://git.x2software.net/pub/RGBWifi
|
||||
*/ |
||||
#include "./config.h" |
||||
|
||||
#ifdef SerialDebug |
||||
const uint32_t SerialDebugBaudrate = 115200; |
||||
const uint32_t SerialDebugStartupDelay = 2000; |
||||
#endif |
||||
|
||||
|
||||
const char* ConnectionSettingsFile = "/connection.json"; |
||||
const char* SystemSettingsFile = "/system.json"; |
||||
|
||||
|
||||
const char* DefaultAPSSIDPrefix = "RGBWifi-"; |
||||
|
||||
// Timeout when in AP + station mode (otherwise trying to connect
|
||||
// to the STA will block the AP)
|
||||
const uint32_t StationModeTimeout = 30000; |
||||
|
||||
const uint16_t APButtonHoldTime = 2000; |
||||
|
||||
|
||||
const uint8_t InitialisationBrightness = 128; |
||||
const uint8_t InitialisationFadeTime = 250; |
||||
const uint8_t InitialisationBlinkCount = 2; |
@ -0,0 +1,45 @@
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* ESP8266 RGBW controller |
||||
* Copyright 2020 (c) Mark van Renswoude |
||||
* |
||||
* https://git.x2software.net/pub/RGBWifi
|
||||
*/ |
||||
#ifndef __config |
||||
#define __config |
||||
|
||||
#include <stdint.h> |
||||
|
||||
|
||||
// Enables debug information to be output through the standard
|
||||
// Serial connection, disable in production units to improve performance
|
||||
#define SerialDebug |
||||
|
||||
// Enables the crash API methods to cause crashes, you probably never
|
||||
// want to leave this on unless you're debugging the exception handler
|
||||
//#define EnableCrashAPI
|
||||
|
||||
|
||||
#ifdef SerialDebug |
||||
extern const uint32_t SerialDebugBaudrate; |
||||
extern const uint32_t SerialDebugStartupDelay; |
||||
#endif |
||||
|
||||
|
||||
extern const char* ConnectionSettingsFile; |
||||
extern const char* SystemSettingsFile; |
||||
|
||||
|
||||
extern const char* DefaultAPSSIDPrefix; |
||||
|
||||
extern const uint32_t StationModeTimeout; |
||||
extern const uint16_t APButtonHoldTime; |
||||
|
||||
|
||||
extern const uint32_t TimezoneRetryInterval; |
||||
|
||||
|
||||
extern const uint8_t InitialisationBrightness; |
||||
extern const uint8_t InitialisationFadeTime; |
||||
extern const uint8_t InitialisationBlinkCount; |
||||
|
||||
#endif |
@ -0,0 +1,18 @@
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
* ESP8266 RGBW controller |
||||
* Copyright 2020 (c) Mark van Renswoude |
||||
* |
||||
* https://git.x2software.net/pub/RGBWifi
|
||||
*/ |
||||
#include "./debug.h" |
||||
|
||||
|
||||
void _dinit() |
||||
{ |
||||
#ifdef SerialDebug |
||||
Serial.begin(SerialDebugBaudrate); |
||||
// Enable if you want detailed WiFi state logging
|
||||
//Serial.setDebugOutput(true);
|
||||
delay(SerialDebugStartupDelay); |
||||
#endif |
||||
} |
@ -0,0 +1,24 @@
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* ESP8266 RGBW controller |
||||
* Copyright 2020 (c) Mark van Renswoude |
||||
* |
||||
* https://git.x2software.net/pub/RGBWifi
|
||||
*/ |
||||
#ifndef __serialdebug |
||||
#define __serialdebug |
||||
|
||||
#include "./config.h" |
||||
#include <Arduino.h> |
||||
|
||||
void _dinit(); |
||||
|
||||
#ifdef SerialDebug |
||||
#define _d(msg) Serial.print(msg) |
||||
#define _dln(msg) Serial.println(msg) |
||||
#else |
||||
#define _d(msg) do { } while (0) |
||||
#define _dln(msg) do { } while (0) |
||||
#endif |
||||
|
||||
|
||||
#endif |
@ -0,0 +1,20 @@
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* ESP8266 RGBW controller |
||||
* Copyright 2020 (c) Mark van Renswoude |
||||
* |
||||
* https://git.x2software.net/pub/RGBWifi
|
||||
*/ |
||||
#include "./global.h" |
||||
|
||||
ConnectionSettings* connectionSettings = new ConnectionSettings(); |
||||
bool connectionSettingsChanged = false; |
||||
|
||||
SystemSettings* systemSettings = new SystemSettings(); |
||||
bool systemSettingsChanged = false; |
||||
|
||||
|
||||
bool shouldReboot = false; |
||||
|
||||
uint32_t currentTime; |
||||
|
||||
IPAddress emptyIP(0, 0, 0, 0); |
@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* ESP8266 RGBW controller |
||||
* Copyright 2020 (c) Mark van Renswoude |
||||
* |
||||
* https://git.x2software.net/pub/RGBWifi
|
||||
*/ |
||||
#ifndef __global |
||||
#define __global |
||||
|
||||
#include <stdint.h> |
||||
#include <stdbool.h> |
||||
#include <IPAddress.h> |
||||
#include "./settings/connection.h" |
||||
#include "./settings/system.h" |
||||
|
||||
extern ConnectionSettings* connectionSettings; |
||||
extern bool connectionSettingsChanged; |
||||
|
||||
extern SystemSettings* systemSettings; |
||||
extern bool systemSettingsChanged; |
||||
|
||||
extern bool shouldReboot; |
||||
|
||||
extern uint32_t currentTime; |
||||
|
||||
extern IPAddress emptyIP; |
||||
|
||||
#endif |
@ -0,0 +1,217 @@
@@ -0,0 +1,217 @@
|
||||
/*
|
||||
* ESP8266 RGBW controller |
||||
* Copyright 2020 (c) Mark van Renswoude |
||||
* |
||||
* https://git.x2software.net/pub/RGBWifi
|
||||
*/ |
||||
#include <Arduino.h> |
||||
#include <ESP8266WiFi.h> |
||||
#include <ESPAsyncWebServer.h> |
||||
#include <ESPAsyncTCP.h> |
||||
#include <NeoPixelBus.h> |
||||
#include <LittleFS.h> |
||||
|
||||
#include "./config.h" |
||||
#include "./debug.h" |
||||
#include "./global.h" |
||||
|
||||
#include "./main.wifi.h" |
||||
#include "./main.led.h" |
||||
#include "./main.debug.h" |
||||
|
||||
#include "./server/static.h" |
||||
#include "./server/settings.h" |
||||
#include "./server/firmware.h" |
||||
#include "./server/api.h" |
||||
|
||||
|
||||
// Forward declarations
|
||||
void handleNotFound(AsyncWebServerRequest* request); |
||||
|
||||
|
||||
AsyncWebServer server(80); |
||||
NeoPixelBus<NeoGrbwFeature, Neo800KbpsMethod>* strip = NULL; |
||||
|
||||
|
||||
#define colorSaturation 128 |
||||
RgbwColor red(colorSaturation, 0, 0, 0); |
||||
RgbwColor green(0, colorSaturation, 0, 0); |
||||
RgbwColor blue(0, 0, colorSaturation, 0); |
||||
RgbwColor white(colorSaturation); |
||||
RgbwColor black(0); |
||||
|
||||
|
||||
|
||||
void setup() |
||||
{ |
||||
_dinit(); |
||||
|
||||
_dln("Initializing LED strip"); |
||||
|
||||
strip = new NeoPixelBus<NeoGrbwFeature, Neo800KbpsMethod>(5); |
||||
strip->Begin(); |
||||
strip->Show(); |
||||
|
||||
|
||||
|
||||
currentTime = millis(); |
||||
|
||||
if (!LittleFS.begin()) |
||||
_dln("Setup :: failed to mount file system"); |
||||
|
||||
connectionSettings->read(); |
||||
systemSettings->read(); |
||||
/*
|
||||
stepsSettings->read(); |
||||
timeTriggerSettings->read(); |
||||
motionTriggerSettings->read(); |
||||
*/ |
||||
|
||||
pinMode(systemSettings->pinAPButton(), INPUT_PULLUP); |
||||
pinMode(systemSettings->pinLEDAP(), OUTPUT); |
||||
pinMode(systemSettings->pinLEDSTA(), OUTPUT); |
||||
|
||||
|
||||
_dln("Setup :: starting initialization sequence"); |
||||
/*
|
||||
uint8_t bottomStep = stepsSettings->count() - 1; |
||||
|
||||
for (uint8_t i = 0; i < InitialisationBlinkCount; i++) |
||||
{ |
||||
stairs->set(bottomStep, InitialisationBrightness, InitialisationFadeTime); |
||||
waitForTransition(); |
||||
|
||||
stairs->set(bottomStep, 0, InitialisationFadeTime); |
||||
waitForTransition(); |
||||
} |
||||
*/ |
||||
|
||||
_dln("Setup :: initializing WiFi"); |
||||
WiFi.persistent(false); |
||||
WiFi.mode(WIFI_OFF); |
||||
|
||||
initDebug(); |
||||
initWiFi(); |
||||
|
||||
_dln("Setup :: registering routes"); |
||||
registerStaticRoutes(&server); |
||||
registerAPIRoutes(&server); |
||||
registerSettingsRoutes(&server); |
||||
registerFirmwareRoutes(&server); |
||||
|
||||
_dln("Setup :: starting HTTP server"); |
||||
server.onNotFound(handleNotFound); |
||||
server.begin(); |
||||
} |
||||
|
||||
void loop() |
||||
{ |
||||
/*
|
||||
_dln("Looping"); |
||||
delay(1000); |
||||
|
||||
// set the colors,
|
||||
// if they don't match in order, you need to use NeoGrbFeature feature
|
||||
strip->SetPixelColor(0, red); |
||||
strip->SetPixelColor(1, green); |
||||
strip->SetPixelColor(2, blue); |
||||
strip->SetPixelColor(3, white); |
||||
strip->SetPixelColor(4, black); |
||||
// the following line demonstrates rgbw color support
|
||||
// if the NeoPixels are rgbw types the following line will compile
|
||||
// if the NeoPixels are anything else, the following line will give an error
|
||||
//strip->SetPixelColor(3, RgbwColor(colorSaturation));
|
||||
strip->Show(); |
||||
|
||||
|
||||
delay(1000); |
||||
|
||||
// turn off the pixels
|
||||
strip->SetPixelColor(0, black); |
||||
strip->SetPixelColor(1, black); |
||||