序言
HoloCubic项目在b站有很高的热度,是由稚晖君大佬一手打造的,这个应该是up项目里最简单好玩的一个了。。。原视频链接
博主则根据开源文件在一个星期时间内复刻了一个。
硬件方面
比较符合自身学习的需要,该项目基于热门的lvgl图形库,同时mcu为esp32(网上lvgl移植到esp32的资料很片面,看源码还是很好的学习方式),天线的设计方式也很合理。
1.天线部分
- 天线部分采用贴片陶瓷天线,这使得pcb天线部分小型化。
- 射频天线下方净空无覆铜,而且天线附件的话元器件很少。
- 天线周围有很多GND过孔,比较抗干扰。
- 天线的走线无分叉,无过多弯曲,有利于减少耦合。
CP2102为转串口芯片(进一步紧凑布局),MU6050陀螺仪传感器应用,外部设计sd卡扩展内存等。
2.MPU6050
内部集成了3轴MEMS陀螺仪
,3轴MEMS加速度计
,还有一个可扩展的数字运动处理器DMP
,对于本项目完全够用,加速度计用来弥补陀螺仪角速度积分误差。
3.主控板和屏幕转接板焊接问题
主控板的ESP32-PICO-D4是QFN-48封装,MPU6050是QFN-24封装,屏幕转接板的FPC排线引脚只有0.2mm间距所以用电烙铁焊接似乎不太可能,热风枪焊接也有一定的风险,推荐电路板打样厂家SMT贴片焊接(嘉立创就不错不过成本费有些高),使用SMT贴片需要元件坐标文件(AD19输出教程),如果自己有加热台就不需要SMT贴片了。
软件部分
TFT屏幕驱动,和屏幕图像文字镜像翻转(因为要用到分光棱镜),添加lvgl内置的软键盘组件,后面的调用则是用陀螺仪传感器检测Y轴翻转从而实现gui页面的翻转。
void Display::init()
{
ledcSetup(LCD_BL_PWM_CHANNEL, 5000, 8);
ledcAttachPin(LCD_BL_PIN, LCD_BL_PWM_CHANNEL);
lv_init();
lv_log_register_print_cb(my_print); /* register print function for debugging */
tft.begin(); /* TFT init */
tft.setRotation(4); /* mirror 修改反转,如果加上分光棱镜需要改为4镜像*/
}
时间api则采用淘宝的api
String unit = "c";
String time_api = "http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp";
天气api则采用心知天气,json格式进行解析。
void UpdateWeather(void)
{
g_weather = g_network.getWeather("https://api.seniverse.com/v3/weather/now.json?key=" + g_cfg.weather_key + "&location=" + g_cfg.cityname + "&language=" + g_cfg.language + "&unit=" + unit); //如果要改城市这里也需要修改
Serial.println(g_weather.weather_code);
Serial.println(g_cfg.cityname.c_str());
char temperature[10] = {0};
sprintf(temperature, "%d", g_weather.temperature);
display_weather(g_cfg.cityname.c_str(), temperature, g_weather.weather_code);
}