Little bit of history
When i moved to mi new place, i needed to put on some name plate on the door. First i thought paper sticker with some graphics, but that just wasn't cool enough. So maybe some PCB with an artwork? But if there is a PCB, maybe it should do something? Well after couple of iterations if this idea i came up with this. It is changeable name plate using bluetooth le, epaper display and is powered by single 2032 battery.
What is this?
Basically it is epaper display, to which you can upload images through Bluetooth LE. It has resolution of 172x72 pixels and 4 "colors" (whit, 2 shades of grey and black).
LCD displays consumes power to show something. So if LCD was used in this, when the battery is dead, the name on the plate would disappear. I wanted something that would stay. The epaper is perfect for this. It needs no power to keep the image. It only needs power to change what is displaying, so when the battery dies, i can't change what is on the nameplate but whatever was there last stays there "forever".
The display is cheap Chinese GDE021A1 - normally used in stuff like dynamic price tags and so on. The driver in this thing is SSD1606. The driver has internal buffer for the displayed data so theoretically it doesn't need another buffer in the control MCU.
At the time i was doing this project, there was only a few options for BLE. I finally settled on BLE-112 from Bluegiga (silabs now i think). This little module has the ble stack and can be programmed. The only problem is it can't be programmed with something common (like C) but with bluegiga's proprietary scripting language called BGScrript .
Using BLE-112 there is no need for another MCU. The only thing is, the module doesn't have anough RAM to store the displayed frame - the solution of this problem is to "stream" the image data from the computer through BLE into the controller of the epaper display.
There is little demo application written in python, which sends image data from computer to the name tag. You need to change the MAC address of your module if you want to use it. Also the BLE has built in battery voltage and temperature sensor. You can read battery status and surrounding temperature (the temp sensor is not very precise) using the supplied python tool.
OK so you ask "is it secure?" - NO.
There is no security whatsoever. No binding procedure - nothing. If you have MAC address and you know the protocol, you can change the displayed image. The only other thing is, that because it is BLE, you need to be physically close to the module.
The project is powered from the 2032 coin cell so it should not consume too much power. Bluegiga claims that as soon as you don't want anything from the module in your script, the framework will automatically bring the module down to some power saving mode.
The BLE module is normally in sleep mode and comes to live each 1 minute and listens for connections for 4s - after that is shuts down and goes back to sleep. So to actually change the image you need to try to connect to module in a loop until it wakes up. After the connection is established, the module stays awake until disconnect.
The problem was with the display. According to datasheet, the SSD1606 has some kind of "sleep mode". What i found oit is that in this sleep mode, the display actually consumes more in this mode. So i have added mosfet (p channel) to cut the power to the display.
To program the BLE-112 module, you need CC Debugger from Texas Intruments - you can get it cheaply on aliexpress or similar sites.
The PCB is designed in KiCAD, the project is in hardware folder of the project. I did one batch of revision A of the board (on the pictures - the rev A is missing the...Read more »