relay board

This commit is contained in:
Peter Poetzi
2021-12-29 01:03:23 +01:00
parent 32d57e4f6a
commit 1ce42674d3
5 changed files with 1909 additions and 5 deletions

108
config_relay.cmake Normal file
View 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()

View File

@@ -11,12 +11,18 @@
#include "globals.h"
#include "utils.h"
#include "time_bobbycar.h"
#define PIN_RELAY 17
using namespace std::chrono_literals;
namespace espnow {
namespace {
constexpr const char * const TAG = "BOBBY_ESP_NOW";
} // 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
std::deque<esp_now_message_t> message_queue{};
@@ -27,10 +33,49 @@ bool receiveTimeStamp{true};
bool receiveTsFromOtherBobbycars{true};
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");
const std::string_view data_str{(const char *)data, size_t(data_len)};
ESP_LOGI(TAG, "Received data");
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(":");
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
{
ESP_LOGW(TAG, "Invalid message: Could not find ':' (%.*s)", data_str.size(), data_str.data());
}
}*/
}
} // namespace
void initESPNow()
{
pinMode(PIN_RELAY, OUTPUT);
digitalWrite(PIN_RELAY, LOW);
ESP_LOGI(TAG, "Initializing esp-now...");
if (initialized < 1)
@@ -120,6 +168,17 @@ void initESPNow()
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)))
{
initESPNow();

View File

@@ -1,4 +1,4 @@
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x10000, 0x5000,
otadata, data, ota, 0x15000, 0x2000,
app0, app, ota_0, 0x20000, 0x1F0000,
app0, app, ota_0, 0x20000, 0x3E0000,
1 # Name Type SubType Offset Size Flags
2 nvs data nvs 0x10000 0x5000
3 otadata data ota 0x15000 0x2000
4 app0 app ota_0 0x20000 0x1F0000 0x3E0000

1736
sdkconfig_relay Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -8,6 +8,7 @@ VALID_CONFIGS=(
"greyhash"
"nofeatures"
"allfeatures"
"relay"
)
print_usage() {