Raspberry Pi Pico ile I2C OLED Kullanımı

Merhaba Arkadaşlar,

Bu yazımda sizlere pico ile OLED e yazı yazdırmayı göstereceğim. Örnek olarak CPU sıcaklığını ekrana yazdıracağız. Bunun için önceki yazımda nasıl proje oluşturulur baktıysanız I2C seçili bir proje oluşturuyoruz.

H dosyalarını aşağıdaki gibi değiştirelim.

#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include "pico/stdlib.h"
#include "hardware/i2c.h"
#include "hardware/gpio.h"
#include "hardware/adc.h"

#include "ssd1306.h"
#include "fonts.h"

ssd1306 ve font dosyaları aşağıda paylaşacağım proje linkinde bulabilirsiniz. daha sonra sırası ile led, i2c ve adc init yapıp donanımı hazırlıyoruz.

    stdio_init_all();

    //Board led init
    gpio_init(BoardLED);
    gpio_set_dir(BoardLED, GPIO_OUT);

    //I2C init
    i2c_init(SSD1306_I2C_PORT, 400 * 1000);
    gpio_set_function(SSD1306_I2C_SDA, GPIO_FUNC_I2C);
    gpio_set_function(SSD1306_I2C_SCL, GPIO_FUNC_I2C);
    gpio_pull_up(SSD1306_I2C_SDA);
    gpio_pull_up(SSD1306_I2C_SCL);

    //Adc init
    adc_init();
    adc_select_input(4);
    adc_set_temp_sensor_enabled(true);

    //OLED Setup
    ssd1306_Init();

OLED init yaptıktan sonra artık ekrana yazı yazıp yada şekil çizebilirsiniz. İlk açılışta küçük bir animasyon yaptım.

    //OLED animasyon
    uint8_t crc;
    for (crc = 2; crc < 64; crc = crc + 3)
    {
        ssd1306_draw_Circle(64, 32, crc, White);
        ssd1306_UpdateScreen();
        sleep_ms(50);
    }
    sleep_ms(2000);
    ssd1306_Fill(Black);
    ssd1306_UpdateScreen();

Artık while kısmına geçebiliriz, adc okuyup ekrana bastırıyoruz.

    while (true)
    {
        //ADC Oku
        const float conversion_factor = 3.3F / (1 << 12);
        uint16_t result = adc_read();
        float r = result * conversion_factor;
        float t = 27 - (r - 0.706) / 0.001721;

        //cpu temp yazdr
        sprintf((char *)strtxt, "CPU TEMP: %4.2f*C", (float)t);
        ssd1306_SetCursor(0, 0);
        ssd1306_WriteString(strtxt, Font_7x10, White);

        ssd1306_SetCursor(0, 15);
        ssd1306_WriteString("PICO", Font_16x26, White);

        ssd1306_SetCursor(0, 45);
        ssd1306_WriteString("I2C OLED", Font_11x18, White);

        ssd1306_UpdateScreen();

        //led toggle
        ledst = !ledst;
        gpio_put(BoardLED, ledst);
        sleep_ms(250);
    }

VSC proje dosyasını indirmek için tıklayın. I2C_OLED

Bir başka projede görüşmek üzere,
Kolay gelsin.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.