relay board
This commit is contained in:
108
config_relay.cmake
Normal file
108
config_relay.cmake
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
set(BOBBY_APP_NAME bobby_relay)
|
||||||
|
|
||||||
|
add_definitions(
|
||||||
|
-DUSER_SETUP_LOADED=1
|
||||||
|
-DLOAD_GLCD=1
|
||||||
|
-DLOAD_FONT2=1
|
||||||
|
-DLOAD_FONT4=1
|
||||||
|
-DLOAD_FONT7=1
|
||||||
|
-DILI9341_DRIVER=1
|
||||||
|
-DTFT_MOSI=13
|
||||||
|
-DTFT_SCLK=15
|
||||||
|
-DTFT_CS=14
|
||||||
|
-DTFT_DC=12
|
||||||
|
-DTFT_RST=2
|
||||||
|
-DSPI_FREQUENCY=40000000
|
||||||
|
)
|
||||||
|
|
||||||
|
set(BOBBYCAR_BUILDFLAGS
|
||||||
|
-DFEATURE_ADC_IN
|
||||||
|
-DPINS_GAS=34
|
||||||
|
-DPINS_BREMS=35
|
||||||
|
-DDEFAULT_SWAPSCREENBYTES=false
|
||||||
|
#-DFEATURE_CAN
|
||||||
|
# -DFEATURE_SERIAL
|
||||||
|
# -DPINS_RX1=4
|
||||||
|
# -DPINS_TX1=5
|
||||||
|
# -DPINS_RX2=22
|
||||||
|
# -DPINS_TX2=23
|
||||||
|
-DDEFAULT_INVERTFRONTLEFT=false
|
||||||
|
-DDEFAULT_INVERTFRONTRIGHT=true
|
||||||
|
-DDEFAULT_INVERTBACKLEFT=false
|
||||||
|
-DDEFAULT_INVERTBACKRIGHT=true
|
||||||
|
-DDEFAULT_WHEELDIAMETER=200
|
||||||
|
# -DFEATURE_MOSFETS
|
||||||
|
# -DPINS_MOSFET0=18
|
||||||
|
# -DPINS_MOSFET1=19
|
||||||
|
# -DPINS_MOSFET2=21
|
||||||
|
-DDEFAULT_IMOTMAX=28
|
||||||
|
-DDEFAULT_IDCMAX=30
|
||||||
|
-DDEFAULT_NMOTMAX=2000
|
||||||
|
-DDEFAULT_FIELDWEAKMAX=7
|
||||||
|
-DDEFAULT_FIELDADVMAX=40
|
||||||
|
-DDEVICE_PREFIX=bobby_relay
|
||||||
|
-DAP_PASSWORD=Passwort_123
|
||||||
|
-DFEATURE_WEBSERVER
|
||||||
|
#-DFEATURE_OTA
|
||||||
|
-DOTA_USERNAME="relay"
|
||||||
|
-DFEATURE_DPAD_5WIRESW_2OUT
|
||||||
|
-DPINS_DPAD_5WIRESW_OUT1=18
|
||||||
|
-DPINS_DPAD_5WIRESW_OUT2=19
|
||||||
|
-DPINS_DPAD_5WIRESW_IN1=4
|
||||||
|
-DPINS_DPAD_5WIRESW_IN2=5
|
||||||
|
-DPINS_DPAD_5WIRESW_IN3=27
|
||||||
|
-DDPAD_5WIRESW_UP=4
|
||||||
|
-DDPAD_5WIRESW_DOWN=7
|
||||||
|
-DDPAD_5WIRESW_CONFIRM=1
|
||||||
|
-DDPAD_5WIRESW_BACK=10
|
||||||
|
-DDPAD_5WIRESW_PROFILE0=11
|
||||||
|
-DDPAD_5WIRESW_PROFILE1=8
|
||||||
|
-DDPAD_5WIRESW_PROFILE2=5
|
||||||
|
-DDPAD_5WIRESW_PROFILE3=2
|
||||||
|
-DDPAD_5WIRESW_BLINK_LEFT=9
|
||||||
|
-DDPAD_5WIRESW_BLINK_RIGHT=0
|
||||||
|
-DDPAD_5WIRESW_QUICKACTION_DOWN=3
|
||||||
|
-DDPAD_5WIRESW_QUICKACTION_UP=6
|
||||||
|
# -DDPAD_5WIRESW_DEBUG
|
||||||
|
-DDEFAULT_GASMIN=842
|
||||||
|
-DDEFAULT_GASMAX=2480
|
||||||
|
-DDEFAULT_BREMSMIN=826
|
||||||
|
-DDEFAULT_BREMSMAX=2502
|
||||||
|
#-DFEATURE_BLE
|
||||||
|
# -DFEATURE_BLUETOOTH
|
||||||
|
# -DFEATURE_BMS
|
||||||
|
# -DFEATURE_GAMETRAK
|
||||||
|
# -DPINS_GAMETRAKX=34
|
||||||
|
# -DPINS_GAMETRAKY=39
|
||||||
|
# -DPINS_GAMETRAKDIST=36
|
||||||
|
# -DDEFAULT_GAMETRAKXMIN=0
|
||||||
|
# -DDEFAULT_GAMETRAKXMAX=4095
|
||||||
|
# -DDEFAULT_GAMETRAKYMIN=0
|
||||||
|
# -DDEFAULT_GAMETRAKYMAX=4095
|
||||||
|
# -DDEFAULT_GAMETRAKDISTMIN=0
|
||||||
|
# -DDEFAULT_GAMETRAKDISTMAX=4095
|
||||||
|
# -DFEATURE_POWERSUPPLY
|
||||||
|
# -DFEATURE_CLOUD
|
||||||
|
-DFEATURE_UDPCLOUD
|
||||||
|
-DFEATURE_LEDBACKLIGHT
|
||||||
|
-DPINS_LEDBACKLIGHT=23
|
||||||
|
-DLEDBACKLIGHT_INVERTED
|
||||||
|
-DFEATURE_GARAGE
|
||||||
|
-DFEATURE_NTP
|
||||||
|
-DFEATURE_WIRELESS_CONFIG
|
||||||
|
-DFEATURE_LEDSTRIP
|
||||||
|
-DPINS_LEDSTRIP=33
|
||||||
|
-DLEDSTRIP_LENGTH=288
|
||||||
|
# -DLEDSTRIP_WRONG_DIRECTION
|
||||||
|
-DLEDSTRIP_ANIMATION_DEFAULT=2
|
||||||
|
-DLEDS_PER_METER=144
|
||||||
|
-DOLD_NVS
|
||||||
|
-DFEATURE_DNS_NS
|
||||||
|
-DFEATURE_ESPNOW
|
||||||
|
-DFEATURE_IS_MIR_EGAL_OB_DER_WEBSERVER_KORREKT_ARBEITET
|
||||||
|
)
|
||||||
|
|
||||||
|
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ignore/lockscreen_plugin.cmake")
|
||||||
|
include("${CMAKE_CURRENT_SOURCE_DIR}/ignore/lockscreen_plugin.cmake")
|
||||||
|
message(WARNING "Including lockscreen_plugin")
|
||||||
|
endif()
|
@@ -11,12 +11,18 @@
|
|||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "time_bobbycar.h"
|
#include "time_bobbycar.h"
|
||||||
|
#define PIN_RELAY 17
|
||||||
|
|
||||||
|
using namespace std::chrono_literals;
|
||||||
|
|
||||||
namespace espnow {
|
namespace espnow {
|
||||||
namespace {
|
namespace {
|
||||||
constexpr const char * const TAG = "BOBBY_ESP_NOW";
|
constexpr const char * const TAG = "BOBBY_ESP_NOW";
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
std::optional<espchrono::millis_clock::time_point> ledtimer;
|
||||||
|
std::optional<espchrono::millis_clock::time_point> last_send_ms;
|
||||||
|
|
||||||
uint16_t lastYear; // Used for esp-now timesync
|
uint16_t lastYear; // Used for esp-now timesync
|
||||||
|
|
||||||
std::deque<esp_now_message_t> message_queue{};
|
std::deque<esp_now_message_t> message_queue{};
|
||||||
@@ -27,10 +33,49 @@ bool receiveTimeStamp{true};
|
|||||||
bool receiveTsFromOtherBobbycars{true};
|
bool receiveTsFromOtherBobbycars{true};
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
extern "C" void onReceive(const uint8_t *mac_addr, const uint8_t *data, int data_len)
|
extern "C" void onReceive(const uint8_t *mac_addr, const uint8_t *data, int len)
|
||||||
{
|
{
|
||||||
ESP_LOGD(TAG, "Received data");
|
ESP_LOGI(TAG, "Received data");
|
||||||
const std::string_view data_str{(const char *)data, size_t(data_len)};
|
const std::string token = "Bobbycar_123";
|
||||||
|
const std::string id = "Buero";
|
||||||
|
|
||||||
|
const std::string message(data, data + len);
|
||||||
|
//Serial.printf("Received: %s\n", message.c_str());
|
||||||
|
|
||||||
|
// Parse the message (msg format: "msg_type:msg_value:msg_token") via find and npos
|
||||||
|
const size_t pos = message.find(":");
|
||||||
|
if (pos == std::string::npos) {
|
||||||
|
//Serial.println("Invalid message format");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const size_t pos2 = message.find(":", pos + 1);
|
||||||
|
if (pos2 == std::string::npos) {
|
||||||
|
//Serial.println("Invalid message format");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const std::string msg_type = message.substr(0, pos);
|
||||||
|
const std::string msg_value = message.substr(pos + 1, pos2 - pos - 1);
|
||||||
|
std::string msg_token{};
|
||||||
|
if (pos2 + 1 < message.size()) {
|
||||||
|
msg_token = message.substr(pos2 + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (msg_token.empty()) {
|
||||||
|
//Serial.println("No token was send");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (msg_token != std::string(token.c_str())) {
|
||||||
|
//Serial.println("Invalid token");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (msg_type == "BOBBYOPEN" && msg_value == std::string(id.c_str())) {
|
||||||
|
//Serial.println("Bob is opening the door");
|
||||||
|
digitalWrite(PIN_RELAY, HIGH);
|
||||||
|
ledtimer = espchrono::millis_clock::now();
|
||||||
|
}
|
||||||
|
/*const std::string_view data_str{(const char *)data, size_t(data_len)};
|
||||||
|
|
||||||
size_t sep_pos = data_str.find(":");
|
size_t sep_pos = data_str.find(":");
|
||||||
if (std::string_view::npos != sep_pos)
|
if (std::string_view::npos != sep_pos)
|
||||||
@@ -47,12 +92,15 @@ extern "C" void onReceive(const uint8_t *mac_addr, const uint8_t *data, int data
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
ESP_LOGW(TAG, "Invalid message: Could not find ':' (%.*s)", data_str.size(), data_str.data());
|
ESP_LOGW(TAG, "Invalid message: Could not find ':' (%.*s)", data_str.size(), data_str.data());
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
void initESPNow()
|
void initESPNow()
|
||||||
{
|
{
|
||||||
|
pinMode(PIN_RELAY, OUTPUT);
|
||||||
|
digitalWrite(PIN_RELAY, LOW);
|
||||||
|
|
||||||
ESP_LOGI(TAG, "Initializing esp-now...");
|
ESP_LOGI(TAG, "Initializing esp-now...");
|
||||||
|
|
||||||
if (initialized < 1)
|
if (initialized < 1)
|
||||||
@@ -120,6 +168,17 @@ void initESPNow()
|
|||||||
|
|
||||||
void handle()
|
void handle()
|
||||||
{
|
{
|
||||||
|
if (!ledtimer || espchrono::ago(*ledtimer) > 3s) {
|
||||||
|
digitalWrite(PIN_RELAY, LOW);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!last_send_ms || espchrono::ago(*last_send_ms) > 1s) {
|
||||||
|
const auto message = fmt::format("T:{}", espchrono::utc_clock::now().time_since_epoch().count());
|
||||||
|
espnow::send_espnow_message(message);
|
||||||
|
last_send_ms = espchrono::millis_clock::now();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (initialized < 255 && !(!settings.wifiSettings.wifiApEnabled && (!settings.wifiSettings.wifiStaEnabled && wifi_stack::get_sta_status() == wifi_stack::WiFiStaStatus::NO_SHIELD) || (wifi_stack::get_wifi_mode() != wifi_mode_t::WIFI_MODE_STA && wifi_stack::get_wifi_mode() != wifi_mode_t::WIFI_MODE_AP && wifi_stack::get_wifi_mode() != wifi_mode_t::WIFI_MODE_APSTA)))
|
if (initialized < 255 && !(!settings.wifiSettings.wifiApEnabled && (!settings.wifiSettings.wifiStaEnabled && wifi_stack::get_sta_status() == wifi_stack::WiFiStaStatus::NO_SHIELD) || (wifi_stack::get_wifi_mode() != wifi_mode_t::WIFI_MODE_STA && wifi_stack::get_wifi_mode() != wifi_mode_t::WIFI_MODE_AP && wifi_stack::get_wifi_mode() != wifi_mode_t::WIFI_MODE_APSTA)))
|
||||||
{
|
{
|
||||||
initESPNow();
|
initESPNow();
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
# Name, Type, SubType, Offset, Size, Flags
|
# Name, Type, SubType, Offset, Size, Flags
|
||||||
nvs, data, nvs, 0x10000, 0x5000,
|
nvs, data, nvs, 0x10000, 0x5000,
|
||||||
otadata, data, ota, 0x15000, 0x2000,
|
otadata, data, ota, 0x15000, 0x2000,
|
||||||
app0, app, ota_0, 0x20000, 0x1F0000,
|
app0, app, ota_0, 0x20000, 0x3E0000,
|
||||||
|
|
1736
sdkconfig_relay
Normal file
1736
sdkconfig_relay
Normal file
File diff suppressed because it is too large
Load Diff
@@ -8,6 +8,7 @@ VALID_CONFIGS=(
|
|||||||
"greyhash"
|
"greyhash"
|
||||||
"nofeatures"
|
"nofeatures"
|
||||||
"allfeatures"
|
"allfeatures"
|
||||||
|
"relay"
|
||||||
)
|
)
|
||||||
|
|
||||||
print_usage() {
|
print_usage() {
|
||||||
|
Reference in New Issue
Block a user