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

环境搭建
参考链接:Arduino下载、安装及配置(含中文配置步骤)_arduino官网下载-CSDN博客
https://fcniufr8ibx1.feishu.cn/wiki/MIfEwnbdAih42vk4AVycmG8tn8g
点亮I2C屏幕
先获取I2C屏幕地址(这一步一定要进行)
i2c屏幕展示


我的这块屏幕默认I2C地址是0X78,但是通过程序读出是0X3c.
读取屏幕地址参考链接:https://fcniufr8ibx1.feishu.cn/wiki/TSK5w8NPjijZ4JkrqdmcS4v2n0c
接线

打开主机扫描设备的程序

先将板子连接到电脑上,如图红光表示连接成功

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

点击编译

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

看到upload success之后说明烧录成功,此时点击开发板右边reset按键进行复位,开发板开始运行
打开左上角串口监视器

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

修改并简单控制屏幕
运行屏幕例程
打开屏幕例程

修改I2C屏幕地址

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

简单修改一下代码,实现在固定位置显示字符
将整个OLED_SSD1306.ino中的代码复制给ai,使用kimi修改一下代码

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

函数中替换部分
#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();
}
再次进行烧录,即可实现在固定位置显示字符


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