How to DIY an Electronic Desk Calendar?


  • Top left corner is an ink screen
  • The top right corner has 5 touch buttons
  • There are 57 dates in the middle, each with a touch button
  • The grey box is another PCB board with an abbreviation of Monday to Sunday
  • There are two empty slots below, and there are two slender PCBs that can be hooked up to form an angle so that the circuit board is stabilized on the desktop
  • PCB uses a black-oil tin-spray process, no circuit would be shown on the front
  • Chips and electronics are on the back

Ink Screen

Let’s see the information shown on the ink screen.

  • The top left part is the date
  • The top right part is the memo when tasks finished, you can make a mark
  • The button part is the quotes randomly obtained from the web


  • Ink screen displays dates, weeks, festivals, and a few memos, each with a bar to mark the task completion status
  • Press the top right “up” & “down” touch button can move to the corresponding to-do list section
  • Click the confirm button, the task completion status that would be marked as complete, and double-click can mark as incomplete
  • Press the top right “left” & “right” touch button, can view the memo of the previous day or the day after.
  • Click the date under monthly calendar can see memos for different dates in the current month
  • Internet access via WIFI
  • The mobile phone or computer side can sync the relevant memos via the web page and can update and view the status at any time.


The entire calendar project consists of three parts:

  • Business process services
  • Web client
  • Device end

Since the business process services and the web client are about the server-side, so I won’t further go deep on this. This article will focus on the device end introduction.

Business Processing Services

The device transmits data through MQTT, enters into the business processing service, and processes and stores the corresponding data. This part uses Python and Mysql.

Main features:

  • Monitoring and receiving MQTT messages
  • Topic’s resolution and forwarding
  • Data storage

Web Client

Flask is used in this project, Flask is a micro web framework written in Python. Users can add modified memos by logging to the web page.

The current version has the features of:

  • User login via device number
  • Switch different dates to view memos
  • Add a memo
  • Modify memo
  • Delete memo

Device End

WIFI chip W600 is used in this project combined with RT-Thread IoT OS, RT-Thread is an open-source embedded real-time operating system that has a wide range of software packages, and its compilation environment is very similar to the compilation environment under Linux.

The hardware of the device is using a PCB as the main panel, the front only has an ink screen as a display, using a removable calendar box to divide the screen so that you can intuitively see the date of each month. The back of the PCB is welded with the relevant components and with a battery, it is separated from the wire, which makes the calendar like a real paper desktop calendar.

Hardware Specification

The GPIO available for the W600 chip has 17 pins and all being used in this project, as follows:


This is the structure of my project folder, where the package section is slightly mentioned. I’ll share the used software packages in the next section.

├── Kconfig
├── SConscript
├── SConstruct
├── applications
│ ├── SConscript
│ ├── defines.h
│ ├── init.c
│ ├── keyboard.c
│ ├── logic.c
│ ├── main.c
│ ├── mqtt.c
│ ├── network.c
│ ├── qrcode_array.h
│ ├── screen.c
│ └── timer.c
├── packages
│ ├── EasyFlash-v3.3.0
│ ├── SConscript
│ ├── airkissOpen-latest
│ ├── bs8116a-latest
│ │ ├── LICENSE
│ │ ├──
│ │ ├── SConscript
│ │ ├── inc
│ │ ├── samples
│ │ └── src
│ ├── cJSON-v1.0.2
│ ├── fal-v0.3.0
│ ├── lunar_calendar-latest
│ │ ├── LICENSE
│ │ ├──
│ │ ├── SConscript
│ │ ├── inc
│ │ ├── samples
│ │ └── src
│ ├── netutils-v1.1.0
│ ├── packages.dbsqlite
│ ├── pahomqtt-v1.1.0
│ ├── pkgs.json
│ ├── pkgs_error.json
│ └── u8g2-c-latest
├── ports
│ ├── SConscript
│ ├── easyflash
│ │ ├── SConscript
│ │ └── ef_fal_port.c
│ ├── fal
│ │ ├── SConscript
│ │ ├── fal_cfg.h
│ │ ├── fal_flash_port.c
│ │ └── fal_flash_sfud_port.c
│ └── wifi
│ ├── SConscript
│ ├── wifi_config.c
│ └── wifi_config.h
├── rtconfig.h

Logic Flowcharts

Software Package

There are a total of 9 packages have been used on this project, those packages were obtained from RT-Thread Github, it is open source and free of charge, check it out Here.


Besides, I’ve also contributed a package, which is ‘bs8116a-last’:

‘bs8116a-last’ is an operating package for the Holtek touch chip.

Github Address

Thanks to RT-Thread Community Developer #illusionlee that has created this project. Find more information about this project on Github.

And for more information about RT-Thread, please visit

RT-Thread Contact Info:

Website | Github | Twitter | Facebook | Youtube




An Open-Source Community-Powered Real-Time Operating System (RTOS) Project! We develop, we DIY, we create, we share, we explore this new IoT World together!

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium

Version Control System

Week 3: How to Create an App in 24 Hours

How To Use A Wacom Tablet With An Inexpensive Cloud PC For Cloud Rendering

Kubernetes APIs Graceful Shutdown

AutoXGB: XGBoost + Optuna

Database — What comes to your mind

《馗降:粽邪2 映画》免费动漫-高清电影免费观看-HDTS中字版 完结 JPHoror

Updates on Fleta Connect (August 23rd, 2021)

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
RT-Thread IoT OS

RT-Thread IoT OS

An Open-Source Community-Powered Real-Time Operating System (RTOS) Project! We develop, we DIY, we create, we share, we explore this new IoT World together!

More from Medium

2 minute for git…

Top 5 Reasons to Avoid GitHub

Why should you learn a new programming language?