Creating a Miniature Meeting Room Display for Office 365 (Arduino)

Creating a tiny, embedded version of our Meeting Room display software for Office 365

James Futhey
Jan 22, 2018 · 5 min read
A demo of the final product, running on the 1.5" wide printed-circuit board.


I run a small business that produces Meeting Room display software that is used by companies around the world. It works by integrating with Office 365, and displaying a list of upcoming meetings for a Resource Mailbox. Normally, our users prefer small tablets like the iPad Mini or the Amazon Fire Tablet (See how easy it is to add a Meeting Room display to Office 365 with Meeting Room 365). But, I thought it would be fun to create a microscopic, embedded version of our software, as a promotional item.

The full-version of our software, Meeting Room 365.

The Hardware

For this project I chose the ESP8266 System on a Chip, which connects to a PCB antenna to include cpu, ram, flash rom, & wifi in a single QFP package. This package is pre-configured with an 0.91" OLED, power circuitry, and a usb/serial driver for programming the device (for about the price of a fancy Latte).

We also have a guide for the Raspberry Pi if you’re interested:

  • Processor: L106 32-bit RISC microprocessor core based on the Tensilica Xtensa Diamond Standard 106Micro running at 80 MHz†
  • 64 KiB of instruction RAM, 96 KiB of data RAM.
  • External QSPI flash: up to 16 MiB is supported (512 KiB to 4 MiB typically included)
  • IEEE 802.11 b/g/n Wi-Fi. (WEP or WPA/WPA2 authentication, or open networks)
  • 16 GPIO pins
  • SPI
Here is the demo program you see when the device is first powered-up.
Pinout of a very similar board to the one I purchased (identical design specifications).

Designing the software

Everything for this project was written using the Arduino IDE.

The first challenge to overcome was configuring the device. It wouldn’t be very easy to use if someone had to manually enter their Wifi SSID & Password & recompile and reflash the device before use. So, I went looking for a captive portal library that could be used to configure the device. The basic logic is as follows:

  1. If the device has a stored configuration, attempt to use that.
  2. If the stored configuration doesn’t work or doesn’t exist, broadcast a new network called “Mini MR365”.
  3. When a user connects to the network, hijack DNS to create a Captive Portal.
  4. Serve a single webpage which can be used to configure the device. Allow the user to store their settings permanently.
  5. Once a connection is established. shut down the network and resume normal operation

The initial state for the device is a screen instructing the new user to connect to the device via Wifi, so they can configure the display.

This helps, but real-world use would probably mean additional instructions included in the packaging.

Once the device is powered up for the first time, a user needs to connect to the special Wireless hotspot with their phone or computer, to let the device know what Wireless network to use, and which URL to look for the display.

Here are a series of screenshots outlining the process to configure the device. This was taken from my iPhone, but working on any device with a wireless connection:

Connection & Setup via Wifi. First, the user connects to our device via Wifi. Then, they configure the device, and save.

Taken from my design doc. In the original, there are options to reserve a meeting room directly from the display. But, since we have no accessible buttons, we’ll display a message instructing visitors to “Reserve [a meeting] via Outlook”.

You’ll notice I deviated from the design to add the time back in to the display. Readability becomes a bit of an issue, but, without it, the display output does not change for several hours, and I became a bit uneasy.

Was the device working? How do I know?

With the time displayed, I can simply take a look at my watch or see the time change to feel confident that the system is working.

This is what the display looks like when a room is available.

The second state displays the meeting room title, and the time it begins & ends. Since the Meeting Name is the most important bit of information, it gets two lines. Also, in the final version we do not include AM or PM (many of our users are international, but even in the US space is at a premium on our display).

You’ll notice, on the right, a room is occupied, and the meeting name & reservation time is displayed. Since space is a premium, we can only display 32 characters of text for the title, and we break it without regard to word breaks. Not a limitation of our hardware or software, but this was typical of devices using multiline character array displays (you might have used a personal assistant or organizer in the 90s with a similar display, or perhaps a high-end electronic typewriter).

Thanks for reading!

Please Recommend and Share if you found this article useful!

James Futhey

Written by


Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade