在真正玩转开发板和创新设置之前,我们得先熟悉一下常用的示例。如果说后面的各个创意设计是大餐,那么前面的常用示例,就是前菜。好像也不对,前面的创意设计应该是各种食材。熟悉各种食材的属性,才能够进行不同的搭配。
我们这一节先学习和了解ESP32中最常见也是最基本的一系列应用。
2.1 ChipID
通过ChipID这个例子,我们可以读取ESP32对应的硬件版本信息。
根据前一节介绍的,arduino代码分为setup和loop两部分,其中setup用来完成前面的初始化。而loop用来完成不同的功能。
2.1.1定义全局变量
uint32_t chipId = 0;
放在setup之前的变量通常为全局变量,全局变量可以在多个代码块中进行调用。这里的chipId就在后面的loop中进行调用。
2.1.2 SETUP初始化串口
void setup() {
Serial.begin(115200);
}
setup很简单,仅仅初始化了串口。
2.1.3 loop实现打印功能
void loop() {
for(int i=0; i<17; i=i+8) {
chipId |= ((ESP.getEfuseMac() >> (40 - i)) & 0xff) << i;
}
Serial.printf("ESP32 Chip model = %s Rev %d\n", ESP.getChipModel(), ESP.getChipRevision());
Serial.printf("This chip has %d cores\n", ESP.getChipCores());
Serial.print("Chip ID: "); Serial.println(chipId);
delay(3000);
}
Loop中有些意思。下面一点一点梳理一下:
1.for循环:循环中,i从0开始,每次+8,也就是循环3次,对应i值为0, 8, 16;
2. chipId |=:前面chipId初始值为0, |=将对应的数值设置为1;
3. ESP.getEfuseMac()函数获取MAC地址,然后通过>>右移操作,右移3次。第一次右移40bit,第二次右移32bit 第三次由于24bit;
4. & 0xff取得最右边的16bit
5. <<i将数值再左移回去,注意,这里左移会达到逆序效果;
6.具体操作类似下面的图:
所以最后得到的chipId应该是MAC的最高3个byte的逆序排列。
10进制还看不太清除
转换为16进制就很清楚了。
可以看到,MAC的最左边为D8 D3 7D,经过右移再左移逆序,变为7D 。
Serial.printf("ESP32 Chip model = %s Rev %d\n", ESP.getChipModel(), ESP.getChipRevision());
Serial.printf("This chip has %d cores\n", ESP.getChipCores());
这里用到了getChipModel, getChipRevision, getChipCores这些函数,分别读取芯片型号,版本号,内核数量等信息。
未完待续。