我正在编写一个esp32-wroom-32
使用esp-idf-v3.0
.
我正在尝试添加日志,这些日志将保存在 fatfs 中。
经过一些日志后,我得到:
21:54:21.306 -> Debug exception reason: Stack canary watchpoint triggered (main)
21:54:21.306 -> Register dump:
21:54:21.306 -> PC : 0x40089827 PS : 0x00060b36 A0 : 0x40082179 A1 : 0x3ffd3860
21:54:21.340 -> A2 : 0x3ff40000 A3 : 0x00000033 A4 : 0x00000033 A5 : 0x00000000
21:54:21.340 -> A6 : 0x00000024 A7 : 0xff000000 A8 : 0xe37fc000 A9 : 0x0000007e
21:54:21.340 -> A10 : 0x00000000 A11 : 0xffffffff A12 : 0x00000004 A13 : 0x00000001
21:54:21.340 …
Run Code Online (Sandbox Code Playgroud) 首先,我指的是此处描述和指定的Wi -Fi P2P 标准。我不是指创建 AP 和站对的方法。
其次,如果 ESP32 的 Wi-Fi Direct 实现已经存在,请分享。我寻遍了四面八方,却没有找到。
具体来说,我想为 ESP32-WROOM-32E 实现 Wi-Fi Direct。我的理解是,硬件理论上能够处理 Wi-Fi Direct 标准,但尚未编写软件来执行此操作。如果我在这一点上错了,请纠正我。
假设有可能,乐鑫的 ESP-IDF 是否可以使用诸如(此处esp_wifi_80211_tx
描述)等功能来实现 Wi-Fi Direct?或者这样的实现需要在较低级别编写吗?如果是的话,有多低?我需要开始学习 ESP32-WROOM-32E 中 Xtensa 处理器的指令集吗?或者裸机和 ESP-IDF 之间是否有中间级别的 API?
我对 ESP32 微控制器的生产工作还相当陌生,我希望从那些去过几次的人那里了解一些背景信息和细微差别。所以这个问题更多的是关于这类事情,而不是“我如何编码 X”之类的问题。
我当前的项目有很多数据存储需求。
我熟悉在“blob”中存储数据,并且熟悉使用协议缓冲区对数据进行编码/解码。
因此,考虑到所有这些,我试图了解 ESP32 上的各种存储选项之间的差异以及何时使用每个选项。
哪些用例让您选择其中一个而不是另一个?
我正在用 ESP32 制作一盏灯,我选择的 HomeKit 库使用我不熟悉的 FreeRTOS 和 esp-idf。
目前,我有一个函数,每当需要更改灯光颜色时就会调用该函数,这只会一步步更改它。我想让它在颜色之间淡入淡出,这需要一个运行一两秒的函数。将此块作为程序的主要执行显然会使其非常无响应,因此我需要将其作为任务运行。
我面临的问题是,我只想一次运行一个淡入淡出函数的副本,如果在完成之前第二次调用它,则第一个副本应该在之前退出(无需等待完整的淡入淡出时间)开始第二个副本。
我发现vTaskDelete
,但如果我在任意点终止淡入淡出功能,一些变量和 LED 本身将处于未知状态。为了解决这个问题,我想到使用“kill flag”全局变量,淡入淡出函数将检查其每个循环。
这是我正在考虑的伪代码:
update_light {
kill_flag = true
wait_for_fade_to_die
xTaskCreate fade
}
fade {
kill_flag = false
loop_1000_times {
(fading code involving local and global variables)
.
.
if kill_flag, vTaskDelete(NULL)
vTaskDelay(2 / portTICK_RATE_MS)
}
}
Run Code Online (Sandbox Code Playgroud)
我的主要问题是:
wait_for_fade_to_die
?我没有通过简短的浏览找到任何东西,但我是 FreeRTOS 的新手。刚刚尝试在我的计算机上运行最新版本的 ESP-IDF。都好。
当前版本 = 4.3.2 最新版本 = 5.0.1
我在 Visual Studio 中工作,但直接使用 ESP cmd 终端来构建等。尚未设法正确找出 Visual Studio 插件。
但是当我尝试返回旧版本时,遇到了错误。该错误已在 github 中发现: https: //github.com/espressif/esp-idf/issues/9837。因此,我可以通过删除~/.espressif/idf-env.json
文件并重新运行来修复我的工作版本$IDF_PATH/install.sh
。
我的问题是 - 是否可以在同一台机器上同时运行 2 个版本的 ESP-IDF?需要什么设置才能实现此目的?
干杯。
esp-idf 中的几个示例包含一个sdkconfig.ci
文件(例如Examples/bluetooth/nimble/blehr)。
我了解 的用法,但在 Espressif构建系统 API 指南sdkconfig.defaults
中找不到任何参考。sdkconfig.ci
何时应该.ci
使用该文件以及在什么条件下应用其中的配置?
我在 PlatformIO 上为带有 ESP-IDF 框架的 ESP32 编写了一个小程序。
目前它已通过 USB 电缆连接到我的 PC。我从 CAN-BUS 接收大量数据,并使用 printf() 打印这些数据
标准波特率115200的输出似乎太慢了。这就是为什么我想将其设置为更高的值。
我在 platformio.ini 中更改了此设置,但没有成功。
monitor_speed = 115200
Run Code Online (Sandbox Code Playgroud)
我搜索了一下,没有找到哪里可以改变这个波特率。
如果可能的话,我的想法是添加一些代码,也许只是一两行,将值 ie 设置为 230400
我提到了 ESP32、PlatformIO 和 ESP-IDF,因为我不确定这个设置应该在哪里。
我正在学习在 ESP32 平台上编写应用程序。当我尝试编译代码时,我从链接器收到此错误:
对“Serial_Init”的未定义引用
其中Serial_Init是在serial_cli.h文件中声明的函数,该文件位于同一目录和工作空间中。而且,我在那里声明了一些宏,并且可以在我的代码中使用它们没有问题,所以我真的不明白错误来自哪里。这是serial_cli.h:
#ifndef _SERIAL__H_
#define _SERIAL__H_
#include "driver/uart.h"
#define SERIAL_PORT UART_NUM_1
#define RTS_SIG_PINOUT UART_PIN_NO_CHANGE
#define CTS_SIG_PINOUT UART_PIN_NO_CHANGE
/**
* @brief This function initialises serial communication with PC
* @param uart_config_t type pointer to structure containing needed parameters
* @param int size of RX and TX buffer (in bytes)
* @param QueueHandle_t type pointer to structure containing UART queue
*/
void Serial_Init(uart_config_t*, const int, QueueHandle_t*);
#endif /* _SERIAL_H_ */
Run Code Online (Sandbox Code Playgroud)
这是serial_cli.c:
#include "serial_cli.h"
void …
Run Code Online (Sandbox Code Playgroud) 我觉得这个问题已经被问过很多次了,但我找到的答案似乎都不适合我。我对 CMake 和 C/C++ 非常陌生,因为我来自 Java 世界,并且正在努力理解 cmake 及其工作原理。
无论如何,基本上我有下面的文件夹结构。这是一个 esp-idf 项目,所以我不知道这是否与我遇到的问题有关。
main
-CMakeLists.txt
-main.cpp
-wifi.cpp
Metriful
-CMakeLists.txt
-Metriful_sensor.cpp
-Metriful_sensor.h
-Wifi_functions.h
-Wifi_functions.cpp
CMakeLists.txt
Makefile
Run Code Online (Sandbox Code Playgroud)
现在,我想做的就是包含 Metriful 子目录,这样我就可以使用“库”提供的功能。现在根目录中的 CMakeLists.txt 如下所示:
cmake_minimum_required(VERSION 3.5)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(ESP_32_WROOM32_SENSOR_-_Metriful)
include_directories("Metriful")
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用,因为在我的 main.cpp 中包含“Metriful_sensor.h”仍然失败:
cmake -G Ninja .. <
-- ccache will be used for faster recompilation
-- Building ESP-IDF components for target esp32
-- Project sdkconfig file C:/Users/User/PlatformIO/ESP32_WROOM32_Sensor_-_Metriful/sdkconfig
-- Could NOT find Perl (missing: PERL_EXECUTABLE)
CMake Warning (dev) at C:/Users/User/esp/esp-idf/components/mbedtls/CMakeLists.txt:114 (target_sources):
Policy CMP0076 is not set: …
Run Code Online (Sandbox Code Playgroud) 我有一个最初是为 Particle 设备编写的项目,我们正在从他们的设备转向 ESP32。我一直致力于将我们的一个设备的代码移植到 esp-idf,现在收到大量与 switch 语句相关的警告,其中没有默认值,因此无法编译。由于某种原因,无论粒子设备使用什么编译器,都不关心这个问题。虽然我当然可以检查并更正代码,但现在不是这样做的时间或地点,我需要抑制这些警告。最终我们将纠正原始代码并推送到这个分支。
../main/Services/ConfigurationParser.cpp:295:16: error: enumeration value 'psAmbientTemperature' not handled in switch [-Werror=switch]
Run Code Online (Sandbox Code Playgroud)
我不太了解这个平台或编译器,不知道如何在以后抑制它们,并且无法在其他地方找到信息。任何帮助是极大的赞赏。
我目前正在开发一个项目,需要在 ESP32 客户端和笔记本电脑上运行的服务器之间建立 TCP 连接。服务器端似乎正在工作,服务器侦听连接并等待客户端套接字接受。当我启动客户端 ESP32 时,服务器打印出一条消息“SOCKET ACCEPTED”,但客户端打印出“UNABLE TO CONNECT TO SERVER: ERRNO 127”。我在网上看到 errno 127 意味着密钥已过期,但是我无法找到解决此问题的方法。以下是我的服务器和客户端的代码,任何帮助将不胜感激。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdbool.h>
#include <limits.h>
//write an error function
void error (const char *msg){
perror(msg);
exit(EXIT_FAILURE);
}
int main (int argc, char *argv[]){
//function variables
int sockFD = 0;
int PORT = 0;
const int MAX_CONNECTIONS;
int n = 0;
char buffer[255] = {' '};
struct sockaddr_in serverAddr; …
Run Code Online (Sandbox Code Playgroud) 我正在尝试 CMake 一个项目。我刚开始使用它,所以我想对于熟悉 CMake 的人来说一定很明显:在 main.c 所在的主文件夹中,我包括
#include "tensorflow/lite/micro/all_ops_resolver.h"
Run Code Online (Sandbox Code Playgroud)
找到了这个库。在文件 all_ops_resolver.h 中有一行:
#include "tensorflow/lite/micro/micro_mutable_op_resolver.h"
Run Code Online (Sandbox Code Playgroud)
在 micro_mutable_op_resolver.h 文件中还有另一行:
#include <cstdio>
Run Code Online (Sandbox Code Playgroud)
现在这会触发 CMake 的错误:
> In file included from
> ../main/tensorflow/lite/micro/all_ops_resolver.h:19,
> from ../main/main.c:16: ../main/tensorflow/lite/micro/micro_mutable_op_resolver.h:18:10: fatal
> error: cstdio: No such file or directory #include <cstdio>
> ^~~~~~~~
> compilation terminated.`
Run Code Online (Sandbox Code Playgroud)
文件 stdio.h 将位于:
~/.espressif/tools/xtensa-esp32-elf/esp-2020r2-8.2.0/xtensa-esp32-elf/xtensa-esp32-elf/include
Run Code Online (Sandbox Code Playgroud)
这是在项目目录之外。我无法弄清楚应该进入哪个 CMakeLists.txt 以将编译器指向该文件夹。有人可以帮忙吗?