mirror of
https://github.com/0x1d/esp8266-laser.git
synced 2025-12-17 02:46:39 +01:00
added preset feauture (not completed)
This commit is contained in:
@@ -34,9 +34,19 @@ const char *myHostname = "esplaser";
|
||||
// SoftwareSerial(int receivePin, int transmitPin, bool inverse_logic = false, unsigned int buffSize = 64);
|
||||
SoftwareSerial laserSerial(14, 12, false, 256);
|
||||
|
||||
// Presets json buffer
|
||||
const unsigned int maxPresets = 128; // 128 = 19496, 200 = 29864
|
||||
|
||||
// Preset cycleTime
|
||||
unsigned int cycleTime = 1000; // ms
|
||||
/*
|
||||
End of hard coded config
|
||||
*/
|
||||
const unsigned int presetsBufferSize = maxPresets * JSON_ARRAY_SIZE(4) + JSON_OBJECT_SIZE(1) + JSON_OBJECT_SIZE(maxPresets) + 1000;
|
||||
|
||||
byte presets[maxPresets][4] = {1, 1, 1, 128};
|
||||
unsigned int activePreset = 0;
|
||||
unsigned int presetMode = 0;
|
||||
|
||||
String ssid = "";
|
||||
String password = "";
|
||||
@@ -121,6 +131,20 @@ void hReadSpiro()
|
||||
responseBuffer = String();
|
||||
}
|
||||
|
||||
bool hReadPresets()
|
||||
{
|
||||
// streamFile instead of rebuild json string
|
||||
String path = "/presets.json";
|
||||
String contentType = getContentType(path);
|
||||
if (SPIFFS.exists(path)) {
|
||||
File file = SPIFFS.open(path, "r");
|
||||
size_t sent = server.streamFile(file, contentType);
|
||||
file.close();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void hWriteSpiro()
|
||||
{
|
||||
String responseBuffer = String();
|
||||
@@ -130,34 +154,34 @@ void hWriteSpiro()
|
||||
if (server.hasArg("laser") ) {
|
||||
lmValues[0] = server.arg("laser").toInt();
|
||||
data["laser"] = (String)lmValues[0];
|
||||
String msg = "AT SLV ";
|
||||
msg += (String)lmValues[0];
|
||||
laserSerial.println(msg);
|
||||
delay(20);
|
||||
String msg = "AT SLV ";
|
||||
msg += (String)lmValues[0];
|
||||
laserSerial.println(msg);
|
||||
delay(20);
|
||||
}
|
||||
if (server.hasArg("motor1") ) {
|
||||
lmValues[1] = server.arg("motor1").toInt();
|
||||
data["motor1"] = (String)lmValues[1];
|
||||
String msg = "AT SMS 1 ";
|
||||
msg += (String)lmValues[1];
|
||||
laserSerial.println(msg);
|
||||
delay(20);
|
||||
String msg = "AT SMS 1 ";
|
||||
msg += (String)lmValues[1];
|
||||
laserSerial.println(msg);
|
||||
delay(20);
|
||||
}
|
||||
if (server.hasArg("motor2") ) {
|
||||
lmValues[2] = server.arg("motor2").toInt();
|
||||
data["motor2"] = (String)lmValues[2];
|
||||
String msg = "AT SMS 2 ";
|
||||
msg += (String)lmValues[2];
|
||||
laserSerial.println(msg);
|
||||
delay(20);
|
||||
String msg = "AT SMS 2 ";
|
||||
msg += (String)lmValues[2];
|
||||
laserSerial.println(msg);
|
||||
delay(20);
|
||||
}
|
||||
if (server.hasArg("motor3") ) {
|
||||
lmValues[3] = server.arg("motor3").toInt();
|
||||
data["motor3"] = (String)lmValues[3];
|
||||
String msg = "AT SMS 3 ";
|
||||
msg += (String)lmValues[3];
|
||||
laserSerial.println(msg);
|
||||
delay(20);
|
||||
String msg = "AT SMS 3 ";
|
||||
msg += (String)lmValues[3];
|
||||
laserSerial.println(msg);
|
||||
delay(20);
|
||||
}
|
||||
root.prettyPrintTo(responseBuffer);
|
||||
server.send(200, "text/json", responseBuffer);
|
||||
@@ -219,7 +243,7 @@ void hWriteWifi()
|
||||
//root.prettyPrintTo(Serial);
|
||||
server.send(200, "text/json", responseBuffer);
|
||||
if (save) {
|
||||
saveConfigFile();
|
||||
saveWifiConfig();
|
||||
}
|
||||
if (apply) {
|
||||
setupWifi();
|
||||
@@ -228,14 +252,66 @@ void hWriteWifi()
|
||||
responseBuffer = String();
|
||||
}
|
||||
|
||||
bool saveConfigFile() {
|
||||
StaticJsonBuffer<200> jsonBuffer;
|
||||
JsonObject& json = jsonBuffer.createObject();
|
||||
json["apMode"] = apMode;
|
||||
json["SSID"] = ssid;
|
||||
json["Password"] = password;
|
||||
boolean readPresetsFile() {
|
||||
Serial.println("Reading presets.json");
|
||||
File configFile = SPIFFS.open("/presets.json", "r");
|
||||
if (!configFile) {
|
||||
Serial.println("Failed to open config file");
|
||||
return false;
|
||||
}
|
||||
size_t size = configFile.size();
|
||||
if (size > 10024) {
|
||||
Serial.println("Config file size is too large");
|
||||
return false;
|
||||
}
|
||||
// Allocate a buffer to store contents of the file.
|
||||
std::unique_ptr<char[]> buf(new char[size]);
|
||||
|
||||
File configFile = SPIFFS.open("/wifi.json", "w");
|
||||
DynamicJsonBuffer presetsBuffer(presetsBufferSize);
|
||||
configFile.readBytes(buf.get(), size);
|
||||
|
||||
JsonObject& root = presetsBuffer.parseObject(buf.get());
|
||||
//root.prettyPrintTo(Serial);
|
||||
|
||||
JsonObject& sets = root["presets"];
|
||||
|
||||
for (JsonObject::iterator it = sets.begin(); it != sets.end(); ++it)
|
||||
{
|
||||
const char* keyStr = it->key;
|
||||
unsigned int key = atoi(it->key);
|
||||
|
||||
// it->value contains the JsonVariant which can be casted as usual
|
||||
const char* value = it->value;
|
||||
|
||||
JsonArray& values = sets[keyStr];
|
||||
for (int x = 0; x < 4; x++)
|
||||
{
|
||||
presets[key][x] = values[x];
|
||||
}
|
||||
}
|
||||
|
||||
if (!root.success()) {
|
||||
Serial.println("Failed to parse preset config file");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool savePresetFile() {
|
||||
DynamicJsonBuffer presetsBuffer(presetsBufferSize);
|
||||
JsonObject& json = presetsBuffer.createObject();
|
||||
JsonObject& sets = json.createNestedObject("presets");
|
||||
for (int i = 0; i < maxPresets; i++)
|
||||
{
|
||||
JsonArray& set = sets.createNestedArray((String)i);
|
||||
for (int x = 0; x < 4; x++)
|
||||
{
|
||||
set.add(presets[i][x]);
|
||||
}
|
||||
}
|
||||
//json.prettyPrintTo(Serial);
|
||||
|
||||
File configFile = SPIFFS.open("/presets.json", "w");
|
||||
if (!configFile) {
|
||||
//Serial.println("Failed to open config file for writing");
|
||||
return false;
|
||||
@@ -244,19 +320,7 @@ bool saveConfigFile() {
|
||||
return true;
|
||||
}
|
||||
|
||||
void hSaveConf() {
|
||||
bool success = saveConfigFile();
|
||||
if (success)
|
||||
{
|
||||
server.send(200, "text/plain", "saved config to file,<br> reset or /resetwifi to apply settings");
|
||||
}
|
||||
else
|
||||
{
|
||||
server.send(500, "text/plain", "error saving file");
|
||||
}
|
||||
}
|
||||
|
||||
boolean readConfigFile() {
|
||||
boolean readWifiConfig() {
|
||||
Serial.println("Reading wifi.json");
|
||||
File configFile = SPIFFS.open("/wifi.json", "r");
|
||||
if (!configFile) {
|
||||
@@ -294,6 +358,44 @@ boolean readConfigFile() {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool saveWifiConfig() {
|
||||
StaticJsonBuffer<200> jsonBuffer;
|
||||
JsonObject& json = jsonBuffer.createObject();
|
||||
json["apMode"] = apMode;
|
||||
json["SSID"] = ssid;
|
||||
json["Password"] = password;
|
||||
|
||||
File configFile = SPIFFS.open("/wifi.json", "w");
|
||||
if (!configFile) {
|
||||
//Serial.println("Failed to open config file for writing");
|
||||
return false;
|
||||
}
|
||||
json.printTo(configFile);
|
||||
return true;
|
||||
}
|
||||
|
||||
void presetToLaser(int nr)
|
||||
{
|
||||
String msg = "AT SLV ";
|
||||
msg += (String)presets[nr][0];
|
||||
laserSerial.println(msg);
|
||||
delay(20);
|
||||
msg = "AT SMS 1 ";
|
||||
msg += (String)presets[nr][1];
|
||||
laserSerial.println(msg);
|
||||
delay(20);
|
||||
msg = "AT SMS 2 ";
|
||||
msg += (String)presets[nr][2];
|
||||
laserSerial.println(msg);
|
||||
delay(20);
|
||||
msg = "AT SMS 3 ";
|
||||
msg += (String)presets[nr][3];
|
||||
laserSerial.println(msg);
|
||||
delay(20);
|
||||
Serial.print("writenPresetToLaser: ");
|
||||
Serial.println(nr);
|
||||
}
|
||||
|
||||
void setupWifi()
|
||||
{
|
||||
WiFi.disconnect();
|
||||
@@ -362,15 +464,18 @@ void setup(void) {
|
||||
|
||||
|
||||
|
||||
if (!readConfigFile())
|
||||
if (!readWifiConfig())
|
||||
{
|
||||
Serial.println("reading wifi config failed, start SoftAP");
|
||||
_apMode = 1;
|
||||
}
|
||||
delay(100);
|
||||
|
||||
|
||||
setupWifi();
|
||||
|
||||
|
||||
// loading presets
|
||||
readPresetsFile();
|
||||
|
||||
// Setup MDNS responder
|
||||
if (!MDNS.begin(myHostname)) {
|
||||
Serial.println("Error setting up MDNS responder!");
|
||||
@@ -383,19 +488,10 @@ void setup(void) {
|
||||
|
||||
//SERVER INIT
|
||||
//list directory
|
||||
server.on("/files", HTTP_GET, hFileList);
|
||||
server.on("/files", HTTP_GET, hFileList);
|
||||
server.on("/files", HTTP_POST, []() {
|
||||
server.send(400, "text/plain", "400 Bad Request");
|
||||
});
|
||||
server.on("/saveconf", HTTP_GET, []() {
|
||||
server.send(400, "text/plain", "400 Bad Request");
|
||||
});
|
||||
server.on("/saveconf", HTTP_POST, hSaveConf);
|
||||
|
||||
server.on("/resetwifi", HTTP_GET, []() {
|
||||
server.send(400, "text/plain", "400 Bad Request");
|
||||
});
|
||||
server.on("/resetwifi", HTTP_POST, setupWifi);
|
||||
|
||||
server.on("/wificonfig", HTTP_GET, hReadWifi);
|
||||
server.on("/wificonfig", HTTP_POST, hWriteWifi);
|
||||
@@ -403,20 +499,47 @@ void setup(void) {
|
||||
|
||||
server.on("/spirograph", HTTP_GET, hReadSpiro);
|
||||
server.on("/spirograph", HTTP_POST, hWriteSpiro);
|
||||
|
||||
|
||||
server.on("/presets", HTTP_GET, hReadPresets);
|
||||
server.on("/presets", HTTP_POST, []() {
|
||||
server.send(400, "text/plain", "400 Bad Request");
|
||||
});
|
||||
|
||||
|
||||
server.on("/presetMode", HTTP_GET, []() {
|
||||
String json = "{";
|
||||
json += "\"presetMode\":" + String(presetMode);
|
||||
json += "}";
|
||||
server.send(200, "text/json", json);
|
||||
json = String();
|
||||
});
|
||||
server.on("/presetMode", HTTP_POST, []() {
|
||||
if (server.hasArg("presetMode") ) {
|
||||
presetMode = server.arg("presetMode").toInt();
|
||||
}
|
||||
String json = "{";
|
||||
json += "\"presetMode\":" + String(presetMode);
|
||||
json += "}";
|
||||
server.send(200, "text/json", json);
|
||||
json = String();
|
||||
});
|
||||
|
||||
server.on("/heap", HTTP_GET, []() {
|
||||
String json = "{";
|
||||
json += "\"heap\":" + String(ESP.getFreeHeap());
|
||||
json += "}";
|
||||
server.send(200, "text/json", json);
|
||||
json = String();
|
||||
});
|
||||
});
|
||||
server.on("/heap", HTTP_POST, []() {
|
||||
server.send(400, "text/plain", "400 Bad Request");
|
||||
});
|
||||
server.onNotFound(handleNotFound);
|
||||
server.begin();
|
||||
Serial.println("HTTP server started");
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
void handleNotFound() {
|
||||
@@ -437,5 +560,23 @@ void handleNotFound() {
|
||||
|
||||
void loop(void) {
|
||||
server.handleClient();
|
||||
|
||||
if (presetMode == 1)
|
||||
{
|
||||
if (millis() - previousMillis >= cycleTime)
|
||||
{
|
||||
presetToLaser(activePreset + 1);
|
||||
if (activePreset < 128)
|
||||
{
|
||||
activePreset++;
|
||||
}
|
||||
else
|
||||
{
|
||||
activePreset = 0;
|
||||
}
|
||||
previousMillis = millis();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user