esmp3/src/main.cpp

92 lines
2.1 KiB
C++
Raw Normal View History

2019-08-02 21:48:36 +00:00
#include <Arduino.h>
#include <SPI.h>
#include <SD.h>
#include <MCP23S17/MCP23S17.h>
2019-08-02 21:48:36 +00:00
#include "config.h"
#include "controller.h"
#include "player.h"
#include "spi_master.h"
#include "http_server.h"
#include "mqtt_client.h"
#include <ESP8266FtpServer.h>
2019-08-02 21:48:36 +00:00
Controller* controller;
Player* player;
MCP* mcp;
HTTPServer* http_server;
FtpServer* ftp_server;
MQTTClient* mqtt_client;
unsigned long last_mqtt_report = 0;
2019-08-02 21:48:36 +00:00
void setup() {
delay(500);
Serial.begin(74880);
INFO("Starting.\n");
#ifdef VERSION
INFO("ESMP3 version %s\n", VERSION);
#else
INFO("ESMP3, version unknown\n");
#endif
INFO("Initializing...\n");
DEBUG("Connecting to wifi \"%s\"...\n", WIFI_SSID);
WiFi.mode(WIFI_AP_STA);
WiFi.begin(WIFI_SSID, WIFI_PASS);
if (WiFi.waitForConnectResult() != WL_CONNECTED) {
ERROR("Could not connect to Wifi. Rebooting.");
delay(1000);
ESP.restart();
}
INFO("WiFi connected.\n");
mqtt_client = new MQTTClient();
MDNS.begin("esmp3");
2019-08-13 04:16:08 +00:00
DEBUG("Setting up SPI...\n");
SPI.begin();
SPIMaster::init();
INFO("SPI initialized.\n");
DEBUG("Setting up MCP...\n");
SPIMaster::enable(PIN_MCP);
mcp = new MCP(0, PIN_MCP);
INFO("MCP initialized.");
DEBUG("Setting up SD card...\n");
SPIMaster::enable(PIN_SD_CS);
if (SD.begin(PIN_SD_CS)) {
INFO("SD card initialized.\n");
} else {
2019-08-13 04:16:08 +00:00
ERROR("Could not initialize SD card.\n");
}
2019-08-13 04:16:08 +00:00
DEBUG("Initializing Player and Controller...\n");
player = new Player(mcp);
controller = new Controller(player, mcp, mqtt_client);
INFO("Player and controller initialized.\n");
2019-08-13 04:16:08 +00:00
DEBUG("Setting up WiFi and web server...\n");
http_server = new HTTPServer(player, controller);
ftp_server = new FtpServer();
ftp_server->begin("user", "pass");
INFO("Initialization completed.\n");
2019-08-02 21:48:36 +00:00
}
void loop() {
bool more_data_needed = player->loop();
if (more_data_needed) return;
2019-08-02 21:48:36 +00:00
controller->loop();
http_server->loop();
ftp_server->handleFTP();
mqtt_client->loop();
if ((last_mqtt_report + 10000 < millis()) || last_mqtt_report > millis()) {
last_mqtt_report = millis();
mqtt_client->publish_status(controller->get_status_json());
}
2019-08-02 21:48:36 +00:00
}