项目介绍
本次参加活动使用的芯片是 RP2040,双核 Arm Cortex-M0 + @ 133MHz,有30 个 GPIO 引脚,2 个 UART、2 个 SPI 控制器和 2 个 I2C 控制器,16 个 PWM 通道等。芯片内置 264KB SRAM,需要外置闪存芯片,我使用的是W25Q64 8MB闪存芯片。
根据树莓派Pico中文站的相关文档描述(具体视频里有描述),不难画出相关原理图。本次使用 Pico 串口0和串口1,对PM2.5数据采集并打印出来。首先是绘制原理图如下:
使用了Typ-c的USB口,支持正反插入。
绘制的时候注意网格的大小,一定不要一直改网格大小,以及线是否连接上了引脚,否则可能PCB里没有连线,放大原理图引脚就看到没连上。
如下所示PCB的绘制,一定要注意孤铜的地方,是否连接上,和走线和焊盘是否连接上,绘制完成后好好检查下。
使用串口1(使用代码里的2号串口)与PM2.5模块的串口相连接,每隔1秒采集一包数据,并解析后打印PM2.5的数据。代码以及打印的数据如下
#include <HardwareSerial.h>
int led = 25;
char data[31]={0};
char serialData = 0;
char hex = 0;
char flag = 0;
int pm=0;
void setup() {
// put your setup code here, to run once:
pinMode(led, OUTPUT);
Serial1.begin(115200);
Serial2.setRX(5);
Serial2.setTX(4);
Serial1.setFIFOSize(128);
Serial2.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
// digitalWrite(led, HIGH);
// delay(500);
// digitalWrite(led, LOW);
// delay(500);
if(Serial2.available() > 0)//串口接收到数据
{
Serial2.readBytes(data, 31);
flag=1;
// Serial1.println(data[6], DEC);
// Serial1.println("Input String:");
}
if(flag==1)
{
flag=0;
pm=(data[6]<<8)+ data[7];
// Serial1.write(data,10);
Serial1.print("PM2.5: ");
Serial1.print(pm);
Serial1.print(" ug/m3");
pm=0;
delay(1000);
}
else{
Serial1.print("NO-PM2.5\n");
}
}
通过如下的代码对采集到的数据进行处理,得到PM2.5的数据。
Serial2.readBytes(data, 31);
pm=(data[6]<<8)+ data[7];
对于设计中遇到到的问题是,我使用的Arduino框架开发(视频中有配置说明),有些库下载速度很慢,甚至下载了一半提示错误,就只能退出,解决办法是找一个好的网络环境。或者使用离线安装的方法。
离线安装包
https://github.com/earlephilhower/arduino-pico/releases/tag/3.3.0
硬件实物展示:
采集到数据如下
实物图片如下
传感器和rp2040的连接如下
总结
1、素材搜集:树莓派Pico硬件设计页面 的第12页有关于硬件设计的手册,对照手册的一些介绍不难绘制出原理图。软件开发是在搜集到的PM-T7数据手册里,可以找到需要解析的数据格式,直接进行采集转换即可。
2、优势和局限:rp2040 的高性能双核MCU,可以更加快快程序运行速度,同时拥有可编程 I/O 状态机,而且价格便宜支持超频。只是芯片焊接难度稍大,Arduino 的库也有点小问题。随着时间的推移相信RP2040生态肯定会越来越完善。
3、未来可能会把芯片运用到一些控制类的项目里。