本帖最后由 RCSN 于 2020-5-15 22:25 编辑
乐鑫出了这款带USB的无线MCU-ESP32S2,已经有一段时间,而楼主开始时候也是想利用这款新品开个USB相关的设备出来,但是无奈的是,乐鑫官方至今对USB这块,好像维护的不是很好,device端也是Tinyusb在维护,host迟迟还没着落。除了USB这块,其他一些功能也在慢慢补充当中,楼主用esp32s2已经有一个多月有余,在此期间也用官方的esp32s2模组开发了个二维码识别,但是esp32的浮点运算实在不敢恭维,比起STM32F4甚至还要差。后面陆陆续续也用来识别数据矩阵码,apritags码,还有相关圆形和方形检测等图像小处理,再利用esp32s2本身的wifi,建立个tcp server或者http或者USB与PC进行相关交互。
ESP32-S2 集成了丰富的外围设备,有 43 个可编程 GPIO,可以灵活配置为 USB OTG、LCD 接口、摄像头接口、SPI、I2S、UART、ADC、DAC 等常用功能。ESP32-S2 具有 LCD 接口和 14 个可配置的电容触摸 GPIO,可为基于触摸屏和触摸板的设备提供良好的 HMI 解决方案。
官方介绍中,也挺多外设,但是不少外设都是复用性,比如LCD和DVP共用一个数据口,也跟I2S共用一个资源,SPI与IIC不少冲突。ADC和DAC尚不可用。电容触摸IO也有部分跟DVP和LCD冲突,不过作为esp32系列中,可扩展的IO多了不少,长达43个IO。
ESP32-S2使用单核Xtensa LX7内核,运行频率高达240 MHz,目前ESP32使用单核或双核LX6。 这些核心之间的差异隐藏在营销演讲和新闻稿中,但看起来LX7核心能够在每个周期进行更多浮点运算:LX6显然有2个FLOPS /周期,但LX7有64个FLOPS /周期。 这对于DSP和其他计算量很大的应用来说非常棒。 芯片上的其他功能包括320 kB SRAM,128 kB ROM和16 kB RTC存储器。
楼主开发ESP32是用官方的SDK,借助ESP-IDF开发平台,freertos作为RTOS,开发起来确实比较容易。Linux下编译开发也很不错。
楼主DIY的用了积木式的板子,以方便各种资源搭配。屏幕是2.4寸,SPI接口,分辨率为320*240,摄像头为OV2640,走的DVP接口,中间带有下载电池升压充电板。官方目前的esp-camera框架适用于esp32而不适用esp32s2,楼主在参考乐鑫内部员工的esp32s2 demo板上的代码,把原有的lcd 8080接口和DVP共用的一套代码抽离出dvp代码,不过目前乐鑫官方已经有了对于esp32s2的camera驱动代码。
楼主所用的二维码识别算法是quirc算法,这个代码量少,比较适用于嵌入式的MCU平台,但是esp32系列的浮点运算实在太差,可以参考此链接对比 https://blog.classycode.com/ esp32 -float ... 9f6f567a69https://blog.classycode.com/ esp32 -float ... 9f6f567a69
esp32s2的SPI速度还可以,可以达到26M,并且支持DMA传输,用来刷图,拉窗效果不明显。
二维码识别效果:
OV2640图像显示