Base Software System
This commit is contained in:
27
Software/ChainLube/src/common.h
Normal file
27
Software/ChainLube/src/common.h
Normal file
@@ -0,0 +1,27 @@
|
||||
#ifndef _COMMON_H_
|
||||
#define _COMMON_H_
|
||||
|
||||
#define GPIO_BUTTON 14
|
||||
#define GPIO_LED D6
|
||||
#define GPIO_TRIGGER 2
|
||||
#define GPIO_PUMP 0
|
||||
|
||||
#ifndef HOST_NAME
|
||||
#define HOST_NAME "ChainLube_%06X" // Use printf-Formatting - Chip-ID (uin32_t) will be added
|
||||
#endif
|
||||
|
||||
#ifndef OTA_DELAY
|
||||
#define OTA_DELAY 50 // ticks -> 10ms / tick
|
||||
#endif
|
||||
|
||||
#ifndef ADMIN_PASS
|
||||
#error "You need to define ADMIN_PASS for OTA-Update"
|
||||
#endif
|
||||
#ifndef WIFI_PASSWORD
|
||||
#error "You must define an WIFI_PASSWORD for OTA-Update"
|
||||
#endif
|
||||
#ifndef WIFI_SSID
|
||||
#error "You must define an WIFI_SSID for OTA-Update"
|
||||
#endif
|
||||
|
||||
#endif
|
164
Software/ChainLube/src/main.cpp
Normal file
164
Software/ChainLube/src/main.cpp
Normal file
@@ -0,0 +1,164 @@
|
||||
#include <Arduino.h>
|
||||
#include <Wire.h>
|
||||
#include <U8g2lib.h>
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <ESP8266WiFiMulti.h>
|
||||
#include <ESP8266mDNS.h>
|
||||
#include <ArduinoOTA.h>
|
||||
#include <RemoteDebug.h>
|
||||
#include <FastLED.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "rmtdbghelp.h"
|
||||
|
||||
const char *ssid = WIFI_SSID;
|
||||
const char *password = WIFI_PASSWORD;
|
||||
|
||||
#ifdef DEBUG
|
||||
const bool debug_flag = true;
|
||||
#else
|
||||
const bool debug_flag = false;
|
||||
#endif
|
||||
|
||||
bool startSetupMode = false;
|
||||
char DeviceName[33];
|
||||
|
||||
U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(-1);
|
||||
RemoteDebug Debug;
|
||||
ESP8266WiFiMulti wifiMulti;
|
||||
|
||||
// Function-Prototypes
|
||||
String IpAddress2String(const IPAddress &ipAddress);
|
||||
void processCmdRemoteDebug();
|
||||
void RemotDebug_printSystemInfo();
|
||||
void RemoteDebug_printWifiInfo();
|
||||
|
||||
CRGB leds[1];
|
||||
|
||||
void setup()
|
||||
{
|
||||
system_update_cpu_freq(SYS_CPU_80MHZ);
|
||||
snprintf(DeviceName, 32, HOST_NAME, ESP.getChipId());
|
||||
WiFi.mode(WIFI_OFF);
|
||||
WiFi.persistent(false);
|
||||
Serial.begin(115200);
|
||||
Serial.setDebugOutput(true);
|
||||
|
||||
Serial.println("Souko's ChainOiler Mk1");
|
||||
Serial.println(DeviceName);
|
||||
|
||||
u8x8.begin();
|
||||
u8x8.setFont(u8x8_font_chroma48medium8_r);
|
||||
|
||||
pinMode(GPIO_TRIGGER, INPUT_PULLUP);
|
||||
pinMode(GPIO_BUTTON, INPUT_PULLUP);
|
||||
pinMode(GPIO_PUMP, OUTPUT);
|
||||
|
||||
WiFi.mode(WIFI_STA);
|
||||
WiFi.setHostname(DeviceName);
|
||||
wifiMulti.addAP(WIFI_SSID, WIFI_PASSWORD);
|
||||
|
||||
Serial.println("Connecting Wifi...");
|
||||
if (wifiMulti.run() == WL_CONNECTED)
|
||||
{
|
||||
Serial.println("");
|
||||
Serial.println("WiFi connected");
|
||||
Serial.println("IP address: ");
|
||||
Serial.print(WiFi.localIP());
|
||||
}
|
||||
|
||||
if (MDNS.begin(DeviceName))
|
||||
MDNS.addService("telnet", "tcp", 23);
|
||||
|
||||
Debug.begin(DeviceName); // Initialize the WiFi server
|
||||
Debug.setResetCmdEnabled(true); // Enable the reset command
|
||||
Debug.showProfiler(true); // Profiler (Good to measure times, to optimize codes)
|
||||
Debug.showColors(true); // Colors
|
||||
|
||||
Debug.setHelpProjectsCmds(helpCmd);
|
||||
Debug.setCallBackProjectCmds(&processCmdRemoteDebug);
|
||||
|
||||
ArduinoOTA.setPort(8266);
|
||||
ArduinoOTA.setHostname(DeviceName);
|
||||
ArduinoOTA.setPassword(ADMIN_PASS);
|
||||
|
||||
ArduinoOTA.onStart([]()
|
||||
{
|
||||
u8x8.clearDisplay();
|
||||
u8x8.drawString(0, 0, "OTA-Update");
|
||||
u8x8.refreshDisplay(); });
|
||||
|
||||
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total)
|
||||
{
|
||||
static bool refreshed = false;
|
||||
if (!refreshed)
|
||||
{
|
||||
u8x8.clearDisplay();
|
||||
refreshed = true;
|
||||
u8x8.drawString(0, 0, "OTA Upload");
|
||||
}
|
||||
uint32_t percent = progress / (total / 100);
|
||||
u8x8.setCursor(0, 1);
|
||||
u8x8.printf("%d %%", percent);
|
||||
u8x8.refreshDisplay(); });
|
||||
|
||||
ArduinoOTA.onEnd([]()
|
||||
{
|
||||
u8x8.clearDisplay();
|
||||
u8x8.drawString(0, 0, "OTA-Restart");
|
||||
u8x8.refreshDisplay(); });
|
||||
|
||||
ArduinoOTA.begin();
|
||||
|
||||
u8x8.clearDisplay();
|
||||
u8x8.drawString(4, 4, "Souko's");
|
||||
u8x8.drawString(1, 5, "ChainLube Mk1");
|
||||
u8x8.refreshDisplay();
|
||||
|
||||
FastLED.addLeds<WS2811, GPIO_LED, GRB>(leds, 1); // GRB ordering is assumed
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
leds[0] = digitalRead(GPIO_BUTTON) ? CRGB::Green : CRGB::Red;
|
||||
|
||||
FastLED.show();
|
||||
ArduinoOTA.handle();
|
||||
Debug.handle();
|
||||
yield();
|
||||
}
|
||||
|
||||
String IpAddress2String(const IPAddress &ipAddress)
|
||||
{
|
||||
return String(ipAddress[0]) + String(".") +
|
||||
String(ipAddress[1]) + String(".") +
|
||||
String(ipAddress[2]) + String(".") +
|
||||
String(ipAddress[3]);
|
||||
}
|
||||
|
||||
void processCmdRemoteDebug()
|
||||
{
|
||||
String lastCmd = Debug.getLastCommand();
|
||||
|
||||
if (lastCmd == "sysinfo")
|
||||
RemotDebug_printSystemInfo();
|
||||
else if (lastCmd == "netinfo")
|
||||
RemoteDebug_printWifiInfo();
|
||||
}
|
||||
|
||||
void RemotDebug_printSystemInfo()
|
||||
{
|
||||
debugA("Souko's ChainOiler Mk1");
|
||||
debugA("Hostname: %s", DeviceName);
|
||||
|
||||
debugA("Sdk version: %s", ESP.getSdkVersion());
|
||||
debugA("Core Version: %s", ESP.getCoreVersion().c_str());
|
||||
debugA("Boot Version: %u", ESP.getBootVersion());
|
||||
debugA("Boot Mode: %u", ESP.getBootMode());
|
||||
debugA("CPU Frequency: %u MHz", ESP.getCpuFreqMHz());
|
||||
debugA("Reset reason: %s", ESP.getResetReason().c_str());
|
||||
}
|
||||
|
||||
void RemoteDebug_printWifiInfo()
|
||||
{
|
||||
}
|
2
Software/ChainLube/src/rmtdbghelp.h
Normal file
2
Software/ChainLube/src/rmtdbghelp.h
Normal file
@@ -0,0 +1,2 @@
|
||||
const char helpCmd[] = "sysinfo - System Info\r\n"
|
||||
"netinfo - WiFi Info\r\n";
|
172
Software/ChainLube/src/webui.cpp
Normal file
172
Software/ChainLube/src/webui.cpp
Normal file
@@ -0,0 +1,172 @@
|
||||
#include <Arduino.h>
|
||||
#include <ESPUI.h>
|
||||
|
||||
uint16_t button1;
|
||||
uint16_t switchOne;
|
||||
uint16_t status;
|
||||
|
||||
void initWebUI();
|
||||
|
||||
void numberCall( Control* sender, int type ) {
|
||||
Serial.println( sender->value );
|
||||
}
|
||||
|
||||
void textCall( Control* sender, int type ) {
|
||||
Serial.print("Text: ID: ");
|
||||
Serial.print(sender->id);
|
||||
Serial.print(", Value: ");
|
||||
Serial.println( sender->value );}
|
||||
|
||||
void slider( Control* sender, int type ) {
|
||||
Serial.print("Slider: ID: ");
|
||||
Serial.print(sender->id);
|
||||
Serial.print(", Value: ");
|
||||
Serial.println( sender->value );}
|
||||
|
||||
void buttonCallback( Control* sender, int type ) {
|
||||
switch ( type ) {
|
||||
case B_DOWN:
|
||||
Serial.println( "Button DOWN" );
|
||||
break;
|
||||
|
||||
case B_UP:
|
||||
Serial.println( "Button UP" );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void buttonExample( Control* sender, int type ) {
|
||||
switch ( type ) {
|
||||
case B_DOWN:
|
||||
Serial.println( "Status: Start" );
|
||||
ESPUI.updateControlValue( status, "Start" );
|
||||
|
||||
ESPUI.getControl( button1 )->color = ControlColor::Carrot;
|
||||
ESPUI.updateControl( button1 );
|
||||
break;
|
||||
|
||||
case B_UP:
|
||||
Serial.println( "Status: Stop" );
|
||||
ESPUI.updateControlValue( status, "Stop" );
|
||||
|
||||
ESPUI.getControl( button1 )->color = ControlColor::Peterriver;
|
||||
ESPUI.updateControl( button1 );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void padExample( Control* sender, int value ) {
|
||||
switch ( value ) {
|
||||
case P_LEFT_DOWN:
|
||||
Serial.print( "left down" );
|
||||
break;
|
||||
|
||||
case P_LEFT_UP:
|
||||
Serial.print( "left up" );
|
||||
break;
|
||||
|
||||
case P_RIGHT_DOWN:
|
||||
Serial.print( "right down" );
|
||||
break;
|
||||
|
||||
case P_RIGHT_UP:
|
||||
Serial.print( "right up" );
|
||||
break;
|
||||
|
||||
case P_FOR_DOWN:
|
||||
Serial.print( "for down" );
|
||||
break;
|
||||
|
||||
case P_FOR_UP:
|
||||
Serial.print( "for up" );
|
||||
break;
|
||||
|
||||
case P_BACK_DOWN:
|
||||
Serial.print( "back down" );
|
||||
break;
|
||||
|
||||
case P_BACK_UP:
|
||||
Serial.print( "back up" );
|
||||
break;
|
||||
|
||||
case P_CENTER_DOWN:
|
||||
Serial.print( "center down" );
|
||||
break;
|
||||
|
||||
case P_CENTER_UP:
|
||||
Serial.print( "center up" );
|
||||
break;
|
||||
}
|
||||
|
||||
Serial.print( " " );
|
||||
Serial.println( sender->id );
|
||||
}
|
||||
|
||||
void switchExample( Control* sender, int value ) {
|
||||
switch ( value ) {
|
||||
case S_ACTIVE:
|
||||
Serial.print( "Active:" );
|
||||
break;
|
||||
|
||||
case S_INACTIVE:
|
||||
Serial.print( "Inactive" );
|
||||
break;
|
||||
}
|
||||
|
||||
Serial.print( " " );
|
||||
Serial.println( sender->id );
|
||||
}
|
||||
|
||||
void selectExample( Control* sender, int value ) {
|
||||
Serial.print("Select: ID: ");
|
||||
Serial.print(sender->id);
|
||||
Serial.print(", Value: ");
|
||||
Serial.println( sender->value );
|
||||
}
|
||||
|
||||
void otherSwitchExample( Control* sender, int value ) {
|
||||
switch ( value ) {
|
||||
case S_ACTIVE:
|
||||
Serial.print( "Active:" );
|
||||
break;
|
||||
|
||||
case S_INACTIVE:
|
||||
Serial.print( "Inactive" );
|
||||
break;
|
||||
}
|
||||
|
||||
Serial.print( " " );
|
||||
Serial.println( sender->id );
|
||||
}
|
||||
|
||||
void initWebUI (void){
|
||||
|
||||
uint16_t tab1 = ESPUI.addControl( ControlType::Tab, "Settings 1", "Settings 1" );
|
||||
uint16_t tab2 = ESPUI.addControl( ControlType::Tab, "Settings 2", "Settings 2" );
|
||||
uint16_t tab3 = ESPUI.addControl( ControlType::Tab, "Settings 3", "Settings 3" );
|
||||
|
||||
// shown above all tabs
|
||||
status = ESPUI.addControl( ControlType::Label, "Status:", "Stop", ControlColor::Turquoise );
|
||||
|
||||
uint16_t select1 = ESPUI.addControl( ControlType::Select, "Select:", "", ControlColor::Alizarin, tab1, &selectExample );
|
||||
ESPUI.addControl( ControlType::Option, "Option1", "Opt1", ControlColor::Alizarin, select1 );
|
||||
ESPUI.addControl( ControlType::Option, "Option2", "Opt2", ControlColor::Alizarin, select1 );
|
||||
ESPUI.addControl( ControlType::Option, "Option3", "Opt3", ControlColor::Alizarin, select1 );
|
||||
|
||||
ESPUI.addControl( ControlType::Text, "Text Test:", "a Text Field", ControlColor::Alizarin, tab1, &textCall );
|
||||
|
||||
// tabbed controls
|
||||
ESPUI.addControl( ControlType::Label, "Millis:", "0", ControlColor::Emerald, tab1 );
|
||||
button1 = ESPUI.addControl( ControlType::Button, "Push Button", "Press", ControlColor::Peterriver, tab1, &buttonCallback );
|
||||
ESPUI.addControl( ControlType::Button, "Other Button", "Press", ControlColor::Wetasphalt, tab1, &buttonExample );
|
||||
ESPUI.addControl( ControlType::PadWithCenter, "Pad with center", "", ControlColor::Sunflower, tab2, &padExample );
|
||||
ESPUI.addControl( ControlType::Pad, "Pad without center", "", ControlColor::Carrot, tab3, &padExample );
|
||||
switchOne = ESPUI.addControl( ControlType::Switcher, "Switch one", "", ControlColor::Alizarin, tab3, &switchExample );
|
||||
ESPUI.addControl( ControlType::Switcher, "Switch two", "", ControlColor::None, tab3, &otherSwitchExample );
|
||||
ESPUI.addControl( ControlType::Slider, "Slider one", "30", ControlColor::Alizarin, tab1, &slider );
|
||||
ESPUI.addControl( ControlType::Slider, "Slider two", "100", ControlColor::Alizarin, tab3, &slider );
|
||||
ESPUI.addControl( ControlType::Number, "Number:", "50", ControlColor::Alizarin, tab3, &numberCall );
|
||||
|
||||
ESPUI.begin("ESPUI Control");
|
||||
}
|
||||
|
Reference in New Issue
Block a user