Marc's Public Blog - Arduino Hacking


All | Aquariums | Arduino | Btrfs | Cars | Cats | Clubbing | Dining | Diving | Electronics | Exercising | Flying | Hiking | Linux | Linuxha | Public | Rc | Sciencemuseums | Snow | Solar | Trips



>>> Back to post index <<<

2017/01/16 IoTuz Driver for our ESP32 board built at Open Hardware Miniconf at Linux.Conf.au 2017
π 2017-01-16 00:00 in Arduino, Linux
I went to meet the Open Hardware Miniconf team to hang out the previous day and see them at work finishing the last boards:


last minute hardware patching
last minute hardware patching


The IoTuz board was a challenge compared to previous years. It was based on the still new ESP32 and had very little example code. Most of the hardware had never been exercised since the board had been designed, and with a few other people I took the task to heart. Within the week, I was able to get the SPI touch screen working at the same time than the LCD (which required cable select switching via I/O expander lines. It took longer to get the two APA106 (neopixel-like) LEDs to work:

I had the first etch-a-sketch working :)
I had the first etch-a-sketch working :)

So, that all in January. But IoTuz was the gift that kept on giving. It had all those I/O bits that didn't work at all and no one had ever used. Hell, some of them had no existing drivers at all (Neopixel no support under arduino IDE, IO expander needed some access functions, No support for the IR receiver, touch screen needed a few hacks, joystick needed some code to support the huge dead zone in the center), while some other hardware worked out of the box with existing drivers (temp/humidity and accelerometer). The rotary encoder also needed custom ESP32 interrupt code to work properly (nothing too fancy, but there was no existing driver to use).

So, I embarqued into a mega library/object to support most of the hardware and ended up with almost 1000 lines of code for my IoTuz library, and another thousand lines or so for the main example code (examples/fulldemo) and that does not include 3rd party code of existing demos I was able to re-use and port to IoTuz.

In the end, that took about 100 hours of work since I had to write/port drivers as I went along, and learn how some of that hardware was even supposed to work :) (ok, non trivial time was also spent finding and chasing platform bugs which have now been fixed, as well as merging driver code with upstream maintainers).

Here is a quick video summary (longer videos at the bottom):

And here is the result (thanks to https://github.com/marcmerlin/IoTuz 's examples/fulldemo)

I made an adjustable touch menu system
I made an adjustable touch menu system


drawing circles with the accelerometer by rotating the board
drawing circles with the accelerometer by rotating the board

touch color selector
touch color selector

hardware scroll of bitmap using the rotary encoder
hardware scroll of bitmap using the rotary encoder



Just like the joystick not being very precise or centered right, the touchscreen isn't quite the same for everyone, but especially in my case I broke my touchscreen, had to buy another one and that one was wired reversed, so I designed a screen touch screen calibrator which auto adjusts and supports touch screens that are inversed like mine:


Enough bla-blah, show me the code: https://github.com/marcmerlin/IoTuz

And here are some video clips:

Hardware Intro

IoTuz Controls

IoTuz Infrared Support

IoTuz Demos

IoTuz Breakout and Tetris

Again, here's the code: https://github.com/marcmerlin/IoTuz


More pages: June 2017 April 2017 January 2017 February 2016 January 2015 September 2013 January 2012 December 2011 May 2011 January 2011

>>> Back to post index <<<