mirror of
https://github.com/balkian/shinesp.git
synced 2024-12-21 21:18:12 +00:00
Added beating/relaxing mode
This commit is contained in:
parent
aa3ce00ef6
commit
dd7f2b7750
26
README.md
26
README.md
@ -26,6 +26,21 @@ To get the IP of the board you have several options:
|
|||||||
* The board prints the IP address it was given to the serial monitor
|
* The board prints the IP address it was given to the serial monitor
|
||||||
* Use nmap/zenmap/similar
|
* Use nmap/zenmap/similar
|
||||||
|
|
||||||
|
|
||||||
|
# WEB UI
|
||||||
|
|
||||||
|
There is a simple HTML website that can be used to test the API and set the colors of the LED.
|
||||||
|
From the root of the repository, open it with your favourite browser, or with python:
|
||||||
|
|
||||||
|
```
|
||||||
|
firefox $PWD/index.html
|
||||||
|
|
||||||
|
# OR
|
||||||
|
|
||||||
|
python3 -m http.server
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
# API
|
# API
|
||||||
|
|
||||||
* `/clear` clear WIFI credentials
|
* `/clear` clear WIFI credentials
|
||||||
@ -39,6 +54,17 @@ To get the IP of the board you have several options:
|
|||||||
* `/brightness/up` turn up the brightness (up to 255)
|
* `/brightness/up` turn up the brightness (up to 255)
|
||||||
* `/brightness/down` turn down the brightness (down to 0)
|
* `/brightness/down` turn down the brightness (down to 0)
|
||||||
|
|
||||||
|
|
||||||
|
# Developing
|
||||||
|
|
||||||
|
* Install arduino
|
||||||
|
|
||||||
|
* Install support for ESP8266 boards in arduino: https://github.com/esp8266/Arduino
|
||||||
|
|
||||||
|
* Install the fastled library in arduino: https://github.com/FastLED/FastLED/
|
||||||
|
|
||||||
|
* Profit
|
||||||
|
|
||||||
# Debugging
|
# Debugging
|
||||||
You can use a serial monitor (e.g. in the Arduino IDE) to connect to the board.
|
You can use a serial monitor (e.g. in the Arduino IDE) to connect to the board.
|
||||||
|
|
||||||
|
@ -16,6 +16,11 @@
|
|||||||
<input id="ip-address" type="text" value="http://192.168.1.104" />
|
<input id="ip-address" type="text" value="http://192.168.1.104" />
|
||||||
<input id="chosen-value" class="jscolor {valueElement:'chosen-value', onFineChange:'setColor(this.rgb[0], this.rgb[1], this.rgb[2])'}" value="000000">
|
<input id="chosen-value" class="jscolor {valueElement:'chosen-value', onFineChange:'setColor(this.rgb[0], this.rgb[1], this.rgb[2])'}" value="000000">
|
||||||
|
|
||||||
|
<button onclick="turnOff()">Turn OFF</button>
|
||||||
|
<button onclick="beatOn()">Beating ON</button>
|
||||||
|
<button onclick="beatOff()">Beating OFF</button>
|
||||||
|
<label>Beating period (ms)</label>
|
||||||
|
<input id="beating-period" type="int" value="2000" />
|
||||||
<button onclick="turnOff()">Turn OFF</button>
|
<button onclick="turnOff()">Turn OFF</button>
|
||||||
<button onclick="setColor(255, 255, 255)">White</button>
|
<button onclick="setColor(255, 255, 255)">White</button>
|
||||||
<script>
|
<script>
|
||||||
@ -51,6 +56,45 @@
|
|||||||
xhttp.open("GET", ip + "/off", true);
|
xhttp.open("GET", ip + "/off", true);
|
||||||
xhttp.send();
|
xhttp.send();
|
||||||
}
|
}
|
||||||
|
function beatOn(){
|
||||||
|
|
||||||
|
period = document.getElementById("beating-period").value ;
|
||||||
|
BeatPeriod(period);
|
||||||
|
return Beat(true);
|
||||||
|
}
|
||||||
|
function beatOff(){
|
||||||
|
return Beat(false);
|
||||||
|
}
|
||||||
|
function Beat(b){
|
||||||
|
var state = "off";
|
||||||
|
if (b){
|
||||||
|
state = "on";
|
||||||
|
}
|
||||||
|
console.log("Turning beating " + state);
|
||||||
|
xhttp = new XMLHttpRequest();
|
||||||
|
xhttp.onreadystatechange = function() {
|
||||||
|
if (this.readyState == 4 && this.status == 200) {
|
||||||
|
console.log("Sent beating " + state);
|
||||||
|
ready = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
ip = document.getElementById("ip-address").value ;
|
||||||
|
xhttp.open("GET", ip + "/beat/" + state, true);
|
||||||
|
xhttp.send();
|
||||||
|
}
|
||||||
|
function BeatPeriod(p){
|
||||||
|
console.log("Setting beating period to: " + p);
|
||||||
|
xhttp = new XMLHttpRequest();
|
||||||
|
xhttp.onreadystatechange = function() {
|
||||||
|
if (this.readyState == 4 && this.status == 200) {
|
||||||
|
console.log("Sent beating period to:" + p);
|
||||||
|
ready = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
ip = document.getElementById("ip-address").value ;
|
||||||
|
xhttp.open("GET", ip + "/beat/?period=" + p, true);
|
||||||
|
xhttp.send();
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
59
shinesp.ino
59
shinesp.ino
@ -2,7 +2,9 @@
|
|||||||
#define FASTLED_ESP8266_RAW_PIN_ORDER
|
#define FASTLED_ESP8266_RAW_PIN_ORDER
|
||||||
#include "FastLED.h"
|
#include "FastLED.h"
|
||||||
|
|
||||||
#define NUM_LEDS 300
|
#include "math.h"
|
||||||
|
|
||||||
|
#define NUM_LEDS 150
|
||||||
#define DATA_PIN 0
|
#define DATA_PIN 0
|
||||||
#define led 13
|
#define led 13
|
||||||
|
|
||||||
@ -17,6 +19,9 @@ CRGB leds[NUM_LEDS];
|
|||||||
|
|
||||||
const char* customssid = "led";
|
const char* customssid = "led";
|
||||||
const int binterval = 10;
|
const int binterval = 10;
|
||||||
|
bool isBeating = false;
|
||||||
|
String beatingFun = "sin";
|
||||||
|
int beatingPeriod = 5000;
|
||||||
bool isOn = false;
|
bool isOn = false;
|
||||||
CRGB lastColor = CRGB::White;
|
CRGB lastColor = CRGB::White;
|
||||||
|
|
||||||
@ -212,6 +217,52 @@ void handleBrightnessDown() {
|
|||||||
httpServer.send(200, "text/plain", "Brightness set to " + String(brightness));
|
httpServer.send(200, "text/plain", "Brightness set to " + String(brightness));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void handleBeat() {
|
||||||
|
beatingPeriod = httpServer.arg("period").toInt();
|
||||||
|
beatingFun = httpServer.arg("fun");
|
||||||
|
// min/max don't work
|
||||||
|
if (beatingPeriod < 0) {
|
||||||
|
beatingPeriod = 5000;
|
||||||
|
}
|
||||||
|
httpServer.send(200, "text/plain", "Beating period set to " + String(beatingPeriod) + " and function set to " + beatingFun);
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleBeatOn() {
|
||||||
|
isBeating = true;
|
||||||
|
httpServer.send(200, "text/plain", "Now beating!");
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleBeatOff() {
|
||||||
|
isBeating = false;
|
||||||
|
FastLED.setBrightness(brightness);
|
||||||
|
httpServer.send(200, "text/plain", "Not beating now!");
|
||||||
|
}
|
||||||
|
|
||||||
|
int getBeatingBrightness(){
|
||||||
|
|
||||||
|
double val = 255.0;
|
||||||
|
if (beatingFun.equals("lin")){
|
||||||
|
// statements
|
||||||
|
val = (millis() % (beatingPeriod)) - (beatingPeriod/2.0);
|
||||||
|
|
||||||
|
if (val < 0.0) {
|
||||||
|
val = -val;
|
||||||
|
}
|
||||||
|
val = 255.0 * 2.0 * (val/beatingPeriod);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// statements
|
||||||
|
val = (cos(millis()*(2.0*PI)/((double) beatingPeriod))*127+127);
|
||||||
|
}
|
||||||
|
return (int) (val*(brightness/255.0));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void beat(){
|
||||||
|
FastLED.setBrightness(getBeatingBrightness());
|
||||||
|
}
|
||||||
|
|
||||||
void handleBrightness() {
|
void handleBrightness() {
|
||||||
int value = httpServer.arg("value").toInt();
|
int value = httpServer.arg("value").toInt();
|
||||||
if (value > 0) {
|
if (value > 0) {
|
||||||
@ -358,6 +409,9 @@ void setup() {
|
|||||||
httpServer.on ( "/on", handleOn );
|
httpServer.on ( "/on", handleOn );
|
||||||
httpServer.on ( "/toggle", handleToggle );
|
httpServer.on ( "/toggle", handleToggle );
|
||||||
httpServer.on ( "/white", handleWhite );
|
httpServer.on ( "/white", handleWhite );
|
||||||
|
httpServer.on ( "/beat/on", handleBeatOn );
|
||||||
|
httpServer.on ( "/beat/off", handleBeatOff );
|
||||||
|
httpServer.on ( "/beat/", handleBeat );
|
||||||
httpServer.on ( "/brightness", handleBrightness );
|
httpServer.on ( "/brightness", handleBrightness );
|
||||||
httpServer.on ( "/brightness/up", handleBrightnessUp );
|
httpServer.on ( "/brightness/up", handleBrightnessUp );
|
||||||
httpServer.on ( "/brightness/down", handleBrightnessDown );
|
httpServer.on ( "/brightness/down", handleBrightnessDown );
|
||||||
@ -376,5 +430,8 @@ void setup() {
|
|||||||
void loop() {
|
void loop() {
|
||||||
ArduinoOTA.handle();
|
ArduinoOTA.handle();
|
||||||
httpServer.handleClient();
|
httpServer.handleClient();
|
||||||
|
if (isBeating){
|
||||||
|
beat();
|
||||||
|
}
|
||||||
FastLED.show();
|
FastLED.show();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user