This commit is contained in:
Michal Courson
2025-08-28 21:35:21 -04:00
commit 82dde89d80
23 changed files with 6801 additions and 0 deletions

2
.clangd Normal file
View File

@ -0,0 +1,2 @@
CompileFlags:
Remove: [-f*, -m*]

13
.devcontainer/Dockerfile Normal file
View File

@ -0,0 +1,13 @@
ARG DOCKER_TAG=latest
FROM espressif/idf:${DOCKER_TAG}
ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8
RUN apt-get update -y && apt-get install udev -y
RUN echo "source /opt/esp/idf/export.sh > /dev/null 2>&1" >> ~/.bashrc
ENTRYPOINT [ "/opt/esp/entrypoint.sh" ]
CMD ["/bin/bash", "-c"]

View File

@ -0,0 +1,21 @@
{
"name": "ESP-IDF QEMU",
"build": {
"dockerfile": "Dockerfile"
},
"customizations": {
"vscode": {
"settings": {
"terminal.integrated.defaultProfile.linux": "bash",
"idf.espIdfPath": "/opt/esp/idf",
"idf.toolsPath": "/opt/esp",
"idf.gitPath": "/usr/bin/git"
},
"extensions": [
"espressif.esp-idf-extension",
"espressif.esp-idf-web"
]
}
},
"runArgs": ["--privileged"]
}

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
build/
# sdkconfig
# sdkconfig.old
managed_components/

23
.vscode/c_cpp_properties.json vendored Normal file
View File

@ -0,0 +1,23 @@
{
"configurations": [
{
"name": "ESP-IDF",
"compilerPath": "${config:idf.toolsPathWin}\\tools\\xtensa-esp-elf\\esp-14.2.0_20241119\\xtensa-esp-elf\\bin\\xtensa-esp32s3-elf-gcc.exe",
"compileCommands": "${config:idf.buildPath}/compile_commands.json",
"includePath": [
"${config:idf.espIdfPath}/components/**",
"${config:idf.espIdfPathWin}/components/**",
"${workspaceFolder}/**"
],
"browse": {
"path": [
"${config:idf.espIdfPath}/components",
"${config:idf.espIdfPathWin}/components",
"${workspaceFolder}"
],
"limitSymbolsToIncludedHeaders": true
}
}
],
"version": 4
}

15
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,15 @@
{
"version": "0.2.0",
"configurations": [
{
"type": "gdbtarget",
"request": "attach",
"name": "Eclipse CDT GDB Adapter"
},
{
"type": "espidf",
"name": "Launch",
"request": "launch"
}
]
}

36
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,36 @@
{
"C_Cpp.intelliSenseEngine": "default",
"idf.espIdfPathWin": "C:\\Users\\mickl\\esp\\v5.5\\esp-idf",
"idf.pythonInstallPath": "C:\\Users\\mickl\\.espressif\\tools\\idf-python\\3.11.2\\python.exe",
"idf.openOcdConfigs": [
"board/esp32s3-builtin.cfg"
],
"idf.portWin": "COM5",
"idf.toolsPathWin": "C:\\Users\\mickl\\.espressif",
"idf.customExtraVars": {
"IDF_TARGET": "esp32s3"
},
"clangd.path": "C:\\Users\\mickl\\.espressif\\tools\\esp-clang\\esp-19.1.2_20250312\\esp-clang\\bin\\clangd.exe",
"clangd.arguments": [
"--background-index",
"--query-driver=C:\\Users\\mickl\\.espressif\\tools\\xtensa-esp-elf\\esp-14.2.0_20241119\\xtensa-esp-elf\\bin\\xtensa-esp32s3-elf-gcc.exe",
"--compile-commands-dir=${workspaceFolder}\\build"
],
"idf.flashType": "UART",
"files.associations": {
"array": "cpp",
"chrono": "cpp",
"deque": "cpp",
"list": "cpp",
"string": "cpp",
"unordered_map": "cpp",
"unordered_set": "cpp",
"vector": "cpp",
"string_view": "cpp",
"format": "cpp",
"initializer_list": "cpp",
"span": "cpp",
"text_encoding": "cpp",
"regex": "cpp"
}
}

11
CMakeLists.txt Normal file
View File

@ -0,0 +1,11 @@
# The following lines of boilerplate have to be in your project's
# CMakeLists in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.5)
add_definitions(
-DARDUINO_USB_MODE
-DARDUINO_USB_CDC_ON_BOOT
)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(onkart)

483
dependencies.lock Normal file
View File

@ -0,0 +1,483 @@
dependencies:
bblanchon/arduinojson:
component_hash: b1c2f0b0bc26969af19809cee80b220fb882481d59cc75f8e79ebceecdc69f06
dependencies: []
source:
registry_url: https://components.espressif.com/
type: service
version: 7.4.2
chmorgan/esp-libhelix-mp3:
component_hash: cbb76089dc2c5749f7b470e2e70aedc44c9da519e04eb9a67d4c7ec275229e53
dependencies:
- name: idf
require: private
version: '>=4.1.0'
source:
registry_url: https://components.espressif.com
type: service
version: 1.0.3
esp32async/asynctcp:
component_hash: 4d7e7bea969db5b06067152117cabf51510c4193063bb61327e55c63484b156d
dependencies: []
source:
registry_url: https://components.espressif.com
type: service
version: 3.4.5
esp32async/espasyncwebserver:
component_hash: c503fbebd1cb620f2ecd9a35e4d598f946f24ef18a22a533b0661932200efb72
dependencies:
- name: bblanchon/arduinojson
registry_url: https://components.espressif.com
require: private
version: ^7.4.2
- name: esp32async/asynctcp
registry_url: https://components.espressif.com
require: private
version: ^3.4.5
- name: espressif/arduino-esp32
registry_url: https://components.espressif.com
require: private
version: ^3.1.1
source:
registry_url: https://components.espressif.com/
type: service
version: 3.7.10
espressif/arduino-esp32:
component_hash: 12ddb10a6cc6b5bc3c700334627f2a1a7a3736bfad9f63a8115199142104ef6d
dependencies:
- name: chmorgan/esp-libhelix-mp3
registry_url: https://components.espressif.com
require: private
version: 1.0.3
- name: espressif/cbor
registry_url: https://components.espressif.com
require: private
rules:
- if: target not in [esp32c2, esp32p4]
version: 0.6.0~1
- name: espressif/esp-dsp
registry_url: https://components.espressif.com
require: private
rules:
- if: target != esp32c2
version: ^1.3.4
- name: espressif/esp-modbus
registry_url: https://components.espressif.com
require: private
version: ^1.0.15
- name: espressif/esp-sr
registry_url: https://components.espressif.com
require: private
rules:
- if: target in [esp32s3]
version: ^1.4.2
- name: espressif/esp-zboss-lib
registry_url: https://components.espressif.com
require: private
rules:
- if: target not in [esp32c2, esp32p4]
version: ==1.6.4
- name: espressif/esp-zigbee-lib
registry_url: https://components.espressif.com
require: private
rules:
- if: target not in [esp32c2, esp32p4]
version: ==1.6.5
- name: espressif/esp_diag_data_store
registry_url: https://components.espressif.com
require: private
rules:
- if: target not in [esp32c2, esp32p4]
version: 1.0.2
- name: espressif/esp_diagnostics
registry_url: https://components.espressif.com
require: private
rules:
- if: target not in [esp32c2, esp32p4]
version: 1.2.1
- name: espressif/esp_hosted
registry_url: https://components.espressif.com
require: private
rules:
- if: target == esp32p4
version: ^2.0.12
- name: espressif/esp_insights
registry_url: https://components.espressif.com
require: private
rules:
- if: target not in [esp32c2, esp32p4]
version: 1.2.2
- name: espressif/esp_modem
registry_url: https://components.espressif.com
require: private
version: ^1.1.0
- name: espressif/esp_rainmaker
registry_url: https://components.espressif.com
require: private
rules:
- if: target not in [esp32c2, esp32p4]
version: 1.5.2
- name: espressif/esp_wifi_remote
registry_url: https://components.espressif.com
require: private
rules:
- if: target == esp32p4
version: ^0.13.0
- name: espressif/libsodium
registry_url: https://components.espressif.com
require: private
version: ^1.0.20~1
- name: espressif/mdns
registry_url: https://components.espressif.com
require: private
version: ^1.2.3
- name: espressif/network_provisioning
registry_url: https://components.espressif.com
require: private
rules:
- if: target != esp32c2
version: 1.0.2
- name: espressif/qrcode
registry_url: https://components.espressif.com
require: private
rules:
- if: target not in [esp32c2, esp32p4]
version: 0.1.0~2
- name: espressif/rmaker_common
registry_url: https://components.espressif.com
require: private
rules:
- if: target not in [esp32c2, esp32p4]
version: 1.4.6
- name: idf
require: private
version: '>=5.3,<5.6'
- name: joltwallet/littlefs
registry_url: https://components.espressif.com
require: private
version: ^1.10.2
source:
registry_url: https://components.espressif.com/
type: service
targets:
- esp32
- esp32s2
- esp32s3
- esp32c2
- esp32c3
- esp32c6
- esp32h2
- esp32p4
- esp32c5
version: 3.3.0~1
espressif/cbor:
component_hash: 440f4ee4504841cc9b4f3a8ef755776a612ac9dace355514c68b999868f990ff
dependencies:
- name: idf
require: private
version: '>=4.3'
source:
registry_url: https://components.espressif.com
type: service
version: 0.6.0~1
espressif/esp-dsp:
component_hash: 3e7bbd487f1357a1d4944d0c85966d049501ea281b8a4c7f93f7cfedd5b7f23d
dependencies:
- name: idf
require: private
version: '>=4.2'
source:
registry_url: https://components.espressif.com
type: service
version: 1.4.12
espressif/esp-modbus:
component_hash: 5d5e90b9e55721a8a194b301ad8102d4affb647f47b74cd413ff7d1ce2c1169c
dependencies:
- name: idf
require: private
version: '>=4.3'
source:
registry_url: https://components.espressif.com
type: service
version: 1.0.18
espressif/esp-serial-flasher:
component_hash: dcc42a16712a1a636509cf0bf90e14032d7f2141784b533613b267b6aa318d52
dependencies: []
source:
registry_url: https://components.espressif.com
type: service
version: 0.0.11
espressif/esp-sr:
component_hash: 9b41fd5ae5960c393bfd3559cd6e5fa2a95c0bf833915cebafe57fb8c4e4c396
dependencies:
- name: espressif/esp-dsp
registry_url: https://components.espressif.com
require: private
version: <=1.5.0
- name: idf
require: private
version: '>=5.0'
source:
registry_url: https://components.espressif.com
type: service
version: 1.9.5
espressif/esp-zboss-lib:
component_hash: 321883d142421f65009972408287441794250057668a11abbdfd8bec77c3309a
dependencies:
- name: idf
require: private
version: '>=5.0'
source:
registry_url: https://components.espressif.com
type: service
version: 1.6.4
espressif/esp-zigbee-lib:
component_hash: 947ea40aa95a89b9da238e941bd2950952e7cd422074d0c02d6896e2ff07bad5
dependencies:
- name: idf
require: private
version: '>=5.0'
source:
registry_url: https://components.espressif.com
type: service
version: 1.6.5
espressif/esp_diag_data_store:
component_hash: c1e5cf62f545d2b136db299f4df1b228b9840be5bc3410c9ad2d2a882b5c0d64
dependencies:
- name: idf
require: private
version: '>=4.1'
source:
registry_url: https://components.espressif.com
type: service
version: 1.0.2
espressif/esp_diagnostics:
component_hash: 5ea8e8da8217ed9ed778db3973139e726e17cd27ef5cf6429c787d19226c79f3
dependencies:
- name: idf
require: private
version: '>=4.1'
- name: espressif/rmaker_common
registry_url: https://components.espressif.com
require: private
version: ~1.4.0
source:
registry_url: https://components.espressif.com
type: service
version: 1.2.1
espressif/esp_insights:
component_hash: 4015c524b9955528f941268cf080174076b195800de910d061efc46113bc2e0c
dependencies:
- name: idf
require: private
version: '>=4.1'
- name: espressif/cbor
registry_url: https://components.espressif.com
require: private
rules:
- if: idf_version >=5.0
version: ~0.6
- name: espressif/esp_diag_data_store
registry_url: https://components.espressif.com
require: private
version: 1.0.2
- name: espressif/esp_diagnostics
registry_url: https://components.espressif.com
require: private
version: 1.2.1
- name: espressif/rmaker_common
registry_url: https://components.espressif.com
require: private
version: ~1.4.0
source:
registry_url: https://components.espressif.com
type: service
version: 1.2.2
espressif/esp_modem:
component_hash: b541c3f5765d3ba062c0d004b9ca6da6d0af908293421c2dbe046c537fb2a011
dependencies:
- name: idf
require: private
version: '>=4.1'
source:
registry_url: https://components.espressif.com
type: service
version: 1.4.0
espressif/esp_rainmaker:
component_hash: f6fe458fc7a0102ee2879f0247da4b41419e6c07de12031f66e5e9454d25baaa
dependencies:
- name: espressif/esp_rcp_update
registry_url: https://components.espressif.com
require: private
rules:
- if: idf_version >= 5.1
version: ~1.2.0
- name: espressif/esp_schedule
registry_url: https://components.espressif.com
require: private
version: ~1.2.0
- name: espressif/esp_secure_cert_mgr
registry_url: https://components.espressif.com
require: private
rules:
- if: idf_version >=4.3
version: ^2.2.1
- name: espressif/json_generator
registry_url: https://components.espressif.com
require: private
version: ~1.1.1
- name: espressif/json_parser
registry_url: https://components.espressif.com
require: private
version: ~1.0.3
- name: espressif/mdns
registry_url: https://components.espressif.com
require: private
rules:
- if: idf_version >=5.0
version: ^1.2.0
- name: espressif/network_provisioning
registry_url: https://components.espressif.com
require: private
rules:
- if: idf_version >= 5.1
version: ~1.0.0
- name: espressif/rmaker_common
registry_url: https://components.espressif.com
require: private
version: ~1.4.6
source:
registry_url: https://components.espressif.com
type: service
version: 1.5.2
espressif/esp_rcp_update:
component_hash: c10afbd54a17f27eed880e61262b161656e6d36ad63376c307f9273e99d0abcd
dependencies:
- name: espressif/esp-serial-flasher
registry_url: https://components.espressif.com
require: private
version: ~0.0.0
- name: idf
require: private
version: '>=5.0'
source:
registry_url: https://components.espressif.com
type: service
version: 1.2.0
espressif/esp_schedule:
component_hash: e202a9c688f7f1ab601efb91d682e4bcfaebc508dcceee1a1e0a0d2d1ca75a26
dependencies:
- name: espressif/rmaker_common
registry_url: https://components.espressif.com
require: private
version: ~1.4.2
source:
registry_url: https://components.espressif.com
type: service
version: 1.2.0
espressif/esp_secure_cert_mgr:
component_hash: 95b490db6944b2a6b32d7af172bb52e5045fe1d37ac8e00f9edfdd0535d64f72
dependencies:
- name: idf
require: private
version: '>=4.3'
source:
registry_url: https://components.espressif.com
type: service
version: 2.5.1
espressif/jsmn:
component_hash: d80350c41bbaa827c98a25b6072df00884e72f54885996fab4a4f0aebce6b6c3
dependencies:
- name: idf
require: private
version: '>=4.3'
source:
registry_url: https://components.espressif.com
type: service
version: 1.1.0
espressif/json_generator:
component_hash: 45033e1c199b13f1c8c1b544fb7d4e2df6a8e3071ebdcb1b22582b61a7974ff2
dependencies: []
source:
registry_url: https://components.espressif.com
type: service
version: 1.1.2
espressif/json_parser:
component_hash: d74b81729ad06ec11ff5eb5b1b0d7df1d00e6027fc11471f4b139c70dcf1b1e4
dependencies:
- name: espressif/jsmn
registry_url: https://components.espressif.com
require: private
rules:
- if: idf_version >=5.0
version: ~1.1
source:
registry_url: https://components.espressif.com
type: service
version: 1.0.3
espressif/libsodium:
component_hash: 25b968723c584a2742ca36cebe5a7ef049c6767e059f7b1e1eec69946019025d
dependencies:
- name: idf
require: private
version: '>=4.2'
source:
registry_url: https://components.espressif.com
type: service
version: 1.0.20~2
espressif/mdns:
component_hash: 3ec0af5f6bce310512e90f482388d21cc7c0e99668172d2f895356165fc6f7c5
dependencies:
- name: idf
require: private
version: '>=5.0'
source:
registry_url: https://components.espressif.com
type: service
version: 1.8.2
espressif/network_provisioning:
component_hash: ef2e10182fd1861e68b821491916327c25416ca7ae70e5a6e43313dbc71fe993
dependencies:
- name: idf
require: private
version: '>=5.1'
source:
registry_url: https://components.espressif.com
type: service
version: 1.0.2
espressif/qrcode:
component_hash: 3b493771bc5d6ad30cbf87c25bf784aada8a08c941504355b55d6b75518ed7bc
dependencies: []
source:
registry_url: https://components.espressif.com
type: service
version: 0.1.0~2
espressif/rmaker_common:
component_hash: a3a1df881278d0351fc850b77792fe8a196ddd6dcacbea203d606329cc6a0239
dependencies: []
source:
registry_url: https://components.espressif.com
type: service
version: 1.4.6
idf:
source:
type: idf
version: 5.5.0
joltwallet/littlefs:
component_hash: 8e12955f47e27e6070b76715a96d6c75fc2b44f069e8c33679332d9bdd3120c4
dependencies:
- name: idf
require: private
version: '>=5.0'
source:
registry_url: https://components.espressif.com
type: service
version: 1.20.1
direct_dependencies:
- bblanchon/arduinojson
- esp32async/espasyncwebserver
- espressif/arduino-esp32
- idf
manifest_hash: 720a2850c92f575db4f5eada42ebbed6314abacc2d6bd4f1d9107b6e0ec03056
target: esp32s3
version: 2.0.0

4
main/CMakeLists.txt Normal file
View File

@ -0,0 +1,4 @@
idf_component_register(
SRCS "main.cpp" "Config.cpp" "kartSender.cpp" "Detector.cpp"
INCLUDE_DIRS ""
)

63
main/Config.cpp Normal file
View File

@ -0,0 +1,63 @@
#include "Config.hpp"
#include <math.h>
#include "FS.h"
#include "SPIFFS.h"
Config config;
void Config::Init() {
SPIFFS.begin(true);
File f = SPIFFS.open("/config.json", FILE_READ);
if (!f) {
SetDefaults();
return;
}
DeserializationError err = deserializeJson(conf_json, f);
if (err == DeserializationError::Ok) {
Load();
} else {
SetDefaults();
}
f.close();
}
void Config::SetDefaults() {
Serial.println("Setting default config");
// Set default MAC address
trackside_mac[0] = 0x34;
trackside_mac[1] = 0x85;
trackside_mac[2] = 0x18;
trackside_mac[3] = 0xa9;
trackside_mac[4] = 0x3d;
trackside_mac[5] = 0xfc;
// Set default kart ID
kart_id = esp_random();
// Save the defaults to SPIFFS
Save();
}
void Config::Save() {
conf_json.to<JsonObject>();
JsonArray arr = conf_json["mac"].to<JsonArray>();
for (int i = 0; i < 6; i++) {
arr.add<int>(trackside_mac[i]);
}
conf_json["kart_id"] = kart_id;
String out;
serializeJson(conf_json, out);
File f = SPIFFS.open("/config.json", FILE_WRITE, true);
f.print(out);
f.close();
Serial.printf("Config saved: %s\n", out.c_str());
}
void Config::Load() {
JsonArray arr = conf_json["mac"];
for (int i = 0; i < 6; i++) {
trackside_mac[i] = arr[i];
}
kart_id = conf_json["kart_id"];
}

22
main/Config.hpp Normal file
View File

@ -0,0 +1,22 @@
#ifndef CONFIG_HPP
#define CONFIG_HPP
#include <Arduino.h>
#include <ArduinoJson.h>
class Config {
public:
void Init();
void Save();
uint8_t trackside_mac[6] = {0x34, 0x85, 0x18, 0xa9, 0x3d, 0xfc};
uint32_t kart_id = -1;
private:
void Load();
void SetDefaults();
JsonDocument conf_json;
};
extern Config config;
#endif

37
main/Detector.cpp Normal file
View File

@ -0,0 +1,37 @@
#include "Detector.hpp"
#include "TimeSync.hpp"
#include "kartSender.hpp"
Detector detector;
#define PIN_BUTTON 0
#define NUM_SAMPLES 100
void Detector::Init() {
pinMode(PIN_BUTTON, INPUT_PULLUP);
}
void Detector::Tasks() {
uint32_t avg = 0;
for (int i = 0; i < NUM_SAMPLES; i++) {
avg += analogRead(1);
}
float detect = avg / (float)NUM_SAMPLES / 4095.0f;
detect -= .37; // idle state
// Serial.printf("Button detect: %.2f\n", detect);
uint16_t button_state = detect < .02f;
if (button_state != last_button_state) {
if (!button_state) {
falling_edge_time = millis();
handled = false;
}
}
last_button_state = button_state;
if (!button_state && millis() - falling_edge_time > 30 && !handled) {
handled = true;
// Serial.printf("Timestamp: %llu\n", TimeSync::GetTime());
kart_sender.Send();
}
}

18
main/Detector.hpp Normal file
View File

@ -0,0 +1,18 @@
#ifndef DETECTOR_HPP
#define DETECTOR_HPP
#include "Arduino.h"
class Detector {
public:
void Init();
void Tasks();
private:
uint32_t falling_edge_time;
bool last_button_state;
bool handled;
};
extern Detector detector;
#endif

37
main/TimeSync.hpp Normal file
View File

@ -0,0 +1,37 @@
#ifndef TIMESYNC_HPP
#define TIMESYNC_HPP
#include <sys/time.h>
#include "Arduino.h"
#include "WiFi.h"
#include "time.h"
class TimeSync {
public:
static void Sync() {
const char* ssid = "ConnectonRefused";
const char* password = "retryconnection";
const char* ntpServer = "pool.ntp.org";
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected.");
configTime(0, 0, ntpServer);
delay(2000);
WiFi.disconnect();
}
static uint64_t GetTime() {
struct timeval tv;
gettimeofday(&tv, NULL); // gets time in seconds and microseconds
uint64_t epochMillis = (uint64_t)tv.tv_sec * 1000 + (tv.tv_usec / 1000);
return epochMillis;
}
};
#endif

19
main/idf_component.yml Normal file
View File

@ -0,0 +1,19 @@
## IDF Component Manager Manifest File
dependencies:
## Required IDF version
idf:
version: '>=4.1.0'
# # Put list of dependencies here
# # For components maintained by Espressif:
# component: "~1.0.0"
# # For 3rd party components:
# username/component: ">=1.0.0,<2.0.0"
# username2/component2:
# version: "~1.0.0"
# # For transient dependencies `public` flag can be set.
# # `public` flag doesn't have an effect dependencies of the `main` component.
# # All dependencies of `main` are public by default.
# public: true
espressif/arduino-esp32: ^3.3.0
bblanchon/arduinojson: ^7.4.2
esp32async/espasyncwebserver: ^3.7.10

10
main/kartMessage.hpp Normal file
View File

@ -0,0 +1,10 @@
#ifndef KART_MESSAGE_HPP
#define KART_MESSAGE_HPP
#include "Arduino.h"
typedef struct {
uint32_t kart_id;
uint32_t transmision;
} kart_msg;
#endif

64
main/kartSender.cpp Normal file
View File

@ -0,0 +1,64 @@
#include "kartSender.hpp"
#include <esp_now.h>
#include <esp_wifi.h>
#include "Arduino.h"
#include "Config.hpp"
#include "WiFi.h"
#include "kartMessage.hpp"
bool tp_state = false;
KartSender kart_sender;
// callback when data is sent
void OnDataSent(const esp_now_send_info_t *tx_info, esp_now_send_status_t status) {
if (status == ESP_NOW_SEND_SUCCESS) {
// esp_now_deinit();
}
// Serial.print("\r\nLast Packet Send Status:\t");
// Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Delivery Success" : "Delivery Fail");
}
esp_now_peer_info_t peerInfo;
void KartSender::Send() {
tp_state = !tp_state;
digitalWrite(21, tp_state);
kart_msg myData;
myData.kart_id = config.kart_id;
myData.transmision = transmission_counter++;
// Send message via ESP-NOW
esp_err_t result = esp_now_send(config.trackside_mac, (uint8_t *)&myData, sizeof(myData));
if (result == ESP_OK) {
Serial.println("Sent with success");
} else {
Serial.println("Error sending the data");
}
}
void KartSender::Init() {
WiFi.mode(WIFI_STA);
// Init ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
// Once ESPNow is successfully Init, we will register for Send CB to
// get the status of Transmitted packet
esp_now_register_send_cb(OnDataSent);
// Register peer
memcpy(peerInfo.peer_addr, config.trackside_mac, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
// Add peer
if (esp_now_add_peer(&peerInfo) != ESP_OK) {
Serial.println("Failed to add peer");
return;
}
}

17
main/kartSender.hpp Normal file
View File

@ -0,0 +1,17 @@
#ifndef KART_SENDER_HPP
#define KART_SENDER_HPP
#include "Arduino.h"
class KartSender {
public:
void Init();
void Send();
private:
uint32_t transmission_counter = 0;
};
extern KartSender kart_sender;
#endif

36
main/main.cpp Normal file
View File

@ -0,0 +1,36 @@
#include <esp_now.h>
#include <esp_wifi.h>
#include "Arduino.h"
#include "Config.hpp"
#include "Detector.hpp"
#include "TimeSync.hpp"
#include "WiFi.h"
#include "kartMessage.hpp"
#include "kartSender.hpp"
// Create a struct_message called myData
int trans = 0;
void setup() {
// Init Serial Monitor
Serial.begin(115200);
Serial.setTxBufferSize(255);
Serial.setRxBufferSize(255);
pinMode(21, OUTPUT);
digitalWrite(21, LOW);
// Set device as a Wi-Fi Station
// TimeSync::Sync();
config.Init();
kart_sender.Init();
detector.Init();
}
void loop() {
// Set values to send
// kart_sender.Send();
// delay(5000);
detector.Tasks();
delay(5);
}

7
partitions.csv Normal file
View File

@ -0,0 +1,7 @@
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xe000, 0x2000,
app0, app, ota_0, 0x10000, 0x330000,
app1, app, ota_1, 0x340000,0x330000,
spiffs, data, spiffs, 0x670000,0x180000,
coredump, data, coredump,0x7F0000,0x10000,
1 # Name Type SubType Offset Size Flags
2 nvs data nvs 0x9000 0x5000
3 otadata data ota 0xe000 0x2000
4 app0 app ota_0 0x10000 0x330000
5 app1 app ota_1 0x340000 0x330000
6 spiffs data spiffs 0x670000 0x180000
7 coredump data coredump 0x7F0000 0x10000

2929
sdkconfig Normal file

File diff suppressed because it is too large Load Diff

2929
sdkconfig.old Normal file

File diff suppressed because it is too large Load Diff