esp32在Arduino中配置流程以及部分问题解决方案

概述

在配置mac os下,esp32在Arduino中的开发环境,遇到了一些问题,最终得到解决。
在这汇总整理,希望能够帮助到大家。

串口的确认

查看端口

这里用到终端命令行的方式确认串口名称

请将以下命令运行两次。首先,断开开发板或适配器,首次运行以下命令;然后,连接开发板或适配器,再次运行以下命令。其中,第二次运行命令后出现的端口即是 ESP32 对应的串口:

ls /dev/cu.*

确认串口连接
  • ls /dev/cu.*

    ![Copy to clipboard](

  • 您会看到类似如下输出:

    /dev/cu.Bluetooth-Incoming-Port /dev/cu.SLAB_USBtoUART /dev/cu.SLAB_USBtoUART7

    !

  • 根据您连接到电脑上的开发板类型和数量,输出结果会有所不同。请选择开发板的设备名称,并运行以下命令:

    screen /dev/cu.device_name 115200

如果打印出的日志是可读的(而不是乱码),则表示串口连接正常。此时,您可以继续进行安装,并最终将应用程序上载到 ESP32。

Arduino上的串口预确认

可以打开工具栏-串口监视器查看情况。

驱动方面

cp2102驱动安装
cp210x驱动安装

Arduino自带的环境配置

打开 Arduino IDE 首选项:

在【附加开发板管理器网址】中填入url:

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

打开【工具】【开发板管理器】,安装esp32平台:

在这里插入图片描述

(这里有几个版本可以选择,我在下载安装最新版本后在上传时出现了不同类型的报错。尚且未知原因,如果出现报错,可以尝试安装早些时候的版本。)

(这里下载由于下载源的原因经常会下载失败,这里需要不时的连续尝试下载)

安装之后在开发板可以看到,选择ESP32开发板

安装完成,重启Arduino IDE。

报错示例

“time out waiting for packet content”

“invalid head of packet(0x00)”

串口监视器乱码

波特率的选择错误,选择匹配的波特率即可正确输出。

在这里插入图片描述

根据主板型号“完整配置”主板上传程序环境设置

尤其是upload speed 一项,否则可能出现上传失败的情况。
在这里插入图片描述

ESP32 ,可以使用 attachInterrupt() 函数来配置外部断。在 ARDUINO IDE ,可以使用 attachInterrupt() 函数来实现按键断的优先级配置。下面是一个示例代码: ```C++ const int buttonPin1 = 2; // 按键1引脚 const int buttonPin2 = 4; // 按键2引脚 volatile bool button1Pressed = false; // 按键1是否被按下的标志 volatile bool button2Pressed = false; // 按键2是否被按下的标志 void IRAM_ATTR button1ISR() { button1Pressed = true; } void IRAM_ATTR button2ISR() { button2Pressed = true; } void setup() { // 配置按键1断 pinMode(buttonPin1, INPUT_PULLUP); attachInterrupt(buttonPin1, button1ISR, FALLING); // 配置按键2断 pinMode(buttonPin2, INPUT_PULLUP); attachInterrupt(buttonPin2, button2ISR, FALLING); } void loop() { // 处理按键1断 if (button1Pressed) { button1Pressed = false; // 处理按键1被按下的操作 } // 处理按键2断 if (button2Pressed) { button2Pressed = false; // 处理按键2被按下的操作 } } ``` 在上面的示例代码,我们使用了 IRAM_ATTR 宏来定义了两个断服务程序(ISR),即 button1ISR() 和 button2ISR()。这是因为在 ESP32 断服务程序必须放在 IRAM ,否则会导致程序出错。然后,我们在 setup() 函数使用 attachInterrupt() 函数来配置了按键 1 和按键 2 的断。在 loop() 函数,我们使用了一个无限循环来不断地检测按键是否被按下,并执行相应的操作。注意,我们使用了 volatile 关键字来定义了两个变量 button1Pressed 和 button2Pressed,这是因为这两个变量将被断服务程序修改,如果不使用 volatile 关键字,可能会导致程序出错。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值