See end of this file for credits and code provenance
This project uses a combination of Adafruit's Arduino ILI9341 driver and their Arduino display graphics library (with a few extra fonts added from DSEG and processed via http://oleddisplay.squix.ch/).
The original Arduino libraries above work for those using the Arduino-ESP32 project, with some pin modifications for your particular setup (e.g., the ESP-WROVER-KIT, which also controls the backlight on GPIO_5). The ILI9341 driver in particular is ESP32-aware now.
While there are no plans to convert the native SDK-based demos below to Arduino-ESP32 code, Arduino-specific demos are included here now.
-
demos/arduino-esp32
- Install Arduino-ESP32
- Add the current Adafruit_ILI9341 and Adafruit_GFX_Library
- Build and flash via the Arduino IDE
-
demos/esp-idf (CURRENTLY DEFUNCT)
- Install Espressif's esp-idf SDK and toolchain
- Build and flash using the usual SDK methods (
make
;make flash
; etc.).
The sample code consists of two parts:
Rotating cube https://youtu.be/kEWThKicO0Q- Sample HVAC controller UI using the ESP-WROVER-KIT (for the extended version of this: http://habrahabr.ru/post/214257/) https://youtu.be/VraLl8XK1CI
The driver itself and needed dependencies are in /driver and /include/driver.
The driver is written in C++ which is not well supported by ESP8266 toolchain and sdk, so some dirty hack is needed to properly contstruct C++ objects. The code for this is in user/routines.cpp.
In spite of the fact that according to the datasheet max ILI9341's clock speed is 10MHz mine robustly works at up to 40MHz so I added SPI speed prescaler macro at the beginning of hspi.c. Defining it to 1 means HSPI will be clocked at 40MHz, 4 means 10 MHz.
What to demonstrate is controlled by macro UIDEMO defined at the beginning of user_main.cpp. If it's defined then the sample HVAC controller UI is shown, else, the rotating cube is rendered.
The code uses hardware HSPI with hardware controlled CS, so the wiring shall be as follows:
ILI9341 pin --> ESP32 GPIO pin of choice
MOSI --> GPIO13
MISO --> n/c
CLK --> GPIO14
CS --> GPIO15
DC --> GPIO2
Reset --> pull up to 3.3V
GND --> ground
Basis 1: https://github.com/adafruit/Adafruit_ILI9341 This is a library for the Adafruit ILI9341 display products
This library works with the Adafruit 2.8" Touch Shield V2 (SPI)
----> http://www.adafruit.com/products/1651
Check out the links above for our tutorials and wiring diagrams.
These displays use SPI to communicate, 4 or 5 pins are required
to interface (RST is optional).
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
MIT license, all text above must be included in any redistribution
Basis 2: https://github.com/adafruit/Adafruit-GFX-Library This is the core graphics library for all our displays, providing a common set of graphics primitives (points, lines, circles, etc.). It needs to be paired with a hardware-specific library for each display device we carry (to handle the lower-level functions).
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, check license.txt for more information.
All text above must be included in any redistribution.
Both as modified by Sermus for the ESP8266: https://github.com/Sermus/ESP8266_Adafruit_ILI9341
Further modifications by Rudi, et. al. for the ESP32: http://esp32.com/viewtopic.php?f=18&t=636#p2907
Extended with text rendering routines from: http://www.instructables.com/id/Arduino-TFT-display-and-font-library/?ALLSTEPS
Original hspi code: https://github.com/Perfer/esp8266_ili9341