lijinlei 发表于 2024-12-1 18:34

【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 点亮或熄灭。









秦天qintian0303 发表于 2024-12-2 09:13

<p>大家这个板子都不用焊接引脚就行了,板载传感器太多了&nbsp;&nbsp;</p>

lijinlei 发表于 2024-12-2 14:08

秦天qintian0303 发表于 2024-12-2 09:13
大家这个板子都不用焊接引脚就行了,板载传感器太多了&nbsp;&nbsp;

<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>

怀66 发表于 2024-12-3 15:25

<p>点赞&#128077;,写的很详细,对我这种小白很友好呀。</p>

lijinlei 发表于 2024-12-3 16:09

怀66 发表于 2024-12-3 15:25
点赞&#128077;,写的很详细,对我这种小白很友好呀。

<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]
查看完整版本: 【Follow me第二季第4期】Nano RP2040 Connect 开发板简介、环境搭建、工程测试