Meural Remote

I mentioned in my Digital Gallery Wall post that it would be easy to build a remote control for Meural Canvases. Here it is:

Meural Remote: Case printed on Prusa i3 Mk3. Button cover printed on Formlabs Form 2 with flexible resin. (Case is unfinished and should be sanded, primed, and painted).

This was super easy because each Meural Canvas is wifi-connected and has a tiny webserver. The commands are exposed through a REST interface. So if you know the local IP address of your Meural device, you can execute these commands from your web browser:

ON: /remote/control_command/resume

OFF: /remote/control_command/suspend

LEFT: /remote/control_command/set_key/left/

RIGHT: /remote/control_command/set_key/right/


The remote is based on an ESP8266. These are versatile microcontrollers with onboard wifi. For this project, I knew I wanted battery power and that I wanted to recharge the battery via usb, so I wanted a board with a charge controller. I opted for this one from DFRobot (see below for an alternative suggestion).


There are a lot of options for programming the ESP8266. For this project, I chose NodeMCU, a Lua-based firmware. I’ve used NodeMCU for a few projects. I have mixed feelings about Lua, but I really like having an interpreter when I’m debugging a new hardware project.

There’s great documentation for NodeMCU, so I won’t get into it in detail. But you will need to flash a custom NodeMCU build with the HTTP module. (I recommend letting NodeMCU Custom Builds create your build. Keep all of the default modules and add HTTP).


The circuit is very simple. I built this on a prototype board designed to fit the ESP8266 board from DFRobot. There are 4 momentary switches (for each command: on, left, right, off). For each of these, one leg is connected to a GPIO pin. The other is connected to ground (the ESP8266 has built-in pull-ups). I also added a status LED to indicate when buttons are pressed and to blink when we’re waiting for WIFI connection.


See my repo on Github.

Thoughts and learnings:

  • I didn’t give any consideration to power management for this project. The remote is always connected to wifi and draining >100mA/h. With a 800mAh LIPO battery, I’ve got less than 8 hours of charge. At the cost of some latency, the ESP8266 could be put to sleep and wake up / reconnect to wifi on button press.
  • NodeMCU is not multi-threaded. When I want to send a command to all 6 Meural devices, I have to connect to each in sequence and wait for an OK after issuing a command. It takes about half a second for each device, so the sequence is very visible.
  • Alternative hardware: One thing I don’t like about the DFRobot board is that the charge controller delivers 500mA and I can’t change it. For safety, this means the connected battery should be 500mAh or higher. The battery increased the size of my design quite a bit. Adafruit’s Feather Huzzah ESP8266 has a 100mA LIPO charger and may be a good alternative.

The Chocovibe CV100

We make bean-to-bar chocolate in our kitchen and I’m often trying out different ideas to improve our process. The Chocovibe CV100 is a vibration table for molding tempered chocolate.

Tempered chocolate has distinctive shine and appealing texture. A temper is achieved by heating and cooling the chocolate to precise points where certain crystal structures form and can be maintained.

When it’s ready to mold, dark chocolate is just barely warm enough to flow.

To level chocolate and ensure it fills a mold evenly, we often lift and drop the molds several times. It’s tedious, messy, and doesn’t always work as the chocolate cools.

The Chocovibe CV100 is an experimental vibration table cobbled together from scrap plywood, a silicone mat, springs, screws, nuts, a vibration motor, and an ESP8266 microcontroller (yes … it has wifi).

It quickly levels the chocolate. The vibration also helps nibs or other toppings sink into the bars. We’ve used it a couple of times so far and it’s a real help to our process. I may find myself building a more kitchen-friendly version of this in the future.

Digital Gallery Wall

Final digital gallery wall.
Cycling images.
Cycling images again.

My wife is a serious amateur photographer. A few years ago, we created a photo wall in her office to showcase her framed images. We always intended to swap out the images with new photos over time, but 4 years later, the same images were in these frames…

We thought about creating a digital photo wall that’s easy to update and can potentially show many more images. I bought a Meural Canvas digital frame a few months back to try it out and compare it to other options. The Meural Canvas is a 27″ 1080p LCD display wrapped in an attractive wooden frame and matte. There is a film applied to the LCD panel that improves the display. In daylight conditions, it doesn’t look like an LCD display and most people would be fooled into thinking it’s an ordinary framed image.

Meural devices have an onboard controller that connects to WIFI, so there would be no need to connect to an external display controller. They are ready-to-mount, so would require minimal hardware or wall preparation.

The Merual Canvas looked good, so we decided to make a Gallery Wall with 6 Meural Canvases.


The biggest challenge was getting power to the devices. The Meural Canvas ships with a cloth power cord and large DC transformer. I didn’t want to dangle 6 cords to the floor and have a pile of transformers.

Bulky Meural transformers and cords.

Options I considered:

  • Tear apart the 100-year-old plaster wall to route low voltage power behind the wall.
  • Carve cable-routing channels into a large sheets of 1/2″ or 3/4″ MDF, mount to the wall, and paint it to blend in with the wall.
2-Conductor 16 AWG Ghost Wire on roll.

Then I found another option: Ghost Wire is flat low-voltage wire that adheres to the surface of your wall and can be finished to blend in seamlessly. They offer a 2-channel 16-gauge product that’s about 2″ wide and a little thicker than masking tape. Will it work?

A Meural Canvas runs on 12V. I measured the current consumed by a single Meural Canvas. Typical was ~450mA. Peak was 1600mA (at maximum brightness). The 16 AWG Ghost Wire product is rated up to 10A. My maximum run length is less than 7ft. If I run three devices per channel (typical 1.35A, peak 4.8A), we’ll have a maximum voltage drop of about 1% and typically 0.33%. This should work.

I opted for 2 parallel channels with 3 frames each. I used a single 200w switching DC transformer to power.


Next, I mounted the devices to the wall with the provided cleats from Meural and I had two problems:

  • The displays weren’t uniformly flush to the wall. The mounting cleats seemed to hug the wall tighter on one side than the other. This meant that a frame may hug the wall on the left and float out an inch on the right. I don’t think I’d notice if I were mounting a single canvas, but it was obvious and unattractive when I mounted several frames side-by-side.
  • I wanted some extra space behind each frame for Ghost Wire connectors and additional wiring.

I solved these issues by mounting the cleat to a 3/4″ plywood standoff. I made the standoffs 20″ wide and attached with 5 drywall anchors each. The additional width and rigidity made it easy to level and keep flush. One of the screws in each cleat is in a wall stud.

Hiding the GhostWire seams with drywall mud. We followed by sanding and painting.
View of mounting cleats and stand-offs, plus wiring for each display after cleaning up GhostWire seams and painting. All of this will be hidden behind the frames.

What I like about the Meural Canvas for a multi-display gallery wall:

  • Attractive frame and matte. Looks like a frame rather than an electronic device. Ready to mount.
  • Very nice display, clearly tuned for this application. Makes photos look better and more natural than an off-the-shelf 4K display.
  • Reasonably good mobile and web apps. We only intend to display our own images. It’s easy to upload and manage image collections.
  • Each device connects to WIFI. Setup is easy. Each device even has a small web server with REST interface for commands, so it will be easy to make a remote or add voice-assist features for Google Home or Alexa (a practical consideration when you have 6 displays).

What I didn’t like:

  • The device itself takes 12V DC power. It comes with a very large transformer. Meural made an attempt to make an attractive cloth cord, but it still looks like a cord and casts a shadow. For future models, I hope they offer a flat cord option and perhaps a more compact DC transformer.
  • Auto-brightness and standby features don’t poll frequently enough (maybe hourly?) and work differently for different displays. For example, one of six displays may go into standby because it thinks the room is dark at 4PM. What gives?
  • 16:9. Every digital display I looked at had a 16:9 aspect ratio. Photos are typically 4:3 or 3:2. Obviously, the manufacturers are using standard LCD panels, but it’s annoying to have to crop (or let the Meural autocrop) all of our images.
  • I don’t love the mounting cleat. When mounted in landscape orientation, the Meural is 29.5″ wide and the cleat is ~3″. It feels flimsy and isn’t wide enough to level the frame properly. I think an appropriate cleat that could support portrait and landscape orientations would be 12″ wide.

A Bluetooth Mouse (for Cats)

Idea: My cat has a “bristle-bot” style toy, but it’s not a favorite. He’ll watch it as it wanders randomly around the floor, but he doesn’t really engage with a toy unless it “hides” — goes behind other objects so he can strategize about where it’s going to show up next.

The style of motion in these robots is kind of neat. There are no wheels. Instead, they operate with vibration.  There’s something insect-like about the movement.

Can I make a bristle-bot toy that I can control with my phone so my cat and I can have fun together? Yes… Well, I made a toy. I didn’t succeed in engaging my cat.

A Bluetooth Mouse for Cats in Lab-mouse White.I experimented with a couple of different designs. The parts list for this version includes:

  • Bluetooth controller (I used Redbear Labs’ BLE Nano)
  • 2 6mm 3v disc-style vibration motors for motion.
  • 2 LEDs for eyeballs and status indication (disconnect: flash, connected: solid).
  • A pair of transistors for switching current to the motors.
  • A small LIPO battery (150 maH).
  • A power switch.

The design also includes a 3d-printed mouse body and a custom PCB to keep everything compact.

Interior view.

The operating principle is that since vibration motors are mounted to the sides of the body, when a motor is engaged, the vibration will cause the legs on one side of the body to flex. If both motors operate at roughly the same frequency, engaging both motors simultaneously will move the mouse forward.

Bottom view. I left the bottom open for convenience while I was iterating on the design. I’ve also found that minimizing the amount of structure improves the amount of vibration transferred to the legs.

I designed parts in Rhino 3d with Grasshopper. I 3d printed parts with a Form Labs Form 2, using the standard Grey resin.

Render of 3d model, using transparency to illustrate 2 distinct parts: platform (with legs) and shell. 
Lights indicate bluetooth device is connected.
Sammy is somewhat interested in the mouse.


  • While the 2 distinct vibration motors offer some control over the direction of the mouse, it’s not particularly precise. It’s hard to steer around objects.
  • In practice, any vibration motors I tried seemed to be somewhat unbalanced (presumably operating at different frequencies), so motion is biased to one side.
  • Battery wiring initially took up a lot of space. I had to trim the leads from the LIPO battery a recrimp the JST connector.  This was a pain to learn how to do. The Engineer PA-09 Micro Connector Crimpers turned out to be the right tool.

Xaar 128 Printhead Driver

The Xaar 128 is a piezoelectric inkjet printhead used in large format vinyl sign-making. It *might* be useful in 3d printing, conductive ink, or masking applications.

Why piezo? TLDR: Most inkjet printheads are “thermal”: They work by superheating a fraction of the ink in a chamber, turning it into gas, which expands to force the remainder of the ink out of a nozzle. Superheating limits the range of materials that can be used in these printheads. Piezoelectric printheads are less common, and since they use a mechanical operation to force fluid out of a nozzle, they don’t have to modify the state of the fluid to operate, and can work with a broader range of materials.

More details on the Rep Rap wiki.

Starter source code on GitHub.


  • While I planned to try some different materials with the Xaar 128, I started out with the Solvent Ink that it’s built for. I was mostly using used printheads that I could buy inexpensively on eBay, since new Xaar 128s are pretty expensive. Nozzle clogs were a big problem. I had to flush the nozzles every time I sat down to work. This wasn’t really compatible with an after-hours hacking schedule.
  • I used flexible flat cable (FFC or FPC) to connect my board to the printhead. I’ve been burnt by overflexing ribbon cable before, so I thought this was a good idea. But I didn’t properly anchor the connection points. After some use, I started getting erratic behavior and stalling from the printhead. After a lot of debugging, I found that the leads on one end of my cable had overflexed and would break contact at certain points in the movement. Lesson: anchor connection ends so that no flexing happens near the exposed leads.
  • I was never able to consistently push anything more viscous than solvent ink through the printheads. Epoxy or photo curing resin is much more viscous (eg. ~1000-2000+ cp vs ~10-20). This means these heads may be useful for something like depositing a low viscosity binder for powder printing, but probably not for depositing a material that can harden into a solid by itself. I’d love to find a printhead that can.