登录 立即注册

首页 > 绿虎论坛 > 电脑 > 讨论/求助 (发帖)

标题: 有玩esp32的吗?买了个板子上传项目老是出错不知道是不是接线问题

作者: @Ta

时间: 2023-03-04

点击: 124366

微信截图_20230304154611.png(559.04 KB)

烧写口:ESP32的GND,RX,TX,5V分别接外部TTL串口模块的GND,TX,RX,5V,下载时IO0需和GND连接,下载完成后再断开IO0和GND间的连接;

微信截图_20230304154708.png(24.48 KB)
我跳线帽是这么接的,应该没错把?
微信图片_20230304155113.jpg(3.35 MB)

但是上传不了

微信截图_20230304153014.png(58.17 KB)
手机


[隐藏样式|查看源码]


『回复列表(15|显示机器人聊天)』

1.

微信图片_20230304155514.jpg(4.02 MB)
手机

(/@Ta/2023-03-04 15:55//)

2.

@童真再见,你在Arduino里面设置了串口的端口里没有
一加8Pro

(/@Ta/2023-03-04 20:33//)

3. tx rx 交叉了没
(/@Ta/2023-03-04 20:31//)

4. 图片看起来tx和rx接反了
(/@Ta/2023-03-04 20:32//)

5.

@胡图图@童真再见,看图他的tx rx接错了。
一加8Pro

(/@Ta/2023-03-04 20:34//)

6.

@童真再见
RX接TX
TX接RX
一加8Pro

(/@Ta/2023-03-04 20:36//)

7.

@胡图图,你是对的。这模块我有十多个。
一加8Pro

(/@Ta/2023-03-04 20:37//)

8.

@胡图图@罐子没仔细看原来是接错了...我刚才把软件卸载了,现在重下呢,疏忽了
手机

(/@Ta/2023-03-04 20:42//)

9.

发完帖后发现端口也选错了,USB转ttl的驱动没装,装完后显示第三个端口了,再试上传显示这个错误,这个错误看来就是线接错了

微信图片_20230304210211.png(35.62 KB)
手机

(/@Ta/2023-03-04 21:04//)

10.

@胡图图@罐子,线的位置换了后出现这个错误,是不是线的质量不好啊?

esptool.py v3.0-dev
Serial port COM3
Connecting......................................_____

A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header
A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header

微信截图_20230304230539.png(61.65 KB)

手机

(/@Ta/2023-03-04 23:06//)

11.

@童真再见,可能是感觉是没有拉低短接点用万用表测一下,
一加8Pro

(/@Ta/2023-03-05 00:10//)

12.

ESP32-WROOM-32E下载模式要求GPIO0在EN上升沿时为保持低电平,一般的板子会设计有自动下载电路,但是也不排除没有,可以检查一下, 我看你的图中没有下拉GPIO0。

红米K30 Pro(变焦版)

(/@Ta/2023-03-05 00:27//)

13.
(/@Ta/2023-03-05 00:26//)

14.

@罐子@Curtion,找到原因了是排针和板子接触不良
手机

(/@Ta/2023-03-05 15:43//)

65.

include <Wire.h>

include "MAX30105.h"

include "spo2_algorithm.h"

include <WiFi.h> // 引入WiFi 库

// WiFi 参数
const char ssid = "64412";
const char
password = "32323433";

WiFiServer server(80); // 在端口80上创建一个web服务器

MAX30105 particleSensor;

define MAX_BRIGHTNESS 255

if defined(AVR_ATmega328P) || defined(AVR_ATmega168)

//Arduino Uno不具备足够的SRAM来存储32位格式的50个红外LED数据和红色LED数据。
//为了解决这个问题,采样数据的16位MSB将被截断。样品变成16位数据。
uint16_t irBuffer[50]; //红外LED传感器数据
uint16_t redBuffer[50]; //红色LED传感器数据

else

uint32_t irBuffer[50]; //红外LED传感器数据
uint32_t redBuffer[50]; //红色LED传感器数据

endif

int32_t spo2; //SPO2值
int8_t validSPO2; //指示SPO2计算是否有效
int32_t heartRate; //心率值
int8_t validHeartRate; //指示心率计算是否有效

bool sensorEnabled = false; //标志位,表示传感器是否启用

void setup()
{
Serial.begin(115200); // 以115200比特/秒初始化串行通信:

// 初始化WIFI连接
Serial.println();
Serial.println();
Serial.print("连接到 ");
Serial.println(ssid);
WiFi.begin(ssid, password);

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

Serial.println("");
Serial.println("WiFi 连接成功");
Serial.println(WiFi.localIP());

// 初始化Web服务器
server.begin();
Serial.println("Web服务器已启动");

// 初始化传感器
Wire.begin(4, 5); // SDA = GPIO 4, SCL = GPIO 5
if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) //使用默认的I2C端口,400kHz的速度
{
Serial.println(F("未找到MAX30105。 请检查布线/电源。"));
while (1);
}

particleSensor.setup(55, 4, 2, 200, 411, 4096); //使用这些设置配置传感器

// 初始化结束后关闭传感器模块
particleSensor.shutDown();
sensorEnabled = false;
}

long lastActiveTime = 0;

void loop()
{
// 等待Web客户端连接
WiFiClient client = server.available();
if (client) {
Serial.println("New Client.");
String currentLine = "";
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
if (c == '\n') {
if (currentLine.length() == 0) {
// 发送HTTP头部
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println();

        // 发送HTML内容
        client.println("&lt;html>");
        client.println("&lt;head>&lt;title>MAX30102 控制&lt;/title>&lt;/head>");
        client.println("&lt;body>");
        client.println("&lt;h1>MAX30102 控制&lt;/h1>");
        client.println("&lt;p>当前状态: " + String(sensorEnabled ? "已打开" : "已关闭") + "&lt;/p>");
        client.println("&lt;form method=\"POST\">");
        if (sensorEnabled) {
          client.println("&lt;input type=\"submit\" name=\"action\" value=\"关闭传感器\"/>");
        } else {
          client.println("&lt;input type=\"submit\" name=\"action\" value=\"打开传感器\"/>");
        }
        client.println("&lt;/form>");
        client.println("&lt;/body>");
        client.println("&lt;/html>");

        // 处理命令
        if (currentLine.indexOf("GET /?action=打开传感器") != -1) {
          if (!sensorEnabled) {
            // 打开传感器模块
            particleSensor.wakeUp();
            delay(500); // 给传感器启动一些时间
            sensorEnabled = true;
          }
        } else if (currentLine.indexOf("GET /?action=关闭传感器") != -1) {
          if (sensorEnabled) {
            // 关闭传感器模块
            particleSensor.shutDown();
            sensorEnabled = false;
          }
        }

        break;
      } else {
        currentLine = "";
      }
    } else if (c != '\r') {
      currentLine += c;
    }
  }
}

// 断开连接
client.stop();
Serial.println("Client Disconnected.");

}

// 检查传感器是否需要关闭
if (sensorEnabled && (millis() - lastActiveTime > 60000)) {
particleSensor.shutDown();
sensorEnabled = false;
}

//读取前50个样本,并确定信号范围
for (byte i = 0 ; i < 50 ; i++)
{
while (particleSensor.available() == false) //是否有新数据?
particleSensor.check(); //检查传感器是否有新数据

redBuffer<span style="font-style:italic"> = particleSensor.getRed();
irBuffer<span style="font-style:italic"> = particleSensor.getIR();
particleSensor.nextSample(); //处理完当前样本后,转到下一个样本
Serial.print(F("红光="));
Serial.print(redBuffer<span style="font-style:italic">, DEC);
Serial.print(F(", 红外="));
Serial.println(irBuffer<span style="font-style:italic">, DEC);

}

//在前50个样本之后计算心率和SpO2(前4秒的样本)
maxim_heart_rate_and_oxygen_saturation(irBuffer, 50, redBuffer, &spo2, &validSPO2, &heartRate, &validHeartRate);

//无线循环地从MAX30102中采样。每1秒计算一次心率和SpO2
while (1)
{
//将内存中的前25个样本丢弃,并将最后25个样本移动到顶部
for (byte i = 25; i < 50; i++)
{
redBuffer[i - 25] = redBuffer;
irBuffer[i - 25] = irBuffer;
}

//在计算心率之前,采取25个样本集。
for (byte i = 25; i &lt; 50; i++)
{
  while (particleSensor.available() == false) //是否有新数据?
    particleSensor.check(); //检查传感器是否有新数据

  redBuffer<span style="font-style:italic"> = particleSensor.getRed();
  irBuffer<span style="font-style:italic"> = particleSensor.getIR();
  particleSensor.nextSample(); //处理完当前样本后,转到下一个样本
  Serial.print(F("红光="));
  Serial.print(redBuffer<span style="font-style:italic">, DEC);
  Serial.print(F(", 红外="));
  Serial.print(irBuffer<span style="font-style:italic">, DEC);

  Serial.print(F(", 心率="));
  Serial.print(heartRate, DEC);

  Serial.print(F(", HRvalid="));
  Serial.print(validHeartRate, DEC);

  Serial.print(F(", 血氧饱和度="));
  Serial.print(spo2, DEC);

  Serial.print(F(", SPO2Valid="));
  Serial.println(validSPO2, DEC);

}

//收集25个新样本后,重新计算HR和SP02
maxim_heart_rate_and_oxygen_saturation(irBuffer, 50, redBuffer, &spo2, &validSPO2, &heartRate, &validHeartRate);
printToSerial();

}
}

void printToSerial() {
if(validSPO2 && validHeartRate) {
Serial.print(F("心率: ")); Serial.println(heartRate, DEC);
Serial.print(F("血氧饱和度: ")); Serial.println(spo2, DEC);
} else {
Serial.println(F("无效"));
}
}

// 如果需要关闭传感器模块,则可以使用以下函数
void shutDownSensorModule() {
if (sensorEnabled) {
particleSensor.shutDown();
sensorEnabled = false;
}
}
这段代码中Web服务器,传感器的采样和计算代码在一个无限循环中会崩溃,帮我修改一下
手机

(/@Ta/2023-04-01 13:39//)

回复需要登录

12月22日 13:38 星期天

本站由hu60wap6华为CPU驱动

备案号: 京ICP备18041936号-1