zoukankan      html  css  js  c++  java
  • WiFi 和蓝牙一体的 ESP32 芯片及乐鑫官方的 Arduino 开发工具包

    ESP32 芯片是由乐鑫开发的芯片。下图是基于 ESP32 芯片的开发板:

    图 1:ESP32 DevKitC V4 开发板

    ESP32 的多种应用开发方式

    至少有四种方式可以选择:

    • 乐鑫官方的 ESP-IDF[1]
    • 乐鑫官方的 Arduino 开发工具包[2]
    • MicroPython[3]
    • TinyGo[4]
      TinyGo 目前(2021-03-14)还未支持 ESP32 的 WiFi 和蓝牙

    为了方便开发,通常选择 Arduino 开发工具包和 MicroPython。下文选择介绍前者。

    Arduino core for the ESP32

    官方提供 Arduino 开发工具包是为了使用 Arduino IDE 和 Arduino 的生态,并不是要求一定要再买一块 Arduino 板来连接。

    其工具包在 GitHub 上:

    https://github.com/espressif/arduino-esp32

    要使用这个工具包进行开发,需要做好两个准备:

    1. 下载和安装 Arduino IDE
    2. 把 ESP32 开发工具包导入到 Arduino IDE

    第一步简单,到官方网站下载即可。以下简要说明第二步。

    安装和配置 Arduino IDE 的 ESP32 开发环境

    导入方式有三种,根据情况选择。资料比较全,这里简单列举出来,不再过多重复。

    1. 最简单的配置和安装方式是使用 Arduino IDE 的开发板管理器:

      https://github.com/espressif/arduino-esp32/blob/master/docs/arduino-ide/boards_manager.md (Installation instructions using Arduino IDE Boards Manager)

      前提是能访问 raw.githubusercontent.com 这个域名(被墙了)。

    2. 如果没法访问,那就自己用 Git 去 Clone GitHub 仓库:

      https://github.com/espressif/arduino-esp32/blob/master/docs/arduino-ide/windows.md (Steps to install Arduino ESP32 support on Windows)

      不过这种方式比较慢,因为要 Clone 整个仓库,比较大。

    3. 下载仓库的压缩文件:

      https://www.cnblogs.com/codeit/p/14323836.html (Arduino配置ESP32开发环境)

      不过由于不能执行 Git 方式的自动 Clone,需要自行下载 Git 子模块。即文章里已经有提到的 ESP32_AzureIoT_Arduino。这个是开发包的官方依赖,不用担心存在什么大问题,使用其他方式也得这样安装。

    如果 GitHub 下载慢,试试 GitLab:

    选择哪块板

    在 Arduino IDE 的 [ 工具 | 开发板 | ESP32 Arduino ] 菜单里面能够看到有多个选项,不同的选项对应着不同的配置。为了不影响后续开发,需要选择合适的板。

    如果上面有和手头上相同名称的板,那么直接选择就可以了。如果没有相同名称或者不太确定,那么就需要根据一些内容来判断。

    从已有信息中找到目标。

    菜单的第一个选项是 ESP32 Dev Module。根据这个名称到工具包代码里搜索,找到 boards.txt 这个文件。里面就是各种板的配置。

    大致对比了一下不同板的配置,基本都一样。部分区别列举如下:

    • build.variant 选项
      这个是跟引脚相关的配置。主要关注这个配置。
    • build.flash_freq 选项
      这个是 Flash 存储器的频率。默认的值有的是 40m 有的是 80m。
    • menu.PSRAM.* 选项
      有些板带了 PSRAM,就会多出这部分配置

    其他选项在目前阶段看起来不太重要,因此这里主要关注 variant (变体)选项,确保选择的板的引脚对应正确。

    build.variant=esp32 为例。在 variants 文件夹里面找到 esp32 文件夹,打开里面的 pins_arduino.h。再结合仓库里的 README.md 底下的 PINMAP,就能知道 pins_arduino.h 里面配置的含义了。

    图 2:引脚配置文件里的数字与开发板引脚的对应关系

    从上图看出,数字不是乱选的。这些数字分别对应了通用输入/输出引脚(GPIO,General Purpose Input Output),其中有一部分引脚只能作为通用输入(GPI)。

    不同的开发板可能会在设计的时候就占用了不同的 GPIO 引脚,因此需要在开发板剩余的 GPIO 中选择合适的引脚配置到 pins_arduino.h 里面。

    在配置的时候,需要参考开发板的引脚文档。如果缺少文档,可以直接看板上的引脚数字。这些引脚表示对应数字的 GPIO 引脚。具体的 GPIO 引脚都可以用作哪些功能,可以参考芯片的数据手册[5]。

    在选择开发板选项的时候,着重注意一下引脚文件的配置就行了。不要选择那种配置了已被开发板元器件占用的引脚。

    引脚配置文件里面还有开头的几个宏定义,这些是固定的。例如:

    #define NUM_DIGITAL_PINS        40
    

    表示芯片共有 40 个数字管脚。ESP 32 共有 49 个管脚,其中 9 个引脚的类型为 P,即 Power。剩下的要么是通用 I/O ,要么是独用的 I 或者 O。

    SPI 通信

    变体引脚配置文件里面跟 SPI 相关的引脚使用的是:

    • SS = GPIO5
    • MOSI = GPIO23
    • MISO = GPIO19
    • SCK = GPIO18

    查询芯片的数据手册可以看到这些引脚的功能。

    图 3:ESP32 数据手册里的管脚描述[5]

    一个引脚有多个功能,但在使用的时候只选择一种。

    ESP32 共有 3 组 SPI(SPI、HSPI、VSPI),这里是用到其中的 VSPI,没啥特别。

    拿个例子过一遍开发和上传的流程

    在官方的 Arduino 开发工具包里面找到 libraries/ESP32/examples,里面有例子。

    在将开发板连接到电脑之后,挑选一个例子的代码复制到 Arduino IDE 的编辑器里面,编译并上传。

    例如选择 examples/ChipID/GetChipID/GetChipID.ino 文件里的代码:

    uint32_t chipId = 0;
    
    void setup() {
      Serial.begin(115200);
    }
    
    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
    ", ESP.getChipModel(), ESP.getChipRevision());
      Serial.printf("This chip has %d cores
    ", ESP.getChipCores());
      Serial.print("Chip ID: "); Serial.println(chipId);
      
      delay(3000);
    
    }
    

    然后编译,这个选项在 [ 项目 | 验证/编译 ],或者用快捷键 Ctrl+R

    编译通过后上传,这个选项在 [ 项目 | 上传 ],或者用快捷键 Ctrl+U

    以下是上传的日志:

    esptool.py v3.0-dev
    Serial port COM7
    Connecting.....
    Chip is ESP32-D0WDQ6 (revision 1)
    Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
    Crystal is 40MHz
    MAC: xx:xx:xx:xx:xx:xx
    Uploading stub...
    Running stub...
    Stub running...
    Changing baud rate to 921600
    Changed.
    Configuring flash size...
    Auto-detected Flash size: 4MB
    Compressed 8192 bytes to 47...
    Writing at 0x0000e000... (100 %)
    Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.0 seconds (effective 16383.2 kbit/s)...
    Hash of data verified.
    Compressed 18656 bytes to 12053...
    Writing at 0x00001000... (100 %)
    Wrote 18656 bytes (12053 compressed) at 0x00001000 in 0.2 seconds (effective 938.7 kbit/s)...
    Hash of data verified.
    Compressed 207008 bytes to 108334...
    Writing at 0x00010000... (14 %)
    Writing at 0x00014000... (28 %)
    Writing at 0x00018000... (42 %)
    Writing at 0x0001c000... (57 %)
    Writing at 0x00020000... (71 %)
    Writing at 0x00024000... (85 %)
    Writing at 0x00028000... (100 %)
    Wrote 207008 bytes (108334 compressed) at 0x00010000 in 2.2 seconds (effective 767.1 kbit/s)...
    Hash of data verified.
    Compressed 3072 bytes to 128...
    Writing at 0x00008000... (100 %)
    Wrote 3072 bytes (128 compressed) at 0x00008000 in 0.0 seconds (effective 4915.3 kbit/s)...
    Hash of data verified.
    
    Leaving...
    Hard resetting via RTS pin...
    

    这样就上传成功了。

    接着验证结果。在 [ 工具 | 串口监视器 ] 里面,把波特率设置为 115200,就可以看到输出。例如:

    ESP32 Chip model = ESP32-D0WDQ6 Rev 1
    This chip has 2 cores
    Chip ID: 5940616
    

    接下来就可以发挥创造力了~

    参考

    [1]: https://docs.espressif.com/projects/esp-idf/zh_CN/stable/esp32/ (ESP-IDF 编程指南)
    [2]: https://github.com/espressif/arduino-esp32 (Arduino core for the ESP32)
    [3]: http://docs.micropython.org/en/latest/esp32/quickref.html (Quick reference for the ESP32)
    [4]: https://tinygo.org/microcontrollers/esp32-coreboard-v2/ (ESP32 - CORE BOARD)
    [5]: https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_cn.pdf (ESP32系列芯片——技术规格书)
    
    知识共享许可协议
    本文采用知识共享署名 2.5 中国大陆许可协议进行许可。欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 schaepher(包含链接)。如您有任何疑问或者授权方面的协商,请给我留言

  • 相关阅读:
    Python——pygame入门实例
    Python——基础函数2
    Python——面向对象的三特征
    201521123083《Java程序设计》第四周学习总结
    201521123083《Java程序设计》第二周学习总结
    201521123083 《Java程序设计》第6周学习总结
    《Java程序设计》第1周学习总结
    201521123083《Java程序设计》第5周学习总结
    《Java程序设计》第3周学习总结
    201521123083 《Java程序设计》第7周学习总结
  • 原文地址:https://www.cnblogs.com/schaepher/p/14534524.html
Copyright © 2011-2022 走看看