The AiPi-Eyes-R2 kit comes with the following components:
- 480×480 touchscreen
- 4-inch RGB display driver board for Ai-M61-32S
- Speaker
- Microphone
- USB camera
- Camera cable
- IO connection cable
To prevent short circuits, I 3D-printed a casing holder.
Front view:The board features the Ai-M61-32S module, supporting Wi-Fi 6 and Bluetooth 5.3.
It offers a wide range of interfaces: DVP, MJPEG, Display, AudioCodec, USB2.0, SDU, Ethernet (EMAC), SD/MMC (SDH), SPI, UART, I2C, I2S, PWM, GPDAC, GPADC, ACOMP, and GPIO.
It includes SPI screen and DVP camera interfaces, a TF card slot, and a USB port for camera connection.
Unboxing complete!
Environment SetupFollowing instructions from Ai-Thinker Forum:
1. Clone the source codegit clone https://gitee.com/Ai-Thinker-Open/AiPi-Open-Kits.git -b master
cd AiPi-Open-Kits/
git submodule init
git submodule update
cd aithinker_Ai-M6X_SDK/
git submodule init
git submodule update
aithinker_Ai-M6X_SDK\toolchain_gcc_t-head_windows\bin
aithinker_Ai-M6X_SDK\tools\make
aithinker_Ai-M6X_SDK\tools\ninja
2. Set up the toolchainImport the provided toolchain and tools.
make -v
riscv64-unknown-elf-gcc -v
- Build and flash the firmware
Use VSCode terminal in the src folder:
make BL_SDK_BASE=U:/code/xiaoanpi/AiPi-Open-Kits/aithinker_Ai-M6X_SDK
After a successful build, flash the board:
make flash COMX=COM5 BL_SDK_BASE=U:/code/xiaoanpi/AiPi-Open-Kits/aithinker_Ai-M6X_SDK
Check your wiring if you encounter issues. Flashing successful! ✅
Performance TestAiPi-Eyes-R2AiPi-Eyes-R2 FPS is slightly higher.
AiPi uses a BL618 with a 32-bit RISC-V CPU at 320MHz.
The competitor uses a dual-core Xtensa® LX7 at 240MHz, but only one core seems active during the test.
Results are for entertainment only—not for purchasing decisions.
DIY Project: “Slacking Off at Work”- UI created with squarelline_studio and exported to the project folder.
- Add ui.h and call ui_init() once in the main program.
Use a config header (e.g., xx_conf.h) for easy project management.
UI Example:
void ui_Screen1_screen_init(void)
{
ui_Screen1 = lv_obj_create(NULL);
lv_obj_clear_flag(ui_Screen1, LV_OBJ_FLAG_SCROLLABLE); /// Flags
lv_obj_set_style_bg_color(ui_Screen1, lv_color_hex(0xFFFFFF), LV_PART_SCROLLBAR | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(ui_Screen1, 255, LV_PART_SCROLLBAR | LV_STATE_DEFAULT);
ui_Image2 = lv_img_create(ui_Screen1);
lv_img_set_src(ui_Image2, &ui_img_image_a8890b2ae7c89994_png);
lv_obj_set_width(ui_Image2, LV_SIZE_CONTENT); /// 1
lv_obj_set_height(ui_Image2, LV_SIZE_CONTENT); /// 1
lv_obj_set_x(ui_Image2, 3);
lv_obj_set_y(ui_Image2, -3);
lv_obj_set_align(ui_Image2, LV_ALIGN_CENTER);
lv_obj_add_flag(ui_Image2, LV_OBJ_FLAG_ADV_HITTEST); /// Flags
lv_obj_clear_flag(ui_Image2, LV_OBJ_FLAG_SCROLLABLE); /// Flags
lv_obj_set_style_bg_color(ui_Image2, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(ui_Image2, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_grad_color(ui_Image2, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT);
ui_Button1 = lv_btn_create(ui_Screen1);
lv_obj_set_width(ui_Button1, lv_pct(40));
lv_obj_set_height(ui_Button1, lv_pct(20));
lv_obj_set_x(ui_Button1, -104);
lv_obj_set_y(ui_Button1, -146);
lv_obj_set_align(ui_Button1, LV_ALIGN_CENTER);
lv_obj_add_flag(ui_Button1, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
lv_obj_clear_flag(ui_Button1, LV_OBJ_FLAG_SCROLLABLE); /// Flags
lv_obj_set_style_bg_color(ui_Button1, lv_color_hex(0xFFD6D5), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(ui_Button1, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_grad_color(ui_Button1, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_img_src(ui_Button1, &ui_img_725565046, LV_PART_MAIN | LV_STATE_DEFAULT);
ui_Button2 = lv_btn_create(ui_Screen1);
lv_obj_set_width(ui_Button2, lv_pct(40));
lv_obj_set_height(ui_Button2, lv_pct(20));
lv_obj_set_x(ui_Button2, -105);
lv_obj_set_y(ui_Button2, -4);
lv_obj_set_align(ui_Button2, LV_ALIGN_CENTER);
lv_obj_add_flag(ui_Button2, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
lv_obj_clear_flag(ui_Button2, LV_OBJ_FLAG_SCROLLABLE); /// Flags
lv_obj_set_style_bg_color(ui_Button2, lv_color_hex(0xFFD6D5), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(ui_Button2, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_img_src(ui_Button2, &ui_img_958301348, LV_PART_MAIN | LV_STATE_DEFAULT);
ui_object_set_themeable_style_property(ui_Button2, LV_PART_MAIN | LV_STATE_DEFAULT, LV_STYLE_BG_IMG_RECOLOR,
_ui_theme_color_aaa);
ui_object_set_themeable_style_property(ui_Button2, LV_PART_MAIN | LV_STATE_DEFAULT, LV_STYLE_BG_IMG_RECOLOR_OPA,
_ui_theme_alpha_aaa);
ui_Button3 = lv_btn_create(ui_Screen1);
lv_obj_set_width(ui_Button3, lv_pct(40));
lv_obj_set_height(ui_Button3, lv_pct(20));
lv_obj_set_x(ui_Button3, -106);
lv_obj_set_y(ui_Button3, 135);
lv_obj_set_align(ui_Button3, LV_ALIGN_CENTER);
lv_obj_add_flag(ui_Button3, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
lv_obj_clear_flag(ui_Button3, LV_OBJ_FLAG_SCROLLABLE); /// Flags
lv_obj_set_style_bg_color(ui_Button3, lv_color_hex(0xFDD7D7), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(ui_Button3, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_img_src(ui_Button3, &ui_img_1685869645, LV_PART_MAIN | LV_STATE_DEFAULT);
ui_Switch1 = lv_switch_create(ui_Screen1);
lv_obj_set_width(ui_Switch1, 204);
lv_obj_set_height(ui_Switch1, 81);
lv_obj_set_x(ui_Switch1, 118);
lv_obj_set_y(ui_Switch1, -2);
lv_obj_set_align(ui_Switch1, LV_ALIGN_CENTER);
lv_obj_add_event_cb(ui_Button1, ui_event_Button1, LV_EVENT_ALL, NULL);
lv_obj_add_event_cb(ui_Button2, ui_event_Button2, LV_EVENT_ALL, NULL);
lv_obj_add_event_cb(ui_Button3, ui_event_Button3, LV_EVENT_ALL, NULL);
lv_obj_add_event_cb(ui_Switch1, ui_event_Switch1, LV_EVENT_ALL, NULL);
}
Compile and flash as before. Your DIY “slacking off at work” UI is ready!
Comments