标签: esp32

当一个任务写入变量而其他任务读取该变量时,我们是否需要信号量?

我正在研究 freeRtos,并且我有一个名为 x 的变量。现在,每秒只有一个任务正在写入该变量,而其他任务正在读取该变量值。我需要用互斥锁来保护变量吗?

c embedded multithreading freertos esp32

2
推荐指数
1
解决办法
886
查看次数

视频 ESP32 上的文本叠加

我开始尝试使用 ESP32-CAM。演示 Arduino camserver 脚本与人脸识别等配合得很好,但现在我正在尝试实现一些有用的东西。

我知道这里的示例设法在面部识别期间以某种方式将文本覆盖到视频源上,但我不知道如何将此功能实现到像这样的更简单的流代码上。

我将如何在此示例中进行文本叠加?

    /*********
  Rui Santos
  Complete project details at https://RandomNerdTutorials.com

  IMPORTANT!!! 
   - Select Board "ESP32 Wrover Module"
   - Select the Partion Scheme "Huge APP (3MB No OTA)
   - GPIO 0 must be connected to GND to upload a sketch
   - After connecting GPIO 0 to GND, press the ESP32-CAM on-board RESET button to put your board in flashing mode

  Permission is hereby granted, free of charge, to any person obtaining a copy …
Run Code Online (Sandbox Code Playgroud)

overlay framebuffer arduino video-streaming esp32

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

通过 WiFi 将数据从 ESP32 发送到服务器

我不是新来的,但这是我的第一个问题。我已经搜索了很多,坦率地说,我无法理解这是如何工作的。我定期向我的 ESP32 获取数据(温度),并将其设置为 WiFi 客户端,连接到我的路由器,并以某种方式将这些数据存储在我的笔记本电脑上(或其他地方,例如本地/网站,不知道这是否是可能/更好)。连接应该如何工作?我已经安装了 XAMPP 并运行 Apache 和 MySQL 服务器,并且尝试使用 ESP32 库通过 Arduino 的一些草图连接到我的笔记本电脑

    // Use WiFiClient class to create TCP connections
WiFiClient client;
const int httpPort = 80;
const char* host = "192.168.1.109";     //The local IP of my Laptop
if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
}
Run Code Online (Sandbox Code Playgroud)

但它没有连接。有人可以向我解释一下这种联系应该如何形成吗?或者这个问题是否太模糊了?我真的只是想知道在这种情况下“事情应该如何协同工作”。先感谢您。

wifi local-network esp32

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

如何在freeRTOS中向多个接收器发送队列消息?

我正在寻找一种在 freeRTOS 中使用队列广播消息的方法,我提出了不同的想法,但每个人都有不同的问题。

我拥有的:

  • 队列的项目类型是一个结构体,它有一个属性来指示消息是广播还是针对特定任务。
  • 将消息写入队列的广播任务。
  • 一个队列管理器任务,如果收到任何新消息,它将查看队列,并且如果消息有目的地,那么它将恢复该特定任务或恢复所有任务(如果它是广播)。
  • 对于接收器任务,我提出了这些想法:

    1. 如果我使用接收函数,xQueueReceive只有任务队列中的第一个任务会读取消息并将其从队列中删除,这样其他任务将无法读取该广播消息。另一方面,这是定向消息(针对特定任务的消息)的完美原因。
    2. 如果我使用 peedk 函数xQueuePeek,消息将永远不会从队列中删除,除非我使用xQueueReceive它有点多余(在同一个任务中查看和接收,meeh,丑陋的编码)并且我不能使用任何其他删除函数,因为它会删除整个队列。但这将解决特定任务的消息,为了解决广播消息,我需要为每个接收任务设置优先级,并且只有优先级最低的任务才会使用xQueueReceive 从队列中删除该消息,所有接收任务将在偷看或阅读后暂停自己,这样他们就不会再次阅读该消息(我不确定如何处理队列管理器任务,因为我无法暂停它,它会保持队列中的新消息的通知,直到最后一个任务收到它),但整个系统将需要等待该低优先级任务运行以删除该消息以及在该时间内收到的任何新消息,它将不会被读入真实的时间。

我仍在考虑其他方法,例如为每个接收任务使用新队列或队列,但我不确定哪种方法是最好的。而且我不知道是否还有其他原因即使不使用队列技术也要广播消息。

我需要告诉你这个程序不是针对特定项目的。我只是想以不同的方式使用队列技术。我已经找到了关于广播消息的其他帖子,但这是针对特定问题的,他们在不使用队列技术的情况下解决了该问题。我只想将“这是一条广播消息”发送到队列,并且所有接收器都能够读取一次(仅一次)。

谢谢你。

queue freertos esp32

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

ESP32 Guru Meditation 错误:Core 0 恐慌(LoadProhibited)。使用 BLE 时

我正在使用 Arduino IDE 在 ESP32 WROOWER 上进行开发。

当我在草图中使用 BLE 时,它会变砖,我不知道为什么。我的草图很大,有 1416000 字节,在工具>分区方案中我选择了“HUGE APP 3MB....”。

这是回溯:

    Guru Meditation Error: Core  0 panic'ed (LoadProhibited). Exception was unhandled.
Core 0 register dump:
PC      : 0x401d084e  PS      : 0x00060930  A0      : 0x800d7080  A1      : 0x3ffd35f0  
A2      : 0x3ffe3b84  A3      : 0xca5091d7  A4      : 0x3ffc6234  A5      : 0x3ffd39f0  
A6      : 0xca5091d7  A7      : 0x3ffbb9cc  A8      : 0x00000000  A9      : 0x3ffd3870  
A10     : 0x3fff273c  A11     : 0x3fff273c  A12     : 0x00060320  A13     : 0x3ffd39f8  
A14     : 0x3f29b3ec …
Run Code Online (Sandbox Code Playgroud)

bluetooth arduino decoder bluetooth-lowenergy esp32

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

使用 WiFiClient.client.read() 在 ESP32 上下载文件失败 - “任务看门狗”错误

我正在测试从服务器下载大文件(大约 1mb OTA 二进制文件)的代码

下载中途出现错误:

-> E (15787) task_wdt: Task watchdog got triggered. The following tasks did not reset the watchdog in time:
-> E (15787) task_wdt:  - async_tcp (CPU 0/1)
-> E (15787) task_wdt: Tasks currently running:
-> E (15787) task_wdt: CPU 0: IDLE0
-> E (15787) task_wdt: CPU 1: IDLE1
-> E (15787) task_wdt: Aborting.
-> abort() was called at PC 0x400e16af on core 0
Run Code Online (Sandbox Code Playgroud)

我目前基于ESP32 github 链接的理解是,下载过程正在阻止 ESP 执行必要的后台功能。

while()在运行 aclient.read()以从服务器获取文件的循环期间发生故障(在下面的代码中) 。 …

c++ arduino esp32

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

esp32 和 esp8266 编程

如何使用汇编对 ESP32 或 ESP8266 模块进行编程?我不想使用arduino ide。我想出了一种用汇编对 atmel 芯片进行编程的方法。我想学习如何用汇编语言对 esp32 和 esp8266 进行编程。

assembly iot esp8266 esp32 esp8266wifi

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

如何将arduino库中的String转换为C++中的std::string

我在将 String 转换为 std::string 时遇到问题,无法将其传递给我的函数,因为我的代码示例是

String dataString = configFile.readString();
rawData = simplifyData("try to fetch data as string from dataString");
Run Code Online (Sandbox Code Playgroud)

c++ string arduino-c++ esp32

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

有没有办法在 python/opencv 中从单个摄像头视频生成实时深度图?

我正在尝试将单个图像转换为它的 depthmap,但我找不到任何有用的教程或文档。

我想使用 opencv,但如果您知道一种使用例如 tensorflow 获取深度图的方法,我会很高兴听到它。

立体视觉有很多教程,但我想让它更便宜,因为它是一个帮助盲人的项目。

我目前正在使用 esp32 cam 逐帧流式传输并使用 opencv 在 python 上接收图像。

python opencv computer-vision tensorflow esp32

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

计算cJSON对象的字节大小

现在我正在努力计算cJSON物体的大小。到目前为止,我已经这样做了:

cJSON *payload = cJSON_CreateObject();
...
size_t size_payload = sizeof(payload);
Run Code Online (Sandbox Code Playgroud)

显然,我初始化了有效负载对象,然后打印到终端以验证数据的完整性,一切正常。然而,打印sizeof结果后,字节数始终为 4,但对于长字符串(如我的),它应该在 500 字节左右。

我在这里缺少处理cJSON对象的东西吗?

希望你能帮忙,或者给我一个例子来说明如何获得整个尺寸的正确值。

c c++ arduino cjson esp32

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