没错,这块黑色的小硅片就是“芯片”本体(通常比大拇指还小,内部集成了实现特定功能的硬件集成电路)。
由上述芯片研发的模组是这样的:
从外形上来看,模组比芯片亮丽了不少(至少,你可以看见铜箔、引脚),那块黑色的ESP32芯片就在他的内部。
由上述模组研发的开发板长这样:
是的,开发板上标有ESP-WROOM-32的部件就是上面的“模组”。开发板相比于“模组”又豪华了不少(终于有按键、USB接口、LED灯了),是不是想要马上写个点亮LED灯的程序呢?
想要点亮LED灯?等等!我们先来聊聊如何将程序烧录到芯片、模组、开发板中。
首先,直接对那块黑黑的“芯片”进行烧录程序是困难的,试想,他连可以连接导线的铜箔引脚都没有,如何接通导线连接电源,如何下载程序?是的,我们不能直接对芯片进行软件开发。
目前,对ESP32进行开发主要有两种模式:模组方式、开发板方式
需要的硬件:一块模组+USB转串口线+杜邦线+焊接工具
实物连接:
需要的硬件:开发板+一根USB线
实物连接:
你看,开发板模式的开发是不是更加便捷呢?无需自己焊接,用USB线连接开发板即可实现即插即用,开始开发之旅。
通过以上的直观认识,你肯定发现了规律:从芯片→模组→开发板,他们的硬件资源越来越多了,开发板的硬件明显多于另外两者,对开发板开发只需要USB连接电脑即可。
下表给出了他们硬件资源的主要区别:(以上述芯片、模组为参考)
对象\硬件资源 |
时钟源 (电阻、电容组成的振荡器) |
Flash (存储代码的主要介质) |
接口 (如I/O,USB) |
UI(人际交互) 如(按键、LED、显示屏) |
芯片 |
ⅹ |
ⅹ |
ⅹ |
ⅹ |
模组 |
√ |
√ |
ⅹ |
ⅹ |
开发板 |
√ |
√ |
√ |
√ |
还记得单片机/微机原理课上。老师说的单片机运行的最小系统吗?
没错,单片机运行程序的基本条件(也即最小系统):处理器(CPU芯片)+时钟源+电源+存储器。
时钟源、Falsh作为运行应用程序的基本条件,芯片本身并不具备该条件,因此,芯片本身并不能直接运行应用程序,模组在芯片的基础上,添加了运行程序的“基本条件”(尽管他需要自己焊接到对应的引脚),开发板不仅在模组的基础上满足运行程序的“基本条件”,而且提供了即插即用的接口和人际交互外设。
通过上述知识,你是否有这样的疑问,芯片、模组、开发板之间的对应关系是怎样的呢?
请看下图:
发现了吗?
第2、3、4模组,他们使用的芯片都是ESP32-D0WD,即芯片-模组的对应关系是:1-n(1对多),同一款芯片可以研发成不同的模组,那么为什么将同一芯片做成不同模组呢?
从上图你也许发现,使用的芯片相同,但不同模组的Flash大小、天线的材质、模组尺寸是不同的。是的,芯片到模组的演变经历了“定制化、专用化”的过程。模组最终会嵌入到电视、电冰箱、空调等不同的产品中去,对模组的存储空间大小、模组天线材质、模组的大小要求当然不一样。
通常,模组的研发是面向“产品”的,因为,模组研发的最终目的是将模组嵌入到目标产品(如,电视、电冰箱、空调)。ESP32-D0WD芯片提供了实现蓝牙和WiFI功能的内部集成电路,但A公司只需要WiFi功能,为满足A公司的需求,仅将ESP32-D0WD芯片的与WiFi功能相关的引脚引出,制作出一款“WiFi”模组(尽管ESP32-D0WD芯片也可以实现蓝牙功能,但A公司不需要,因此不对外提供ESP32蓝牙功能的接口了)。同理,B公司只需要蓝牙功能,为满足B公司的需求,仅将ESP32芯片的与蓝牙功能相关的引脚引出,制作出一款“蓝牙”模组。(当然,你可以选择同时实现蓝牙和WiFi功能,这样引出的引脚更多,模组体积可能更大,money也更多,所以,成本、功能、尺寸都是需要考虑的因素)
总之,ESP32-D0WD芯片提供了实现蓝牙和WiFI功能的完备硬件集,模组只是选取芯片的部分功能,并通过引出引脚接口提供给用户。
模组的研发过程如下:(从芯片到模组着实经历了一番不小的经历呢)
目前,除了ESP官方提供的模组和开发板,也有其他公司基于ESP官方提供的ESP-32芯片进行模组的开发,即芯片还是那个芯片,对芯片的外加工,如引线布局,时钟源功能电路设计等与官方不同。
发现了吗?一款ESP-WROVER-B模组(板载ESP-D0WD芯片)可以开发出很多开发板:ESP-DevKitC、ESP32-LyraT等
同样,ESP-WROVER-IB模组(板载ESP-D0WD芯片)可以开发出很多开发板:ESP-DevKitC、ESP-WROVER-KIT-VIB等。等等,刚才不是说ESP-DevKitC由ESP-WROVER-B模组研发而来吗?为什么这里又说ESP-WROVER-IB模组开发出的开发板也叫做ESP-DevKitC?
是的,同一模组,可以嵌入到多个不同型号的开发板中。同一型号的开发板也可以使用不同的模组(他们只是名字一样,I/O数量、天线材质等不一样)。因此,模组与开发板(确切的说是开发板型号,不是开发板实体)的对应关系是多对多的关系。
(不同公司需要的I/O种类和数量不同,需要的UI方式也不同,有的需要显示屏,有的只需要LED灯就够了)
实际上,芯片只是“定义”了引脚功能,并未将引脚引出到可供连接的铜箔上,模组将部分引脚引出以供产品连接。
不同模组的功能可能不同,因为他们需要的资源不同,因此引出的引脚不同。
模组是面向“产品”的,最终目的是嵌入到产品内部,成为执行特定功能的模块(这也是模组概念的由来,模组,即执行特定的功能的模块,用于组合到产品中使用)
开发板是面向“测试学习”的,是一个假定的“产品”(你打开一个空调,他内部连接的是一个模组,不是一个开发板),是针对嵌入到其内部的模组,提供快速地学习了解,测试模组性能的工具。因此,开发板可看作模组到产品的一个“中间临时变量”,如下图所示:
我们很难一次性写出完全正确的应用程序代码,因此,尽管最终用到产品中去的是“模组”,但开发板的存在依然重要,在写应用程序时,将错误信息打印到开发板的显示屏上、或者通过LED灯显示程序出错的位置将大大加快开发的进程,保证程序的健壮性。在确保应用程序无误后,去掉代码中的“打印语句”(最终产品可能是一个无显示屏、无LED灯的设备),然后,将代码批量烧录到模组中,就得到执行我们指定应用功能的模组了,最后一步就是嵌入到产品中,成为执行一定功能的模块)。
由上述知识可知,一个芯片可以制定多个模组、一个模组可以嵌入到不同的开发板,一个型号的开发板内部使用的可以是不同的模组。从芯片到开发板,数量是越来越多了!
硬件的使用离不开软件的支持,那么,使用开发板进行学习、测试时的软件开发包(Software Develop Kit,SDK)是否如开发板数量一样很多呢。试想100个开发板对应100个SDK合理吗?
NO,选择合适的开发板已经够累人了,能不能针对我选的开发板快速给我一个SDK?
没问题,用它:ESP-IDF开发包即可。
实际上,ESP32系列的芯片只有一个大的“开发包”,或者说是开发框架(就是上面提到的ESP-IDF),其中包含了实现ESP32系列芯片所有底层功能的软件代码,也就是说,你选择的任意一款ESP32开发板,他对应的软件开发包只有一个:ESP-IDF。那么一个开发包如何兼容不同的开发板呢?ESP-IDF提供了图形化的配置工具:
根据ESP-IDF中的操作指南文档,在工程配置这一步骤中,打开如图所示的配置界面,就可以选择具体的芯片、模组、是否包含显示屏等选项,自动生成能够适用于指定开发板的代码。
是不是很方便尼?
总之,一个软件开发包(SDK)与芯片、模组、开发板的对应关系是一对多的,ESP-IDF开发包适用于所有ESP32系列的开发板。
1.芯片→模组→产品,是功能不断专用化、硬件资源不断丰富的过程。
2.开发板只是一个“模组→产品”过程中的“临时中间变量”,开发板用于对模组进行学习、测试,最终用到产品中的是烧录测试学习时保留下来代码的模组,而不是开发板。
3.芯片与模组的对应关系是一对多,模组与开发板的对应关系是多对多。
4.模组是面向“产品”的,开发板面向“学习测试”。
5.软件开发包(SDK)与芯片、模组、开发板的对应关系是一对多的,在开发包(ESP-IDF中)针对的是某款芯片的开发,是芯片功能实现的一个完备软件集(如,开发包中包含HTTP协议实现的软件,而你不需要用HTTP,忽略它,只配置使用自己需要的包即可),因此对于不同的开发板选择对应芯片的开发包即可。
6.芯片提供了实现芯片支持的所有功能的内部集成电路硬件资源,SDK提供了实现该芯片的所有功能的底层软件资源。因此,选择一块合适的开发板,只需要从选择一款合适的芯片即可(芯片数量相比于开发板数量少多了),不必大海捞针的去看每一个开发板的硬件手册;然后,依据芯片选择合适的模组;最后,再依据模组选择合适的开发板就可以开始了(至于软件包,你完全不必担心,反正ESP32系列芯片对应的开发包是同一个,即ESP-IDF)。
好了,选择一款自己喜欢的ESP32开发板,大胆的实现你的ideas吧。
(谢谢点赞或收藏)