first upload
This commit is contained in:
commit
b9f58ca614
41
buttons.h
Normal file
41
buttons.h
Normal file
@ -0,0 +1,41 @@
|
||||
//===============================================
|
||||
// Buttons Library
|
||||
//===============================================
|
||||
|
||||
// Library
|
||||
#include "Button.h"
|
||||
|
||||
// Making The Buttons
|
||||
Button btnRedOne(_btn_red_one);
|
||||
Button btnRedTwo(_btn_red_two);
|
||||
Button btnBlueOne(_btn_blue_one);
|
||||
Button btnBlueTwo(_btn_blue_two);
|
||||
|
||||
//-----------------------------------------------
|
||||
// Functions
|
||||
//-----------------------------------------------
|
||||
|
||||
void btn_start() {
|
||||
#ifdef ENA_BTN
|
||||
btnRedOne.begin();
|
||||
btnRedTwo.begin();
|
||||
btnBlueOne.begin();
|
||||
btnBlueTwo.begin();
|
||||
#endif
|
||||
}
|
||||
|
||||
void btn_test() {
|
||||
#ifdef ENA_BTN
|
||||
while(1) {
|
||||
if(btnRedOne.pressed()) { Serial.println(" -> Red 1 Point"); }
|
||||
if(btnRedTwo.pressed()) { Serial.println(" -> Red 2 Point"); }
|
||||
if(btnBlueOne.pressed()) { Serial.println(" -> Blue 1 Point"); }
|
||||
if(btnBlueTwo.pressed()) { Serial.println(" -> Blue 2 Point"); }
|
||||
ESP.wdtFeed();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
//===============================================
|
||||
// END
|
||||
//===============================================
|
||||
13
definitions.h
Normal file
13
definitions.h
Normal file
@ -0,0 +1,13 @@
|
||||
|
||||
// Enable Functions
|
||||
// #define ENA_DSP // Display
|
||||
#define ENA_TRM // Terminal
|
||||
#define ENA_BTN // Button
|
||||
|
||||
// Pins Definitions
|
||||
#define _led_pin 5 // On Board LED Pin
|
||||
#define _btn_red_one 0 // Judge Button Red 1 Point
|
||||
#define _btn_red_two 1 // Judge Button Red 2 Point
|
||||
#define _btn_blue_one 2 // Judge Button Blue 1 Point
|
||||
#define _btn_blue_two 3 // Judge Button Blue 2 Point
|
||||
#define _motor_pin 4 // Motor Vibrator
|
||||
118
esp32c3-joystick.ino
Normal file
118
esp32c3-joystick.ino
Normal file
@ -0,0 +1,118 @@
|
||||
//=========================================================
|
||||
// Header
|
||||
//=========================================================
|
||||
|
||||
// Include Libraries And Headers
|
||||
#include "WiFi.h"
|
||||
#include "definitions.h"
|
||||
#include "buttons.h"
|
||||
#include "oled.h"
|
||||
#include "wireless.h"
|
||||
#include "time.h"
|
||||
|
||||
//=========================================================
|
||||
// Initialization
|
||||
//=========================================================
|
||||
|
||||
void setup() {
|
||||
|
||||
// Serial Data
|
||||
Serial.begin(115200);
|
||||
Serial.println();
|
||||
|
||||
btn_start(); // Start Button Function
|
||||
oled_start(); // Starting OLED
|
||||
oled_clear(); // Clear OLED Display
|
||||
|
||||
// btn_test(); // This Is For Test
|
||||
// SPIFFS.format();
|
||||
|
||||
// Wait For Reset
|
||||
wifi_wait_for_reset();
|
||||
|
||||
// Activate Buzzer Pin
|
||||
pinMode(_motor_pin, OUTPUT);
|
||||
|
||||
buzz();
|
||||
|
||||
oled_logo(); // Display LOGO
|
||||
|
||||
// Print Seperator
|
||||
Serial.println(MSG_SPACER);
|
||||
|
||||
LED_START; // Starting LED
|
||||
LED_OFF; // Turn Off
|
||||
wifi_start(); // WiFi Start
|
||||
LED_ON; // WiFi Connected
|
||||
|
||||
// Print Seperator
|
||||
Serial.println(MSG_SPACER);
|
||||
|
||||
// ESP Chip ID
|
||||
uint32_t chipId = ESP.getChipId();
|
||||
Serial.print("ESP Chip ID : "); Serial.println(chipId);
|
||||
|
||||
// ESP Device Address
|
||||
Serial.print("ESP IP Address : "); Serial.println(WiFi.localIP());
|
||||
|
||||
// ESP MAC Address
|
||||
String macAddress = WiFi.macAddress();
|
||||
Serial.print("ESP MC Address : "); Serial.println(macAddress);
|
||||
Serial.println(MSG_SPACER);
|
||||
|
||||
// NTP Function
|
||||
ntp_begin();
|
||||
ntp_update();
|
||||
syncedMillisOffset = timeClient.getEpochTime() * 1000 - startMillis;
|
||||
|
||||
// Connected Server
|
||||
oled_clear();
|
||||
oled_text(1, 0, 0, "Connect To Server");
|
||||
|
||||
// Connect To Server
|
||||
server_connect();
|
||||
|
||||
// Display Connected
|
||||
oled_text(1, 0, 10, "Connection Success");
|
||||
|
||||
// Wait On Sec
|
||||
delay(1000);
|
||||
|
||||
// Print Seperator
|
||||
Serial.println(MSG_SPACER);
|
||||
|
||||
// New Timming
|
||||
timing = millis();
|
||||
|
||||
}
|
||||
|
||||
//=========================================================
|
||||
// Running Loop
|
||||
//=========================================================
|
||||
|
||||
void loop() {
|
||||
|
||||
// Maintain Server Connection
|
||||
server_connect();
|
||||
|
||||
// Update Time
|
||||
ntp_update();
|
||||
// ntp_sync_millis();
|
||||
|
||||
// Read Buttons With Actions
|
||||
read_buttons();
|
||||
|
||||
// Send VIA Serial
|
||||
send_via_serial();
|
||||
|
||||
// Read TCP Data
|
||||
read_tcp();
|
||||
|
||||
// Send Keep Alive
|
||||
send_keep_alive();
|
||||
|
||||
}
|
||||
|
||||
//=========================================================
|
||||
// END
|
||||
//=========================================================
|
||||
262
functions.ino
Normal file
262
functions.ino
Normal file
@ -0,0 +1,262 @@
|
||||
//=========================================================
|
||||
// Serial
|
||||
//=========================================================
|
||||
// Question
|
||||
//---------------------------------------------------------
|
||||
|
||||
String serial_question(String msg) {
|
||||
Serial.print(msg + " : ");
|
||||
while(!Serial.available());
|
||||
msg = Serial.readStringUntil('\n');
|
||||
while(Serial.available()) { Serial.read(); }
|
||||
msg.trim();
|
||||
Serial.println(msg);
|
||||
return msg;
|
||||
}
|
||||
|
||||
//=========================================================
|
||||
// Server
|
||||
//=========================================================
|
||||
// Connect To Server
|
||||
//---------------------------------------------------------
|
||||
|
||||
void server_connect() {
|
||||
|
||||
// If Connected Just Skip
|
||||
if(tcpClient.connected()) { return; }
|
||||
|
||||
// Try To Connect To Server
|
||||
while(!tcpClient.connect(scoreboard_server, atoi(scoreboard_port))) {
|
||||
LED_TOGGLE;
|
||||
delay(200);
|
||||
}
|
||||
|
||||
// Stay On
|
||||
LED_ON;
|
||||
|
||||
// Connection Established
|
||||
Serial.println(MSG_TCP_CONNECTED);
|
||||
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
// JSON Event Generator
|
||||
//---------------------------------------------------------
|
||||
|
||||
String json_button_message(String buttonName) {
|
||||
|
||||
// Empty Space
|
||||
JSON.clear();
|
||||
|
||||
// Device Name
|
||||
JSON["device"] = joypad_identifier;
|
||||
JSON["type"] = "score";
|
||||
// JSON["cid"] = ESP.getChipId();
|
||||
// JSON["mac"] = WiFi.macAddress();
|
||||
// JSON["ipa"] = WiFi.localIP().toString();
|
||||
// JSON["battery"] = analogRead(A0);
|
||||
// JSON["signal"] = WiFi.RSSI();
|
||||
JSON["button"] = buttonName;
|
||||
// JSON["time"] = millis();
|
||||
// JSON["time"] = ntp_print_time();
|
||||
|
||||
// String Data Buffer
|
||||
String ouput;
|
||||
|
||||
// Print To Serial
|
||||
serializeJson(JSON, ouput);
|
||||
|
||||
// Save Memory
|
||||
JSON.clear();
|
||||
|
||||
// Return The String
|
||||
return ouput;
|
||||
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
// JSON Telemetry Generator
|
||||
//---------------------------------------------------------
|
||||
|
||||
String json_telemetry_message() {
|
||||
|
||||
// Empty Space
|
||||
JSON.clear();
|
||||
|
||||
// Device Name
|
||||
JSON["device"] = joypad_identifier;
|
||||
JSON["type"] = "telemetry";
|
||||
JSON["signal"] = WiFi.RSSI();
|
||||
JSON["battery"] = analogRead(A0);
|
||||
JSON["mac"] = WiFi.macAddress();
|
||||
JSON["time"] = ntp_print_time();
|
||||
|
||||
// String Data Buffer
|
||||
String ouput;
|
||||
|
||||
// Print To Serial
|
||||
serializeJson(JSON, ouput);
|
||||
|
||||
// Save Memory
|
||||
JSON.clear();
|
||||
|
||||
// Return The String
|
||||
return ouput;
|
||||
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
// JSON Telemetry Generator
|
||||
//---------------------------------------------------------
|
||||
|
||||
void read_buttons() {
|
||||
|
||||
// TopLeft - Send Message
|
||||
if(btnRedOne.pressed()) {
|
||||
String x = json_button_message("RED1");
|
||||
Serial.println(x);
|
||||
tcpClient.print(x);
|
||||
delay(150);
|
||||
}
|
||||
|
||||
// BottomLeft - Send Message
|
||||
if(btnRedTwo.pressed()) {
|
||||
String x = json_button_message("RED2");
|
||||
Serial.println(x);
|
||||
tcpClient.print(x);
|
||||
delay(150);
|
||||
}
|
||||
|
||||
// TopRight - Send Message
|
||||
if(btnBlueOne.pressed()) {
|
||||
String x = json_button_message("BLU1");
|
||||
Serial.println(x);
|
||||
tcpClient.print(x);
|
||||
delay(150);
|
||||
}
|
||||
|
||||
// TopRight - Send Message
|
||||
if(btnBlueTwo.pressed()) {
|
||||
String x = json_button_message("BLU2");
|
||||
Serial.println(x);
|
||||
tcpClient.print(x);
|
||||
delay(150);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
// JSON Telemetry Generator
|
||||
//---------------------------------------------------------
|
||||
|
||||
void buzz() {
|
||||
digitalWrite(_motor_pin, HIGH);
|
||||
delay(250);
|
||||
digitalWrite(_motor_pin, LOW);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
// JSON Telemetry Generator
|
||||
//---------------------------------------------------------
|
||||
|
||||
void send_via_serial() {
|
||||
|
||||
// Sending TCP Data
|
||||
if(Serial.available()) {
|
||||
|
||||
String msg = Serial.readStringUntil('\n');
|
||||
while(Serial.available()) { Serial.read(); }
|
||||
msg.trim();
|
||||
|
||||
// Create JSON Object
|
||||
JSON["type"] = "cmd";
|
||||
JSON["header"] = "point";
|
||||
JSON["body"] = msg;
|
||||
|
||||
// Move The Message To String Variable
|
||||
serializeJson(JSON, msg);
|
||||
|
||||
// Sending Data Out
|
||||
Serial.println(MSG_TCP_SEND + String(" : ") + msg);
|
||||
tcpClient.print(msg);
|
||||
|
||||
// Empty Data
|
||||
JSON.clear();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
// JSON Telemetry Generator
|
||||
//---------------------------------------------------------
|
||||
|
||||
void read_tcp() {
|
||||
|
||||
// Received TCP Data
|
||||
if(tcpClient.available()) {
|
||||
|
||||
String x = tcpClient.readStringUntil('\n');
|
||||
while(tcpClient.available()) { tcpClient.read(); }
|
||||
|
||||
x.trim();
|
||||
Serial.print(" -> tcp signal in : ");
|
||||
Serial.println(x);
|
||||
|
||||
// Clear JSON
|
||||
JSON.clear();
|
||||
|
||||
// Deserialize the JSON document
|
||||
DeserializationError error = deserializeJson(JSON, x);
|
||||
|
||||
// Test if parsing succeeds
|
||||
if (error) {
|
||||
Serial.print(F("deserializeJson() failed: "));
|
||||
Serial.println(error.f_str());
|
||||
return;
|
||||
}
|
||||
|
||||
// Read Message Type
|
||||
String mType = JSON["type"];
|
||||
|
||||
// Read Command
|
||||
String command = JSON["command"];
|
||||
|
||||
// Read BuZZer
|
||||
if(command == "buzz") {
|
||||
buzz();
|
||||
}
|
||||
|
||||
// Clear JSON
|
||||
JSON.clear();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
// JSON Telemetry Generator
|
||||
//---------------------------------------------------------
|
||||
|
||||
void send_keep_alive() {
|
||||
|
||||
// Keep Sending To Avoid Disconnection
|
||||
if(millis() - timing >= 15000) {
|
||||
|
||||
// Buffer Data
|
||||
String x = json_telemetry_message();
|
||||
|
||||
// Send Out Data
|
||||
Serial.println(x);
|
||||
tcpClient.print(x);
|
||||
|
||||
// Update Time Snap Shot
|
||||
timing = millis();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//=========================================================
|
||||
// END
|
||||
//=========================================================
|
||||
147
oled.h
Normal file
147
oled.h
Normal file
@ -0,0 +1,147 @@
|
||||
//===============================================
|
||||
// OLED
|
||||
//===============================================
|
||||
|
||||
// OLED Library
|
||||
#include <SPI.h>
|
||||
#include <Wire.h>
|
||||
#include <Adafruit_GFX.h>
|
||||
#include <Adafruit_SSD1306.h>
|
||||
|
||||
// OLED Declarations
|
||||
#define SCREEN_WIDTH 128
|
||||
#define SCREEN_HEIGHT 64
|
||||
#define OLED_RESET -1
|
||||
#define SCREEN_ADDRESS 0x3C
|
||||
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
|
||||
|
||||
// For Reading Intervals
|
||||
unsigned long displayReadPrv, serialReadPrv;
|
||||
|
||||
#ifdef ENA_DSP
|
||||
|
||||
// TAKEONE LOGO
|
||||
static const unsigned char PROGMEM logo_bmp[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x07, 0xc0, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xce, 0xe0, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xfd, 0xe0, 0x00, 0x00, 0x00, 0x00,
|
||||
0xff, 0xf0, 0x3f, 0x00, 0x7c, 0x3f, 0x8f, 0xfc, 0x1f, 0xff, 0xfb, 0x60, 0x7c, 0x07, 0xc3, 0xff,
|
||||
0xff, 0xf0, 0x3f, 0x80, 0x7c, 0x7f, 0x8f, 0xfc, 0x1f, 0xff, 0xfe, 0x60, 0x7e, 0x07, 0xc3, 0xff,
|
||||
0xff, 0xf0, 0x7f, 0x80, 0x7c, 0xff, 0x0f, 0xfc, 0x1f, 0xff, 0xfc, 0xc0, 0x7f, 0x07, 0xc3, 0xff,
|
||||
0xff, 0xf0, 0x7f, 0xc0, 0x7c, 0xfe, 0x0f, 0xfc, 0x0f, 0xff, 0xf9, 0x80, 0x7f, 0x07, 0xc3, 0xff,
|
||||
0xff, 0xf0, 0x7f, 0xc0, 0x7d, 0xfc, 0x0f, 0x80, 0x07, 0xff, 0xfb, 0x00, 0x7f, 0x87, 0xc3, 0xe0,
|
||||
0x1f, 0x80, 0xff, 0xc0, 0x7f, 0xf8, 0x0f, 0x80, 0x07, 0xff, 0xf2, 0x00, 0x7f, 0xc7, 0xc3, 0xe0,
|
||||
0x1f, 0x80, 0xff, 0xe0, 0x7f, 0xf0, 0x0f, 0xfc, 0x07, 0xff, 0xf4, 0x00, 0x7f, 0xe7, 0xc3, 0xff,
|
||||
0x1f, 0x80, 0xfb, 0xe0, 0x7f, 0xe0, 0x0f, 0xfc, 0x07, 0xff, 0xf4, 0x00, 0x7f, 0xe7, 0xc3, 0xff,
|
||||
0x1f, 0x81, 0xfb, 0xe0, 0x7f, 0xc0, 0x0f, 0xfc, 0x3f, 0xff, 0xf4, 0x00, 0x7d, 0xf7, 0xc3, 0xff,
|
||||
0x1f, 0x81, 0xf1, 0xf0, 0x7f, 0xe0, 0x0f, 0xfc, 0x3f, 0xff, 0xf6, 0x00, 0x7c, 0xff, 0xc3, 0xff,
|
||||
0x1f, 0x83, 0xf1, 0xf0, 0x7f, 0xf0, 0x0f, 0xfc, 0x3f, 0xff, 0xf2, 0x00, 0x7c, 0x7f, 0xc3, 0xe0,
|
||||
0x1f, 0x83, 0xe0, 0xf8, 0x7f, 0xf8, 0x0f, 0x80, 0x3f, 0xff, 0xb9, 0x00, 0x7c, 0x7f, 0xc3, 0xe0,
|
||||
0x1f, 0x83, 0xff, 0xf8, 0x7d, 0xfc, 0x0f, 0x80, 0x3f, 0xff, 0x1c, 0x80, 0x7c, 0x3f, 0xc3, 0xe0,
|
||||
0x1f, 0x87, 0xff, 0xf8, 0x7c, 0xfe, 0x0f, 0xfc, 0x3f, 0xfe, 0x7e, 0x40, 0x7c, 0x1f, 0xc3, 0xff,
|
||||
0x1f, 0x87, 0xff, 0xfc, 0x7c, 0x7f, 0x0f, 0xfc, 0x1f, 0xfe, 0xf7, 0xe0, 0x7c, 0x0f, 0xc3, 0xff,
|
||||
0x1f, 0x8f, 0xc0, 0xfe, 0x7c, 0x3f, 0x8f, 0xfc, 0x1f, 0xff, 0xe7, 0xf0, 0x7c, 0x0f, 0xc3, 0xff,
|
||||
0x1f, 0x8f, 0xc0, 0xfe, 0x7c, 0x3f, 0x8f, 0xfc, 0x0f, 0xff, 0xcf, 0xf8, 0x7c, 0x07, 0xc1, 0xff,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xfc, 0xf8, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xf9, 0xf8, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
//-----------------------------------------------
|
||||
// START OLED
|
||||
//-----------------------------------------------
|
||||
|
||||
void oled_start() {
|
||||
#ifdef ENA_DSP
|
||||
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
|
||||
Serial.println(F("SSD1306 allocation failed"));
|
||||
while(1); // Don't proceed, loop forever
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
//-----------------------------------------------
|
||||
// CLEAR DISPLAY
|
||||
//-----------------------------------------------
|
||||
|
||||
void oled_clear() {
|
||||
#ifdef ENA_DSP
|
||||
display.clearDisplay();
|
||||
#endif
|
||||
}
|
||||
|
||||
//-----------------------------------------------
|
||||
// WRITE TEXT
|
||||
//-----------------------------------------------
|
||||
|
||||
void oled_text(uint8_t s, uint8_t x, uint8_t y, String msg) {
|
||||
#ifdef ENA_DSP
|
||||
display.setTextSize(s);
|
||||
display.setTextColor(SSD1306_WHITE);
|
||||
display.setCursor(x, y);
|
||||
display.println(msg);
|
||||
display.setTextColor(SSD1306_BLACK, SSD1306_WHITE);
|
||||
display.display();
|
||||
#endif
|
||||
}
|
||||
|
||||
//-----------------------------------------------
|
||||
// Draw Logo
|
||||
//-----------------------------------------------
|
||||
|
||||
void oled_logo() {
|
||||
#ifdef ENA_DSP
|
||||
display.clearDisplay();
|
||||
display.drawBitmap(0, 0, logo_bmp, SCREEN_WIDTH, SCREEN_HEIGHT, 1);
|
||||
oled_text(1, 110, 14, ".bh");
|
||||
oled_text(1, 1, 44, "sports-tech");
|
||||
delay(3000);
|
||||
#endif
|
||||
}
|
||||
|
||||
//===============================================
|
||||
// END
|
||||
//===============================================
|
||||
55
time.h
Normal file
55
time.h
Normal file
@ -0,0 +1,55 @@
|
||||
#include <NTPClient.h>
|
||||
#include <WiFiUdp.h>
|
||||
|
||||
WiFiUDP ntpUDP;
|
||||
NTPClient timeClient(ntpUDP, "pool.ntp.org", 10800, 60000); // Update every 60 seconds
|
||||
unsigned long startMillis;
|
||||
unsigned long syncedMillisOffset;
|
||||
|
||||
void ntp_begin() {
|
||||
timeClient.begin();
|
||||
timeClient.update();
|
||||
// startMillis = millis() - timeClient.getEpochTime() * 1000;
|
||||
startMillis = millis();
|
||||
}
|
||||
|
||||
void ntp_update() {
|
||||
timeClient.update();
|
||||
}
|
||||
|
||||
unsigned long ntp_sync_millis() {
|
||||
return startMillis + millis();
|
||||
}
|
||||
|
||||
String ntp_print_time() {
|
||||
|
||||
// Calculate the time components
|
||||
unsigned long currentMillis = millis();
|
||||
unsigned long syncedMillis = currentMillis + syncedMillisOffset;
|
||||
|
||||
unsigned long totalSeconds = syncedMillis / 1000;
|
||||
unsigned long hours = (totalSeconds % 86400) / 3600;
|
||||
unsigned long minutes = (totalSeconds % 3600) / 60;
|
||||
unsigned long seconds = totalSeconds % 60;
|
||||
unsigned long milliseconds = syncedMillis % 1000;
|
||||
|
||||
// Adjust for 12-hour format and determine AM/PM
|
||||
String ampm = "AM";
|
||||
|
||||
if(hours >= 12) {
|
||||
ampm = "PM";
|
||||
if(hours > 12)
|
||||
hours -= 12;
|
||||
}
|
||||
|
||||
if(hours == 0) {
|
||||
hours = 12;
|
||||
}
|
||||
|
||||
// Generate String
|
||||
String x = String(hours) + ":" + String(minutes) + ":" + String(seconds) + ":" + String(milliseconds) + ":" + ampm;
|
||||
|
||||
// Return String Value
|
||||
return x;
|
||||
|
||||
}
|
||||
241
wireless.h
Normal file
241
wireless.h
Normal file
@ -0,0 +1,241 @@
|
||||
//=========================================================
|
||||
// Header
|
||||
//=========================================================
|
||||
|
||||
// WiFi Libraries
|
||||
#include <FS.h> // This needs to be first, or it all crashes and burns...
|
||||
#include <WiFiManager.h> // https://github.com/tzapu/WiFiManager
|
||||
#ifdef ESP32
|
||||
#include <SPIFFS.h>
|
||||
#endif
|
||||
#include <ArduinoJson.h> // https://github.com/bblanchon/ArduinoJson
|
||||
|
||||
// Variables
|
||||
char joypad_identifier[40] = ""; // TCP Scoreboard IP Address
|
||||
char scoreboard_server[40] = ""; // TCP Scoreboard IP Address
|
||||
char scoreboard_port[6] = "8080"; // TCP Scoreboard Port
|
||||
bool shouldSaveConfig = false; // Flag For Saving Data
|
||||
unsigned long timing = 0; // For Keep Alive Signal
|
||||
|
||||
// JSON Documents
|
||||
JsonDocument JSON;
|
||||
|
||||
// WiFi Manager Object
|
||||
WiFiManager wifiManager;
|
||||
|
||||
// WiFi Manager Web UI Parameters
|
||||
WiFiManagerParameter custom_identifier("identifier", "Device Identifier", "", 40); // New Addition
|
||||
WiFiManagerParameter custom_scoreboard("server", "ScoreBoard Server", "", 40);
|
||||
WiFiManagerParameter custom_port("port", "ScoreBoard Port", "", 6);
|
||||
|
||||
//=========================================================
|
||||
// TCP Client
|
||||
//=========================================================
|
||||
|
||||
// TCP Object
|
||||
WiFiClient tcpClient;
|
||||
|
||||
// List Messages
|
||||
#define MSG_SPACER "--------------------------------------------"
|
||||
#define MSG_TCP_CONNECTED "TCP Server : Connected"
|
||||
#define MSG_TCP_SEND "WHAT TO SEND ? "
|
||||
|
||||
//=========================================================
|
||||
// LED ON BOARD
|
||||
//=========================================================
|
||||
|
||||
// Defining Pin & Commands
|
||||
#define LED_START pinMode(_led_pin, OUTPUT)
|
||||
#define LED_ON digitalWrite(_led_pin, LOW)
|
||||
#define LED_OFF digitalWrite(_led_pin, HIGH)
|
||||
#define LED_TOGGLE digitalWrite(_led_pin, !digitalRead(_led_pin))
|
||||
|
||||
//=========================================================
|
||||
// WIFI
|
||||
//=========================================================
|
||||
// Save Config Files Flag
|
||||
//---------------------------------------------------------
|
||||
|
||||
void wifi_save_config_call_back () {
|
||||
Serial.println("Should save config");
|
||||
shouldSaveConfig = true;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
// Add Parameters
|
||||
//---------------------------------------------------------
|
||||
|
||||
void wifi_add_parameter(WiFiManager& manager) {
|
||||
// Set config save notify callback
|
||||
manager.setSaveConfigCallback(wifi_save_config_call_back);
|
||||
// Update The Values From Spiffs
|
||||
custom_identifier.setValue(joypad_identifier, sizeof(joypad_identifier)); // New Addition
|
||||
custom_scoreboard.setValue(scoreboard_server, sizeof(scoreboard_server));
|
||||
custom_port.setValue(scoreboard_port, sizeof(scoreboard_port));
|
||||
// Add All Parameters To WiFi Manager
|
||||
manager.addParameter(&custom_identifier); // New Addition
|
||||
manager.addParameter(&custom_scoreboard);
|
||||
manager.addParameter(&custom_port);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
// WiFi Connection
|
||||
//---------------------------------------------------------
|
||||
|
||||
void wifi_start() {
|
||||
|
||||
// Read configuration from FS json
|
||||
Serial.println("mounting FS...");
|
||||
|
||||
// Working With File Systems
|
||||
if(SPIFFS.begin()) {
|
||||
|
||||
Serial.println("mounted file system");
|
||||
if(SPIFFS.exists("/config.json")) {
|
||||
|
||||
Serial.println("reading config file");
|
||||
File configFile = SPIFFS.open("/config.json", "r");
|
||||
|
||||
if(configFile) {
|
||||
Serial.println("opened config file");
|
||||
size_t size = configFile.size();
|
||||
std::unique_ptr<char[]> buf(new char[size]);
|
||||
configFile.readBytes(buf.get(), size);
|
||||
#if defined(ARDUINOJSON_VERSION_MAJOR) && ARDUINOJSON_VERSION_MAJOR >= 6
|
||||
DynamicJsonDocument json(1024);
|
||||
auto deserializeError = deserializeJson(json, buf.get());
|
||||
serializeJson(json, Serial);
|
||||
if(!deserializeError) {
|
||||
#else
|
||||
DynamicJsonBuffer jsonBuffer;
|
||||
JsonObject& json = jsonBuffer.parseObject(buf.get());
|
||||
json.printTo(Serial);
|
||||
if(json.success()) {
|
||||
#endif
|
||||
Serial.println("\nparsed json");
|
||||
strcpy(joypad_identifier, json["joypad_identifier"]);
|
||||
strcpy(scoreboard_server, json["scoreboard_server"]);
|
||||
strcpy(scoreboard_port, json["scoreboard_port"]);
|
||||
} else {
|
||||
Serial.println("failed to load json config");
|
||||
}
|
||||
configFile.close();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Serial.println("failed to mount FS");
|
||||
}
|
||||
|
||||
// Add Parameters Settings
|
||||
wifi_add_parameter(wifiManager);
|
||||
|
||||
// Connecting To WiFi
|
||||
oled_clear();
|
||||
oled_text(1, 0, 2, "Connecting WiFi");
|
||||
oled_text(1, 0, 14, "If It Takes Too Long");
|
||||
oled_text(1, 0, 24, "Connect To");
|
||||
oled_text(1, 0, 34, "TAKEONE JOYPADS");
|
||||
oled_text(1, 0, 44, "192.168.4.1");
|
||||
|
||||
// Fetches ssid and pass and tries to connect
|
||||
if(!wifiManager.autoConnect("TAKEONE JOYPADS")) {
|
||||
Serial.println("failed to connect and hit timeout");
|
||||
delay(3000);
|
||||
//reset and try again, or maybe put it to deep sleep
|
||||
ESP.restart();
|
||||
delay(5000);
|
||||
}
|
||||
|
||||
// Connecting To WiFi
|
||||
oled_clear();
|
||||
oled_text(2, 0, 0, "WiFi Connected");
|
||||
|
||||
// Read updated parameters
|
||||
strcpy(joypad_identifier, custom_identifier.getValue());
|
||||
strcpy(scoreboard_server, custom_scoreboard.getValue());
|
||||
strcpy(scoreboard_port, custom_port.getValue());
|
||||
Serial.println("The Values In The File Are : ");
|
||||
Serial.println("\tjoypad_identifier : " + String(joypad_identifier));
|
||||
Serial.println("\tscoreboard_server : " + String(scoreboard_server));
|
||||
Serial.println("\tscoreboard_port : " + String(scoreboard_port));
|
||||
|
||||
// Save the custom parameters to FS
|
||||
if(shouldSaveConfig) {
|
||||
|
||||
Serial.println("saving config");
|
||||
|
||||
#if defined(ARDUINOJSON_VERSION_MAJOR) && ARDUINOJSON_VERSION_MAJOR >= 6
|
||||
DynamicJsonDocument json(1024);
|
||||
#else
|
||||
DynamicJsonBuffer jsonBuffer;
|
||||
JsonObject& json = jsonBuffer.createObject();
|
||||
#endif
|
||||
|
||||
json["joypad_identifier"] = joypad_identifier;
|
||||
json["scoreboard_server"] = scoreboard_server;
|
||||
json["scoreboard_port"] = scoreboard_port;
|
||||
|
||||
File configFile = SPIFFS.open("/config.json", "w");
|
||||
|
||||
if(!configFile) {
|
||||
Serial.println("failed to open config file for writing");
|
||||
}
|
||||
|
||||
#if defined(ARDUINOJSON_VERSION_MAJOR) && ARDUINOJSON_VERSION_MAJOR >= 6
|
||||
serializeJson(json, Serial);
|
||||
serializeJson(json, configFile);
|
||||
#else
|
||||
json.printTo(Serial);
|
||||
json.printTo(configFile);
|
||||
#endif
|
||||
Serial.println();
|
||||
configFile.close();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
// WiFi Reset
|
||||
//---------------------------------------------------------
|
||||
|
||||
void wifi_reset() {
|
||||
oled_clear();
|
||||
oled_text(1, 0, 2, "Reset WiFi Settings");
|
||||
wifiManager.resetSettings();
|
||||
delay(500);
|
||||
oled_text(1, 0, 12, "Rebooting");
|
||||
delay(500);
|
||||
oled_clear();
|
||||
oled_clear();
|
||||
ESP.restart();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
// WiFi Wait For Reset Button
|
||||
//---------------------------------------------------------
|
||||
|
||||
void wifi_wait_for_reset() {
|
||||
|
||||
// Clear Display
|
||||
oled_clear();
|
||||
|
||||
// Draw Text For Reset Settings
|
||||
oled_text(1, 0, 2, "Press Center Button");
|
||||
oled_text(1, 0, 12, "To Reset Config");
|
||||
|
||||
// Button Functions
|
||||
for(int i=0; i<12; i++) {
|
||||
if(btnRedOne.pressed() && btnBlueOne.pressed()) {
|
||||
wifi_reset();
|
||||
break;
|
||||
}
|
||||
oled_text(1, i*5, 22, " . ");
|
||||
delay(250);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//=========================================================
|
||||
// Server
|
||||
//=========================================================
|
||||
Loading…
x
Reference in New Issue
Block a user