fixed connection added state

This commit is contained in:
Ryan Bakkes 2021-04-15 01:54:39 +02:00
parent b03422e292
commit 416b75c424
4 changed files with 182 additions and 3 deletions

View File

@ -8,7 +8,12 @@
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:wemos_d1_mini32]
platform = espressif32
board = wemos_d1_mini32
[env:d1_mini_pro]
platform = espressif8266
board = d1_mini_pro
framework = arduino
monitor_speed = 115200
lib_deps =
https://git.aterve.com/Frozenverse/SimpleSerialProtocol.git
https://github.com/bblanchon/ArduinoJson.git

View File

@ -0,0 +1,123 @@
#pragma once
#include <Arduino.h>
#include <ArduinoJson.h>
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <SimpleSerialProtocol.h>
#include <StateData.h>
namespace Connection {
const char* ssid = "Dragonvale";
const char* password = "Dr4g0nSl4yr";
const int jsonBufferSize = 1024;
// Serial Device
SimpleSerialProtocol controller;
// Wifi WebServer
ESP8266WebServer server(80);
// Serial
void initSerial();
void handleSerial();
void onControllerPacket(Packet packet);
// Wifi
void initWifi();
void handleWifi();
void sendResponse(DynamicJsonDocument response);
void onApiStatusRoute();
void getCurrentStateRoute();
}
// serial
void Connection::initSerial(){
controller.init(0, 115200);
controller.sendPacket("controller", "serial_status", "ready");
}
void Connection::handleSerial(){
controller.receivePackets(onControllerPacket);
}
void Connection::onControllerPacket(Packet packet) {
if(strcmp(packet.id, "access") == 0) {
if (strcmp(packet.command, "update_state") == 0) {
StateData::updateState(packet.data);
}
}
}
// wifi
void Connection::initWifi(){
controller.sendPacket("controller", "wifi_status", "init_connecting");
// Set wifi config
WiFi.hostname("KrabbyHome");
WiFi.begin(ssid, password);
// check connection status
while (WiFi.status() != WL_CONNECTED) {
controller.sendPacket("controller", "wifi_status", "connecting");
delay(500);
}
// send status
controller.sendPacket("controller", "wifi_status", "connected");
// Send details
char ipAdress[50];
WiFi.localIP().toString().toCharArray(ipAdress,50);
controller.sendPacket("controller", "wifi_details", ipAdress);
server.on("/api/status", Connection::onApiStatusRoute);
server.on("/api/currentstate", Connection::getCurrentStateRoute);
server.begin();
}
void Connection::handleWifi() {
server.handleClient();
}
void Connection::sendResponse(DynamicJsonDocument response) {
// Prepare data to return
char serializedJson[jsonBufferSize];
serializeJson(response, serializedJson);
// Send response
server.send(200, "application/json", serializedJson);
}
void Connection::onApiStatusRoute() {
// Init Json Document
DynamicJsonDocument response(jsonBufferSize);
// Insert data
response["status"] = "success";
response["health"] = "healthy";
response["uptime"] = millis();
// Send response
sendResponse(response);
}
void Connection::getCurrentStateRoute() {
// Init Json Document
DynamicJsonDocument response(jsonBufferSize);
// Insert data
response["status"] = "success";
response["state"] = StateData::state;
// Send response
sendResponse(response);
}

View File

@ -0,0 +1,44 @@
#pragma once
#include <Arduino.h>
namespace StateData{
DynamicJsonDocument state(1024);
void updateState(char* data);
}
void StateData::updateState(char* data) {
char* strtokIndex;
char stateValueType[64];
char stateKey[64];
char stateValue[64];
// Get state value type
strtokIndex = strtok(data, ";");
strcpy(stateValueType, strtokIndex);
// Get state key
strtokIndex = strtok(NULL, ";");
strcpy(stateKey, strtokIndex);
// Get state value type
strtokIndex = strtok(NULL, ";");
strcpy(stateValue, strtokIndex);
if (strcmp(stateValueType, "float") == 0) {
state[stateKey] = atof(stateValue);
}
else if (strcmp(stateValueType, "bool") == 0) {
if (strcmp(stateValue, "true") == 0) {
state[stateKey] = true;
}
else if (strcmp(stateValue, "false") == 0) {
state[stateKey] = false;
}
}
else if (strcmp(stateValueType, "string") == 0) {
state[stateKey] = stateValue;
}
}

View File

@ -1,9 +1,16 @@
#include <Arduino.h>
#include <Connection.h>
#include <StateData.h>
void setup() {
// put your setup code here, to run once:
delay(5000);
Connection::initSerial();
Connection::initWifi();
}
void loop() {
// put your main code here, to run repeatedly:
Connection::handleSerial();
Connection::handleWifi();
}