序言

HoloCubic项目在b站有很高的热度,是由稚晖君大佬一手打造的,这个应该是up项目里最简单好玩的一个了。。。原视频链接

博主则根据开源文件在一个星期时间内复刻了一个。

硬件方面

比较符合自身学习的需要,该项目基于热门的lvgl图形库,同时mcu为esp32(网上lvgl移植到esp32的资料很片面,看源码还是很好的学习方式),天线的设计方式也很合理。

1.天线部分

holopcb.PNG

  • 天线部分采用贴片陶瓷天线,这使得pcb天线部分小型化。
  • 射频天线下方净空无覆铜,而且天线附件的话元器件很少。
  • 天线周围有很多GND过孔,比较抗干扰
  • 天线的走线无分叉,无过多弯曲,有利于减少耦合。

CP2102为转串口芯片(进一步紧凑布局),MU6050陀螺仪传感器应用,外部设计sd卡扩展内存等。

2.MPU6050

MU6050.jpg
内部集成了3轴MEMS陀螺仪3轴MEMS加速度计,还有一个可扩展的数字运动处理器DMP,对于本项目完全够用,加速度计用来弥补陀螺仪角速度积分误差。

3.主控板和屏幕转接板焊接问题

主控板的ESP32-PICO-D4是QFN-48封装,MPU6050是QFN-24封装,屏幕转接板的FPC排线引脚只有0.2mm间距所以用电烙铁焊接似乎不太可能,热风枪焊接也有一定的风险,推荐电路板打样厂家SMT贴片焊接(嘉立创就不错不过成本费有些高),使用SMT贴片需要元件坐标文件(AD19输出教程),如果自己有加热台就不需要SMT贴片了。

微信图片_20211107181937.jpg

软件部分

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);
}

Q.E.D.


C程序员永远不会灭亡,他们只是cast成了void