UNO ESP32(Wemos D1 R32)报错:rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

UNO ESP32(Wemon D1 R32)报错:rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

前言,具体问题情况

开发板:UNO ESP32(Wemon D1 R32)
开发环境:Arduino Ide 2.2.2

  • 网上搜rst:0x10这样的关键词全都是说引脚问题什么的,但是我出现这个问题是在我改了下代码(封装多任务,没改跟引脚相关的)之后出现的
  • 接线也没变,纯纯就是改了下原代码的结构,所以感觉问题肯定不是引脚相关的,然后问了半天GPT,结果原因貌似是在全局范围内创建对象
  • 我是照着这篇文章修改我的代码,修改后相关代码如下
class YjTask
{
public:
    YjTask(uint32_t deltaT = 500) : dt(deltaT)
    {
        tNext = dt;
    }
    void poll()
    {
        if (millis() >= tNext)
        {
            loop();
            tNext += dt;
        }
    }
 virtual void loop() = 0;

protected:
   const uint32_t dt;
   volatile uint32_t tNext;
};
class TaskWiFi : public YjTask
{
public:
    TaskWiFi(uint8_t vpin, uint32_t deltaT = 500) : YjTask(deltaT), pin(vpin)
    {
      String ssid = "ESP32";
      String passwd = "1145141919810";
      bool isOpenWiFiAP = WiFi.softAP(ssid, passwd);
      // WiFi创建成功才会设置引脚为输出
      if (isOpenWiFiAP == true)
        pinMode(pin, OUTPUT);
    }
 void loop()
    {
        digitalWrite(pin, !digitalRead(pin));
    }

private:
 uint8_t pin;
};

TaskWiFi WiFiBlink(pinWiFi, 500);

void setup() {

Serial.begin(115200); // 设置串口波特率

}

void loop() {

WiFiBlink.poll();

}
  • 修改成这样以后上传,板子就开始在串口rst:0x10 刷屏了,问了半天GPT
  • 说是在setup()前就实例化对象导致的,让我移到setup()里面
  • 结果移到里面编译器直接不通过了,因为loop()里面调用了WiFiBlink.poll(),而这个对象是在setup()里面定义的,所以作用域只在那里面
  • 再问一遍GPT它给了个解决方法,这下可以用了

解决方法(个人例子)

修改后代码如下,貌似就是通过在全局范围声明一个对象的指针,对象创建放到setup()内,在loop()内就用这个指针来调用方法

TaskWiFi* WiFiBlink;

void setup() {

Serial.begin(115200); // 设置串口波特率
WiFiBlink = new TaskWiFi(pinWiFi, 500);

}

void loop() {

WiFiBlink->poll();

}

省流

我遇到rst:0x10的原因貌似是在全局范围内实例化对象,但是别人这样貌似没问题,所以可能是这个板子的特性(Wemos D1 R32是真的坑人),解决方法就是把对象创建放到setup()里面,但是在全局范围创建个这个对象的指针,这样loop()里面就能调用这个对象的方法了

没学过C++,表述可能有一堆错误什么的,qwq

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用 ESP32-CAM 和 Arduino Uno 实现摄像头功能,需要完成以下步骤: 1. 连接 ESP32-CAM 到 Arduino UnoESP32-CAM 连接到 Arduino Uno 的引脚上。连接方式如下: - ESP32-CAM VCC 引脚 -> Arduino Uno 5V 引脚 - ESP32-CAM GND 引脚 -> Arduino Uno GND 引脚 - ESP32-CAM U0T 引脚 -> Arduino Uno RX 引脚 - ESP32-CAM U0R 引脚 -> Arduino Uno TX 引脚 2. 配置 Arduino IDE 环境 在 Arduino IDE 中,需要安装 ESP32 开发支持库以及 ESP32-CAM 库。在“文件”->“首选项”中添加以下网址到“附加开发管理器网址”中: ``` https://dl.espressif.com/dl/package_esp32_index.json ``` 然后在“工具”->“开发”->“开发管理器”中安装 ESP32 开发支持库和 ESP32-CAM 库。 3. 上传代码 将以下代码上传到 Arduino Uno 中: ``` #include "esp_camera.h" #include <WiFi.h> // Replace with your network credentials const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; // IP address to send captured images IPAddress server(192, 168, 1, 100); WiFiClient client; void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); // Initialize camera camera_config_t config; config.ledc_channel = LEDC_CHANNEL_0; config.ledc_timer = LEDC_TIMER_0; config.pin_d0 = 5; config.pin_d1 = 18; config.pin_d2 = 19; config.pin_d3 = 21; config.pin_d4 = 36; config.pin_d5 = 39; config.pin_d6 = 34; config.pin_d7 = 35; config.pin_xclk = 0; config.pin_pclk = 22; config.pin_vsync = 25; config.pin_href = 23; config.pin_sscb_sda = 26; config.pin_sscb_scl = 27; config.pin_pwdn = 32; config.pin_reset = -1; config.xclk_freq_hz = 20000000; config.pixel_format = PIXFORMAT_JPEG; // Init with high specs to pre-allocate larger buffers if(psramFound()){ config.frame_size = FRAMESIZE_UXGA; config.jpeg_quality = 10; config.fb_count = 2; } else { config.frame_size = FRAMESIZE_SVGA; config.jpeg_quality = 12; config.fb_count = 1; } // Camera init esp_err_t err = esp_camera_init(&config); if (err != ESP_OK) { Serial.printf("Camera init failed with error 0x%x", err); return; } // Drop down frame size for higher initial frame rate sensor_t * s = esp_camera_sensor_get(); s->set_framesize(s, FRAMESIZE_QVGA); // Set up HTTP client if (client.connect(server, 80)) { Serial.println("Connected to server"); } } void loop() { // Take a photo camera_fb_t * fb = esp_camera_fb_get(); if (!fb) { Serial.println("Camera capture failed"); return; } // Send photo to server if (client.connected()) { client.write("POST /upload HTTP/1.1\r\n"); client.write("Host: 192.168.1.100\r\n"); client.write("Content-Type: image/jpeg\r\n"); client.write("Content-Length: " + String(fb->len) + "\r\n"); client.write("\r\n"); client.write(fb->buf, fb->len); client.write("\r\n"); Serial.println("Photo sent to server"); } else { Serial.println("Server disconnected"); } // Free memory esp_camera_fb_return(fb); delay(5000); } ``` 将代码中的以下内容替换为你的网络凭证: ``` const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; ``` 将以下内容替换为你的服务器 IP 地址: ``` IPAddress server(192, 168, 1, 100); ``` 上传代码后,打开串口监视器并等待 ESP32-CAM 连接到 Wi-Fi 网络。然后它会自动拍摄照片并将其发送到指定的服务器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值