【Beetle ESP32 C6迷你开发板】多功能桌面空气质量检测仪-03自带USB串口控制灯的颜色
[复制链接]
本帖最后由 eew_cT3H5d 于 2024-5-22 20:59 编辑
一、USB串口作用(Beetle ESP32 C6没有USB转串口芯片,怎么才能使用USB虚拟串口呢?)
串口调试在嵌入式系统开发中起着至关重要的作用,主要用于以下几个方面:
-
确认串口状态:通过系统信息(如/proc系统信息)或设备节点(如dmesg | grep ttyS)来确认串口是否正常工作。
-
配置和测试串口参数:使用stty命令等工具来配置串口的波特率、数据位、奇偶校验位等参数,并进行自检以确保串口功能正常。
-
数据收发:串口调试助手可以用于发送和接收数据。它允许用户通过电脑端的串口线与另一端的设备进行通信,实现数据的发送和接收。
-
硬件调试:串口调试助手不仅用于软件调试,还可以用于硬件调试。通过配置好串口参数,可以对硬件设备进行详细的测试和调试。
-
数据监控和分析:在工控领域,串口调试工具广泛应用于数据监控、数据采集和数据分析等工作,是串口应用开发及调试工作必备的专业工具之一。
-
协议解析和显示:一些高级的串口调试助手支持多种串口通信协议,并能够实现串口数据的发送、接收、显示和解析等功能。
-
扩展命令和自定义设置:一些串口调试工具提供了扩展命令和自定义命令列表的功能,使得用户可以创建和保存多条命令,方便进行复杂的数据发送和接收操作。
-
虚拟串口模拟:对于没有物理串口的电脑,可以使用虚拟串口模拟器来模拟串口通信,这在调试和测试过程中非常有用。
综上所述,串口调试在嵌入式系统开发中具有多种功能,不仅可以用于确认和测试串口状态和参数,还可以用于数据收发、硬件调试、数据监控和分析等多个方面,是一个非常重要的工具。
Beetle ESP32 C6和其它Arduino开发板类似单片机直接通过USB与电脑USB进行通讯,只不过需要进行设置才能使用串口功能,DFrobot这款官网介绍也是不是特别清楚,比较含糊的告诉你,需要设置才能使用USB虚拟串口
官网链接:https://wiki.dfrobot.com.cn/SKU_DFR1117_Beetle_ESP32_C6#target_6
二、尝试使用自带的USB串口
查阅一些案例,和Arduion的产品特点,感觉Beetle ESP32 C6可以通过自带USB进行串口通讯的
参考教程:https://mc.dfrobot.com.cn/thread-318977-1-1.html
https://docs.espressif.com/projects/esp-idf/en/latest/esp32c6/get-started/establish-serial-connection.html
尝试写个程序进行调试:串口
以下是重点:
- 检查USB CDC是否处于Enable状态
- 使用其他的串口调试助手查看打印信息
程序代码:
int ledPin = 15;
void setup() {
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
}
void loop() {
if (Serial.available()) {
int receivedData = Serial.read();
if (receivedData == '1') {
digitalWrite(ledPin, HIGH);
} else if (receivedData == '0') {
digitalWrite(ledPin, LOW);
}
}
delay(100);
Serial.println("Hell EEWORLD! ");
}
成功通过USB串口接收到数据
三、通过USB串口控制ws2812颜色变化
代码:
int ledPin = 15;
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
// Which pin on the Arduino is connected to the NeoPixels?
#define PIN 6 // On Trinket or Gemma, suggest changing this to 1
// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS 16 // Popular NeoPixel ring size
// When setting up the NeoPixel library, we tell it how many pixels,
// and which pin to use to send signals. Note that for older NeoPixel
// strips you might need to change the third parameter -- see the
// strandtest example for more information on possible values.
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
#define DELAYVAL 500 // Time (in milliseconds) to pause between pixels
void setup() {
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
clock_prescale_set(clock_div_1);
#endif
// END of Trinket-specific code.
pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
//pixels.clear(); // Set all pixel colors to 'off'
}
void loop() {
if (Serial.available()) {
int receivedData = Serial.read();
if (receivedData == '1') {
digitalWrite(ledPin, HIGH);
pixels.setPixelColor(1, pixels.Color(0, 150, 0));
pixels.show(); // Send the updated pixel colors to the hardware.
}
else if (receivedData == '2')
{
pixels.setPixelColor(1, pixels.Color(150, 0, 0));
pixels.show(); // Send the updated pixel colors to the hardware.
}
else if (receivedData == '3')
{
digitalWrite(ledPin, LOW);
pixels.setPixelColor(1, pixels.Color(0, 0, 150));
pixels.show(); // Send the updated pixel colors to the hardware.
}
}
delay(100);
Serial.println("Hell EEWORLD! ");
}
显示效果
演示视频
串口控制WS2812颜色
|