- 2024-12-04
-
回复了主题帖:
【Follow me第二季第4期】任务2:PDM麦克风的学习
请教下最后一个波形图是怎么打印的?
-
发表了日志:
【Follow me第二季第4期】Arduino Nano RP2040 Connect之UART总线
-
发表了主题帖:
【Follow me第二季第4期】Arduino Nano RP2040 Connect之UART总线
本期活动发放的开发板是Arduino Nano RP2040 Connect,这块主板上的主芯片是树莓派的RP2040。
RP2040是支持两路UART的。
Arduino Nano RP2040 Connect主板的pinout图中有标注一路TX、RX:
另外参考RP2040 GPIO功能图:
可知这一路硬件连线实际使用的是RP2040的UART0,但是在Arduino IDE中如果想使用这一路硬件的话,需要使用对应的代码对象Serial1。
Arduino Nano RP2040 Connect的USB是支持CDC类型,可以直接使用Arduino IDE的Serial来控制。
所以我猜测了两种UART的实现接口,不知道Arduino在封装时实际是哪一种:
硬件
Arduino IDE初始化代码
RP2040 UART控制器
JP3.1
Serial1.begin(115200);
UART0
TX
GPIO0
JP3.2
RX
GPIO1
USB CDC
Serial.begin(115200);
UART1
TX
endpoint
RX
endpoint
或者
硬件
Arduino IDE初始化代码
RP2040 UART控制器
JP3.1
Serial1.begin(115200);
UART0
TX
GPIO0
JP3.2
RX
GPIO1
USB CDC
Serial.begin(115200);
?
TX
endpoint
RX
endpoint
?
?
UART1
TX
?
?
RX
?
我在任务一种同时使用了USB和杜邦线连接的UART,实际demo可参考【Follow me第二季第4期】任务一 Blink三色LED / 串口打印 - DigiKey得捷技术专区 - 电子工程世界-论坛
疑问:实际还可以从硬件引脚引出UART1吗?
-
发表了主题帖:
【Follow me第二季第4期】Arduino RP2040之i2c总线附i2c_scanner
本帖最后由 yilonglucky 于 2024-12-4 15:43 编辑
本期活动发放的开发板是Arduino Nano RP2040 Connect,这块主板上的主芯片是树莓派的RP2040。
RP2040是有两个独立的i2c控制器的。
而Arduino Nano是将i2c0复用到GPIO16和GPIO17使用的。
RP2040 GPIO功能图:
在Arduino IDE中可以直接使用Wire库来使用这个i2c控制器。
根据Arduino Nano原理图知其已经连接了两个i2c slave,一个是加速度陀螺仪,一个是认证芯片,我另外连接了两个i2c slave。
前两者硬件原理图:
在实际使用时,可以通过i2c_scanner来遍历i2c总线上的所有slave是否在位,并且将所有设备清单列出来。
代码如下:
// --------------------------------------
// i2c_scanner
//
// Version 1
// This program (or code that looks like it)
// can be found in many places.
// For example on the Arduino.cc forum.
// The original author is not known.
// Version 2, Juni 2012, Using Arduino 1.0.1
// Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26 2013
// V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
// by Arduino.cc user Krodal.
// Changes by louarnold removed.
// Scanning addresses changed from 0...127 to 1...119,
// according to the i2c scanner by Nick Gammon
// https://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
// As version 4, but address scans now to 127.
// A sensor seems to use address 120.
// Version 6, November 27, 2015.
// Added waiting for the Leonardo serial communication.
//
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//
#include <Wire.h>
void setup() {
Wire.begin();
Serial.begin(9600);
while (!Serial); // Leonardo: wait for Serial Monitor
Serial.println("\nI2C Scanner");
}
void loop() {
int nDevices = 0;
Serial.println("Scanning...");
for (byte address = 1; address < 127; ++address) {
// The i2c_scanner uses the return value of
// the Wire.endTransmission to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
byte error = Wire.endTransmission();
if (error == 0) {
Serial.print("I2C device found at address 0x");
if (address < 16) {
Serial.print("0");
}
Serial.print(address, HEX);
Serial.println(" !");
++nDevices;
} else if (error == 4) {
Serial.print("Unknown error at address 0x");
if (address < 16) {
Serial.print("0");
}
Serial.println(address, HEX);
}
}
if (nDevices == 0) {
Serial.println("No I2C devices found\n");
} else {
Serial.println("done\n");
}
delay(5000); // Wait 5 seconds for next scan
}
这里注意,有一句:
while (!Serial); // Leonardo: wait for Serial Monitor
默认Serial对应的是2040开发板的USB接口对应的UART,这一句是指程序开始运行后等待用户打开该串口(可以使用IDE自带的串口监视器,我理解应该是内部有在检测UART电平是否被对面控制器拉高)。
实际运行效果如下:
上图中
0x18是我外接的MCP9808温度检测
0x3C是我外接的SSD1306
0x60应该是主板自带MICROCHIP加密芯片ATECC608A,我没有找到这个地址的来源。实际应用应该是Arduino官网用来认证、下载、引导使用。
0x6A是主板自带ST加速度陀螺仪芯片LSM6DSOXTR,从硬件原理图中也能看到SA0接地,datasheet提示对应地址1101010b。不过IMU的代码把这里封装了,用户直接使用即可都不用关心实际地址是什么。
疑问:默认使用i2c 0,怎么使用i2c 1呢?
- 2024-12-03
-
回复了主题帖:
【Follow me第二季第4期】在Arduino下使用SD卡录制声音
有更新了吗?换成14k就好了?
- 2024-12-02
-
加入了学习《FollowMe 第二季:3 - EK_RA6M5 开发板入门》,观看 EK-RA6M5 开发板入门
- 2024-11-29
-
回复了主题帖:
【Follow me第二季第4期】任务2: IMU传感器
IMU.readTemperatureFloat(temperature);
温度可以用float试试
- 2024-11-28
-
加入了学习《直播回放: DigiKey FollowMe 第二季 第4期 Arduino Nano RP2040 Connect 任务讲解》,观看 Arduino Nano RP2040 Connect 任务讲解
- 2024-11-27
-
回复了主题帖:
【Follow me第二季第4期】任务二 通过串口打印六轴原始数据
感觉这个功能很适合做无人机啊,加速度用来检测前倾后仰,左侧倾斜右侧倾斜,陀螺仪可以检测水平方向原地顺时针旋转和逆时针旋转
-
发表了主题帖:
【Follow me第二季第4期】任务二 通过串口打印六轴原始数据
先看最终串口监视器和绘图仪的显示效果:
注意加速度和陀螺仪的量程数量级相差很大,两组数据在绘图仪中可以分别显示。
代码参考:
#include <Arduino_LSM6DSOX.h>
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
if (!IMU.begin()) {
Serial.println("Failed to initialize IMU!");
while (1)
;
}
}
void loop() {
// put your main code here, to run repeatedly:
float accx, accy, accz;
float gyrx, gyry, gyrz;
if (IMU.accelerationAvailable()) {
IMU.readAcceleration(accx, accy, accz);
Serial.print(accx);
Serial.print('\t');
Serial.print(accy);
Serial.print('\t');
Serial.print(accz);
}
if (IMU.gyroscopeAvailable()) {
IMU.readGyroscope(gyrx, gyry, gyrz);
Serial.print('\t');
Serial.print(gyrx);
Serial.print('\t');
Serial.print(gyry);
Serial.print('\t');
Serial.println(gyrz);
}
delay(500);
}
-
发表了日志:
【Follow me第二季第4期】任务二 通过串口打印六轴原始数据
-
发表了主题帖:
【Follow me第二季第4期】任务一 Blink三色LED / 串口打印
本帖最后由 yilonglucky 于 2024-11-27 18:14 编辑
需求分析:
三色LED是连接到NINA芯片上的,Arduino有现成的NINA库可以使用,将LED对应的三个GPIO扩展为了25,26,27,相当于GPIO扩展芯片。
串口打印可以使用默认的通道,即USB CDC,但是在系统启动、初始化期间IDE自带的“串口监视器”是无法使用的,因此计划使用nano的Tx和Rx脚进行硬线连接,但是注意,这组串口实际对应代码中的Serial1。
所需物料:
nano主板和另外一块串口小板,三根杜邦线。
设计思路:
系统代码运行后打印必要的信息后,开启一个线程自动翻转RP4010直连的BUILDIN LED用来提示nano代码已经开始运行。
另外一个线程监控Seria1发来的数据,并指定对应的亮灯动作。
因此将三个亮灯信息编码进一个byte中:
Index
R
G
B
0
0
0
0
1
0
0
1
2
0
1
0
3
0
1
1
4
1
0
0
5
1
0
1
6
1
1
0
7
1
1
1
这样在串口输入0~7即可控制三色灯的所有组合情况。
实际运行效果:
源代码:
// Include Scheduler since we want to manage multiple tasks.
#include <Scheduler.h>
#include "WiFiNINA.h"
#define led1 LEDR
#define led2 LEDG
#define led3 LEDB
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial1.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
// Setup the 3 pins as OUTPUT
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
Serial1.println("\n~~~~~~~~~~ RGB Blink Demo on Arduino Nano RP2040 ~~~~~~~~~~");
Serial.println("Hello DigiKey & EEWorld!");
Serial1.println("Hello DigiKey & EEWorld!");
Serial1.println("Please input the index number to blink the RGB LED:");
Serial1.println("Index R G B");
Serial1.println("0: 0 0 0");
Serial1.println("1: 0 0 1");
Serial1.println("2: 0 1 0");
Serial1.println("3: 0 1 1");
Serial1.println("4: 1 0 0");
Serial1.println("5: 1 0 1");
Serial1.println("6: 1 1 0");
Serial1.println("7: 1 1 1");
Scheduler.startLoop(loop1);
Scheduler.startLoop(loop2);
}
/*
* Name: set_rgb
* Para: rgb index
* bit2: red led
* bit1: green led
* bit0: blue led
*/
void set_rgb(char c) {
int r, g, b;
r = (c >> 2) % 2;
g = (c >> 1) % 2;
b = (c % 2);
digitalWrite(led1, (PinStatus)r);
digitalWrite(led2, (PinStatus)g);
digitalWrite(led3, (PinStatus)b);
}
void loop() {
if (Serial1.available()) {
char c = Serial1.read();
set_rgb(c);
}
// IMPORTANT:
// We must call 'yield' at a regular basis to pass
// control to other tasks.
yield();
}
void loop1() {
set_rgb(4);
delay(1000);
set_rgb(2);
delay(1000);
set_rgb(1);
delay(1000);
}
void loop2() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
- 2024-11-26
-
回复了主题帖:
【Follow me第二季第4期】任务一 闪灯 + 打印Hello EEworld
我也觉得,编译速度太慢了
- 2024-11-21
-
回复了主题帖:
【Follow me第二季第4期】1.Nano RP2040 Connect 硬件分析
所以三色灯由wifi芯片控制,那怎么通知wifi芯片?i2c还是spi,还是uart?怎么感觉都有呢?
-
发表了主题帖:
【Follow me第二季第4期】nano开箱
早上刚收到,来个开箱贴。
清关后应该是国内二次包装的,包装没有问题
来个全家福:
除了nano以外,另外购置了双向排针,将来可以插到nano扩展板上。
原计划买个气压sensor的结果买成温度了
IDE已经部署好,可以读到nano的序列号了。
上电后已经有原始demo了,LED可以闪灯。
-
发表了日志:
【Follow me第二季第4期】nano开箱
-
回复了主题帖:
【Follow me第二季第3期】哪位真的按照视频指南完成了E2 STUDIO环境搭建?
这种问题一般和环境配置有关系,IDE还是不够完美,很多需要手动后期配置的地方。我的解决方法是:卸载,重装,默认路径不要修改
- 2024-10-17
-
加入了学习《深入理解无刷直流电机(BLDC)原理以及控制》,观看 BLDC电机驱动的启动
-
加入了学习《深入理解无刷直流电机(BLDC)原理以及控制》,观看 BLDC电机驱动的基本需求
-
加入了学习《深入理解无刷直流电机(BLDC)原理以及控制》,观看 BLDC电机结构和优势