发帖
4 0 0

安信可小安派BW21-CBV-Kit + 点亮并简单控制I2C屏幕

huatenma
注册会员

1

主题

1

回帖

97

积分

注册会员

积分
97
小安派·BW21-CBV-KIt 41 4 昨天 11:47

开箱及配件展示

共有BW21主板一块,摄像头配件以及wifi天线

开箱展示.jpg

环境搭建

参考链接:Arduino下载、安装及配置(含中文配置步骤)_arduino官网下载-CSDN博客

https://fcniufr8ibx1.feishu.cn/wiki/MIfEwnbdAih42vk4AVycmG8tn8g

点亮I2C屏幕

先获取I2C屏幕地址(这一步一定要进行)

i2c屏幕展示

反面.jpg

正面.jpg

我的这块屏幕默认I2C地址是0X78,但是通过程序读出是0X3c.

读取屏幕地址参考链接:https://fcniufr8ibx1.feishu.cn/wiki/TSK5w8NPjijZ4JkrqdmcS4v2n0c

接线

接线图.png

打开主机扫描设备的程序

打开这个项目获取屏幕地址.png

先将板子连接到电脑上,如图红光表示连接成功
烧录1.jpg

按住左边boot按键不松手,点击一下右边reset按键,1-2秒内可以观察到蓝灯逐渐亮起来,蓝灯亮起来红,此时松开左边boot按键,开发板进入烧录模式(这块开发板好像不能进行自动烧录)

烧录2.jpg

点击编译

编译上传.png

点击上传(时间大概需要十多秒,中途什么也不要操作)

烧录.png

看到upload success之后说明烧录成功,此时点击开发板右边reset按键进行复位,开发板开始运行

打开左上角串口监视器

打卡串口获取屏幕I2C地址.png

开发板每隔一段时间自动发送屏幕I2C地址,如图我的是0x3c

获取到I2C屏幕地址.png

修改并简单控制屏幕

运行屏幕例程

打开屏幕例程

打卡这个项目配置屏幕显示内容.png

修改I2C屏幕地址
修改I2C地址.png

参照上文烧录步骤,可以看到例程效果

例程效果.jpg

简单修改一下代码,实现在固定位置显示字符

将整个OLED_SSD1306.ino中的代码复制给ai,使用kimi修改一下代码

使用ai修改一下主函数的显示代码.png

将ai修改后的主函数替换原代码主函数 setup(),

屏幕配置函数参照使用.png

函数中替换部分

#define LOGO_HEIGHT_FLAKES 16
#define LOGO_WIDTH_FLAKES  16
static const unsigned char PROGMEM logo_bmp_flake[] =
    {0b00000000, 0b11000000,
     0b00000001, 0b11000000,
     0b00000001, 0b11000000,
     0b00000011, 0b11100000,
     0b11110011, 0b11100000,
     0b11111110, 0b11111000,
     0b01111110, 0b11111111,
     0b00110011, 0b10011111,
     0b00011111, 0b11111100,
     0b00001101, 0b01110000,
     0b00011011, 0b10100000,
     0b00111111, 0b11100000,
     0b00111111, 0b11110000,
     0b01111100, 0b11110000,
     0b01110000, 0b01110000,
     0b00000000, 0b00110000};

// void setup()
// {
//     Serial.begin(115200);

//     // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
//     if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
//         Serial.println(F("SSD1306 allocation failed"));
//         for (;;)
//             ;    // Don't proceed, loop forever
//     }

//     // Draw a small bitmap image
//     drawbitmap();
//     delay(3000);

//     // Clear the buffer
//     display.clearDisplay();

//     // Draw a single pixel in white
//     display.drawPixel(10, 10, SSD1306_WHITE);

//     // Show the display buffer on the screen. You MUST call display() after
//     // drawing commands to make them visible on screen!
//     display.display();
//     delay(2000);

//     // display.display() is NOT necessary after every single drawing command,
//     // unless that's what you want...rather, you can batch up a bunch of
//     // drawing operations and then update the screen all at once by calling
//     // display.display(). These examples demonstrate both approaches...

//     testdrawline();    // Draw many lines

//     testdrawrect();    // Draw rectangles (outlines)

//     testfillrect();    // Draw rectangles (filled)

//     testdrawcircle();    // Draw circles (outlines)

//     testfillcircle();    // Draw circles (filled)

//     testdrawroundrect();    // Draw rounded rectangles (outlines)

//     testfillroundrect();    // Draw rounded rectangles (filled)

//     testdrawtriangle();    // Draw triangles (outlines)

//     testfilltriangle();    // Draw triangles (filled)

//     testdrawchar();    // Draw characters of the default font

//     testdrawstyles();    // Draw 'stylized' characters

//     testscrolltext();    // Draw scrolling text

//     // Invert and restore display, pausing in-between
//     display.invertDisplay(true);
//     delay(1000);
//     display.invertDisplay(false);
//     delay(1000);

//     testanimate(logo_bmp_flake, LOGO_WIDTH_FLAKES, LOGO_HEIGHT_FLAKES);    // Animate bitmaps
// }

void setup() {
  Serial.begin(115200);

  // 初始化OLED屏幕
  if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    Serial.println(F("SSD1306分配失败"));
    for (;;); // 如果初始化失败,进入无限循环
  }

  // 清空屏幕缓冲区
  display.clearDisplay();

  // 设置文本显示位置和内容
  displayFixedText();
}

void displayFixedText() {
  // 设置文本大小和颜色
  display.setTextSize(1); // 设置文本大小为1
  display.setTextColor(SSD1306_WHITE); // 设置文本颜色为白色

  // 设置文本的起始位置(x=0,y=0)
  display.setCursor(0, 0);

  // 显示文本
  display.println("Hello, World!");

  // 设置另一个文本的起始位置(x=0,y=16)
  display.setCursor(0, 16);
  display.println("Fixed Position Text");

  // 显示缓冲区内容到屏幕
  display.display();
}





void loop()
{
}

void drawbitmap(void)
{
    display.clearDisplay();

    display.drawBitmap(
        (display.width() - LOGO_WIDTH) / 2,
        (display.height() - LOGO_HEIGHT) / 2,
        logo_bmp, LOGO_WIDTH, LOGO_HEIGHT, 1);
    display.display();
}

再次进行烧录,即可实现在固定位置显示字符

改变效果2.jpg

改变效果1.jpg

叠个甲,我之前一直使用的都是stm32,没有接触过arduino平台,有错误请指出,友善讨论,谢谢

──── 0人觉得很赞 ────

使用道具 举报

赞~
还需要发一篇实际场景应用的作品
这块板子要是天线板载就好了,这个天线感觉有点麻烦
您需要登录后才可以回帖 立即登录
高级模式
返回
统计信息
  • 会员数: 28168 个
  • 话题数: 39947 篇