first functional product
This commit is contained in:
parent
8c64463b46
commit
e88760c299
5 changed files with 121 additions and 26 deletions
109
src/main.cpp
109
src/main.cpp
|
|
@ -2,8 +2,8 @@
|
|||
#include <cud_display.hpp>
|
||||
|
||||
/***********************************************
|
||||
* Begin Configuration *
|
||||
************************************************/
|
||||
* Begin Configuration *
|
||||
************************************************/
|
||||
|
||||
// Display Configuration
|
||||
#define cudDisplayAdapter Serial2
|
||||
|
|
@ -11,7 +11,10 @@
|
|||
#define CUD_DISPLAY_TX_PIN 4
|
||||
#define CUD_DISPLAY_RX_PIN 17
|
||||
|
||||
//Air Conditioner Configuration
|
||||
// Air Conditioner Configuration
|
||||
#define AIR_CONDITIONER_LOCK_FRAM_ADDRESS 4900
|
||||
#define AIR_CONDITIONER_LOCK_RELATIVE_TOPIC "ac_lock"
|
||||
#define AIR_CONDITIONER_LOCK_SET_RELATIVE_TOPIC "ac_lock/set"
|
||||
#define AIR_CONDITIONER_SENSOR_TYPE AC_SENSOR_TYPE_DHT22
|
||||
#define AIR_CONDITIONER_SENSOR_PIN 32
|
||||
#define AIR_CONDITIONER_IR_PIN 5
|
||||
|
|
@ -27,8 +30,7 @@ AirConditioner ac = {
|
|||
.mode_names = mode_names,
|
||||
.fan_speeds = 4,
|
||||
.fan_speed_names = fan_speed_names,
|
||||
.getInfraredCode = &getInfraredCode
|
||||
};
|
||||
.getInfraredCode = &getInfraredCode};
|
||||
|
||||
/***********************************************
|
||||
* End Configuration *
|
||||
|
|
@ -37,42 +39,119 @@ AirConditioner ac = {
|
|||
ESPMegaPRO espmega = ESPMegaPRO();
|
||||
CUDDisplay cudDisplay = CUDDisplay(&cudDisplayAdapter);
|
||||
|
||||
ClimateCard climateCard = ClimateCard(AIR_CONDITIONER_IR_PIN, ac,
|
||||
AIR_CONDITIONER_SENSOR_TYPE, AIR_CONDITIONER_SENSOR_PIN,
|
||||
AIR_CONDITIONER_RMT_CHANNEL);
|
||||
ClimateCard climateCard = ClimateCard(AIR_CONDITIONER_IR_PIN, ac,
|
||||
AIR_CONDITIONER_SENSOR_TYPE, AIR_CONDITIONER_SENSOR_PIN,
|
||||
AIR_CONDITIONER_RMT_CHANNEL);
|
||||
|
||||
void setup() {
|
||||
void handleMqttMessage(char *topic, char *payload)
|
||||
{
|
||||
Serial.printf("MQTT Message: %s %s\n", topic, payload);
|
||||
if (!strcmp(topic, AIR_CONDITIONER_LOCK_SET_RELATIVE_TOPIC))
|
||||
{
|
||||
if (!strcmp(payload, "lock"))
|
||||
{
|
||||
lockAC();
|
||||
espmega.iot->publishRelative(AIR_CONDITIONER_LOCK_RELATIVE_TOPIC, "lock");
|
||||
}
|
||||
else if (!strcmp(payload, "unlock"))
|
||||
{
|
||||
unlockAC();
|
||||
espmega.iot->publishRelative(AIR_CONDITIONER_LOCK_RELATIVE_TOPIC, "unlock");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void lockAC()
|
||||
{
|
||||
espmega.fram.write8(AIR_CONDITIONER_LOCK_FRAM_ADDRESS, 0);
|
||||
cudDisplay.setACControlEnabled(false);
|
||||
}
|
||||
|
||||
void unlockAC()
|
||||
{
|
||||
espmega.fram.write8(AIR_CONDITIONER_LOCK_FRAM_ADDRESS, 1);
|
||||
cudDisplay.setACControlEnabled(true);
|
||||
}
|
||||
|
||||
void sendStopBytes()
|
||||
{
|
||||
Serial.write(0xFF);
|
||||
Serial.write(0xFF);
|
||||
Serial.write(0xFF);
|
||||
}
|
||||
|
||||
void sendExtStopBytes()
|
||||
{
|
||||
cudDisplayAdapter.write(0xFF);
|
||||
cudDisplayAdapter.write(0xFF);
|
||||
cudDisplayAdapter.write(0xFF);
|
||||
}
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(115200);
|
||||
cudDisplayAdapter.begin(CUD_DISPLAY_BAUD_RATE, SERIAL_8N1, CUD_DISPLAY_RX_PIN, CUD_DISPLAY_TX_PIN);
|
||||
sendExtStopBytes();
|
||||
cudDisplayAdapter.print("rest");
|
||||
sendExtStopBytes();
|
||||
sendStopBytes();
|
||||
Serial.print("rest");
|
||||
sendStopBytes();
|
||||
Serial.print("boot_state.txt=\"Core Initializing . . .\"");
|
||||
sendStopBytes();
|
||||
espmega.begin();
|
||||
Serial.print("boot_state.txt=\"IoT Initializing . . .\"");
|
||||
sendStopBytes();
|
||||
espmega.enableIotModule();
|
||||
ETH.begin();
|
||||
espmega.iot->bindEthernetInterface(Ð);
|
||||
Serial.print("boot_state.txt=\"Network Initializing . . .\"");
|
||||
sendStopBytes();
|
||||
espmega.iot->loadNetworkConfig();
|
||||
espmega.iot->connectNetwork();
|
||||
Serial.print("boot_state.txt=\"MQTT Initializing . . .\"");
|
||||
sendStopBytes();
|
||||
espmega.iot->loadMqttConfig();
|
||||
espmega.iot->connectToMqtt();
|
||||
Serial.print("boot_state.txt=\"Display Initializing . . .\"");
|
||||
espmega.enableInternalDisplay(&Serial);
|
||||
espmega.enableWebServer(80);
|
||||
espmega.inputs.registerCallback(on_pin_change);
|
||||
espmega.outputs.setAutoSaveToFRAM(true);
|
||||
espmega.installCard(3, &climateCard);
|
||||
espmega.installCard(2, &climateCard);
|
||||
climateCard.bindFRAM(&espmega.fram, 5000);
|
||||
climateCard.loadStateFromFRAM();
|
||||
climateCard.setFRAMAutoSave(true);
|
||||
espmega.display->bindClimateCard(&climateCard);
|
||||
espmega.iot->registerCard(3);
|
||||
cudDisplayAdapter.begin(CUD_DISPLAY_BAUD_RATE, SERIAL_8N1, CUD_DISPLAY_RX_PIN, CUD_DISPLAY_TX_PIN);
|
||||
espmega.iot->registerCard(0); // Register the Input Card
|
||||
espmega.iot->registerCard(1); // Register the Output Card
|
||||
espmega.iot->registerCard(2); // Register the Climate Card
|
||||
auto bindedGetTime = std::bind(&ESPMegaPRO::getTime, &espmega);
|
||||
cudDisplay.begin(bindedGetTime, &espmega.inputs, &espmega.outputs, &climateCard);
|
||||
if (espmega.fram.read8(AIR_CONDITIONER_LOCK_FRAM_ADDRESS))
|
||||
{
|
||||
lockAC();
|
||||
}
|
||||
else
|
||||
{
|
||||
// AC is unlocked
|
||||
unlockAC();
|
||||
}
|
||||
espmega.iot->subscribeRelative(AIR_CONDITIONER_LOCK_SET_RELATIVE_TOPIC);
|
||||
espmega.iot->registerRelativeMqttCallback(&handleMqttMessage);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
void loop()
|
||||
{
|
||||
espmega.loop();
|
||||
cudDisplay.loop();
|
||||
}
|
||||
|
||||
void on_pin_change(uint8_t pin, uint8_t value) {
|
||||
void on_pin_change(uint8_t pin, uint8_t value)
|
||||
{
|
||||
// For pin 0-6, when the pin value changes, toggle the corresponding PWM pin
|
||||
if (pin < 7) {
|
||||
if (pin < 7)
|
||||
{
|
||||
bool new_value = !espmega.outputs.getState(pin);
|
||||
espmega.outputs.digitalWrite(pin, new_value);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue