Hello大家好,我是空耳,非常高兴能参加这次的活动。
视频:【Follow me第二季第4期】Arduino® Nano RP2040 Connect活动项目总结
物料介绍
Nano RP2040 Connect Nano RP2040 Connect | Arduino Documentation
Pico LCD 1.14 https://www.waveshare.com/wiki/Pico-LCD-1.14
配置环境
这里采用Arduino开发环境
任务一
搭建环境并开启第一步Blink三色LED / 串口打印Hello DigiKey & EEWorld!
由于RGB led是连接在W-102模块上的,所以要控制led,需要先安装WiFiNINA库。
流程图:
全部代码如下:
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
#include <SPI.h>
#include <WiFiNINA.h>
#define TFT_CS 9 // Chip select control pin
#define TFT_RST 7 // Reset pin (could connect to Arduino RESET pin)
#define TFT_DC 8 // Data Command control pin
#define TFT_MOSI 11
#define TFT_SCLK 13
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
void setup(void) {
Serial.begin(115200);
Serial.print(F("Hello! ST7789 TFT Test"));
// Init LED RGB pins
pinMode(LEDR, OUTPUT);
pinMode(LEDG, OUTPUT);
pinMode(LEDB, OUTPUT);
// Turn off all LEDs initially
digitalWrite(LEDR, HIGH); //RED
digitalWrite(LEDG, HIGH); //GREEN
digitalWrite(LEDB, HIGH); //BLUE
// Initialize the TFT display
tft.init(135, 240); // Init ST7789 240x135
tft.setRotation(3); // Set rotation to horizontal
tft.fillScreen(ST77XX_BLACK); // Clear screen
Serial.println(F("Initialized"));
delay(1000);
}
void loop() {
// 串口打印
Serial.println("Hello DigiKey & EEWorld!");
// 清空屏幕
tft.fillScreen(ST77XX_BLACK);
// 使用红色显示文本
testdrawtext("Hello DigiKey & EEWorld!", ST77XX_RED);
digitalWrite(LEDR, HIGH);
digitalWrite(LEDG, LOW);
digitalWrite(LEDB, LOW);
delay(500);
// 使用绿色显示文本
testdrawtext("Hello DigiKey & EEWorld!", ST77XX_GREEN);
digitalWrite(LEDR, LOW);
digitalWrite(LEDG, HIGH);
digitalWrite(LEDB, LOW);
delay(500);
// 使用蓝色显示文本
testdrawtext("Hello DigiKey & EEWorld!", ST77XX_BLUE);
digitalWrite(LEDR, LOW);
digitalWrite(LEDG, LOW);
digitalWrite(LEDB, HIGH); // BLUE LED on
delay(500);
}
// 显示文本的函数
void testdrawtext(char *text, uint16_t color) {
tft.setCursor(0, 0); // 设置光标位置,适应横屏显示
tft.setTextColor(color); // 设置字体颜色
tft.setTextSize(3); // 设置文本大小
tft.setTextWrap(true); // 开启文本换行
tft.print(text); // 打印文本
}
结果如下:
视频: VID_20241230_042039
任务二
学习IMU基础知识,调试IMU传感器,通过串口打印六轴原始数据。
本块开发板使用了STM的LSM6DSOXTR,具有3D数字加速度计和3D数字陀螺仪。需要额外安装一个库:LSM6DSOX
流程图:
源码:
#include <Arduino_LSM6DSOX.h>
float Ax, Ay, Az; // 陀螺仪xyz轴数据
float Gx, Gy, Gz; // 加速度计xyz轴数据
void setup() {
Serial.begin(115200);
while (!Serial);
if (!IMU.begin()) {
Serial.println("Failed to initialize IMU!");
while (1);
}
}
void loop() {
if (IMU.accelerationAvailable()) {
IMU.readAcceleration(Ax, Ay, Az);
Serial.print("Acceleration: ");
}
if (IMU.gyroscopeAvailable()) {
IMU.readGyroscope(Gx, Gy, Gz);
Serial.print("Gyroscope: ");
}
printValues(Gx, Gy, Gz,Ax, Ay, Az); // 打印陀螺仪数据
}
void printValues(float gx, float gy, float gz,float ax, float ay, float az) {
Serial.print(gx);
Serial.print(',');
Serial.print(gy);
Serial.print(',');
Serial.print(gz);
Serial.print(',');
Serial.print(ax);
Serial.print(',');
Serial.print(ay);
Serial.print(',');
Serial.println(az); // 使用 println() 以避免手动添加换行
}
结果展示:
视频: VID_20241230_042644
任务三
学习PDM麦克风技术知识,调试PDM麦克风,通过串口打印收音数据和音频波形。
PDM麦克风,即采用脉冲密度调制(Pulse Density Modulation)技术的麦克风,是一种高效的数字音频信号处理方式,PDM麦克风的应用非常广泛,包括语音识别、音频采集、音频录制等领域。
流程图:
源码:
#include <PDM.h>
static const char channels = 1; // 1个通道(单声道)
static const int frequency = 16000; // 采样频率设置为16 kHz
short sampleBuffer[512]; // 用于存储读取到的样本
volatile int samplesRead = 0; // 使用volatile修饰,表示可被中断修改
void setup() {
Serial.begin(115200);
while (!Serial);
PDM.onReceive(onPDMdata);
if (!PDM.begin(channels, frequency)) {
Serial.println("Failed to start PDM!");
while (1);
}
}
void loop() {
noInterrupts(); // 禁用中断
int samplesToRead = samplesRead; // 复制正在读取的样本数量
samplesRead = 0; // 重置样本计数
interrupts(); // 恢复中断
if (samplesToRead) {
for (int i = 0; i < samplesToRead; i++) {
Serial.println(sampleBuffer[i]); // 打印读取的样本
}
}
}
void onPDMdata() {
int bytesAvailable = PDM.available(); // 获取可用字节数
PDM.read(sampleBuffer, bytesAvailable); // 从 PDM 中读取字节到缓冲区
samplesRead = bytesAvailable / 2; // 每两个字节构成一个样本
}
结果
视频:
心得体会
第一次接触arduino,感觉上手还挺容易的,就是不是很习惯,这个编译不知道为什么是真的慢,不知道是我的设置问题还是什么(这平台真没用过纯小白)。还有就是习惯了裸开发底层,对于这种调库的方式,虽然开发起来很快,但是容易造成对底层没有从分的了解,只有以后慢慢学习,慢慢深入。总的来说这一次的体验还是非常的不错,最后感谢eeworld和得捷举办的活动,我受益匪浅,希望以后能举办更多这样的活动!
|