#include <esp_now.h>
#include <WiFi.h>
#include "FS.h"
#include "SD.h"
#include "SPI.h"
#define CHANNEL 1
typedef struct struct_message {
int16_t AccX;
int16_t AccY;
int16_t AccZ;
} struct_message;
// Init ESP Now with fallback
void InitESPNow() {
WiFi.disconnect();
if (esp_now_init() != ESP_OK) {
ESP.restart();
}
}
// config AP SSID
void configDeviceAP() {
const char *SSID = "BaseStation_1";
bool result = WiFi.softAP(SSID, "Slave_1_Password", CHANNEL, 0);
}
void setup() {
// SD card setup
while(!SD.begin()){
delay(1000);
}
uint8_t cardType = SD.cardType();
if(cardType == CARD_NONE){
return;
}
uint64_t cardSize = SD.cardSize() / (1024 * 1024);
//Set device in AP mode to begin with
WiFi.mode(WIFI_AP);
// configure device AP mode
configDeviceAP();
// Init ESPNow with a fallback logic
InitESPNow();
// Once ESPNow is successfully Init, we will register for recv CB to
// get recv packer info.
esp_now_register_recv_cb(OnDataRecv);
}
void appendFile(fs::FS &fs, const char * path, int16_t message){
File file = fs.open(path, FILE_APPEND);
if(!file){
return;
}
file.println(message);
file.close();
}
// callback when data is recv from Master
void OnDataRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len) {
struct_message incomingReadings;
memcpy(&incomingReadings, data, sizeof(incomingReadings));
char macStr[18];
snprintf(macStr, sizeof(macStr), "%02x:%02x:%02x:%02x:%02x:%02x",
mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
appendFile(SD, "/AccX.txt", incomingReadings.AccX);
appendFile(SD, "/AccY.txt", incomingReadings.AccY);
appendFile(SD, "/AccZ.txt", incomingReadings.AccZ);
}
void loop() {
// Chill
}