【Follow me第二季第4期】Nano RP2040 Connect 开发板简介、环境搭建、工程测试
# 【Follow me第二季第4期】Nano RP2040 Connect 开发板简介、环境搭建、工程测试功能丰富的 **Arduino Nano RP2040 Connect** 将新的 **Raspberry Pi RP2040** 微控制器引入 Nano 外形尺寸。
借助 **U-blox® Nina W102** 模块,充分利用双核 **32 位 Arm® Cortex-M0®+**,通过蓝牙®和 WiFi 连接制作物联网项目。
使用板载加速计、陀螺仪、RGB LED 和麦克风深入研究实际项目。
使用 **Arduino Nano RP2040 Connect** 以最少的工作量开发强大的嵌入式 AI 解决方案。
## 物料清单
**物料名称**
(https://www.digikey.cn/zh/products/detail/arduino/ABX00052/14123941)
**实物图片**
该开发板的 DigiKey 官网介绍
## 开箱上电
**Top view**
**Bottom view**
**上电效果**
板载 RGB 三色 LED 循环点亮。
详见:(https://docs.arduino.cc/hardware/nano-rp2040-connect/) .
## 概述
Arduino NANO RP2040 Connect 它适合 Arduino Nano 外形尺寸,使其成为具有大功能的小板。
该板的大脑是 Raspberry Pi® RP2040 芯片:双核 Arm Cortex M0+,运行频率 133MHz,264KB SRAM,片外 16MB 闪存。
板载连接选项包含 u-blox NINA-W102 无线电模块、完全兼容 Arduino Cloud、配有内置传感器、麦克风和运动感应,增加了电路板的探索深度。
Arduino Nano RP2040 Connect 是 RP2040 设备升级项目和释放新项目潜力的完美选择。
### 特点
- 兼容 Arduino IoT Cloud
- 在 Arduino 的 IoT Cloud 上使用 MKR 板,这是一种确保所有互联事物安全通信的简单快速方法。
- 无线模块
- u-blox NINA-W102 无线电模块使其成为唯一连接的 RP2040 选项。它为您提供完整的 WiFi 802.11b/g/n 连接, 以及蓝牙®和低功耗蓝牙® v4.2
- 传感器
- 板载几个非常有用的传感器。内置麦克风用于声音激活、音频控制甚至 AI 语音识别。具有 AI 功能的六轴智能 IMU 告诉电路板它正在向哪个方向移动,并增加了跌倒感应和双击激活。
- 硬件
- 它可能是一个小板,但 Nano RP2040 Connect 具有硬件冲击力。它与已建立的 Arduino Nano 外形尺寸相匹配,使其成为各种规模项目的完美升级。
- 内存
- 借助微处理器外部的 16MB 闪存,为您的代码和存储需求提供了充足的空间。
- 引脚
- 可编程 I/O 引脚具有多种功能;22 个数字端口、20 个带 PWM 端口和 8 个模拟端口。
- 兼容 Raspberry Pi® Pico
- 适用于智能设备的智能软件选项。它完全支持整个 RP2040 软件生态系统。
- Arduino 扩展
- 支持 Arduino 编程语言、IDE 2.0 和所有这些出色的库。
- Python 功能
- 对 MicroPython 的完全支持。获取 Nano RP2040 Connect,它附带用于机器视觉项目的免费 OpenMV 许可证。
- Arduino 云支持
- 直接 Web 浏览器对 Nano RP2040 Connect 进行编程和操作。
- 通过 **Arduino IoT Remote** 手机应用程序进行即时远程控制,通过无线方式上传工程。
## 原理图
## 引脚
基本引脚定义
PWM、UART、SPI、IIC
ADC、USB、Timer、SIO、PIO
RGB LED、SJ2
WiFi NINA-W102-00B、Microphoton、FLASH、RP2040、Oscillator
Micro USB、Step Down Converter MP2322GQH
- Nano RP2040 Connect 与 (https://app.arduino.cc/) 平台兼容。只需几分钟即可构建 IoT 项目!
- (https://docs.arduino.cc/tutorials/nano-33-ble-sense/micropython-installation):该板可以使用 MicroPython 进行编程,MicroPython 是 Python® 编程语言的实现,附带 Python® 标准库的子集。[更多信息](https://docs.arduino.cc/micropython) .
- [机器学习](https://docs.arduino.cc/tutorials/nano-rp2040-connect/rp2040-imu-advanced):借助项目中时钟频率为 133 MHz 的高性能节能微处理器,开始使用 TinyML、TensorFlow Lite 或 Edge Impulse 进行机器学习。[库文件](https://github.com/stm32duino/X-NUCLEO-IKS01A3) .
- [全向麦克风](https://docs.arduino.cc/learn/built-in-libraries/pdm) :Nano RP2040 connect 随附 MP34DT06JTR 麦克风。它允许您实时捕获和分析声音,并可用于创建语音界面以通过声音控制您的外围设备。[相关文档](https://docs.arduino.cc/tutorials/nano-rp2040-connect/rp2040-microphone-basics) .
- [蓝牙](https://docs.arduino.cc/tutorials/nano-rp2040-connect/rp2040-ble-device-to-device):该板支持蓝牙®,允许您通过蓝牙控制外围设备。[库文件 ArduinoBLE](https://www.arduino.cc/reference/en/libraries/arduinoble/) .
- [六轴 IMU](https://docs.arduino.cc/tutorials/nano-rp2040-connect/rp2040-imu-basics) :将加速度计和陀螺仪与专用机器学习核心相结合。(https://www.arduino.cc/reference/en/libraries/arduino_lsm6dsox/) .
- [温度传感器](https://docs.arduino.cc/tutorials/nano-rp2040-connect/rp2040-01-technical-reference#temperature):LSM6DSOX 传感器还具有嵌入式传感器,可通过库直接访问。[库文件 PDM](https://docs.arduino.cc/learn/built-in-libraries/pdm) .
## 环境搭建
1.下载和安装 (https://www.arduino.cc/en/software) ;
2.安装 Arduino NANO RP2040 开发板对应的软件包。
## 工程案例
### WiFi 控制 LED
(https://docs.arduino.cc/tutorials/nano-rp2040-connect/rp2040-web-server-rgb/)
#### 代码
加载示例代码,参考如上网址,并输入本地 WiFi 名称和对应的密码
```c++
#include <SPI.h>
#include <WiFiNINA.h>
///////please enter your sensitive data in the Secret tab/arduino_secrets.h
char ssid[] = "xxxx"; // your network SSID (name)
char pass[] = "xxxx"; // your network password (use for WPA, or use as key for WEP)
int keyIndex = 0; // your network key index number (needed only for WEP)
int status = WL_IDLE_STATUS;
WiFiServer server(80);
void setup() {
pinMode(LEDR, OUTPUT);
pinMode(LEDG, OUTPUT);
pinMode(LEDB, OUTPUT);
Serial.begin(9600); // initialize serial communication
// check for the WiFi module:
if (WiFi.status() == WL_NO_MODULE) {
Serial.println("Communication with WiFi module failed!");
// don't continue
while (true);
}
String fv = WiFi.firmwareVersion();
if (fv < WIFI_FIRMWARE_LATEST_VERSION) {
Serial.println("Please upgrade the firmware");
}
// attempt to connect to WiFi network:
while (status != WL_CONNECTED) {
Serial.print("Attempting to connect to Network named: ");
Serial.println(ssid); // print the network name (SSID);
// Connect to WPA/WPA2 network. Change this line if using open or WEP network:
status = WiFi.begin(ssid, pass);
// wait 10 seconds for connection:
delay(10000);
}
server.begin(); // start the web server on port 80
printWifiStatus(); // you're connected now, so print out the status
}
void loop() {
WiFiClient client = server.available(); // listen for incoming clients
if (client) { // if you get a client,
Serial.println("new client"); // print a message out the serial port
String currentLine = ""; // make a String to hold incoming data from the client
while (client.connected()) { // loop while the client's connected
if (client.available()) { // if there's bytes to read from the client,
char c = client.read(); // read a byte, then
Serial.write(c); // print it out the serial monitor
if (c == '\n') { // if the byte is a newline character
// if the current line is blank, you got two newline characters in a row.
// that's the end of the client HTTP request, so send a response:
if (currentLine.length() == 0) {
// HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
// and a content-type so the client knows what's coming, then a blank line:
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println();
// the content of the HTTP response follows the header:
client.print("<style>");
client.print(".container {margin: 0 auto; text-align: center; margin-top: 100px;}");
client.print("button {color: white; width: 100px; height: 100px;");
client.print("border-radius: 50%; margin: 20px; border: none; font-size: 20px; outline: none; transition: all 0.2s;}");
client.print(".red{background-color: rgb(196, 39, 39);}");
client.print(".green{background-color: rgb(39, 121, 39);}");
client.print(".blue {background-color: rgb(5, 87, 180);}");
client.print(".off{background-color: grey;}");
client.print("button:hover{cursor: pointer; opacity: 0.7;}");
client.print("</style>");
client.print("<div class='container'>");
client.print("<button class='red' type='submit' onmousedown='location.href=\"/RH\"'>ON</button>");
client.print("<button class='off' type='submit' onmousedown='location.href=\"/RL\"'>OFF</button><br>");
client.print("<button class='green' type='submit' onmousedown='location.href=\"/GH\"'>ON</button>");
client.print("<button class='off' type='submit' onmousedown='location.href=\"/GL\"'>OFF</button><br>");
client.print("<button class='blue' type='submit' onmousedown='location.href=\"/BH\"'>ON</button>");
client.print("<button class='off' type='submit' onmousedown='location.href=\"/BL\"'>OFF</button>");
client.print("</div>");
// The HTTP response ends with another blank line:
client.println();
// break out of the while loop:
break;
} else { // if you got a newline, then clear currentLine:
currentLine = "";
}
} else if (c != '\r') {// if you got anything else but a carriage return character,
currentLine += c; // add it to the end of the currentLine
}
// Check to see if the client request was /X
if (currentLine.endsWith("GET /RH")) {
digitalWrite(LEDR, HIGH);
}
if (currentLine.endsWith("GET /RL")) {
digitalWrite(LEDR, LOW);
}
if (currentLine.endsWith("GET /GH")) {
digitalWrite(LEDG, HIGH);
}
if (currentLine.endsWith("GET /GL")) {
digitalWrite(LEDG, LOW);
}
if (currentLine.endsWith("GET /BH")) {
digitalWrite(LEDB, HIGH);
}
if (currentLine.endsWith("GET /BL")) {
digitalWrite(LEDB, LOW);
}
}
}
// close the connection:
client.stop();
Serial.println("client disconnected");
}
}
void printWifiStatus() {
// print the SSID of the network you're attached to:
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
// print your board's IP address:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
// print the received signal strength:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
// print where to go in a browser:
Serial.print("To see this page in action, open a browser to http://");
Serial.println(ip);
}
```
连接开发板与电脑,选择对应的开发板型号、目标端口,上传项目至开发板即可,
打开串口监视器,即可获取当前通信网址和 LED 状态。
#### 效果
通过串口读取 IP 地址,手机或电脑连接相同的局域网,浏览器访问 IP 即可按钮控制对应颜色的 LED 点亮或熄灭。
<p>大家这个板子都不用焊接引脚就行了,板载传感器太多了 </p>
秦天qintian0303 发表于 2024-12-2 09:13
大家这个板子都不用焊接引脚就行了,板载传感器太多了
<p>暂时没焊排针,后面看看是否有需求吧,如果需要其他传感器数据或者OLED屏显示数据,那就不得不焊排针了<img height="28" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/grinning-face-with-smiling-eyes_1f601.png" width="28" /></p>
<p>点赞👍,写的很详细,对我这种小白很友好呀。</p>
怀66 发表于 2024-12-3 15:25
点赞👍,写的很详细,对我这种小白很友好呀。
<p>开发板用户手册更详细,<a href="https://docs.arduino.cc/hardware/nano-rp2040-connect/">Nano RP2040 Connect | Arduino Documentation</a></p>
<p>不过官网信息量比较大,在完成具体项目时,需要梳理出对项目有用的重点部分<img height="28" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/face-with-tears-of-joy_1f602.png" width="28" /></p>
页:
[1]