BL652 ssd1306とNRF_LOG


SSD1306とNRF_LOGでUART経由でシリアルでPCにデータを送信するのを同時にしてみる。片方づつやるのは簡単で、マージする作業、特に、sdk_configの設定ってが厄介。


\SDK\nRF5_SDK_17.1.0_ddde560\components\drivers_ext

SDKの下の下にcomponets、その下にdrivers_extがあるので

そこにフォルダを追加する。ssd1306。

その下に、nRF用のssd1306 lib(自作)を配置する。

fonts.h

fonts.c

ssd1306.h

ssd1306.c

(テストのためにfun_logo.h)

ここからDLできるようにしておく。

 


右クリックでAdd Existing fileを選択し、上で配置したfonts.cとssd1306.cを選択する。
Optionを開いて、Commonの状態にして、Preprocessor/User Include Directioriesに
../../../../../../components/drivers_ext/ssd1306
を追加する。../../の部分は、他に../../../../../../components/が上にあるので、そこからコピペしてもってくると良い。



インクルードする
mainの上で
// for using I2C
#include "nrf_drv_twi.h"

// for using OLED display with SSD1306
#include "ssd1306.h"
#include "fun_logo.h"

/* TWI instance ID. */
#if TWI0_ENABLED
#define TWI_INSTANCE_ID     0
#elif TWI1_ENABLED
#define TWI_INSTANCE_ID     1
#endif
/* TWI instance. */
const nrf_drv_twi_t m_twi = NRF_DRV_TWI_INSTANCE(0);


mainの中は、

//initialization of SSD1306
    SSD1306_Init();

    //Initilization of NRF_LOG
    APP_ERROR_CHECK(NRF_LOG_INIT(NULL));
    NRF_LOG_DEFAULT_BACKENDS_INIT();


    while (true)
    {

    SSD1306_DrawBitmap(0,0,fun_logo_mono128x64, 128, 64, 1);
    SSD1306_UpdateScreen();
    nrf_delay_ms(2000);

    SSD1306_ScrollRight(0x00, 0x0f);    // scroll entire screen right
    nrf_delay_ms (2000);

    SSD1306_ScrollLeft(0x00, 0x0f);  // scroll entire screen left
    nrf_delay_ms (2000);

    SSD1306_Scrolldiagright(0x00, 0x0f);  // scroll entire screen diagonal right
    nrf_delay_ms (2000);

    SSD1306_Scrolldiagleft(0x00, 0x0f);  // scroll entire screen diagonal left
    nrf_delay_ms (2000);

    SSD1306_Stopscroll();   // stop scrolling. If not done, screen will keep on scrolling
    SSD1306_InvertDisplay(1);   // invert the display
    nrf_delay_ms(2000);
    SSD1306_InvertDisplay(0);  // normalize the display
    nrf_delay_ms(2000);

    SSD1306_Stopscroll();
    SSD1306_Clear();

     SSD1306_GotoXY (0,0 );
    SSD1306_Puts ("Hello world.", &Font_11x18, 1);
    SSD1306_UpdateScreen();
    nrf_delay_ms(2000);
    SSD1306_Clear();

     printf("Hallo printf.\n\r");
     NRF_LOG_INFO("Hello NRF_LOG.");
     NRF_LOG_FLUSH();
     nrf_delay_ms(500);
        // Do nothing.
    }
}

これをTWI_sacanerとかをベースにやるとすぐ動かす事ができる。


難しいのは、例えばこれをNRF_LOGと一緒に使おうとする事。sdk_configをマージする作業が非常に難しい。dk_config.hを¥config\nrf52832\configにあるものに差し替えてやってから、exampleの下のtemplate.projectをスタートに、まずhttps://funasover.blogspot.com/2023/02/nrf-nrflog.html
と同じ作業をして、NRF_LOGでUART経由でログが吐きだす所までをやる。

よくあるエラーとしては、Multiple definition of・・・
と出る。これは、大抵、LegacyとNRFXの両方をコンパイルしに行って2回宣言せれているよというエラーなので、sdk_configのチェックを片方に寄せてあげることをする。

すべて記録する事もできず・・・
ここにNRF_LOGと、I2Cの両方を使えるテンプレートを置いておく。






コメント

このブログの人気の投稿

Attiny85とAQM0802A(LCD)のI2C接続

ILI9341 240X320 Arduino

Attiny85 FuseRest