标签: esp32

Serial.printf() 带有长度为 11 或以上的 String 对象

我的代码。

\n
void loop() {\n  if(Serial.available()) {\n    String str = Serial.readStringUntil(\'\\n\');\n    Serial.printf("String1:%s\\n", str);\n    Serial.print("String2:");Serial.println(str);\n    Serial.printf("char*:%s\\n", str.c_str());\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n


\n1234567890通过串行发送。(长度10)

\n
String1:1234567890\nString2:1234567890\nchar*:1234567890\n
Run Code Online (Sandbox Code Playgroud)\n


\n12345678901通过串行发送。(长度11)

\n
String1:@\xef\xbf\xbd\xef\xbf\xbd?\nString2:12345678901\nchar*:12345678901\n
Run Code Online (Sandbox Code Playgroud)\n

当我使用 Serial.printf("%s") 将 String 对象从 arduino(esp32) 发送到计算机时,如果其长度为 11 或更大,则会发送奇怪的内容。

\n
String1:1234567890\nString2:1234567890\nchar*:1234567890\n
Run Code Online (Sandbox Code Playgroud)\n

arduino-c++ esp32

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

带有 ESP32-WROOM-32 的 EEPROM

我购买了ESP32 -WROOM-32,我意识到与Arduino NanoArduino UnoArduino Mega 2560相比,有些东西不一样。

我意识到不同的事情之一是如何从控制器存储和读取数据。我想将一些数据保存到 EEPROM 中,即使设备关闭也能保留该

我在 Arduino 板的小型项目中一直使用以下代码。该代码包括创建一个OLED菜单,我可以在其中导航真实页面并更改整数值,这些值存储在 EEPROM 中。

我上传到 ESP32 的相同代码没有任何问题,并且菜单工作正常。我可以更改整数值。问题是关闭/打开电路板后,这些值不会保留。

我已经在网上查看了一些关于EEPROM和ESP32的教程并尝试实现它,但不幸的是没有结果。

#include <EEPROM.h>
#include <OneButton.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define DISP_RESET -1

const char*Vartext[] {"Data_0", "Data_1", "Data_2"};

const byte maxAnz = sizeof(Vartext) / sizeof(Vartext[0]);

const int mindata[maxAnz] {0, 0, 0};
const int maxdata[maxAnz] {10000, 200, 300};

uint32_t longstart;
byte Varindex;
byte Page = 0; …
Run Code Online (Sandbox Code Playgroud)

arduino arduino-esp8266 esp32 arduino-esp32

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

esp32 从 ubuntu 闪烁

我正在尝试让 esp-idf 与 ubuntu 一起工作。我在 /dev 中看到 USB tty 端口,为 /dev/ttyUSB0。在 ubuntu 中编译眨眼程序没有任何问题,但是当我尝试将映像刷新到 esp32 时,出现以下错误;

A fatal error occurred: Could not open /dev/ttyUSB0, the port doesn't exist
Run Code Online (Sandbox Code Playgroud)

run_serial_tool.cmake 处的 CMake 错误:55(消息):

/home/lenovo/.espressif/python_env/idf5.1_py3.8_env/bin/python;;/home/lenovo/esp/esp-idf/components/esptool_py/esptool/esptool.py;--chip;esp32 失败

失败:CMakeFiles/flash

我使用的是 ESP-Wroom32 开发板。我通过 eclipse ide 和 powershell 从 Windows 刷新了相同的板。所以,我知道董事会不是问题所在。有人可以提供任何线索吗?

ubuntu iot esp32

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

考虑到闪存 MTBF,定期写入 ESP32 闪存多远才安全?

定期写入闪存的最佳实践是什么?考虑到我正在开发的硬件应该有 10 到 20 年的使用寿命,您的建议是什么?例如,我可以每 15 分钟写入一些状态变量吗Preferences

persistence flash-memory esp32

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

ESP32:发送简单的 TCP 消息并接收响应

我想使用 ESP32 在我的计算机上执行与 netcat“nc” 命令相同的请求:

电脑:

$ nc tcpbin.com 4242
Test
Test
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试过的:

创建一个wifi客户端并听听答案:

  • 连接到 TCP 服务器
  • 写一个信息
  • 等待并阅读答案
#include <Arduino.h>
#include <WiFi.h>

WiFiClient localClient;

const char* ssid = "...";
const char* password = "...";

const uint port = 4242;
const char* ip = "45.79.112.203"; // tcpbin.com's ip


void setup() {
  Serial.begin(115200);
  Serial.println("Connect Wlan");
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println(WiFi.localIP());
}

void loop() {
  sendRequest();
  delay(200);
}

void sendRequest() {
  if(!localClient.connected()) {
    if (localClient.connect(ip, port)) …
Run Code Online (Sandbox Code Playgroud)

tcp arduino esp8266 arduino-esp8266 esp32

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

Linux 套接字 - 服务器接受客户端,但客户端失败并出现 errno 127

问题

我目前正在开发一个项目,需要在 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)

c sockets tcp esp32 esp-idf

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

将字符串转换为MAC地址

在SPIFFS中的文件内,我将以"XX:XX:XX:XX:XX:XX"的形式保存有关mac地址的信息.当我读取文件时,我需要将它从STRING切换为十六进制值数组.

uint8_t* str2mac(char* mac){
  uint8_t bytes[6];
  int values[6];
  int i;
  if( 6 == sscanf( mac, "%x:%x:%x:%x:%x:%x%*c",&values[0], &values[1], &values[2],&values[3], &values[4], &values[5] ) ){
      /* convert to uint8_t */
      for( i = 0; i < 6; ++i )bytes[i] = (uint8_t) values[i];
  }else{
      /* invalid mac */
  } 
  return bytes;
}

wifi_set_macaddr(STATION_IF, str2mac((char*)readFileSPIFFS("/mac.txt").c_str()));
Run Code Online (Sandbox Code Playgroud)

但我在某处的代码中错了

当我AA:00:00:00:00:01输入文件时,我的ESP8266设置29:D5:23:40:00:00

我需要帮助,谢谢

c++ arduino esp8266 esp32

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

两个ESP32之间的串行通讯

我已经找到了从arduino到arduino的基本串行通信示例,但无法在ESP32板上工作。我正在尝试使相同的东西在两个ESP32之间工作。两者连接在一起:

esp1   esp2
gnd to gnd
tx2 to rx2
rx2 to tx2
Run Code Online (Sandbox Code Playgroud)

简单的草图:

//transmit sketch
void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.println("test...");
  delay(1000);
}

//receive sketch
void setup() {
  Serial.begin(9600);
}

void loop() {
  String received = "";
  while (Serial.available())
  {
    received = Serial.read();
    Serial.println(received);
  }
}
Run Code Online (Sandbox Code Playgroud)

要完成这项工作还需要什么?

esp32

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

C函数的C++回调

是的,,,我知道有很多关于这个的话题,我想我已经阅读了其中的大部分,但要么我不理解答案,要么我无法将它们适应我的“案例”。

请注意,我的背景是电子设计,而不是软件设计,所以对于你们中的一些人来说,我的问题可能看起来很愚蠢,但是......我被困住了。

我设计了一块用于物联网用途的 PCB 板。它基于 ESP32 模块。我有 5 个按钮连接到 ESP。ESP32-IDF 对我来说太复杂了,所以我尝试使用 Arduino 框架。现在事情开始变得复杂了。

为了检测和消除按钮的抖动,我创建了一个名为 Button 的 C++ 类。下面可以看到一个骨架。

class Button {
..
..

private:
  void memberCallback() {
    ...
  }



public:
  Button(const uint8_t gpio ) {
    ..
    attachInterrup(digitalPinToInterrupt(gpio), memberCallback, FALLING);
    ..
  }

..

}
Run Code Online (Sandbox Code Playgroud)

我还没有找到任何方法来定义“memberCallback”,而不会导致编译错误或根本无法工作。

这一定是一个常见问题,所以请建议我解决方案:)

编辑。看来我表达得不够清楚,抱歉。- 我知道如果我将memberCallback设置为静态,它至少会编译。问题是我计划使用 5 个这样的实例。静态回调意味着所有实例将运行相同的代码。5 个实例意味着 5 个不同的中断。我如何识别它们。

c c++ arduino esp32

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

16MB 版本的 Micropython ESP32 内存错误

我有一个问题:

">OKMemoryError: 内存分配失败,正在分配 13759 字节"

我已经尝试过 ESP32 4MB 和 16MB 闪存,所以没有办法,它无法处理这段代码。我相信这是因为“零”、“一个”、“两个”变量,因为当我将它们注释掉并只保留“零”时,例如,它工作正常。但是..我的意思是来吧,整个文件是38kb,ESP32的内存是16MB,它必须处理它......

有什么问题?

from machine import Pin, I2C
import ssd1306
from time import sleep

# ESP32 Pin assignment
i2c = I2C(-1, scl=Pin(22), sda=Pin(21))
i2c2 = I2C(-1, scl=Pin(4), sda=Pin(2))
i2c3 = I2C(-1, scl=Pin(19), sda=Pin(18))
i2c4 = I2C(-1, scl=Pin(5), sda=Pin(15))
i2c5 = I2C(-1, scl=Pin(32), sda=Pin(33))

ZERO = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
Run Code Online (Sandbox Code Playgroud)

python micropython esp32

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