标签: esp32

ESP32:频繁存储数据的最佳方式?

我正在ESP32-DevKitC板上开发一个C++应用程序,我可以在其中感应加速度计的加速度。应用程序的目标是存储加速度计数据,直到存储空间已满,然后通过 WiFi 发送所有数据并重新开始。在可能的情况下,micro 也会进入深度睡眠模式。

我目前正在使用 ESP32 NVS 库,它有很好的文档记录并且非常易于使用。该负面的,这是该库使用的闪存,因此很多著作,最终会降低驱动器

我知道 Espressif 还提供了一些其他存储库(FAT、SPIFFS 等),但据我所知(如果我错了,请纠正我),它们都使用闪存驱动器。

有没有其他可能做我想做的事但不使用闪存?

声明

  • 使用闪存本身不是问题,而是降低了它的性能
  • 当微型进入深度睡眠模式时,存储必须非易失性的或至少不会被擦除
  • 我没有使用任何 Arduino 库。

memory storage flash-memory esp32

18
推荐指数
1
解决办法
6653
查看次数

有ESP32-S2或ESP32芯片的模拟器吗?

我正在开发一个 esp 项目,并使用esp32s2工具链编译了我的代码,并创建了一个可以在真实设备上运行的二进制文件。但我没有真正的设备来测试我的二进制文件。有没有模拟器可以模拟ESP32-S2芯片或者ESP32芯片?

esp32

13
推荐指数
2
解决办法
9938
查看次数

对于 ESP32 摄像头“触发了欠压检测器”错误,有任何解决方案吗?

我让 ESP32cam 工作了几天,然后在启动时开始收到该消息。重新加载程序,仍然没有相机。失望

错误:

ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:1216
ho 0 tail 12 room 4
load:0x40078000,len:9720
ho 0 tail 12 room 4
load:0x40080400,len:6364
entry 0x400806b8


Brownout detector was triggered
Run Code Online (Sandbox Code Playgroud)

串口监视器

相机标签: HW-297 OV2640

程序中:

#define CAMERA_MODEL_AI_THINKER
Run Code Online (Sandbox Code Playgroud)

板卡选择:ESP32 Wrover模块

董事会选择

camera arduino arduino-c++ esp32

12
推荐指数
2
解决办法
5万
查看次数

如何修复 Failed to connect to ESP32: Timed out waiting for packet header 错误?

我尝试刷新 ESP32 但没有成功,我尝试使用esptool.pyArduino IDE。我尝试按启动按钮并重置,但没有成功。这是错误:

A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header
Run Code Online (Sandbox Code Playgroud)

arduino nodemcu esp32 arduino-esp32

11
推荐指数
3
解决办法
5万
查看次数

任务看门狗被触发 - 任务没有及时重置看门狗

我正在尝试编写一个小型异步 WebServer。我简单描述一下这个场景:

我的 ESP32 也是一个路由器。因此,如果我用手机连接 ESP32 正在传播的 WiFi,并使用浏览器调用 IP 地址和特殊路径,就会发送一个网站。这里显示一个按钮。到目前为止,它运行得很好。现在,如果我单击该按钮,则会将 HTTPS Web 请求(方法:GET)发送到特殊机器。本机应答并返回 JSON。这可能会持续几秒钟。从 JSON 字符串中提取值后,应显示该值。

为了实现这一目标,我使用以下库:

我知道(通过另一个草图)最后三个可以正常工作。

不幸的是,当我单击该按钮时,以下输出出现在我的串行监视器上:

开始连接到服务器...
[HTTPS] 开始... 路径: https: //192.168.4.101/api/unlock/generate_pin
[HTTPS] GET...
E (137906) task_wdt:任务看门狗已触发。以下任务未及时重置看门狗:
E (137906) task_wdt: - async_tcp (CPU 0/1)
E (137906) task_wdt: 当前正在运行的任务:
E (137906) task_wdt: CPU 0: IDLE0
E (137906) task_wdt :CPU 1:loopTask
E(137906)task_wdt:正在中止。
abort() 在核心 0 上的 PC 0x400e08af 回溯上被调用

: 0x4008cc18:0x3ffbe170 0x4008ce49:0x3ffbe190 0x400e08af:0x3ffbe1b0 0x40084f21:0x3ffbe1d0 0x4016581b:0x3ffbc120 0x400e1c66:0x3ffbc140 0x4008ab21:0x3ffbc160 0x4008932d:0x3ffbc180 正在

重新启动...
ets Jun 8 2016 …

webserver asynchronous task watchdog esp32

10
推荐指数
2
解决办法
4万
查看次数

使用 ESP-IDF 进行单元测试

目前,我正在使用 ESP-IDF 并尝试进行单元测试。

我已经找到了https://esp-idf.readthedocs.io/en/latest/api-guides/unit-tests.html,但有一点我不明白。

但首先,让我解释一下我的设置:

  • 我在 Windows 下工作并且有一个 MSYS32 shell。
  • IDF_PATH指向 ~/esp-idf,我的 esp-idf 套件所在的位置。
  • 但是,我的项目位于 ~/project_dir/subdir 中。他们按其应有的方式工作。

如果我遵循单元测试指南中的说明,我可以构建系统中内置的测试用例。但它没有找到我的应用程序的单元测试。这很清楚,因为他们完全坐在别的地方。

我现在该怎么办?最好不要过多篡改默认的单元测试应用程序?

我可以看到几种方法,但我不知道添加自己的组件的预期方法是什么。他们的测试用例进入上述应用程序:

  • 我应该将项目路径添加到单元测试应用程序中吗?
  • 我应该复制单元测试应用程序并将其添加到我的项目中吗?
  • 我应该在我的项目中创建一个文件夹并添加一个指向单元测试应用程序的链接吗?

embedded unit-testing esp32

9
推荐指数
1
解决办法
1747
查看次数

FreeRTOS 任务不应返回 - ESP32

我在 ESP32 上使用多线程。我创建了两个任务并将它们固定到核心 1。使用其中一个,我收到以下错误:

E (20426) FreeRTOS: FreeRTOS Task "MeasurementTask" should not return, Aborting now!
abort() was called at PC 0x4008b8f3 on core 1

Backtrace: 0x4008f34c:0x3ffd0a40 0x4008f57d:0x3ffd0a60 0x4008b8f3:0x3ffd0a80

Rebooting...
Run Code Online (Sandbox Code Playgroud)

但是,return我的“MeasurementTask”中没有任何声明(见下面的代码)。这里有什么问题?

tracker.cpp

E (20426) FreeRTOS: FreeRTOS Task "MeasurementTask" should not return, Aborting now!
abort() was called at PC 0x4008b8f3 on core 1

Backtrace: 0x4008f34c:0x3ffd0a40 0x4008f57d:0x3ffd0a60 0x4008b8f3:0x3ffd0a80

Rebooting...
Run Code Online (Sandbox Code Playgroud)

草图:

#include "tracker.h"

void threadedLoop(void *pvParameters) {
  Serial.println("Loop task pinned");
  for(;;) {
    checkAPTrigger();
    mqttLoop();
  }
}

void setupTracker() {
  Serial.print("Setup start: …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading freertos esp32

9
推荐指数
1
解决办法
3333
查看次数

ESP32 Core 1 发生恐慌(CPU1 上的中断 wdt 超时)

我正在使用带有 ESP32 的 Arduino IDE。硬件很简单:ESP32开发板+ LED和簧片开关。我现在想检测簧片开关输入(1Hz 到 40Hz 频率)并闪烁 LED。

代码很简单:

const int button = 27;
const int led =  25;

unsigned long now = millis();
unsigned long lastTrigger = 0;
boolean startTimer = false;

void IRAM_ATTR buttonInput() {
  Serial.println("IN");
  digitalWrite(led, HIGH);
  startTimer = true;
  lastTrigger = millis();
}

void setup() {
  Serial.begin(115200);
  pinMode(button, INPUT);
  pinMode(led, OUTPUT);
  digitalWrite(led, LOW);
  
  attachInterrupt(digitalPinToInterrupt(button), buttonInput, RISING);
}

void loop() {
  now = millis();
  if(startTimer && (now - lastTrigger > 25)) { // switch of …
Run Code Online (Sandbox Code Playgroud)

esp32 arduino-esp32

9
推荐指数
2
解决办法
2万
查看次数

无法刷入 esp32。该端口不存在

我已经尝试刷新 esp-wroom-32 很长时间了,但我似乎无法得到它。idf.py 抛出此错误:

Serial port /dev/ttyUSB0
A fatal error occurred: Could not open /dev/ttyUSB0, the port doesn't exist
CMake Error at run_serial_tool.cmake:55 (message):
  /home/matvey/.espressif/python_env/idf5.1_py3.9_env/bin/python;;/home/matvey/esp/esp-idf/components/esptool_py/esptool/esptool.py;--chip;esp32
  failed
FAILED: CMakeFiles/flash /home/matvey/esp/esp-idf/examples/get-started/hello_world/build/CMakeFiles/flash
cd /home/matvey/esp/esp-idf/components/esptool_py && /usr/bin/cmake -D IDF_PATH=/home/matvey/esp/esp-idf -D "SERIAL_TOOL=/home/matvey/.espressif/python_env /idf5.1_py3.9_env/bin/python;;/home/matvey/esp/esp-idf/components/esptool_py/esptool/esptool.py;--chip;esp32" -D "SERIAL_TOOL_ARGS=--before=default_reset; --after=hard_reset;write_flash;@flash_args" -D WORKING_DIRECTORY=/home/matvey/esp/esp-idf/examples/get-started/hello_world/build -P /home/matvey/esp/esp-idf/components/ esptool_py/run_serial_tool.cmake
ninja: build stopped: subcommand failed.
ninja failed with exit code 1, output of the command is in the /home/matvey/esp/esp-idf/examples/get-started/hello_world/build/log/idf_py_stderr_output_27303 and /home/matvey/esp/esp-idf/ examples/get-started/hello_world/build/log/idf_py_stdout_output_27303`
Run Code Online (Sandbox Code Playgroud)

我不知道可能是什么问题,我更改了 udev 设置,但也许它对我不起作用。

esp32

9
推荐指数
1
解决办法
3万
查看次数

ESP32 WPS在开机时重新连接

我正在尝试开发一个应该使用HTTP/REST API提供某些功能的物联网设备.我决定使用ESP32芯片(在"ESP32开发板"上).

现在我想实现一个易于使用的WLAN配置.我不想像许多其他样本那样在我的源代码中存储凭据; 所以我决定使用WPS.

我尝试使用以下源代码实现基本Web服务器:https: //randomnerdtutorials.com/esp32-web-server-arduino-ide/ - 然后我添加了EPS32扩展附带的Wifi/WPS样本的WPS功能对于Arduino IDE.

现在WPS已经工作,即当开发板上电时,它处于WPS连接模式并等待路由器接受WPS连接.它成功获取SSID并连接到WLAN.

但是当我关闭ESP32并重新上电时,我必须再次进行WPS重新连接程序.我期望重新连接,存储凭据,并且能够在以后随时打开ESP32设备时再次连接到同一WLAN.我想我必须存储一些凭据并使用它们重新建立连接 - 但我在哪里获取凭据,以及如何重新连接?

我在网上搜索"ESP32 WLAN WPS重新连接"和类似的术语,但确实找到了非wps(SSID +密码)连接的重新连接策略.我还检查了WiFi库文档和esp_wps库文档,但没有找到合适的东西.

这是WLAN WPS连接源:

#include <WiFi.h>
#include "esp_wps.h"

#define ESP_WPS_MODE WPS_TYPE_PBC

esp_wps_config_t config = WPS_CONFIG_INIT_DEFAULT(ESP_WPS_MODE);

String wpspin2string(uint8_t a[]){
  //...
}

void WiFiEvent(WiFiEvent_t event, system_event_info_t info){
  switch(event){
  case SYSTEM_EVENT_STA_START:
    Serial.println("Station Mode Started");
    break;
  case SYSTEM_EVENT_STA_GOT_IP:
    Serial.println("Connected to :" + String(WiFi.SSID()));
    Serial.print("Got IP: ");
    Serial.println(WiFi.localIP());
    break;
  case SYSTEM_EVENT_STA_DISCONNECTED:
    Serial.println("Disconnected from station, attempting reconnection");
    WiFi.reconnect();
    break;
  case SYSTEM_EVENT_STA_WPS_ER_SUCCESS:
    Serial.println("WPS Successfull, stopping WPS and connecting to: " …
Run Code Online (Sandbox Code Playgroud)

arduino wlan esp32

8
推荐指数
1
解决办法
1945
查看次数