Difference between revisions of "Tutorial Display"

From Sketching with Hardware at LMU Wiki
Jump to navigation Jump to search
Line 1: Line 1:
= Connect to and Control the OLED Display on the ESP32 =
+
= Control the OLED Display on the ESP32 =
 
In this part of the tutorial, we explain how to control the display that is included on the ESP32 web kit module. The display is connected over I2C and we use the microPython module ssd1306.py as library.
 
In this part of the tutorial, we explain how to control the display that is included on the ESP32 web kit module. The display is connected over I2C and we use the microPython module ssd1306.py as library.
  
Line 13: Line 13:
 
* This is [https://www.sketching-with-hardware.org/files/adc2disp.py a code example that reads analog in and prints on the display]
 
* This is [https://www.sketching-with-hardware.org/files/adc2disp.py a code example that reads analog in and prints on the display]
 
* you can download all the file in a ZIP:  https://www.sketching-with-hardware.org/files/display.zip
 
* you can download all the file in a ZIP:  https://www.sketching-with-hardware.org/files/display.zip
 +
 +
== Code Example: displaytest.py ==
 +
<syntaxhighlight lang="python" line='line'>
 +
from machine import I2C, Pin
 +
import ssd1306
 +
 +
# ESP32 reset pin for display must be 1 - this is pin16
 +
# should be done in ssd1306.py - if not uncommend the next 2 lines
 +
#pin16 = Pin(16, Pin.OUT)
 +
#pin16.value(1)
 +
 +
 +
# Pins according the schematic https://heltec.org/project/wifi-kit-32/
 +
i2c = I2C(-1, scl=Pin(15), sda=Pin(4))
 +
 +
#display size
 +
oled_width = 128
 +
oled_height = 64
 +
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
 +
 +
#test text
 +
oled.text('Hello, World', 0, 0)
 +
oled.text('some more text!?', 0, 10)
 +
oled.text('...even more :-)', 0, 20)
 +
 +
#show is required - otherwise you will not see it
 +
oled.show()
 +
</syntaxhighlight>
 +
 +
== Code Example: adc2disp.py ==
 +
<syntaxhighlight lang="python" line='line'>
 +
# test program to read in a analog value on Pin 32 on the ESP32 board
 +
# and display it on the 0.96" OLED Display (Heltec ESP32 Web Kit)
 +
 +
from machine import ADC
 +
from time import sleep
 +
from machine import I2C, Pin
 +
import ssd1306
 +
 +
# ESP32 reset pin for display must be 1 - this is pin16
 +
# should be done in ssd1306.py - if not uncommend the next 2 lines
 +
#pin16 = Pin(16, Pin.OUT)
 +
#pin16.value(1)
 +
 +
# this is for ESP32
 +
# Pins according the schematic https://heltec.org/project/wifi-kit-32/
 +
i2c = I2C(-1, scl=Pin(15), sda=Pin(4))
 +
 +
# for ESP8266 it should be:
 +
# i2c = I2C(-1, scl=Pin(5), sda=Pin(4))
 +
 +
 +
#display size
 +
oled_width = 128
 +
oled_height = 64
 +
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
 +
 +
# for ESP32 setup the ADC on Pin GPIO32
 +
adc = ADC(Pin(32))
 +
adc.atten(ADC.ATTN_11DB)    # set 11dB input attenuation (voltage range roughly 0.0v - 3.6v)
 +
 +
# for ESP8266 setup the ADC(0)
 +
#adc = ADC(0)
 +
 +
while True:
 +
  # read in analog value in v
 +
  v = adc.read()
 +
  # print to serial line
 +
  print(v)
 +
  # empty display
 +
  oled.fill(0)
 +
  oled.show()
 +
  # write v converted to a string onto the display at (0,0)
 +
  oled.text(str(v), 0, 0)
 +
  oled.show()
 +
  sleep(1)
 +
</syntaxhighlight>
  
 
= Instructional Videos =
 
= Instructional Videos =

Revision as of 00:41, 15 August 2020

Control the OLED Display on the ESP32

In this part of the tutorial, we explain how to control the display that is included on the ESP32 web kit module. The display is connected over I2C and we use the microPython module ssd1306.py as library.

Success criteria

  • you can write a string to the display
  • you can converts numbers to strings and write them to the display
  • you can clear the display or fill it
  • you can position text at different positions on the display

Required Module and Files

Code Example: displaytest.py

 1 from machine import I2C, Pin 
 2 import ssd1306
 3 
 4 # ESP32 reset pin for display must be 1 - this is pin16 
 5 # should be done in ssd1306.py - if not uncommend the next 2 lines
 6 #pin16 = Pin(16, Pin.OUT)
 7 #pin16.value(1)
 8 
 9 
10 # Pins according the schematic https://heltec.org/project/wifi-kit-32/
11 i2c = I2C(-1, scl=Pin(15), sda=Pin(4))
12 
13 #display size
14 oled_width = 128
15 oled_height = 64
16 oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
17 
18 #test text
19 oled.text('Hello, World', 0, 0)
20 oled.text('some more text!?', 0, 10)
21 oled.text('...even more :-)', 0, 20)
22 
23 #show is required - otherwise you will not see it
24 oled.show()

Code Example: adc2disp.py

 1 # test program to read in a analog value on Pin 32 on the ESP32 board
 2 # and display it on the 0.96" OLED Display (Heltec ESP32 Web Kit)
 3 
 4 from machine import ADC
 5 from time import sleep
 6 from machine import I2C, Pin 
 7 import ssd1306
 8 
 9 # ESP32 reset pin for display must be 1 - this is pin16 
10 # should be done in ssd1306.py - if not uncommend the next 2 lines
11 #pin16 = Pin(16, Pin.OUT)
12 #pin16.value(1)
13 
14 # this is for ESP32
15 # Pins according the schematic https://heltec.org/project/wifi-kit-32/
16 i2c = I2C(-1, scl=Pin(15), sda=Pin(4))
17 
18 # for ESP8266 it should be:
19 # i2c = I2C(-1, scl=Pin(5), sda=Pin(4))
20  
21 
22 #display size
23 oled_width = 128
24 oled_height = 64
25 oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
26 
27 # for ESP32 setup the ADC on Pin GPIO32
28 adc = ADC(Pin(32)) 
29 adc.atten(ADC.ATTN_11DB)    # set 11dB input attenuation (voltage range roughly 0.0v - 3.6v)
30 
31 # for ESP8266 setup the ADC(0)
32 #adc = ADC(0) 
33 
34 while True:
35   # read in analog value in v
36   v = adc.read()
37   # print to serial line
38   print(v)
39   # empty display
40   oled.fill(0)
41   oled.show()
42   # write v converted to a string onto the display at (0,0)
43   oled.text(str(v), 0, 0)
44   oled.show()
45   sleep(1)

Instructional Videos

Writing to the OLED Display over I2C

In this video on youtube (22:00) we show how to write text to the OLED Display on the ESP32 module. We then show how to connect a poti to an analog input and display the value in a loop on the display: https://youtu.be/UbxwePvgX-U