前端时间得到一款小板子WT9932C61-TINY,引脚不多起初没太拿他当回事儿,后来随着不断的使用和了解,才发现它还是非常不错的。
不同于其它的ESP系列产品,目前该开发板多是采用VS Code + ESP-IDF的开发模式。
其开发环境搭建过程如下:
1)在网站:https://dl.espressif.cn/dl/eim/,下载eim-gui-windows-x64.exe。

2)运行eim-gui-windows-x64.exe,然后点击“开始安装”。

图1 开始安装
3)选取自定义安装”及目标芯片,见图2所示。

图2 选取目标芯片
4)选取安装路径,见图3所示。

图3 选取路径
5)进行安装,安装速度较慢,需耐心等待。

图4 安装过程中
在完成安装后,其界面如图5所示。

图5 完成安装
6)保存配置,见图6所示。

图6 保存配置
最后,选取“退出安装程序”即可。
7)安装VS Code,并在其中搜索“ espidf”予以安装,见图7和图8所示。

图7 搜索 “espidf”

图8 进行安装
在完成安装后,如图9所示。

图9 完成安装
8)打开程序i2c_u8g2,其程序内容为:
static uint8_t u8x8_byte_i2c_cb(u8x8_t *u8x8, uint8_t msg,
uint8_t arg_int, void *arg_ptr)
{
static uint8_t buffer[132]; static uint8_t buf_idx;
switch (msg) {
case U8X8_MSG_BYTE_INIT:
i2c_device_config_t dev_config = {
.dev_addr_length = I2C_ADDR_BIT_LEN_7,
.device_address = I2C_DISPLAY_ADDRESS,
.scl_speed_hz = I2C_FREQ_HZ,
.scl_wait_us = 0,
.flags.disable_ack_check = false,
};
esp_err_t ret = i2c_master_bus_add_device(i2c_bus_handle, &dev_config, &display_dev_handle);
if (ret != ESP_OK) {
ESP_LOGE(TAG, "I2C master driver initialized failed");
return 0;
}
ESP_LOGI(TAG, "I2C master driver initialized successfully");
break;
case U8X8_MSG_BYTE_START_TRANSFER:
buf_idx = 0;
break;
case U8X8_MSG_BYTE_SET_DC:
break;
case U8X8_MSG_BYTE_SEND:
for (size_t i = 0; i < arg_int; ++i) {
buffer[buf_idx++] = *((uint8_t*)arg_ptr + i);
}
break;
case U8X8_MSG_BYTE_END_TRANSFER:
if (buf_idx > 0 && display_dev_handle != NULL) {
esp_err_t ret = i2c_master_transmit(display_dev_handle, buffer, buf_idx, I2C_TIMEOUT_MS);
if (ret != ESP_OK) {
ESP_LOGE(TAG, "I2C master transmission failed");
return 0;
}
ESP_LOGD(TAG, "Sent %d bytes to 0x%02X: control_byte=0x%02X",
buf_idx, I2C_DISPLAY_ADDRESS, buffer[0]);
}
break;
default:
return 0;
}
return 1;
}
static uint8_t u8x8_gpio_delay_cb(u8x8_t *u8x8, uint8_t msg,
uint8_t arg_int, void *arg_ptr)
{
switch (msg) {
case U8X8_MSG_GPIO_AND_DELAY_INIT:
ESP_LOGI(TAG, "GPIO and delay initialization completed");
break;
case U8X8_MSG_DELAY_MILLI:
vTaskDelay(pdMS_TO_TICKS(arg_int));
break;
case U8X8_MSG_DELAY_10MICRO:
esp_rom_delay_us(arg_int * 10);
break;
case U8X8_MSG_DELAY_100NANO:
__asm__ __volatile__("nop");
break;
case U8X8_MSG_DELAY_I2C:
esp_rom_delay_us(5 / arg_int);
break;
case U8X8_MSG_GPIO_RESET:
break;
default:
return 0; }
return 1;
}
static void show_demo_cycle(u8g2_t* u8g2, int demo_cycle)
{
u8g2_ClearBuffer(u8g2);
u8g2_SetFont(u8g2, u8g2_font_ncenB08_tr);
u8g2_DrawStr(u8g2, 25, 25, "Demo Cycle");
u8g2_SetFont(u8g2, u8g2_font_ncenB14_tr);
char cycle_str[16];
snprintf(cycle_str, sizeof(cycle_str), "%d", demo_cycle);
u8g2_DrawStr(u8g2, 55, 45, cycle_str);
u8g2_SendBuffer(u8g2);
vTaskDelay(pdMS_TO_TICKS(2000));
}
void app_main(void)
{
u8g2_t u8g2;
ESP_LOGI(TAG, "Starting U8G2 display demo program (menuconfig based configuration)");
ESP_LOGI(TAG, "I2C Configuration: SDA=GPIO%d, SCL=GPIO%d, Freq=%dHz, Timeout=%dms",
I2C_MASTER_SDA_IO, I2C_MASTER_SCL_IO, I2C_FREQ_HZ, I2C_TIMEOUT_MS);
ESP_LOGI(TAG, "Display Configuration: Address=0x%02X",
I2C_DISPLAY_ADDRESS);
i2c_master_bus_config_t bus_config = {
.i2c_port = I2C_MASTER_NUM,
.sda_io_num = I2C_MASTER_SDA_IO,
.scl_io_num = I2C_MASTER_SCL_IO,
.clk_source = I2C_CLK_SRC_DEFAULT,
.glitch_ignore_cnt = 7,
.intr_priority = 0,
.trans_queue_depth = 0,
.flags.enable_internal_pullup = true,
};
ESP_ERROR_CHECK(i2c_new_master_bus(&bus_config, &i2c_bus_handle));
u8g2_Setup_ssd1306_i2c_128x64_noname_f(
&u8g2, U8G2_R0,
u8x8_byte_i2c_cb,
u8x8_gpio_delay_cb
);
ESP_LOGI(TAG, "Initializing display...");
u8g2_InitDisplay(&u8g2);
ESP_LOGI(TAG, "Setting power mode...");
u8g2_SetPowerSave(&u8g2, 0);
ESP_LOGI(TAG, "Display initialization completed");
int demo_cycle = 0;
while (1) {
ESP_LOGI(TAG, "Demo cycle: %d", ++demo_cycle);
demo_text_display(&u8g2);
demo_shapes(&u8g2);
demo_pixels(&u8g2);
demo_progress_bar(&u8g2);
demo_animation(&u8g2);
demo_bitmap(&u8g2);
show_demo_cycle(&u8g2, demo_cycle);
}
}9)进行编译,其结果如图10所示。

图10 编译结果
10)下载测试,其结果见图11所示,说明下载成功。

图11 完成下载
11)确认连接关系
程序已完成下载,单如何连接OLED屏呢?
使用配置编辑功能,查看配置情况,见图12所示。

图12 连接关系
12)测试效果
在完成连接后,其测试效果见图13至图17所示。

图13显示字体

图14显示图形

图15显示图像

图16显示进程条

图17动画效果
有此类需求的方便啦,可以轻松地直达目标!
演示视频:
我要赚赏金
