Tu wprowadź krótki opis projektu (max 500 znaków)
Do płytki ESP32, za pośrednictwem dzielnika napięcia, został podłączony generator fali prostokątnej NE555. Częstotliwość sygnału została nastawiona na 20Hz. Program wgrany na płytkę próbkuje otrzymany sygnał i następnie rysuje przebieg na wyświetlaczu OLED I2C 0.96". W programie można zmienić skalę rysowanego sygnału oraz okres czasu przedstawiony na ekranie.
1. Płytka ESP32
2. Wyświetlacz OLED I2C 0.96"
3. Generator fali prostokątnej NE555
4. Rezystory (w moim przypadku 7x330Ω)
5. Kable i płytka stykowa
Dodatkowo przydatny może być mały płaski śrubokręt do nastawienia częstotliwości generowanego sygnału.
Generator NE555 podłączmy zgodnie z oznaczeniami na płytce do VCC i GND. Należy jednak wspomnieć, że sygnał z OUT ma większe napięcie (5V) niż dozwolone dla styków płytki ESP32 (około 2,2V), dlatego żeby jej nie uszkodzić należy zbudować dzielnik napięcia.
Dla jednakowych rezystorów podłączonych szeregowo spadek napięcia na każdym jest identyczny (żeby uzyskać wartość należy podzielić napięcie wejściowe czyli 5V przez ich ilość), wyjście podłączamy w miejscu gdzie napięcie spadło do bezpiecznego poziomu i łączymy z pinem o numerze 34.
Wyświetlacz OLED też dołączamy zgodnie z oznaczeniami do VCC i GND. Wyjście SCL podłączamy do pinu 27, a SDA do 26. Mając gotowy układ podłączmy płytkę ESP32 do komputera i możemy uruchomić program.
W kodzie można zmieniać parametry "gainScale" i "timeScale" modyfikujące to co będzie pokazane na ekranie OLED. Parametr "gainScale" zmienia rozdzielczość amplitudy sygnału. Tzn. dla wartości 1 wysokość wyświetlacza odpowiada 550mV, a sygnał wypełni cały ekran, a dla wartości np. 0.25 wysokość odpowiada 2200mV i sygnał wypełni około 1/4 ekranu.
Parametr "timeScale" służy do próbowanie sygnału, szerokość jednego piksela będzie odpowiadać tej wartości podanej w sekundach. Na ekranie jest przedstawiona ilość czasu na całej szerokości ekranu.
from machine import Pin,I2C, ADC
import ssd1306
import time
import math
i2c = I2C(scl=Pin(27), sda=Pin(26))
oled = ssd1306.SSD1306_I2C(128,64,i2c)
adc = ADC(Pin(34,Pin.IN))
oled.fill(0)
oled.show()
global gainScale
global timeScale
def drawAxis():
oled.hline(0,32,128,1)
oled.vline(64,0,64,1)
oled.show()
gainScale = 1
timeScale = 0.05
while True:
T = []
drawAxis()
for i in range(0,256):
T.append(int(-1*adc.read()/30*gainScale)+63)
time.sleep(timeScale)
print(adc.read())
for i in range(0,2):
for j in range(0,128):
oled.pixel(j,T[i*128+j],1)
drawAxis()
oled.text("mV:"+str(550/gainScale), 0, 23, 1)
oled.text("t:"+str(timeScale*128)+"s", 0, 34, 1)
oled.show()
oled.fill(0)
drawAxis()
oled.show()