Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2024:ccontasel:valentin.vintila [2024/05/05 14:15]
valentin.vintila
pm:prj2024:ccontasel:valentin.vintila [2024/05/10 03:42] (current)
valentin.vintila [General Description]
Line 21: Line 21:
   * A central server, which should contain details about all the upcoming events. The server should also provide a way to create new events or to modify existing ones.   * A central server, which should contain details about all the upcoming events. The server should also provide a way to create new events or to modify existing ones.
   * A device (perhaps, in the future, multiple devices) that will periodically ask the server for upcoming events.   * A device (perhaps, in the future, multiple devices) that will periodically ask the server for upcoming events.
 +
 +=== The server ===
 +
 +The server will store details about future and past events using a relational database (specifically,​ [[https://​www.postgresql.org/​|PostgreSQL]]). The web interface will be written from scratch in HTML, JavaScript (enhanced with [[https://​jquery.com/​|jQuery]]) and [[https://​sass-lang.com/​|Sass]]. These two components are glued together by a backend custom written in Go.
 +
 +To provide high reproducibility,​ everything will be self-contained in a [[https://​www.docker.com/​|Docker]] container.
 +
 +=== The IoT device ===
 +
 +The device that will remind the user of their tasks will need to connect to the server (meaning it requires network access) and will ping it at fixed time intervals to gain knowledge about upcoming events. A screen will provide the user with visual feedback, and, in case the user misses it, a buzzer will trigger as well. The reminder can be postponed (or silenced).
 +
 +To accomplish this, I figured an ESP32 is best suited.
 +
 +=== The complete picture ===
 +
 +Everything I've just described can be seen in the following figure:
 +
 +{{:​pm:​prj2024:​ccontasel:​valentinvintila-sch-bloc.png?​600|}}
 +
 +=== Technology Used ===
 +
 +This is a **software-heavy** project! With this being said, I would like to point out the exact concepts I've used that were taught during this class:
 +
 +  - **GPIO** - the GPIO pins are used to enable communication between the IoT device and the end user;
 +  - **Interrupts** - when pressing a button, an interrupt will occur;
 +  - **Timers** - to notify the user before a certain task is due, timers are needed; they are also used to communicate with the server;
 +  - **I2C** - the device'​s display is controlled via the I2C protocol;
 +  - **ADC** - since you are eager to deduct points, I am required to make bad decisions regarding my project - in this case, the buttons will use fewer GPIO pins for no reason other than to use ADC.
 +
 +==== Hardware Description ====
 +
 +<note warning>
 +Please note that this is a **software-heavy** project!
 +</​note>​
 +
 +<​note>​
 +It is also worth noting that this is just a draft (and will remain a draft until the project is complete), since //"the calculation at home does not match the one in the market"​ 💀//
 +</​note>​
 +
 +The server can be a repurposed old computer or, to simplify the process, a Raspberry Pi 4 Model B that I've had laying around :)
 +
 +The IoT device will be an ESP32 module connected to a bunch of buttons, a small display and a buzzer.
 +
 +=== Bill of Materials ===
 +
 +  * 1 x ESP32 module
 +  * 1 x LCD display
 +  * 1 x Buzzer
 +  * ~4 x Buttons
 +
 +As you can tell, there are plenty of external devices managed by the ESP32.
 +
 +==== Resources ====
 +
 +  * [1] [[https://​github.com|GitHub]]
pm/prj2024/ccontasel/valentin.vintila.1714907725.txt.gz · Last modified: 2024/05/05 14:15 by valentin.vintila
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0