Articles

Camera viewer

Camera viewer thumbnail
IP cameras are cheaper than ever and with the ESP32-CAM boards it is now possible to stream video for less than USD 10. However, IP cameras are commonly either only accessible from within their network, or use servers from third party companies to allow users to see the video feed from anywhere in the world. As both scenarios are inconvenient, I decided to create a camera viewer application that can proxy the video feed to a web interface.
WebProjectsMongooseMongoDBNode.js

Callbacks in Javascript

Here is a simple javascript function that is designed to print its argument in the console:
TutorialsJavascript

CSS basics

HTML defines the content of a web page but not its aesthetics. Styling a document is achieved using CSS, which stands for Cascading Style Sheet and is another language that web browsers can interpret.
TutorialsCSSWeb

Bathroom occupancy monitor

Bathroom occupancy monitor thumbnail
One of the companies I used to work for had a serious bathroom issue: My floor had only three toilet stalls for about 200 employees. There were countless times when I would walk all the way to the bathroom only to find all stalls occupied. I built this simple system to quickly identify whether one or more stall were. It consists of an IoT sensor installed on the bathroom stalls' door and an indicator placed somewhere easily visible.
ESP8266IoTElectronicsProjects

Bash check if environment variable is set

When writing bash scripts, it is sometimes necessary to check if an environment bariable is set.
Bash

Barking alarm

Barking alarm thumbnail
Dogs are great at detering burglars from entering one's home. This system brings the same advantage, without the need for an actual dog.
ElectronicsProjectsArduino

BLE presence detection

BLE presence detection thumbnail
I wanted my home automation system to detect when I arrive home so as to unlock my door automatically or let me know if I leave the apartment without turning the A/C off. I figured my smartphone could be used to achieve this since it is equipped with a vast array of sensors and connectivity options. For example, I could use an app like OwnTracks which would send an MQTT message once I enter a certain perimeter around my apartment. However, constantly monitoring one's GPS location is wasteful in terms of battery life. Another option would be to ping my phone's IP address to check if it is connected to the WiFi, but smartphones can sometimes take a while to connect. So, I decided to use BLE advertising, which does not use too much battery while still remaining constantly active.
ESP32ProjectsIoTBluetooth

Auto CRUD

Auto CRUD thumbnail
Most web applications that manage data in a database perform at least some form of create, read, update or delete (CRUD) operations on stored records. Moreover, web applications also often expose those operations via a REST API. Most database tables - corresponding to the entities manged by the application - need their own CRUD controller and set of HTTP endpoints. Because of this, large applications can quickly become tedious to develop and maintain. However, the logic for each table is usually quite similar. Auto CRUD has been developed to reduce this workload.
ExpressProjectsNPMPrismaDatabase

Arduino button debounce function

Arduino button debounce function thumbnail
Physical buttons and switches do not switch between open and close position instantly and perfectly. Instead, they have a tendency to "bounce" between the two states before settling on one. This issue is thoroughly described in circuitdigest's excellent article. Consequently, when using such components with, for example, an Arduino microcontroller, a proper debouncing algorithm must be implemented.
ArduinoElectronics

Arduino 7-segment alarm clock

Arduino 7-segment alarm clock thumbnail
This is one of my earliest electronics project: An alarm clock built around an Arduino nano, a real-time clock (RTC) module and a 7-segment display.
ArduinoProjectsElectronics