smart meeting proto

This commit is contained in:
Siwat Sirichai 2023-10-26 22:50:27 +07:00
parent 10b55e5aa5
commit ac4213de4d
3 changed files with 145 additions and 30 deletions

View File

@ -22,4 +22,5 @@ lib_deps = siwats/ESPMegaPROR3@^1.3.0
seithan/Easy Nextion Library@^1.0.6 seithan/Easy Nextion Library@^1.0.6
robtillaart/FRAM_I2C@^0.6.1 robtillaart/FRAM_I2C@^0.6.1
esphome/ESPAsyncWebServer-esphome@^3.1.0 esphome/ESPAsyncWebServer-esphome@^3.1.0
bblanchon/ArduinoJson@^6.21.3
monitor_speed = 115200 monitor_speed = 115200

View File

@ -1,20 +1,80 @@
#include <user_code.hpp> #include <user_code.hpp>
//Timer Components char MEETING_STATE_REPORT_TOPIC[75];
ESPMega_Timer timer1(0, 50, timer1_callback, 15001); char MEETING_STATE_REQUEST_TOPIC[75];
char MEETING_ROOM_NAME[50] = "Meeting Room 04";
StaticJsonDocument<2048> meeting_info;
#define TOTAL_SLOT 22 // max init cycle 17
uint8_t selected_slot = 1;
uint8_t cycle_slot_start = 1;
uint8_t slot_hours[TOTAL_SLOT + 1] = {8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19};
uint8_t slot_minutes[TOTAL_SLOT + 1] = {0, 30, 0, 30, 0, 30, 0, 30, 0, 30, 0, 30, 0, 30, 0, 30, 0, 30, 0, 30, 0, 30, 0};
// Display Componets // Display Componets
#define elcd ESPMega_EXTLCD
// Link with Dual state button object with id 2 on page 1 named bt0 // Link with Dual state button object with id 2 on page 1 named bt0
NexDSButton bt0 = NexDSButton(1, 2, "bt0"); NexPicture lt_bt = NexPicture(1, 1, "lt_bt");
NexPicture av_bt = NexPicture(1, 3, "lt_bt");
NexButton left_bt = NexButton(1, 5, "left_bt");
NexButton right_bt = NexButton(1, 6, "right_bt");
NexPicture slot1 = NexPicture(1, 7, "slot1");
NexPicture slot2 = NexPicture(1, 8, "slot2");
NexPicture slot3 = NexPicture(1, 9, "slot3");
NexPicture slot4 = NexPicture(1, 10, "slot4");
NexPicture slot5 = NexPicture(1, 11, "slot5");
// Lights on 0,1,2,3,4,5
// A/V on 6
// List of Component ID Message to listen to // List of Component ID Message to listen to
NexTouch *nex_listen_list[] = NexTouch *nex_listen_list[] =
{ {
&bt0, &lt_bt,
&av_bt,
&slot1,
&slot2,
&slot3,
&slot4,
&slot5,
NULL}; NULL};
void bt0PopCallback(void *ptr) bool light_group_state()
{ {
pwm_toggle(2); for (int i = 0; i <= 5; i++)
{
if (pwm_get_state(i))
return true;
}
return false;
}
void lt_bt_cb(void *ptr)
{
bool state = !light_group_state();
for (int i = 0; i++; i <= 5)
pwm_set_state(i, state);
}
void av_bt_cb(void *ptr)
{
pwm_toggle(3);
}
void left_bt_cb(void *ptr)
{
if(cycle_slot_start>0){
cycle_slot_start--;
write_time_slot();
}
}
void right_bt_cb(void *ptr)
{
if(cycle_slot_start<TOTAL_SLOT-5){
cycle_slot_start++;
write_time_slot();
}
} }
/* /*
@ -24,6 +84,10 @@ Peripheral Initialization Routine
void user_pre_init() void user_pre_init()
{ {
nexInit(); nexInit();
memcpy(MEETING_STATE_REPORT_TOPIC, MQTT_BASE_TOPIC, 20);
strcat(MEETING_STATE_REPORT_TOPIC, "/meeting/report");
memcpy(MEETING_STATE_REQUEST_TOPIC, MQTT_BASE_TOPIC, 20);
strcat(MEETING_STATE_REQUEST_TOPIC, "/meeting/request");
} }
/* /*
@ -31,12 +95,13 @@ This code will run after every component is initialized
*/ */
void user_init() void user_init()
{ {
timer1.begin(); send_stop_bit();
ESPMega_EXTLCD.print("page home"); ESPMega_EXTLCD.print("page dashboard");
ESPMega_EXTLCD.write(0xFF); send_stop_bit();
ESPMega_EXTLCD.write(0xFF); left_bt.attachPop(left_bt_cb);
ESPMega_EXTLCD.write(0xFF); right_bt.attachPop(right_bt_cb);
bt0.attachPop(bt0PopCallback, &bt0); lt_bt.attachPop(lt_bt_cb);
av_bt.attachPop(av_bt_cb);
} }
/* /*
@ -56,10 +121,31 @@ void virtual_interrupt_user_callback(int pin, int state)
void pwm_changed_user_callback(int pin) void pwm_changed_user_callback(int pin)
{ {
if (pin == 2) if (pin >= 0 && pin <= 5)
{ {
// inform the lcd when pwm 2 changed if (light_group_state())
bt0.setValue(pwm_get_state(2)); {
elcd.write("lt_bt.pic=6");
send_stop_bit();
}
else
{
elcd.write("lt_bt.pic=5");
send_stop_bit();
}
}
else if (pin == 6)
{
if (pwm_get_state(6))
{
elcd.write("av_bt.pic=8");
send_stop_bit();
}
else
{
elcd.write("av_bt.pic=7");
send_stop_bit();
}
} }
} }
@ -68,28 +154,51 @@ This code will run every 15 seconds
*/ */
void timer_tick_callback() void timer_tick_callback()
{ {
if (standalone) }
void ac_changed_user_callback(int mode, int temperature, int fan_speed)
{ {
timer1.loop();
}
} }
void timer1_callback() void meeting_state_callback(String topic, String payload)
{ {
for (int i = 0; i < 16; i++) DeserializationError error = deserializeJson(meeting_info, payload);
}
void mqtt_connected_user_callback()
{ {
pwm_set_state(i, 1); mqtt.subscribe(MEETING_STATE_REPORT_TOPIC, meeting_state_callback);
mqtt.publish(MEETING_STATE_REQUEST_TOPIC, "request");
}
void user_state_request_callback()
{
}
void write_time_slot()
{
for (int i = 1; i <= 5; i++)
{
elcd.printf("slot%d_time.txt=%02d:%02d\n%02d:%02d", i, slot_hours[cycle_slot_start + i - 1],
slot_minutes[cycle_slot_start + i - 1], slot_hours[cycle_slot_start + i],
slot_minutes[cycle_slot_start + i]);
} }
} }
void ac_changed_user_callback(int mode, int temperature, int fan_speed) { void send_stop_bit()
{
ESPMega_EXTLCD.write(0xFF);
ESPMega_EXTLCD.write(0xFF);
ESPMega_EXTLCD.write(0xFF);
} }
void mqtt_connected_user_callback() { uint8_t get_current_time_slot()
{
rtctime_t curtime = ESPMega_getTime();
for(uint8_t i=0;i<=TOTAL_SLOT;i++) {
if(slot_hours[i]>curtime.hours || (slot_hours[i]==curtime.hours && slot_minutes[i]>curtime.hours)) {
return i;
} }
}
void user_state_request_callback() { return 255;
} }

View File

@ -3,6 +3,7 @@
#include <Nextion.h> #include <Nextion.h>
#include <PubSubClient.h> #include <PubSubClient.h>
#include <PubSubClientTools.h> #include <PubSubClientTools.h>
#include <ArduinoJson.h>
#include "espmega_iot_timer.hpp" #include "espmega_iot_timer.hpp"
#include "espmega_iot_external_lcd.hpp" #include "espmega_iot_external_lcd.hpp"
@ -27,6 +28,10 @@ void timer1_callback();
void mqtt_connected_user_callback(); void mqtt_connected_user_callback();
void bt0PopCallback(void *ptr); void bt0PopCallback(void *ptr);
void user_state_request_callback(); void user_state_request_callback();
void meeting_state_callback(String topic, String payload);
void send_stop_bit();
void write_time_slot();
extern char MQTT_BASE_TOPIC[];
// ESPMega IoT Core Build-in Functions // ESPMega IoT Core Build-in Functions